Koşullu Operatör
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 28 / 90.
Koşullu işleç, bir koşula göre iki değer arasından seçim yapar. Üçlü işleç olarak da adlandırılır. Koşullu işleç bir koşulu değerlendirir ve iki değerden birini döndürür:
condition ? value_if_true : value_if_falseKoşul doğruysa (1), ilk değer döndürülür. 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 kısa bir yoludur. Yaygın kullanımlar şunlardır:
- İki sinyal arasında seçim yapma
- Çoklayıcılar 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 büyüğünü alırDeğerler arasında seçim yapın:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0Sinyali koşullu olarak tersine çevir:
out = (invert) ? ~in : in; // invert 1 ise çıktı tersine ç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ş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; // a > b ise a, aksi halde b ve c'nin büyüğüİç içe koşulları anlaşılır kılmak 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 value seçeneğini de aynı bit genişliğinde tutun; farklılarsa Verilog daha dar olanı sessizce genişletir
- 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ılacaklar:
maxdeğerinixveydeğerlerinden büyük olana ayarlayınabsdeğerinivaldeğerinin 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.
Temel Bilgiler bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerMod Alma OperatörüKarşılaştırma OperatörleriTekrar - Basit MatematikBit Düzeyi Operatörleri7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND, OR ve NOT KapılarıXOR ve XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Verme
If İfadesiIf - ElseTekrar - Basit KarşılaştırıcıCase İfadesiCasex ve CasezTekrar - ALU Tasarımı2Veri Türleri
Wire TürüReg TürüTamsayı ve GerçelVektörlerDizilerParametrelerÖzet - Sinyalleri Tanımlama5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörTekrar - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüTekrar DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiTekrar - Döngü Kalıpları3Sayı Sistemi
İkili GösterimBoyutlu SayılarBoyutsuz SayılarNegatif SayılarÖzel X ve Z DeğerleriTekrar - Sayı Biçimleri6Modüller
Modül YapısıGiriş ve Çıkış PortlarıÇift Yönlü PortlarModül ÖrneklendirmeAda Göre Port EşlemeSıraya Göre Port EşlemeTekrar - Bir Modül Oluşturma9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiBloklayıcı AtamaBloklamayan AtamaTekrar - Always ve Initial Karşılaştırması15Trafik Işığı Denetleyicisi
Durumları TanımlamaDurum Makinesi MantığıKendi başına pratik yap: Online Verilog derleyicisi