Writing The Testbench
جزء من قسم الأساسيات في رحلة 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جميع دروس الأساسيات
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logicتدرّب بنفسك: مترجم Verilog عبر الإنترنت