Menentukan Status
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 79 dari 90.
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:
| Lampu | Output | Arti |
|---|---|---|
| Merah | red = 1 | Berhenti |
| Kuning | yellow = 1 | Hati-hati |
| Hijau | green = 1 | Jalan |
Lampu berganti dalam urutan berikut:
Green → Yellow → Red → Green → …
Urutan Waktu
| Keadaan | Durasi | Keadaan Berikutnya |
|---|---|---|
| Hijau | 30 detik | Kuning |
| Kuning | 10 detik | Merah |
| Merah | 40 detik | Hijau |
Dalam pelajaran ini, kamu akan menentukan keadaan untuk pengendali lampu lalu lintas.
Lampu lalu lintas memiliki tiga keadaan yang mungkin:
| Keadaan | Lampu | Kode |
|---|---|---|
| Hijau | Lampu hijau MENYALA | 2'b00 |
| Kuning | Lampu kuning MENYALA | 2'b01 |
| Merah | Lampu merah MENYALA | 2'b10 |
Lengkapi module dengan menambahkan bagian yang belum ada.
Yang harus dilakukan:
Tentukan pengodean keadaan: 0=Hijau, 1=Kuning, 2=Merah
- Deklarasikan register 2-bit bernama
state - 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 - Tambahkan penetapan output di dalam blok always kombinasi,
always @(*) begin ... end, dengancase (state)di dalamnya.red,yellow, dangreendideklarasikan sebagaioutput reg, danreghanya dapat ditetapkan di dalam blok seperti itu.@(*)berarti blok dijalankan lagi setiap kali nilai apa pun yang dibacanya berubah, dalam kasus inistate:- 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
- Saat state bernilai 0:
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
endmoduleSemua pelajaran di Dasar-Dasar
1Pengantar
Apa Itu VerilogPerangkat Keras vs Perangkat LunakModul PertamamuKomentarTingkat Abstraksi Desain4Operator Bagian 1
Operator AritmetikaOperator ModuloOperator PerbandinganUlasan, Matematika SederhanaOperator Bitwise7Penugasan dan Gerbang
Penugasan KontinuPenugasan dengan OperatorPrimitif Gerbang BawaanGerbang AND, OR, NOTGerbang XOR, XNORUlasan: Rangkaian Gerbang Logika10Pengambilan Keputusan
Pernyataan IfIf - ElseRangkuman: Komparator SederhanaPernyataan CaseCasex dan CasezRangkuman: Desain ALU5Operator Bagian 2
Operator LogikaOperator ReduksiOperator GeserOperator PenggabunganOperator KondisionalRangkuman, Tantangan Operator3Sistem Bilangan
Representasi BinerBilangan BerukuranBilangan Tanpa UkuranBilangan NegatifNilai Khusus X dan ZRingkasan: Format Bilangan6Modul
Struktur ModulPort Input dan OutputPort InoutInstansiasi ModulPemetaan Port Berdasarkan NamaPemetaan Port Berdasarkan UrutanRangkuman: Bangun Modul9Blok Prosedural
Blok alwaysBlok initialDaftar SensitivitasPenugasan BlockingPenugasan Non-BlockingRangkuman: always vs initial15Pengendali Lampu Lalu Lintas
Menentukan StatusLogika Mesin StatusLatihan sendiri: Compiler Verilog online