Menu
CoddyTech

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;
endcase

Bir 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;
endcase

sel 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

KuralAçıklama
Case değerleri benzersiz olmalıdırYinelenen değerler varsa yalnızca eşleşen ilk dal çalışır
Değerler bit genişliğiyle eşleşmelidir1'b1 yerine 2'b01 yazın (daha kısa bir değer sıfırlarla doldurulur)
default isteğe bağlıdır ancak önerilirEşlenmemiş değerleri yakalar
default olmadan, eşlenmemiş değerler mandallara neden olurKombinasyonel mantıkta

Case ve If-Else

 CaseIf-Else
En uygun olduğu durumTek değişken, birçok değerKarmaşık koşullar
OkunabilirlikÇok açıkKarışık hâle gelebilir
ÖrnekÇoklayıcı, kod çözücüKarşılaştırıcı, aralık denetimleri
challenge icon

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'b00 olduğunda, result = in0
  • select = 2'b01 olduğunda, result = in1
  • select = 2'b10 olduğunda, result = in2
  • select = 2'b11 olduğ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
  
endmodule
quiz iconKendini test et

Bu 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

Kendi başına pratik yap: Online Verilog derleyicisi