Menu
CoddyTech

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

PernyataanBit yang Tidak DipedulikanPaling Cocok Untuk
caseTidak adaPencocokan tepat
casezz atau ?Priority encoder (disarankan)
casexx, z, atau ?Hindari (menyembunyikan bug)
  • casez mengabaikan bit yang bernilai z atau ? (disarankan)
  • casex juga mengabaikan bit x, 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.

challenge icon

Tantangan

Yang harus dilakukan:

Tambahkan pernyataan casez yang hilang agar decoder ini berfungsi.

Cara kerjanya:

  • input = 4'b???1 → out = 4'b0001
  • input = 4'b??1? → out = 4'b0010
  • input = 4'b?1?? → out = 4'b0100
  • input = 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
  
endmodule
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Compiler Verilog online