目次
1. Pengenalan
Verilog adalah salah satu Bahasa Penerangan Perkakasan (HDL) yang banyak digunakan untuk reka bentuk litar digital. Antara ciri-cirinya, pernyataancase merupakan konstruk penting untuk menggambarkan percabangan bersyarat dengan cekap. Ia terutama biasa dalam reka bentuk mesin keadaan (FSM) dan multiplexer.
Dalam artikel ini, kami akan membincangkan asas, kes penggunaan lanjutan, dan amalan terbaik untuk pernyataan case Verilog. Dengan contoh kod praktikal yang diterangkan langkah demi langkah, bahkan pemula dapat mengikutinya dengan mudah, jadi pastikan anda membaca hingga akhir.2. Sintaks Asas Pernyataan case Verilog
Apa itu Pernyataan case?
Pernyataan case Verilog ialah sebuah konstruk yang melaksanakan operasi berbeza berdasarkan keadaan (pemilih) yang diberikan. Ia berfungsi serupa dengan pernyataan switch-case dalam C, tetapi dengan beberapa perbezaan utama.
Sintaks asasnya ialah seperti berikut:case (expression)
condition1: statement1;
condition2: statement2;
condition3: statement3;
default: statement4; // Executes if no condition matches
endcase
Penggunaan Asas case
Contoh berikut menunjukkan pernyataan case ringkas yang memberikan isyarat berbeza kepada out bergantung pada input 2‑bit sel:module case_example(input [1:0] sel, output reg [3:0] out);
always @(*) begin
case (sel)
2'b00: out = 4'b0001;
2'b01: out = 4'b0010;
2'b10: out = 4'b0100;
2'b11: out = 4'b1000;
default: out = 4'b0000; // Default value for safety
endcase
end
endmodule
Di sini, out mengambil nilai yang berbeza bergantung pada sel. Dengan menyertakan kes default, input yang tidak dijangka ditangani dengan selamat.Perbezaan Antara case, casex, dan casez
Verilog menyediakan bentuk lanjutan case: casex dan casez. Kedua‑duanya berfungsi seperti wildcard, membenarkan bit tertentu diabaikan.| Sintaks | Ciri-ciri |
|---|---|
case | Memerlukan padanan tepat (kelakuan lalai) |
casex | Mengabaikan nilai X (tidak diketahui) danZ` (impedans tinggi) |
casez | Mengabaikan hanya nilai Z |
casez:casez (sel)
2'b1?: out = 4'b1111; // Matches if the MSB is 1
2'b01: out = 4'b0001;
default: out = 4'b0000;
endcase
Di sini, 1? bermakna selagi bit paling signifikan ialah 1, ia akan padan tanpa mengira bit yang lebih rendah. 
3. Contoh Praktikal case
Percabangan Bersyarat Asas
Contoh berikut menunjukkan pengekod CPU ringkas yang melaksanakan operasi berbeza bergantung pada nilaiopcode 8‑bit:module decoder(input [7:0] opcode, output reg [3:0] control_signal);
always @(*) begin
case (opcode)
8'h00: control_signal = 4'b0001; // NOP
8'h01: control_signal = 4'b0010; // ADD
8'h02: control_signal = 4'b0100; // SUB
default: control_signal = 4'b0000; // Undefined instruction
endcase
end
endmodule
Menggunakan case dalam Mesin Keadaan
Pernyataan case banyak digunakan dalam FSM (Finite State Machines):typedef enum reg [1:0] {IDLE, RUN, STOP} state_t;
state_t current_state, next_state;
always @(posedge clk) begin
if (reset)
current_state <= IDLE;
else
current_state <= next_state;
end
always @(*) begin
case (current_state)
IDLE: next_state = RUN;
RUN: next_state = STOP;
STOP: next_state = IDLE;
default: next_state = IDLE;
endcase
end
Ini melaksanakan FSM 3‑keadaan. Bagi litar yang memerlukan pengurusan keadaan, case menjadikan logik lebih jelas.4. Amalan Terbaik dan Perhatian
Apabila menggunakan pernyataancase dalam Verilog, ingat perkara berikut:1. Sentiasa Sertakan Kes default
Adalah penting untuk meliputi semua input yang mungkin. Dalam sintesis FPGA atau ASIC, mengabaikan default boleh menyebabkan penjanaan latch yang tidak diingini.2. Gunakan casex dan casez dengan Berhati-hati
Konstruk ini boleh menyamakan isyarat yang tidak diingini. Sentiasa menjalankan simulasi secara menyeluruh apabila menggunakannya.casez (sel)
2'b1?: out = 4'b1111; // Matches if MSB = 1
2'b01: out = 4'b0001;
default: out = 4'b0000;
endcase
3. Jangan Terlalu Banyak Menggunakan case
Untuk cabang bersyarat yang kecil, if-else boleh menjadi lebih intuitif dan mudah dibaca. Gunakan case terutamanya apabila terdapat pelbagai pilihan untuk ditangani.5. Kesimpulan
Dalam artikel ini, kami telah membincangkan perkara berikut mengenai pernyataancase Verilog:
✅ Sintaks asas dan tingkah laku
✅ Perbezaan antara case, casex, dan casez ✅ Penggunaan praktikal (cabang bersyarat, FSM)
✅ Amaran utama dan amalan terbaik
Dengan menggunakan pernyataan case dengan betul dalam Verilog, anda boleh meningkatkan kebolehbacaan dan mengelakkan ralat reka bentuk. Terapkan konsep ini dalam reka bentuk anda yang akan datang!Apa yang Perlu Dipelajari Seterusnya dalam Verilog
Setelah anda memahami pernyataancase, langkah seterusnya ialah mempelajari blok always dan perbezaan antara litar kombinasi dan litar berurutan untuk mendapatkan pemahaman yang lebih mendalam tentang reka bentuk Verilog.


