Case İfadesi
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası — ders 55 / 90.
case ifadesi, tek bir ifadenin değerine bağlı olarak birçok farklı eylem arasından seçim yapmanıza olanak tanır. Aynı değişkeni birçok farklı değerle karşılaştırırken, birden fazla if-else ifadesine göre daha temiz bir alternatiftir.
case ifadesi bir ifadeyi bir değer listesiyle karşılaştırır ve eşleşen bloğu çalıştırır. Çok yollu bir dallanma gibidir.
Sözdizimi:
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseKombinasyonel bir <strong>case</strong> ifadesine her zaman <strong>default</strong> eklemeniz şiddetle tavsiye edilir. default olmadan, eğer sel beklenmedik bir değer alırsa (X veya Z gibi), out atanmayacak ve önceki değerini mandalleyecektir (latch). Bu, saf kombinasyonel mantık yerine istenmeyen bir bellek (bir latch) oluşturur.
Basit Örnek
case (sel)
2'b00: out = a;
2'b01: out = b;
2'b10: out = c;
default: out = 0;
endcaseEğer sel 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 |
|---|---|
| Tüm case değerleri benzersiz olmalıdır | Yinelenen değer olmamalıdı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şleşmeyen değerleri yakalar |
default olmadan, eşleşmeyen değerler latch'lere neden olur | Kombinasyonel mantıkta |
Case vs If-Else
| Case | If-Else | |
|---|---|---|
| En uygun kullanım | Tek değişken, birçok değer | Karmaşık koşullar |
| Okunabilirlik | Çok net | Karmaşıklaşabilir |
| Örnek | Multiplexer, decoder | Comparator, aralık kontrolleri |
Görev
Case İfadesini Tamamlayın
Ne yapmalı:
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
Kopya kağıdı
case ifadesi, tek bir ifadeye dayalı olarak birden fazla eylem arasından seçim yapar — zincirleme if-else yapılarına göre daha temiz bir alternatiftir.
case (expression)
value1: statement1;
value2: statement2;
default: default_statement;
endcaseHer dal için birden fazla ifade kullanıldığında begin/end kullanın:
case (sel)
2'b00: out = a;
2'b01: begin
out = b;
flag = 1;
end
default: out = 0;
endcaseKombinasyonel mantıkta her zaman default ifadesini ekleyin. Bu olmadan, eşleşmeyen değerler (örneğin X, Z) çıkışın önceki değerini korumasına neden olarak istenmeyen bir latch oluşturur.
Temel kurallar:
- Tüm case değerleri benzersiz olmalıdır
- Değerler, ifadenin bit genişliğiyle eşleşmelidir (örneğin
1'b1değil,2'b01) - Tek bir değişkeni birçok değerle karşılaştırmak için
case; karmaşık/aralık koşulları içinif-elsekullanın
Kendin dene
module mux4 (
input [1:0] select,
input in0, in1, in2, in3,
output reg result
);
always @(*) begin
// YAPILACAK: Case ifadesi ekle
// select=00 -> result = in0
// select=01 -> result = in1
// select=10 -> result = in2
// select=11 -> result = in3
// varsayılan -> 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ığı