Menu
Coddy logo textTech

Case Statement

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

case statement, bir expression değerini 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

Bir kombinasyonel <strong>case</strong> <strong>statement</strong> içinde <strong>default</strong> değerini always eklemeniz önemle tavsiye edilir. default olmadan, sel beklenmeyen bir değer alırsa (X veya Z gibi), 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.

Temeller bölümündeki tüm dersler

Kendi başına pratik yap: Online Verilog derleyicisi