Menu
Coddy logo textTech

Logik der Zustandsmaschine

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

challenge icon

Aufgabe

In dieser Lektion fügst du die Logik für Zustandsübergänge zum Ampelsteuergerät hinzu. Die Zustandsmaschine bestimmt, wann von einem Zustand zum nächsten gewechselt wird.

Die Logik der Zustandsmaschine steuert, wann und wie die Ampel ihre Zustände ändert.

Zustandsfolge

Grün → Gelb → Rot → Grün → …

Deine Aufgabe ist es, die Logik der Zustandsmaschine zum Modul hinzuzufügen.

In diesem Schritt löst ein neues Eingangssignal, next, jede Änderung aus; der Zeitzähler kommt im nächsten Schritt hinzu. Behalte alles bei, was du im vorherigen Schritt geschrieben hast (das state-Register, die ungenutzte Deklaration von counter und den Ausgabe-Block always @(*)).

Was zu tun ist:

  1. Füge dem Modulheader nach reset einen 1-Bit-Eingangsport namens next hinzu: input next,. Die Testbench pulst ihn, um den nächsten Zustand anzufordern.
  2. Füge einen Block always @(posedge clk or posedge reset) hinzu.
  3. Setze state beim Zurücksetzen auf Rot (2).
  4. Wenn next 1 ist, wechsle zum nächsten Zustand:
    • Wenn der Zustand Grün (0) ist: zu Gelb wechseln.
    • Wenn der Zustand Gelb (1) ist: zu Rot wechseln.
    • Wenn der Zustand Rot (2) ist: zu Grün wechseln.

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: Zustandsmaschinen-Logik 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

endmodule

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler