Menu
CoddyTech

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;
endcase

Sangat 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;
endcase

Jika 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;
endcase

Aturan Penting

AturanPenjelasan
Nilai case harus unikJika ada nilai duplikat, hanya cabang pertama yang cocok yang dijalankan
Nilai harus sesuai dengan lebar bitTulis 2'b01, bukan 1'b1 (nilai yang lebih pendek akan ditambah nol)
default bersifat opsional, tetapi disarankanMenangani nilai yang tidak dipetakan
Tanpa default, nilai yang tidak dipetakan menyebabkan latchDalam logika kombinatorial

Case vs If-Else

 CaseIf-Else
Paling cocok untukSatu variabel, banyak nilaiKondisi yang kompleks
KeterbacaanSangat jelasBisa menjadi berantakan
ContohMultiplexer, decoderKomparator, pemeriksaan rentang
challenge icon

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
  
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