آلة الحالة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 88 من 90.
التحدي
آلة الحالات (state machine) هي دائرة يمكن أن تكون في واحدة من عدة حالات. بالنسبة لـ UART، لدينا حالات مختلفة لكل بت: idle، و start، و data bits 0-7، و stop. يخبرنا عداد البتات (cnt) بالحالة التي نوجد فيها. وبناءً على cnt، نحدد القيمة التي نرسلها على خط tx.
لديك عداد البتات من الدرس السابق. تحتاج إلى تعديله ليعمل كجهاز إرسال UART.
قيم البتات المراد إرسالها (لحرف 'A')
| cnt | قيمة tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 1 |
| 9 | 0 |
| 10 | 1 |
ما يجب عليك فعله
- أضف دخلًا (input) باسم
start - أضف خرجًا من نوع reg باسم
tx - في كتلة
initial، اضبطtx = 1(يكون idle على HIGH) - قم بتغيير منطق العداد (counter logic):
- عندما يكون
cnt == 0وstart == 1، اضبطcnt <= 1(ابدأ الإرسال - transmitting) - عندما تكون قيمة
cntبين 1 و 9، قم بالزيادة:cnt <= cnt + 1 - عندما يكون
cnt == 10، أعد الضبط (reset) إلى0
- عندما يكون
جرّب بنفسك
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
end
endmoduleجميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة