Menu
CoddyTech

Menentukan Status

Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 79 dari 90.

challenge icon

Tantangan

Pengendali lampu lalu lintas adalah mesin keadaan terbatas yang berganti-ganti melalui keadaan lampu yang berbeda (Merah, Kuning, Hijau) dengan interval waktu tertentu. Mesin keadaan terbatas (FSM) adalah rangkaian yang dapat berada dalam salah satu dari sejumlah keadaan yang terbatas. Rangkaian ini berpindah dari satu keadaan ke keadaan lain berdasarkan input atau waktu.

Dalam proyek ini, kamu akan membuat pengendali lampu lalu lintas untuk persimpangan sederhana. Lampu lalu lintas memiliki tiga output:

LampuOutputArti
Merahred = 1Berhenti
Kuningyellow = 1Hati-hati
Hijaugreen = 1Jalan

Lampu berganti dalam urutan berikut:

Green → Yellow → Red → Green → …

Urutan Waktu

KeadaanDurasiKeadaan Berikutnya
Hijau30 detikKuning
Kuning10 detikMerah
Merah40 detikHijau

Dalam pelajaran ini, kamu akan menentukan keadaan untuk pengendali lampu lalu lintas.

Lampu lalu lintas memiliki tiga keadaan yang mungkin:

KeadaanLampuKode
HijauLampu hijau MENYALA2'b00
KuningLampu kuning MENYALA2'b01
MerahLampu merah MENYALA2'b10

Lengkapi module dengan menambahkan bagian yang belum ada.

Yang harus dilakukan:

Tentukan pengodean keadaan: 0=Hijau, 1=Kuning, 2=Merah

  1. Deklarasikan register 2-bit bernama state
  2. Deklarasikan register 6-bit bernama counter (untuk menghitung waktu hingga 40 detik). Register ini tidak digunakan pada langkah ini: logika waktu yang menghitung dengannya akan dibahas nanti dalam proyek ini, pada langkah Mengatur Waktu Transisi
  3. Tambahkan penetapan output di dalam blok always kombinasi, always @(*) begin ... end, dengan case (state) di dalamnya. red, yellow, dan green dideklarasikan sebagai output reg, dan reg hanya dapat ditetapkan di dalam blok seperti itu. @(*) berarti blok dijalankan lagi setiap kali nilai apa pun yang dibacanya berubah, dalam kasus ini state:
    • Saat state bernilai 0: green = 1, yellow = 0, red = 0
    • Saat state bernilai 1: green = 0, yellow = 1, red = 0
    • Saat state bernilai 2: green = 0, yellow = 0, red = 1

Coba sendiri

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);
  // TODO: Tugas 1: Deklarasikan register state (2 bit)
  
  // TODO: Tugas 2: Deklarasikan register counter (6 bit)
  

  // TODO: Tugas 3: Tetapkan output menggunakan case (state)
  // state 0: green=1, yellow=0, red=0
  // state 1: green=0, yellow=1, red=0
  // state 2: green=0, yellow=0, red=1

endmodule

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online