كتابة الـ Testbench
جزء من قسم الأساسيات في رحلة Verilog على Coddy — الدرس 82 من 90.
التحدي
في هذا الدرس، ستنشئ منصة اختبار (testbench) للتحقق من أن وحدة التحكم في الإشارة الضوئية تعمل بشكل صحيح.
المطلوب عمله:
أنشئ منصة اختبار تقوم بما يلي:
- تعلن عن الإشارات (
regلـclkوreset، وwireلـredوyellowوgreen) - تقوم بإنشاء نموذج (instantiate) من وحدة
traffic_lightباسمuut - تولد إشارة الساعة
clockبحيث تتغير كل 1 وحدة زمنيةunit - تطبق إعادة الضبط
resetلمدة 2 وحدةunitsزمنية، ثم تحررها - تشغل المحاكاة
simulationلمدة 100 وحدة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: أعلن عن reg لـ clk و reset
// TODO: أعلن عن wire لـ red و yellow و green
// TODO: أنشئ مثيل لوحدة traffic_light باسم uut
// وصّل clk و reset و red و yellow و green
// TODO: ولّد الساعة (تبديل كل وحدة زمنية 1)
initial begin
$display("Traffic Light Test");
// TODO: هيئ clk إلى 0
// TODO: طبّق reset (reset=1 لمدة وحدتين زمنيتين، ثم reset=0)
// 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متحكم إشارة المرور
تحديد الحالاتمنطق آلة الحالة