Case İfadesi
Coddy'nin Verilog Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 55 / 90.
case ifadesi, tek bir ifadenin değerine göre birçok farklı eylem arasından seçim yapmanı sağlar. Aynı değişkeni birçok farklı değerle karşılaştırırken birden fazla if-else ifadesi kullanmaya göre daha temiz bir alternatiftir.
case deyimi, bir ifadeyi değerler listesiyle karşılaştırır ve eşleşen bloğu çalıştırır. Çok seçenekli bir dallanma gibidir.
Sözdizimi:
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseBir kombinasyonel case deyiminde default kullanılması her zaman önemle tavsiye edilir. default olmadığında, sel hiçbir case öğesinin listelemediği bir değer alırsa out atanmaz ve önceki değerini korur. Yalnızca 0 ve 1 bitlerinden oluşan bir sel değerinin hiçbir dalı yoksa, sentez saf kombinasyonel mantık yerine istenmeyen bellek (bir mandal) oluşturur. sel üzerinde X veya Z bulunması da simülasyonda out değerini değiştirmez, ancak bir mandal oluşturmaz.
Basit Örnek
case (sel)
2'b00: out = a;
2'b01: out = b;
2'b10: out = c;
default: out = 0;
endcasesel 00 ise out, a değerini alır. sel 01 ise out, b değerini alır. sel 10 ise out, c değerini alır.
Aksi takdirde, out 0 değerini alır.
Her Durum İçin Birden Fazla İfade
Birden fazla ifade için begin ve end kullan:
case (state)
2'b00: begin
out = a;
flag = 1;
end
2'b01: begin
out = b;
flag = 0;
end
default: out = 0;
endcaseÖnemli Kurallar
| Kural | Açıklama |
|---|---|
| Case değerleri benzersiz olmalıdır | Yinelenen değerler varsa yalnızca eşleşen ilk dal çalışır |
| Değerler bit genişliğiyle eşleşmelidir | 1'b1 yerine 2'b01 yazın (daha kısa bir değer sıfırlarla doldurulur) |
default isteğe bağlıdır ancak önerilir | Eşlenmemiş değerleri yakalar |
default olmadan, eşlenmemiş değerler mandallara neden olur | Kombinasyonel mantıkta |
Case ve If-Else
| Case | If-Else | |
|---|---|---|
| En uygun olduğu durum | Tek değişken, birçok değer | Karmaşık koşullar |
| Okunabilirlik | Çok açık | Karışık hâle gelebilir |
| Örnek | Çoklayıcı, kod çözücü | Karşılaştırıcı, aralık denetimleri |
Görev
Case İfadesini Tamamla
Ne yapmalısın:
Bu çoklayıcının çalışmasını sağlamak için eksik case ifadesini ekle.
Nasıl çalışır:
select = 2'b00olduğunda,result = in0select = 2'b01olduğunda,result = in1select = 2'b10olduğunda,result = in2select = 2'b11olduğunda,result = in3
Kendin dene
module mux4 (
input [1:0] select,
input in0, in1, in2, in3,
output reg result
);
always @(*) begin
// TODO: case deyimi ekle
// select=00 -> result = in0
// select=01 -> result = in1
// select=10 -> result = in2
// select=11 -> result = in3
// default -> result = 0
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