Zustandsautomaten-Logik
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 80 von 90.
Aufgabe
In dieser Lektion werden Sie die Zustandsübergangslogik zum Ampel-Controller hinzufügen. Die Zustandsmaschine bestimmt, wann von einem Zustand in den nächsten gewechselt wird.
Die Logik der Zustandsmaschine steuert, wann und wie die Ampel ihre Zustände ändert.
Zustandsreihenfolge
Grün → Gelb → Rot → Grün → …
Ihre Aufgabe ist es, die Zustandsmaschinen-Logik zum Modul hinzuzufügen.
Was zu tun ist:
- Fügen Sie einen
always @(posedge clk or posedge reset)-Block hinzu - Setzen Sie bei einem Reset den
stateauf Red (2) - Wenn
nextgleich 1 ist, wechseln Sie in den nächsten Zustand:- Wenn state Green (0) ist: wechseln Sie zu Yellow
- Wenn state Yellow (1) ist: wechseln Sie zu Red
- Wenn state Red (2) ist: wechseln Sie zu Green
Probier es selbst
module traffic_light (
input clk,
input reset,
input next, // Auslöser zum Zustandswechsel
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// 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
// TODO: Zustandsmaschinenlogik hinzufügen (ohne Timing)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// 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