توقيت الانتقالات
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 81 من 90.
التحدي
في هذا الدرس، ستضيف منطق العداد الذي يتحكم في مدة بقاء كل ضوء قيد التشغيل. يُنقص العداد قيمته بدءًا من قيمة محددة مسبقًا حتى يصل إلى الصفر، ثم يُفعّل تغيير الحالة التالية.
متطلبات التوقيت
| الحالة | المدة | قيمة العداد |
|---|---|---|
| الأخضر | 30 ثانية | 30 |
| الأصفر | 10 ثوانٍ | 10 |
| الأحمر | 40 ثانية | 40 |
كيفية عمل العداد
- عند بدء حالة، يُحمَّل العداد بقيمة المدة
- عند كل نبضة ساعة، تنخفض قيمة العداد بمقدار 1
- عندما يصل العداد إلى 0، يحين وقت التغيير إلى الحالة التالية
مهمتك هي إضافة منطق العداد المفقود إلى آلة الحالات. لم يعد الإدخال next من الخطوة السابقة مستخدمًا: فالعداد يقرر الآن متى تتغير الحالة، ولم تعد بيئة الاختبار تقود next.
ما يجب فعله:
- أزِل
input next,من ترويسة الوحدة واستبدل الشرطelse if (next)بمنطق العداد أدناه - أضف تصريح
reg [5:0] counter(واحتفظ به إذا كنت قد صرّحت عنه بالفعل في الخطوة الأولى) - عند إعادة الضبط، اضبط
counterعلى 0 - عندما يكون
counter == 0:- حمّل مدة الحالة التالية في العداد
- غيّر إلى الحالة التالية
- وإلا، أنقص العداد بمقدار 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العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت