Operator Kondisional
Termasuk bagian Dasar-Dasar dalam perjalanan Verilog di Coddy. Pelajaran 28 dari 90.
Operator percabangan ? : memilih salah satu dari dua nilai berdasarkan suatu kondisi. Operator ini juga disebut operator ternary. Operator percabangan mengevaluasi suatu kondisi dan mengembalikan salah satu dari dua nilai:
condition ? value_if_true : value_if_falseJika kondisinya true (1), nilai pertama dikembalikan. Jika false (0), nilai kedua dikembalikan.
Mengapa Menggunakan Operator Kondisional
Ini adalah cara ringkas untuk menulis logika if-else sederhana dalam satu baris. Penggunaan umumnya meliputi:
- Memilih di antara dua sinyal
- Membuat multiplexer
- Menetapkan nilai default
- Penetapan kondisional secara inline
Sintaks dan Contoh
Contoh dasar:
result = (a > b) ? a : b; // result mendapat nilai yang lebih besar dari a dan bPilih antara nilai:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0Balikkan sinyal secara bersyarat:
out = (invert) ? ~in : in; // Jika invert bernilai 1, output dibalik; jika tidak, output tetap samaContoh Kode
module conditional_demo;
reg [3:0] a, b, max;
reg enable;
reg [3:0] data_in, data_out;
initial begin
a = 4'd7;
b = 4'd9;
enable = 1;
data_in = 4'b1010;
max = (a > b) ? a : b; // 9
data_out = (enable) ? data_in : 4'b0000; // 1010
$display("max = %d", max);
$display("data_out = %b", data_out);
$finish;
end
endmoduleOutput:
max = 9
data_out = 1010Operator Kondisional Bertingkat
Kamu bisa membuat operator kondisional bertingkat untuk memilih dari beberapa opsi:
result = (a > b) ? a : (b > c) ? b : c; // a jika a > b, jika tidak, nilai yang lebih besar antara b dan cGunakan tanda kurung untuk memperjelas kondisi bertingkat.
Catatan Penting
- Kondisi harus berupa satu bit (atau ekspresi yang menghasilkan 0 atau 1)
- Pastikan lebar bit kedua opsi nilai sama. Jika berbeda, Verilog akan memperluas opsi yang lebih sempit secara diam-diam
- Operator ini dapat digunakan dalam assignment kontinu (
assign) dan blok prosedural (always,initial)
Tantangan
Tulis ekspresi percabangan yang benar untuk setiap tugas.
Yang harus dilakukan:
- Tetapkan
maxke nilai yang lebih besar antaraxdany - Tetapkan
abske nilai absolut darival(jika negatif, jadikan positif) - Tetapkan
output_datakedatajikaenablebernilai 1, jika tidak, tetapkan ke8'b0
Coba sendiri
module conditional_challenge;
reg [3:0] x, y;
reg [3:0] max;
reg signed [3:0] val;
reg [3:0] abs;
reg enable;
reg [7:0] data;
reg [7:0] output_data;
initial begin
x = 4'd12;
y = 4'd8;
val = -4'sd5;
enable = 1;
data = 8'b10101010;
max = ______; // yang lebih besar antara x dan y
abs = ______; // nilai absolut dari val
output_data = ______; // data jika enable, jika tidak 0
$display("max = %d", max);
$display("abs = %d", abs);
$display("output_data = %b", output_data);
$finish;
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