Zustände definieren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 79 von 90.
Aufgabe
Ein traffic light controller ist eine endliche Zustandsmaschine (Finite State Machine), die mit bestimmten Zeitintervallen durch verschiedene Lichtzustände (Rot, Gelb, Grün) wechselt. Eine finite state machine (FSM) ist eine Schaltung, die sich in einem von einer begrenzten Anzahl von Zuständen befinden kann. Sie wechselt basierend auf Eingaben oder Timing von einem Zustand in einen anderen.
In diesem Projekt bauen Sie eine Ampelsteuerung für eine einfache Kreuzung. Die Ampel hat drei Ausgänge:
| Licht | Ausgang | Bedeutung |
|---|---|---|
| Rot | red = 1 | Stopp |
| Gelb | yellow = 1 | Achtung |
| Grün | green = 1 | Los |
Die Lichter wechseln in dieser Reihenfolge:
Green → Yellow → Red → Green → …
Zeitablauf
| Zustand | Dauer | Nächster Zustand |
|---|---|---|
| Grün | 30 Sekunden | Gelb |
| Gelb | 10 Sekunden | Rot |
| Rot | 40 Sekunden | Grün |
In dieser Lektion definieren Sie die Zustände für die Ampelsteuerung.
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ändigen Sie das module, indem Sie die fehlenden Teile hinzufügen.
Was zu tun ist:
Definieren Sie die Zustandskodierung: 0=Grün, 1=Gelb, 2=Rot
Declareein 2-Bit-registernamensstateDeclareein 6-Bit-registernamenscounter(für Zeiten bis zu 40 Sekunden)- Fügen Sie
Output-assignmentshinzu:- Wenn
state0 ist:green = 1,yellow = 0,red = 0 - Wenn
state1 ist:green = 0,yellow = 1,red = 0 - Wenn
state2 ist:green = 0,yellow = 0,red = 1
- Wenn
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 - Ausgabezuweisungen mit 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