Pernyataan Case
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 55 dari 90.
Pernyataan case memungkinkan kamu memilih antara banyak tindakan berbeda berdasarkan nilai dari satu ekspresi. Ini merupakan alternatif yang lebih rapi daripada beberapa pernyataan if-else saat membandingkan variabel yang sama dengan banyak nilai berbeda.
Pernyataan case membandingkan ekspresi dengan daftar nilai dan menjalankan blok yang cocok. Pernyataan ini seperti percabangan dengan banyak pilihan.
Sintaks:
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseSangat disarankan untuk selalu menyertakan default dalam pernyataan case kombinatorial. Tanpa default, jika sel memiliki nilai yang tidak tercantum dalam item case mana pun, out tidak diberi nilai dan mempertahankan nilai sebelumnya. Jika nilai sel yang hanya terdiri dari bit 0 dan 1 tidak memiliki cabang, sintesis akan membangun memori yang tidak diinginkan (latch) alih-alih logika kombinatorial murni. X atau Z pada sel juga membuat out tidak berubah dalam simulasi, tetapi tidak membuat latch.
Contoh Sederhana
case (sel)
2'b00: out = a;
2'b01: out = b;
2'b10: out = c;
default: out = 0;
endcaseJika sel bernilai 00, out mendapatkan a. Jika sel bernilai 01, out mendapatkan b. Jika sel bernilai 10, out mendapatkan c.
Jika tidak, out mendapat nilai 0.
Beberapa Pernyataan per Kasus
Gunakan begin dan end untuk beberapa pernyataan:
case (state)
2'b00: begin
out = a;
flag = 1;
end
2'b01: begin
out = b;
flag = 0;
end
default: out = 0;
endcaseAturan Penting
| Aturan | Penjelasan |
|---|---|
| Nilai case harus unik | Jika ada nilai duplikat, hanya cabang pertama yang cocok yang dijalankan |
| Nilai harus sesuai dengan lebar bit | Tulis 2'b01, bukan 1'b1 (nilai yang lebih pendek akan ditambah nol) |
default bersifat opsional, tetapi disarankan | Menangani nilai yang tidak dipetakan |
Tanpa default, nilai yang tidak dipetakan menyebabkan latch | Dalam logika kombinatorial |
Case vs If-Else
| Case | If-Else | |
|---|---|---|
| Paling cocok untuk | Satu variabel, banyak nilai | Kondisi yang kompleks |
| Keterbacaan | Sangat jelas | Bisa menjadi berantakan |
| Contoh | Multiplexer, decoder | Komparator, pemeriksaan rentang |
Tantangan
Lengkapi Pernyataan Case
Yang harus dilakukan:
Tambahkan pernyataan case yang hilang agar multiplexer ini berfungsi.
Cara kerjanya:
- Saat
select = 2'b00,result = in0 - Saat
select = 2'b01,result = in1 - Saat
select = 2'b10,result = in2 - Saat
select = 2'b11,result = in3
Coba sendiri
module mux4 (
input [1:0] select,
input in0, in1, in2, in3,
output reg result
);
always @(*) begin
// TODO: Tambahkan pernyataan case
// select=00 -> result = in0
// select=01 -> result = in1
// select=10 -> result = in2
// select=11 -> result = in3
// default -> result = 0
end
endmodulePelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua 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