Menu
Coddy logo textTech

Zustände definieren

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 79 von 90.

challenge icon

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:

LampeAusgangBedeutung
Rotred = 1Stopp
Gelbyellow = 1Vorsicht
Grüngreen = 1Fahren

Die Lichter wechseln in dieser Reihenfolge:

Green → Yellow → Red → Green → …

Zeitliche Abfolge

ZustandDauerNächster Zustand
Grün30 SekundenGelb
Gelb10 SekundenRot
Rot40 SekundenGrün

In dieser Lektion wirst du die Zustände für das Ampelsteuergerät definieren.

Eine Ampel hat drei mögliche Zustände:

ZustandLampeCode
GrünGrüne Lampe EIN2'b00
GelbGelbe Lampe EIN2'b01
RotRote Lampe EIN2'b10

Vervollständige das Modul, indem du die fehlenden Teile hinzufügst.

Aufgabe:

Definiere die Zustandskodierung: 0=Grün, 1=Gelb, 2=Rot

  1. Deklariere ein 2-Bit-Register namens state
  2. 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“
  3. Füge die Ausgangszuweisungen innerhalb eines kombinatorischen always-Blocks hinzu, always @(*) begin ... end, mit einem case (state) darin. red, yellow und green sind als output reg deklariert, und ein reg kann 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 das state:
    • 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

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

endmodule

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler