Defining The States
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 79 von 90.
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:
| Licht | 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 → …
Zeitabfolge
| Zustand | Dauer | Nächster Zustand |
|---|---|---|
| Grün | 30 Sekunden | Gelb |
| Gelb | 10 Sekunden | Rot |
| Rot | 40 Sekunden | Grün |
In dieser Lektion definierst du die Zustände für den Verkehrsampel-Controller.
Eine Verkehrsampel hat drei mögliche Zustände:
| Zustand | Licht | Code |
|---|---|---|
| Grün | Grünes Licht EIN | 2'b00 |
| Gelb | Gelbes Licht EIN | 2'b01 |
| Rot | Rotes Licht 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
- Declare ein 2-Bit-Register namens
state - Declare ein 6-Bit-Register namens
counter(für eine Zeitmessung bis zu 40 Sekunden) - 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.@(*)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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler