كتابة الـ Testbench
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 82 من 90.
التحدي
في هذا الدرس، ستقوم بإنشاء منصة اختبار (testbench) للتحقق من أن متحكم إشارة المرور يعمل بشكل صحيح.
ما يجب القيام به:
قم بإنشاء منصة اختبار (testbench) تقوم بما يلي:
- تعلن عن الإشارات (
regلكل من clk و reset، وwireلكل من red، و yellow، و green) - تنشئ نسخة من وحدة
traffic_lightبالاسمuut - تولد ساعة (clock) تتبدل كل وحدة زمنية واحدة (1 time unit)
- تطبق إشارة reset لمدة وحدتين زمنيتين (2 time units)، ثم تحررها
- تشغل المحاكاة لمدة 100 وحدة زمنية (100 time units)
جرّب بنفسك
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// تعيينات المخرجات
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;
counter <= 0;
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
counter <= 10;
end
1: begin
state <= 2;
counter <= 40;
end
2: begin
state <= 0;
counter <= 30;
end
endcase
end else begin
counter <= counter - 1;
end
end
end
endmodule
module testbench;
// TODO: clk و reset لـ reg قم بتعريف
// TODO: red, yellow, green لـ wire قم بتعريف
// TODO: uut باسم traffic_light قم بإنشاء نسخة من وحدة
// red, yellow, green و reset و clk قم بتوصيل
// TODO: قم بتوليد نبضات الساعة (تبديل كل وحدة زمنية واحدة)
initial begin
$display("Traffic Light Test");
// TODO: إلى 0 clk قم بتهيئة
// TODO: (reset=0 ثم ،لمدة وحدتين زمنيتين reset=1) reset قم بتطبيق
// TODO: قم بتشغيل المحاكاة لمدة 100 وحدة زمنية
$display("Test complete");
$finish;
end
endmoduleجميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمة (Modulo)معاملات المقارنةملخص - رياضيات بسيطةمعاملات Bitwise7التعيين والبوابات المنطقية
التعيين المستمرالتعيين باستخدام العملياتالبوابات الأساسية المدمجةبوابات AND و OR و NOTبوابات XOR و XNORمراجعة - دارة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الدمجالمعامل الشرطيمراجعة - تحدي المعاملات3أنظمة العد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ Inoutاستدعاء الوحداتربط المنافذ بالاسمربط المنافذ بالترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة التحسسالإسناد الحاجبالإسناد غير الحاجبمراجعة - Always مقابل Initial15متحكم إشارة المرور
تحديد الحالاتمنطق آلة الحالة