Menu
Coddy logo textTech

Durumları Tanımlama

Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 79 / 90.

challenge icon

Görev

Bir trafik ışığı denetleyicisi, belirli zaman aralıklarıyla farklı ışık durumları (Kırmızı, Sarı, Yeşil) arasında döngü yapan sonlu durum makinesidir. Bir sonlu durum makinesi (FSM), sınırlı sayıdaki durumdan birinde bulunabilen bir devredir. Girdilere veya zamanlamaya bağlı olarak bir durumdan diğerine geçer.

Bu projede, basit bir kavşak için trafik ışığı denetleyicisi oluşturacaksın. Trafik ışığının üç çıkışı vardır:

IşıkÇıkışAnlamı
Kırmızıred = 1Dur
Sarıyellow = 1Dikkat
Yeşilgreen = 1Geç

Işıklar şu sırayla döngü yapar:

Green → Yellow → Red → Green → …

Zamanlama Sırası

DurumSüreSonraki Durum
Yeşil30 saniyeSarı
Sarı10 saniyeKırmızı
Kırmızı40 saniyeYeşil

Bu derste, trafik ışığı denetleyicisinin durumlarını tanımlayacaksın.

Bir trafik ışığının üç olası durumu vardır:

DurumIşıkKod
YeşilYeşil ışık AÇIK2'b00
SarıSarı ışık AÇIK2'b01
KırmızıKırmızı ışık AÇIK2'b10

Eksik kısımları ekleyerek modülü tamamla.

Yapılacaklar:

Durum kodlamasını tanımla: 0=Yeşil, 1=Sarı, 2=Kırmızı

  1. called state adlı 2 bitlik bir register tanımla
  2. Zamanlamanın 40 saniyeye kadar yapılabilmesi için counter adlı 6 bitlik bir register tanımla. Bu adımda kullanılmaz: onunla sayım yapan zamanlama mantığı bu projenin ilerleyen bir adımında, Geçişleri Zamanlama adımında gelir
  3. Çıkış atamalarını, içinde case (state) bulunan birleşimsel bir always bloğunun ( always @(*) begin ... end ) içine ekle. red, yellow ve green değişkenleri output reg olarak tanımlanmıştır ve bir reg yalnızca böyle bir blok içinde atanabilir. @(*), bloğun okuduğu herhangi bir şey değiştiğinde bloğun yeniden çalışacağı anlamına gelir; burada bu şey state'tir:
    • state 0 olduğunda: green = 1, yellow = 0, red = 0
    • state 1 olduğunda: green = 0, yellow = 1, red = 0
    • state 2 olduğunda: green = 0, yellow = 0, red = 1

Kendin dene

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);
  // TODO: Görev 1 - Durum register'ını bildir (2 bit)
  
  // TODO: Görev 2 - Sayaç register'ını bildir (6 bit)
  

  // TODO: Görev 3 - case (state) kullanarak çıkış atamaları
  // durum 0: green=1, yellow=0, red=0
  // durum 1: green=0, yellow=1, red=0
  // durum 2: green=0, yellow=0, red=1

endmodule

Temel Bilgiler bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi