Menu
Coddy logo textTech

Defining The States

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

challenge icon

Aufgabe

Ein Verkehrsampel-Controller ist eine endliche Zustandsmaschine, die mit bestimmten Zeitintervallen durch verschiedene Lichtzustände (Rot, Gelb, Grün) zyklisch wechselt. 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 dem Zeitablauf von einem Zustand in einen anderen.

In diesem Projekt baust du einen Verkehrsampel-Controller für eine einfache Kreuzung. Die Verkehrsampel hat drei Ausgänge:

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

Die Lichter wechseln in dieser Reihenfolge:

Green → Yellow → Red → Green → …

Zeitabfolge

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

In dieser Lektion definierst du die Zustände für den Verkehrsampel-Controller.

Eine Verkehrsampel hat drei mögliche Zustände:

ZustandLichtCode
GrünGrünes Licht EIN2'b00
GelbGelbes Licht EIN2'b01
RotRotes Licht 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. Declare ein 2-Bit-Register namens state
  2. Declare ein 6-Bit-Register namens counter (für eine Zeitmessung bis zu 40 Sekunden)
  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. @(*) 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