Menu
Coddy logo textTech

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

Kombinasyonel 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;
endcase
Eğ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

KuralAçıklama
Case değerleri benzersiz olmalıdırYinelenen değerler olduğunda yalnızca eşleşen ilk dal çalışır
Değerler bit genişliğiyle eşleşmelidir1'b1 değil 2'b01
default isteğe bağlıdır ancak önerilirEşlenmemiş değerleri yakalar
default olmadan, eşlenmemiş değerler mandallara (latch) neden olurKombinezonsal mantıkta

Case ve If-Else Karşılaştırması

 CaseIf-Else
En uygun kullanımTek değişken, birden fazla değerKarmaşık koşullar
OkunabilirlikÇok netKarmaşıklaşabilir
ÖrnekMultiplexer, decoderKarşılaştırıcı (comparator), aralık kontrolleri
challenge icon

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'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 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