Zustände definieren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 79 von 90.
Aufgabe
Ein Ampel-Controller ist eine Zustandsmaschine (Finite State Machine), die verschiedene Lichtzustände (Rot, Gelb, Grün) mit spezifischen Zeitintervallen durchläuft. Eine Zustandsmaschine (FSM) ist eine Schaltung, die sich in einer begrenzten Anzahl von Zuständen befinden kann. Sie wechselt basierend auf Eingaben oder Zeitvorgaben von einem Zustand in einen anderen.
In diesem Projekt wirst du einen Ampel-Controller für eine einfache Kreuzung bauen. Die Ampel hat drei Ausgänge:
| Licht | Ausgang | Bedeutung |
|---|---|---|
| Rot | red = 1 | Stopp |
| Gelb | yellow = 1 | Achtung |
| Grün | green = 1 | Fahren |
Die Lichter wechseln in dieser Reihenfolge:
Green → Yellow → Red → Green → …
Zeitliche Abfolge
| Zustand | Dauer | Nächster Zustand |
|---|---|---|
| Grün | 30 Sekunden | Gelb |
| Gelb | 10 Sekunden | Rot |
| Rot | 40 Sekunden | Grün |
In dieser Lektion wirst du die Zustände für den Ampel-Controller definieren.
Eine Ampel hat drei mögliche Zustände:
| Zustand | Licht | Code |
|---|---|---|
| Grün | Grünes Licht AN | 2'b00 |
| Gelb | Gelbes Licht AN | 2'b01 |
| Rot | Rotes Licht AN | 2'b10 |
Vervollständige das Modul, indem du die fehlenden Teile hinzufügst.
Was zu tun ist:
Definiere die Zustandskodierung: 0=Green, 1=Yellow, 2=Red
- Deklariere ein 2-Bit-Register namens
state - Deklariere ein 6-Bit-Register namens
counter(für Zeitmessungen bis zu 40 Sekunden) - Füge Ausgangszuweisungen hinzu:
- Wenn der Zustand 0 ist:
green = 1,yellow = 0,red = 0 - Wenn der Zustand 1 ist:
green = 0,yellow = 1,red = 0 - Wenn der Zustand 2 ist:
green = 0,yellow = 0,red = 1
- Wenn der Zustand 0 ist:
Probier es selbst
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: Aufgabe 1 - Zustandsregister deklarieren (2 Bits)
// TODO: Aufgabe 2 - Zählerregister deklarieren (6 Bits)
// TODO: Aufgabe 3 - Ausgangszuweisungen mittels case (state)
// Zustand 0: green=1, yellow=0, red=0
// Zustand 1: green=0, yellow=1, red=0
// Zustand 2: green=0, yellow=0, red=1
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