Zustände definieren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 79 von 90.
Aufgabe
Ein Ampelsteuergerät ist eine endliche Zustandsmaschine, die mit bestimmten Zeitintervallen durch verschiedene Ampelzustände (Rot, Gelb, Grün) zyklisch hindurchläuft. Eine endliche Zustandsmaschine (FSM) ist eine Schaltung, die sich in einem von einer begrenzten Anzahl von Zuständen befinden kann. Sie wechselt abhängig von Eingaben oder der Zeit von einem Zustand in einen anderen.
In diesem Projekt wirst du ein Ampelsteuergerät für eine einfache Kreuzung erstellen. Die Ampel hat drei Ausgänge:
| Lampe | Ausgang | Bedeutung |
|---|---|---|
| Rot | red = 1 | Stopp |
| Gelb | yellow = 1 | Vorsicht |
| 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 das Ampelsteuergerät definieren.
Eine Ampel hat drei mögliche Zustände:
| Zustand | Lampe | Code |
|---|---|---|
| Grün | Grüne Lampe EIN | 2'b00 |
| Gelb | Gelbe Lampe EIN | 2'b01 |
| Rot | Rote Lampe EIN | 2'b10 |
Vervollständige das Modul, indem du die fehlenden Teile hinzufügst.
Aufgabe:
Definiere die Zustandskodierung: 0=Grün, 1=Gelb, 2=Rot
- Deklariere ein 2-Bit-Register namens
state - Deklariere ein 6-Bit-Register namens
counter(für eine Zeitmessung bis zu 40 Sekunden). Es wird in diesem Schritt nicht verwendet: Die Zeitlogik, die damit zählt, kommt später in diesem Projekt, im Schritt „Übergänge zeitlich steuern“ - Füge die Ausgangszuweisungen innerhalb eines kombinatorischen always-Blocks hinzu,
always @(*) begin ... end, mit einemcase (state)darin.red,yellowundgreensind alsoutput regdeklariert, und einregkann nur innerhalb eines solchen Blocks zugewiesen werden. Das@(*)bedeutet, dass der Block erneut ausgeführt wird, sobald sich etwas ändert, das er liest — hier ist dasstate:- 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 - 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellen9Prozedurale Blöcke
Always-BlockInitial-BlockSensitivitätslisteBlockierende ZuweisungNicht blockierende ZuweisungZusammenfassung – Always vs. Initial15Ampelsteuerung
Zustände definierenLogik der ZustandsmaschineÜbe selbstständig: Online-Verilog-Compiler