Menu
Coddy logo textTech

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ızı sağlar. Aynı değişkeni birçok farklı değerle karşılaştırırken birden çok if-else ifadesine göre daha temiz bir alternatiftir.

case ifadesi, 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;
endcase

Kombinasyonel bir <strong>case</strong> ifadesine her zaman <strong>default</strong> eklemeniz kesinlikle önerilir. default olmadan, sel beklenmeyen bir değer (örneğin X veya Z) alırsa out atanmaz ve önceki değerini kilitler. Bu, 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;
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.

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

KuralAçıklama
case değerleri benzersiz olmalıdırYinelenen değerlerde yalnızca ilk eşleşen dal yürütülür
Değerler bit genişliğiyle eşleşmelidir2'b01, 1'b1 değil
default isteğe bağlıdır ancak önerilirEşlenmemiş değerleri yakalar
default olmadan eşlenmemiş değerler latch'lere neden olurKombinasyonel mantıkta

Case ve If-Else

 CaseIf-Else
En uygun olduğu yerTek değişken, birçok değerKarmaşık koşullar
OkunabilirlikÇok açıkDağını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

Yapılacaklar:

Bu çoklayıcının çalışmasını sağlamak için eksik case ifadesini ekle.

Nasıl çalışır:

  • When select = 2'b00, result = in0
  • When select = 2'b01, result = in1
  • When select = 2'b10, result = in2
  • When select = 2'b11, 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
  
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