Koşullu Operatör
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 28 / 90.
Koşullu operatör ? : bir koşula bağlı olarak iki değer arasından seçim yapar. Aynı zamanda üçlü (ternary) operatör olarak da adlandırılır. Koşullu operatör bir koşulu değerlendirir ve iki değerden birini döndürür:
condition ? value_if_true : value_if_falseEğer koşul doğruysa (1), ilk değer döndürülür. Eğer yanlışsa (0), ikinci değer döndürülür.
Koşullu Operatör Neden Kullanılır?
Basit if-else mantığını tek bir satırda yazmanın kompakt bir yoludur. Yaygın kullanım alanları şunlardır:
- İki sinyal arasında seçim yapma
- Çoklayıcılar (multiplexer) oluşturma
- Varsayılan değerleri ayarlama
- Satır içi (inline) koşullu atamalar
Sözdizimi ve Örnekler
Temel örnek:
result = (a > b) ? a : b; // result, a ve b'den büyük olanı alırDeğerler arasında seçim yapın:
data_out = (enable) ? data_in : 8'b00000000; // Etkinse veriyi çıkışa ver, aksi takdirde 0Sinyali koşullu olarak ters çevir:
out = (invert) ? ~in : in; // Eğer invert 1 ise, çıkış ters çevrilir; aksi takdirde değişmezKod Örneği
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Çıktı:
max = 9
data_out = 1010İç İçe Koşullu Operatörler
Birden fazla seçim için koşullu operatörleri iç içe yerleştirebilirsiniz:
result = (a > b) ? a : (b > c) ? b : c; // Üç değerden en büyüğünü bulİç içe geçmiş koşulları netleştirmek için parantez kullanın.
Önemli Notlar
- Koşul tek bir bit (veya 0 ya da 1 olarak değerlendirilen bir ifade) olmalıdır
- Her iki değer seçeneği de aynı bit genişliğine sahip olmalıdır
- Operatör, sürekli atamalarda (
assign) ve prosedürel bloklarda (always,initial) kullanılabilir
Görev
Her görev için doğru koşullu ifadeleri yazın.
Yapılması gerekenler:
maxdeğerinixveyarasından büyük olanına ayarlayınabsdeğerinivaldeğişkeninin mutlak değerine ayarlayın (negatifse pozitif yapın)- Eğer
enable1 iseoutput_datadeğerinidataolarak, aksi takdirde8'b0olarak ayarlayın
Kopya kağıdı
Koşullu (üçlü) operatör ? : bir koşula bağlı olarak iki değer arasından seçim yapar:
condition ? value_if_true : value_if_falseÖrnekler:
max = (a > b) ? a : b; // a ve b'den büyük olanı
data_out = (enable) ? data_in : 8'b0; // etkinse veriyi çıkışa ver, değilse 0
out = (invert) ? ~in : in; // sinyali koşullu olarak tersleİç içe geçmiş koşullu operatörler:
result = (a > b) ? a : (b > c) ? b : c; // üç değerden en büyüğüNotlar:
- Koşul 0 veya 1 olarak değerlendirilmelidir
- Her iki değer seçeneği de aynı bit genişliğine sahip olmalıdır
assign,alwaysveinitialbloklarında kullanılabilir
Kendin dene
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 = ______; // x ve y'den büyük olanı
abs = ______; // val'ın mutlak değeri
output_data = ______; // enable ise data, değilse 0
$display("max = %d", max);
$display("abs = %d", abs);
$display("output_data = %b", output_data);
$finish;
end
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı