Conditional Operator
Coddy'nin Verilog Journey'sinin Temeller 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_falsecondition 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 kompakt bir yoludur. Yaygın kullanımları şunlardır:
- İki signal arasında seçim yapma
- Çoklayıcılar oluşturma
- Varsayılan values 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ırvalues arasında seçim yap:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0Invert signal conditionally:
out = (invert) ? ~in : in; // Eğer 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ş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 larger olanına ayarlayınabsdeğerinivaldeğerinin absolute değerine ayarlayın (negatifse pozitif yapın)enable1 iseoutput_datadeğerinidatadeğerine, aksi takdirde8'b0değerine 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
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi