Verifying The Output
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 83 sur 90.
Défi
Dans cette leçon, vous allez ajouter des commandes de vidage de formes d’onde et vérifier que le contrôleur de feux de circulation fonctionne correctement.
À faire :
Mettez à jour le testbench pour :
- Ajouter
$dumpfilepour créer un fichier de formes d’onde nommétraffic.vcd - Ajouter
$dumpvarspour vider tous les signaux dutestbench - Exécuter la simulation et vérifier la forme d’onde
Essayez vous-même
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// États : 0=Vert, 1=Jaune, 2=Rouge
reg [1:0] state;
reg [5:0] counter;
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Commence au Rouge
counter <= 0;
end else begin
if (counter == 0) begin
// Changer d'état
if (state == 0) begin // Vert -> Jaune
state <= 1;
counter <= 10; // Le jaune dure 10 secondes
end else if (state == 1) begin // Jaune -> Rouge
state <= 2;
counter <= 40; // Le rouge dure 40 secondes
end else begin // Rouge -> Vert
state <= 0;
counter <= 30; // Le vert dure 30 secondes
end
end else begin
counter <= counter - 1;
end
end
end
// Logique de sortie
always @(*) begin
red = (state == 2);
yellow = (state == 1);
green = (state == 0);
end
endmodule
module testbench;
reg clk, reset;
wire red, yellow, green;
traffic_light uut (
.clk(clk),
.reset(reset),
.red(red),
.yellow(yellow),
.green(green)
);
always #1 clk = ~clk;
initial begin
// TODO: Ajouter $dumpfile pour créer "traffic.vcd"
// TODO: Ajouter $dumpvars pour dumper tous les signaux (0, testbench)
$display("Traffic Light Test");
$monitor("Time %0t: red=%b, yellow=%b, green=%b", $time, red, yellow, green);
clk = 0;
reset = 1;
#2 reset = 0;
#90;
$finish;
end
endmodule
Toutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Operators 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 LogicEntraînez-vous par vous-même : Compilateur Verilog en ligne