توقيت الانتقالات
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 81 من 90.
التحدي
في هذا الدرس، ستضيف منطق الـ counter الذي يتحكم في المدة التي يظل فيها كل ضوء مشتعلًا. يقوم الـ counter بالتنازل من قيمة محددة مسبقًا إلى الصفر، ثم يطلق تغيير الـ state التالي.
متطلبات التوقيت (timing)
State | المدة | قيمة الـ counter |
|---|---|---|
Green | 30 seconds | 30 |
Yellow | 10 seconds | 10 |
Red | 40 seconds | 40 |
كيف يعمل الـ counter
- عندما تبدأ الـ
state، يتم تحميل (Load) الـcounterبقيمة المدة - مع كل نبضة ساعة، ينخفض الـ
counterبمقدار 1 - عندما يصل الـ
counterإلى 0، يكون قد حان الوقت للتغيير إلى الـstateالتالية
مهمتك هي إضافة منطق الـ counter المفقود إلى آلة الحالات (machine).
ما يجب فعله:
- أضف التصريح
reg [5:0] counter - عند الـ
reset، اضبطcounterعلى 0 - عندما يكون
counter == 0:- قم بتحميل مدة الـ
stateالتالية في الـcounter - تغيير إلى الـ
stateالتالية
- قم بتحميل مدة الـ
- بخلاف ذلك، قم بإنقاص الـ
counter(عمليةDecrement) بمقدار 1 في كل نبضة ساعة
جرّب بنفسك
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// TODO: أعلن عن سجل العداد (6 بت)
// تعيينات المخرجات
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// آلة الحالة مع التوقيت
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // ابدأ عند الأحمر
// TODO: عيّن العداد إلى 0
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
// TODO: حمّل العداد للأصفر (10 ثوانٍ)
end
1: begin
state <= 2;
// TODO: حمّل العداد للأحمر (40 ثانية)
end
2: begin
state <= 0;
// TODO: حمّل العداد للأخضر (30 ثانية)
end
endcase
end else begin
// TODO: أنقص العداد بمقدار 1
end
end
end
endmoduleجميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة التحسسالإسناد الحاجبالإسناد غير الحاجبمراجعة - Always مقابل Initial15متحكم إشارة المرور
تحديد الحالاتمنطق آلة الحالة