Definiowanie stanów
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 79 z 90.
Wyzwanie
Sterownik sygnalizacji świetlnej to automat skończony, który przechodzi cyklicznie przez różne stany świateł (czerwone, żółte, zielone) w określonych odstępach czasu. Automat skończony (FSM) to układ, który może znajdować się w jednej z ograniczonej liczby stanów. Zmienia stan na inny na podstawie wejść lub czasu.
W tym projekcie zbudujesz sterownik sygnalizacji świetlnej dla prostego skrzyżowania. Sygnalizacja świetlna ma trzy wyjścia:
| Światło | Wyjście | Znaczenie |
|---|---|---|
| Czerwone | red = 1 | Stop |
| Żółte | yellow = 1 | Ostrożnie |
| Zielone | green = 1 | Jedź |
Światła zmieniają się w tej kolejności:
Green → Yellow → Red → Green → …
Sekwencja czasowa
| Stan | Czas trwania | Następny stan |
|---|---|---|
| Zielone | 30 sekund | Żółte |
| Żółte | 10 sekund | Czerwone |
| Czerwone | 40 sekund | Zielone |
W tej lekcji zdefiniujesz stany sterownika sygnalizacji świetlnej.
Sygnalizacja świetlna ma trzy możliwe stany:
| Stan | Światło | Kod |
|---|---|---|
| Zielone | Zielone światło WŁ. | 2'b00 |
| Żółte | Żółte światło WŁ. | 2'b01 |
| Czerwone | Czerwone światło WŁ. | 2'b10 |
Uzupełnij moduł, dodając brakujące elementy.
Co należy zrobić:
Zdefiniuj kodowanie stanów: 0=zielone, 1=żółte, 2=czerwone
- Zadeklaruj 2-bitowy rejestr o nazwie
state - Zadeklaruj 6-bitowy rejestr o nazwie
counter(do odmierzania czasu do 40 sekund). Nie jest on używany na tym etapie: logika odmierzania czasu za jego pomocą pojawi się później w tym projekcie, w kroku Odmierzanie czasu przejść - Dodaj przypisania wyjść wewnątrz kombinacyjnego bloku always,
always @(*) begin ... end, umieszczając w nim instrukcjęcase (state).red,yellowigreensą zadeklarowane jakooutput reg, a do zmiennej typuregmożna przypisywać wartość tylko wewnątrz takiego bloku.@(*)oznacza, że blok uruchamia się ponownie, gdy zmieni się cokolwiek, co odczytuje — w tym przypadkustate:- Gdy stan wynosi 0:
green = 1,yellow = 0,red = 0 - Gdy stan wynosi 1:
green = 0,yellow = 1,red = 0 - Gdy stan wynosi 2:
green = 0,yellow = 0,red = 1
- Gdy stan wynosi 0:
Spróbuj swoich sił
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: Zadanie 1 - Zadeklaruj rejestr stanu (2 bity)
// TODO: Zadanie 2 - Zadeklaruj rejestr licznika (6 bitów)
// TODO: Zadanie 3 - Przypisz wartości wyjściom za pomocą case (state)
// stan 0: green=1, yellow=0, red=0
// stan 1: green=0, yellow=1, red=0
// stan 2: green=0, yellow=0, red=1
endmoduleWszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online