If İfadesi
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 52 / 90.
if ifadesi, kodu yalnızca bir koşul doğru olduğunda çalıştıran bir karar verme bloğudur. if ifadesi bir koşulu denetler.
Koşul true (1) ise içindeki kod çalıştırılır. Koşul false (0) ise kod atlanır.
Sözdizimi:
if (condition) begin
// condition true olduğunda kod çalışır
endBasit Örnek
if (reset) begin
count = 0;
endBu örnekte:
beginveend, kod bloğunun başlangıcını ve bitişini belirtmek için kullanılır
reset1 (true) ise,beginveendarasındaki kod çalıştırılır →count0 olurreset0 (false) ise, içindeki kod atlanır → hiçbir şey olmaz
begin ve end, diğer programlama dillerindeki süslü parantezler { } gibi çalışır. Verilog’un hangi kodun if koşuluna ait olduğunu bilmesi için ifadeleri bir araya getirirler. 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 ifade için begin ve end isteğe bağlıdır. Örneğin, yukarıdaki always bloğunda yalnızca bir ifade 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 |
|---|---|
| Koşul herhangi bir ifade olabilir | Sıfır olmayan (ve bilinen) değerler doğru, sıfır ise yanlış kabul edilir |
Birden fazla ifade için begin / end gerekir | Diğer dillerdeki { } gibi |
begin/end olmadan yalnızca tek bir ifade izler | Yalnızca sonraki ifade if yapısına aittir |
Görev
Yapılacaklar:
- Bunun çalışmasını sağlamak için eksik
ififadesini ekle.
enable1olduğunda,outdeğeria & bolmalıdır.enable0olduğunda,out0olarak 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 deyimini ekleyin (out = a & b)
$display("enable=1: out = %d (should be 1)", out);
// Test durumu 2: enable = 0
enable = 0;
out = 0;
// TODO: out 0 olarak 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.
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