آلة الحالة
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 88 من 90.
التحدي
آلة الحالة (state machine) هي دائرة يمكن أن تكون في واحدة من عدة حالات. بالنسبة لـ UART، لدينا حالات مختلفة لكل بت: الخمول (idle)، والبدء (start)، وبتات البيانات 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 | 0 |
| 9 | 1 |
| 10 | 1 |
ما يجب فعله
- أضف مدخلاً يسمى
start - أضف مخرجاً من نوع reg يسمى
tx - في كتلة
initial، اضبطtx = 1(حالة الخمول العالية) - قم بتغيير منطق العداد:
- عندما يكون
cnt == 0وstart == 1، اضبطcnt <= 1(بدء الإرسال) - عندما يكون
cntبين 1 و 9، قم بالزيادة:cnt <= cnt + 1 - عندما يكون
cnt == 10، قم بإعادة الضبط إلى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استدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة