كتابة منصة الاختبار
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 82 من 90.
التحدي
في هذا الدرس، ستنشئ testbench للتحقق من أن وحدة التحكم في إشارات المرور تعمل بشكل صحيح.
ما يجب فعله:
أنشئ testbench الذي:
- يعلن عن الإشارات (
regلـ clk و reset، وwireلـ red وyellow وgreen) - ينشئ نسخة من الوحدة
traffic_lightبالاسمuut - ينشئ clock يتبدّل كل 1 من وحدات time
- يطبّق reset لمدة 2 من وحدات time، ثم يحرّره
- يشغّل simulation لمدة 100 من وحدات time
يتم التحقق من simulation من خلال ما يطبعه، لذلك يجب أن تُنتج كتلة initial أيضًا هذه الأسطر بالضبط:
- اطبع
Traffic Light Testباستخدام$displayقبل إعداد clock و reset - بعد 100 من وحدات time، اطبع
Test completeباستخدام$display - أنه simulation باستخدام
$finish، الذي يضيف سطره الخاص إلى الإخراج
جرّب بنفسك
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العوامل الجزء 1
العوامل الحسابيةعامل باقي القسمةعوامل المقارنةمراجعة - الرياضيات البسيطةالعوامل على مستوى البتات7التعيين والبوابات
التعيين المستمرالتعيين باستخدام العواملالعناصر الأساسية المدمجة للبواباتبوابات AND وOR وNOTبوابات XOR وXNORمراجعة - دائرة البوابات المنطقية5المعاملات - الجزء الثاني
المعاملات المنطقيةمعاملات الاختزالمعاملات الإزاحةمعامل الربطالمعامل الشرطيمراجعة - تحدي المعاملات11الحلقات التكرارية
حلقة Forحلقة Whileحلقة التكرارحلقة لا نهائيةتعليمة التعطيلمراجعة - أنماط الحلقات التكرارية3نظام الأعداد
التمثيل الثنائيالأعداد محددة الحجمالأعداد غير محددة الحجمالأعداد السالبةالقيم الخاصة X و Zمراجعة - تنسيقات الأعداد6الوحدات
هيكل الوحدةمنافذ الإدخال والإخراجمنافذ الإدخال والإخراج ثنائية الاتجاهإنشاء مثيل للوحدةربط المنافذ حسب الاسمربط المنافذ حسب الترتيبمراجعة - بناء وحدة9الكتل الإجرائية
كتلة Alwaysكتلة Initialقائمة الحساسيةإسناد حاجزإسناد غير حاجزمراجعة - Always مقابل Initial15متحكّم إشارات المرور
تعريف الحالاتمنطق آلة الحالاتتدرّب بنفسك: مترجم Verilog عبر الإنترنت