If Statement
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 52 / 90.
if statement, yalnızca bir condition doğru olduğunda kodu executes eden bir karar verme bloğudur. if statement bir condition'ı kontrol eder.
condition true (1) ise, içindeki kod executes. condition false (0) ise, kod atlanır.
Sözdizimi:
if (condition) begin
// Kod, condition true olduğunda çalışır
endBasit Örnek
if (reset) begin
count = 0;
endBu örnekte:
beginveend, kod bloğunun başlangıcını ve sonunu belirtmek için kullanılır
- Eğer
reset1 (doğru) ise,beginveendiçindeki kod çalışır →count0 olur - Eğer
reset0 (yanlış) ise, içindeki kod atlanır → hiçbir şey olmaz
begin ve end, diğer programlama dillerindeki küme parantezleri { } gibi çalışır. İfadeleri birlikte gruplandırarak Verilog'un hangi kodun if koşuluna ait olduğunu bilmesini sağlarlar. Burada yalnızca bir ifade olsa da tutarlılık açısından begin ve end kullanmak yine de iyi bir uygulamadır.
always Bloğunda if İfadesi
always @(posedge clk) begin
if (reset)
count <= 0;
endNot: Tek bir statement için begin ve end isteğe bağlıdır. Örneğin, yukarıdaki always bloğunda yalnızca bir statement olduğu için if sonrasında begin/end gerekmez.
Koşul Herhangi Bir İfade Olabilir
if (a > b) begin
max = a;
end
if (a && b) begin
out = 1;
end
if (data == 8'hFF) begin
match = 1;
endÖnemli Kurallar
| Kural | Açıklama |
|---|---|
| condition herhangi bir ifade olabilir | Sıfır olmayan (ve bilinen) değerler true, sıfır ise false olarak değerlendirilir |
Birden çok statement için begin / end gerekir | Diğer dillerdeki { } gibidir |
begin/end olmadan yalnızca bir statement takip eder | Yalnızca sonraki satır |
Görev
Yapılacaklar:
- Bunun çalışmasını sağlamak için eksik
ififadesini ekle.
enabledeğeri1olduğunda,outdeğeria & bdeğerine eşit olmalıdırenabledeğeri0olduğunda,outdeğeri0olarak kalmalıdır (değişmemelidir)
Başlangıç kodu out = 0 değerini başlatır ve her iki durumu da test eder.
Kendin dene
module if_challenge;
reg a, b, enable;
reg out = 0;
initial begin
a = 1;
b = 1;
// Test durumu 1: enable = 1
enable = 1;
// TODO: if ifadesi ekle (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Test durumu 2: enable = 0
enable = 0;
out = 0;
// TODO: out 0 kalmalı
$display("enable=0: out = %d (should be 0)", out);
$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