Timing der Übergänge
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 81 von 90.
Aufgabe
In dieser Lektion wirst du die counter logic hinzufügen, die steuert, wie lange jede Ampelphase dauert. Der Zähler zählt von einem voreingestellten Wert bis auf Null herunter und löst dann den nächsten Zustandswechsel aus.
Timing-Anforderungen
| Zustand | Dauer | Zählerwert |
|---|---|---|
| Green | 30 Sekunden | 30 |
| Yellow | 10 Sekunden | 10 |
| Red | 40 Sekunden | 40 |
Wie der Zähler funktioniert
- Wenn ein Zustand beginnt, wird der Zähler mit dem Dauer-Wert geladen
- Bei jedem Taktschlag verringert sich der Zähler um 1
- Wenn der Zähler 0 erreicht, ist es Zeit, in den nächsten Zustand zu wechseln
Deine Aufgabe ist es, die fehlende Zählerlogik zur State Machine hinzuzufügen.
Was zu tun ist:
- Füge eine
reg [5:0] counterDeklaration hinzu - Setze
counterbei einem Reset auf 0 - Wenn
counter == 0:- Lade die Dauer des nächsten Zustands in den Zähler
- Wechsle in den nächsten Zustand
- Andernfalls verringere 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: Zähler-Register deklarieren (6 Bits)
// Zuweisung der Ausgänge
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
// Zustandsautomat mit Zeitsteuerung
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Bei Rot starten
// TODO: Zähler auf 0 setzen
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
// TODO: Zähler für Gelb laden (10 Sekunden)
end
1: begin
state <= 2;
// TODO: Zähler für Rot laden (40 Sekunden)
end
2: begin
state <= 0;
// TODO: Zähler für Grün laden (30 Sekunden)
end
endcase
end else begin
// TODO: Zähler um 1 dekrementieren
end
end
end
endmoduleAlle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen9Prozedurale Blöcke
Always-BlockInitial-BlockSensitivitätslisteBlockierende ZuweisungNicht-blockierende ZuweisungZusammenfassung – Always vs. Initial15Ampelsteuerung
Zustände definierenZustandsautomaten-Logik