Menu
Coddy logo textTech

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

Kombinasyonel 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;
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
Tüm case değerleri benzersiz olmalıdırYinelenen değer olmamalıdır
Değerler bit genişliğiyle eşleşmelidir1'b1 değil, 2'b01
default isteğe bağlıdır ancak önerilirEşleşmeyen değerleri yakalar
default olmadan, eşleşmeyen değerler latch'lere neden olurKombinasyonel mantıkta

Case vs If-Else

 CaseIf-Else
En uygun kullanımTek değişken, birçok değerKarmaşık koşullar
OkunabilirlikÇok netKarmaşıklaşabilir
ÖrnekMultiplexer, decoderComparator, aralık kontrolleri
challenge icon

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

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

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

Kombinasyonel 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'b1 değ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çin if-else kullanı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
  
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