Menu
Coddy logo textTech

Definiowanie stanów

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 79 z 90.

challenge icon

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łoWyjścieZnaczenie
Czerwonered = 1Stop
Żółteyellow = 1Ostrożnie
Zielonegreen = 1Jedź

Światła zmieniają się w tej kolejności:

Green → Yellow → Red → Green → …

Sekwencja czasowa

StanCzas trwaniaNastępny stan
Zielone30 sekundŻółte
Żółte10 sekundCzerwone
Czerwone40 sekundZielone

W tej lekcji zdefiniujesz stany sterownika sygnalizacji świetlnej.

Sygnalizacja świetlna ma trzy możliwe stany:

StanŚwiatłoKod
ZieloneZielone światło WŁ.2'b00
ŻółteŻółte światło WŁ.2'b01
CzerwoneCzerwone ś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

  1. Zadeklaruj 2-bitowy rejestr o nazwie state
  2. 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ść
  3. Dodaj przypisania wyjść wewnątrz kombinacyjnego bloku always, always @(*) begin ... end, umieszczając w nim instrukcję case (state). red, yellow i green są zadeklarowane jako output reg, a do zmiennej typu reg można przypisywać wartość tylko wewnątrz takiego bloku. @(*) oznacza, że blok uruchamia się ponownie, gdy zmieni się cokolwiek, co odczytuje — w tym przypadku state:
    • 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

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

endmodule

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online