Case İfadesi
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 55 / 90.
case statement'ı, tek bir expression değerine göre birçok farklı eylem arasında seçim yapmanızı sağlar. Aynı değişkeni birçok farklı değerle karşılaştırırken birden fazla if-else statement'ına 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 yönlü bir dallanma gibidir.
Sözdizimi:
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseKombinasyonel bir <strong>case</strong> ifadesine <strong>default</strong> eklemek her zaman önemle tavsiye edilir. default olmadan, eğer sel beklenmeyen bir değer alırsa (X veya Z gibi), out değer ataması almayacak ve önceki değerini saklayacaktır (latch yapacaktır). Bu durum, saf kombinasyonel mantık yerine istenmeyen bir bellek (latch) oluşturur.
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. Eğer sel 01 ise, out b değerini alır. Eğer sel 10 ise, out c değerini alır.Aksi takdirde, out 0 değerini alır.
Case Başına Birden Fazla İfade
Birden fazla ifade için begin ve end kullanın:
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 olduğunda yalnızca eşleşen ilk dal çalışır |
| Değerler bit genişliğiyle eşleşmelidir | 1'b1 değil 2'b01 |
default isteğe bağlıdır ancak önerilir | Eşlenmemiş değerleri yakalar |
default olmadan, eşlenmemiş değerler mandallara (latch) neden olur | Kombinezonsal mantıkta |
Case ve If-Else Karşılaştırması
| Case | If-Else | |
|---|---|---|
| En uygun kullanım | Tek değişken, birden fazla değer | Karmaşık koşullar |
| Okunabilirlik | Çok net | Karmaşıklaşabilir |
| Örnek | Multiplexer, decoder | Karşılaştırıcı (comparator), aralık kontrolleri |
Görev
Case Statement'ini Tamamlayın
Ne yapılmalı:
Bu çoklayıcının (multiplexer) çalışmasını sağlamak için eksik olan case ifadesini ekleyin.
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 ifadesi 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.
Temeller bölümündeki tüm dersler
4Operatörler Bölüm 1
Aritmetik OperatörlerModül OperatörüKarşılaştırma OperatörleriÖzet - Basit MatematikBitsel Operatörler7Atama ve Kapılar
Sürekli AtamaOperatörlerle AtamaYerleşik Kapı PrimitifleriAND OR NOT KapılarıXOR XNOR KapılarıÖzet - Mantık Kapısı Devresi10Karar Yapıları
If İfadesiIf - ElseÖzet - Basit KarşılaştırıcıCase İfadesiCasex ve CasezÖzet - ALU Tasarımı5Operatörler Bölüm 2
Mantıksal Operatörlerİndirgeme OperatörleriKaydırma OperatörleriBirleştirme OperatörüKoşullu OperatörÖzet - Operatör Meydan Okuması11Döngüler
For DöngüsüWhile DöngüsüRepeat DöngüsüSonsuz DöngüDevre Dışı Bırakma İfadesiÖzet - Döngü Kalıpları3Sayı Sistemleri
İkilik GösterimBoyutlandırılmış SayılarBoyutlandırılmamış SayılarNegatif SayılarÖzel Değerler X ve ZÖzet - Sayı Formatları6Modüller
Modül YapısıGiriş ve Çıkış PortlarıInout PortlarıModül Örneklendirmeİsme Göre Port EşlemeSıraya Göre Port EşlemeÖzet - Bir Modül Oluşturun9Prosedürel Bloklar
Always BloğuInitial BloğuDuyarlılık ListesiEngelleyici AtamaEngelleyici Olmayan AtamaÖzet - Always vs Initial15Trafik Işığı Kontrolcüsü
Durumları TanımlamaDurum Makinesi Mantığı