Menu
CoddyTech

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_false

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

Pilih antara nilai:

data_out = (enable) ? data_in : 8'b00000000;   // Output data if enabled, else 0

Balikkan sinyal secara bersyarat:

out = (invert) ? ~in : in;   // Jika invert bernilai 1, output dibalik; jika tidak, output tetap sama

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

Output:

max = 9
data_out = 1010

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

Gunakan 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)
challenge icon

Tantangan

Tulis ekspresi percabangan yang benar untuk setiap tugas.

Yang harus dilakukan:

  1. Tetapkan max ke nilai yang lebih besar antara x dan y
  2. Tetapkan abs ke nilai absolut dari val (jika negatif, jadikan positif)
  3. Tetapkan output_data ke data jika enable bernilai 1, jika tidak, tetapkan ke 8'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
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