Koşullu Operatör
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 28 / 90.
Koşul operatörü ? : bir koşula bağlı olarak iki değer arasında seçim yapar. Aynı zamanda üçlü (ternary) operatör olarak da adlandırılır. Koşul operatörü bir koşulu değerlendirir ve iki değerden birini döndürür:
condition ? value_if_true : value_if_falseEğer condition doğruysa (1), ilk değer döndürülür. Eğer yanlışsa (0), ikinci değer döndürülür.
Neden Koşul Operatörü 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
- Multiplexer (çoklayıcı) oluşturma
- Varsayılan değerleri ayarlama
- Satır içi koşullu atamalar
Sözdizimi ve Örnekler
Temel örnek:
result = (a > b) ? a : b; // result, a ve b'nin daha büyüğünü alırDeğerler arasında seçim yapın:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0Invert signal conditionally:
out = (invert) ? ~in : in; // invert 1 ise çıktı ters çevrilir; aksi halde 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
endmoduleOutput:
max = 9
data_out = 1010İç İçe Koşul Operatörleri
Birden fazla seçim için koşul operatörlerini iç içe kullanabilirsiniz:
result = (a > b) ? a : (b > c) ? b : c; // a > b ise a, aksi halde b ve c'nin büyüğüİç içe geçmiş koşulları netleştirmek için parantez kullanın.
Önemli Notlar
- Koşul (
condition) tek bir bit (veya 0 ya da 1 olarak değerlendirilen bir ifade) olmalıdır - Her iki değer seçeneğini de aynı bit genişliğinde tutun — farklı olurlarsa, Verilog daha dar olanı sessizce genişletir
- Operatör, sürekli atamalarda (
assign) ve prosedürel bloklarda (always,initial) kullanılabilir
Görev
Her bir görev için doğru koşullu ifadeleri yazın.
Ne yapılmalı:
maxdeğerinixveydeğişkenlerinden büyük olana ayarlayınabsdeğerinivaldeğişkeninin mutlak değerine ayarlayın (negatifse, pozitif yapın)enable1 iseoutput_datadeğerinidataolarak, aksi takdirde8'b0olarak ayarlayın
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'nin büyüğü
abs = ______; // val'in 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ığı