Timing The Transitions
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 81 von 90.
Aufgabe
In dieser Lektion fügst du die Zählerlogik hinzu, die steuert, wie lange jedes Licht eingeschaltet bleibt. Der Zähler zählt von einem voreingestellten Wert bis auf null herunter und löst dann den nächsten Zustandswechsel aus.
Zeitvorgaben
| State | Dauer | Zählerwert |
|---|---|---|
| Green | 30 Sekunden | 30 |
| Yellow | 10 Sekunden | 10 |
| Red | 40 Sekunden | 40 |
So funktioniert der Zähler
- Wenn ein Zustand beginnt, wird der Zähler mit dem Dauerwert geladen
- Bei jedem Takt wird der Zähler um 1 verringert
- Wenn der Zähler 0 erreicht, ist es Zeit, zum nächsten Zustand zu wechseln
Deine Aufgabe besteht darin, die fehlende Zählerlogik zur Zustandsmaschine hinzuzufügen.
Was zu tun ist:
- Füge eine Deklaration
reg [5:0] counterhinzu - Setze
counterbeim Zurücksetzen auf 0 - Wenn
counter == 0gilt:- Lade die Dauer des nächsten Zustands in den Zähler
- Wechsle zum nächsten Zustand
- Verringere andernfalls den Zähler bei jedem Takt um 1
Probier es selbst
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// TODO: counter-Register deklarieren (6 Bits)
// Ausgabezuweisungen
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
// Zustandsmaschine mit Timing
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Starte bei Red
// TODO: counter auf 0 setzen
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
// TODO: counter für Yellow laden (10 Sekunden)
end
1: begin
state <= 2;
// TODO: counter für Red laden (40 Sekunden)
end
2: begin
state <= 0;
// TODO: counter für Green laden (30 Sekunden)
end
endcase
end else begin
// TODO: counter um 1 dekrementieren
end
end
end
endmoduleAlle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators 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Übe selbstständig: Online-Verilog-Compiler