Casex dan Casez
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 56 dari 90.
Terkadang kamu hanya peduli pada bagian tertentu dalam suatu nilai, sementara bagian lainnya bisa diabaikan. Misalnya, dalam encoder prioritas, kamu ingin menemukan bit 1 pertama tanpa memedulikan bit lainnya.
Pernyataan case biasa mengharuskan kamu mencantumkan setiap kombinasi yang mungkin dari bit yang tidak dipedulikan, yang mustahil dilakukan untuk bus yang lebar.
casez dan casex mengatasi masalah ini dengan memungkinkan kamu menandai bit tertentu sebagai "tidak perlu dipedulikan" menggunakan ?, z, atau x.
Casez vs Casex vs Case Biasa
| Pernyataan | Bit yang Tidak Dipedulikan | Paling Cocok Untuk |
|---|---|---|
case | Tidak ada | Pencocokan tepat |
casez | z atau ? | Priority encoder (disarankan) |
casex | x, z, atau ? | Hindari (menyembunyikan bug) |
casezmengabaikan bit yang bernilaizatau?(disarankan)casexjuga mengabaikan bitx, yang dapat menyembunyikan error simulasi
Selalu gunakan casez, bukan casex. casex dibuat lebih dahulu, tetapi para insinyur menyadari bahwa fitur ini berbahaya karena mengabaikan nilai x (yang sering menandakan register yang belum diinisialisasi atau error simulasi). casez diperkenalkan sebagai alternatif yang lebih aman.
Contoh
casez (data)
4'b???1: out = 0; // Bit0 must be 1, others don't matter
4'b??1?: out = 1; // Bit1 must be 1, others don't matter
4'b?1??: out = 2; // Bit2 must be 1, others don't matter
4'b1???: out = 3; // Bit3 must be 1, others don't matter
endcase? berarti "tidak masalah". Bit itu bisa bernilai 0, 1, atau apa pun.
Tantangan
Yang harus dilakukan:
Tambahkan pernyataan casez yang hilang agar decoder ini berfungsi.
Cara kerjanya:
input = 4'b???1→out = 4'b0001input = 4'b??1?→out = 4'b0010input = 4'b?1??→out = 4'b0100input = 4'b1???→out = 4'b1000- Default →
out = 4'b0000
Coba sendiri
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: Tambahkan pernyataan casez
// in = 4'b???1 -> out = 4'b0001
// in = 4'b??1? -> out = 4'b0010
// in = 4'b?1?? -> out = 4'b0100
// in = 4'b1??? -> out = 4'b1000
// default -> out = 4'b0000
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