Menu
Coddy logo textTech

Instrukcja case

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 55 z 90.

Instrukcja case pozwala wybrać spośród wielu różnych działań na podstawie wartości pojedynczego wyrażenia. Jest bardziej przejrzystą alternatywą dla wielu instrukcji if-else, gdy porównujesz tę samą zmienną z wieloma różnymi wartościami.

Instrukcja case porównuje wyrażenie z listą wartości i wykonuje pasujący blok. Działa jak rozgałęzienie wielokierunkowe.

Składnia:

case (expression)
  value1: statement1;
  value2: statement2;
  default: default_statement;
endcase

Zdecydowanie zaleca się, aby zawsze umieszczać <strong>default</strong> w kombinacyjnym wyrażeniu <strong>case</strong>. Bez default, jeśli sel przyjmie nieoczekiwaną wartość (taką jak X lub Z), out nie zostanie przypisane i będzie zatrzaskiwać swoją poprzednią wartość. Powoduje to powstanie niezamierzonej pamięci (zatrzasku) zamiast czystej logiki kombinacyjnej.

Prosty przykład

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  2'b10: out = c;
  default: out = 0;
endcase

Jeśli sel ma wartość 00, out otrzymuje a. Jeśli sel ma wartość 01, out otrzymuje b. Jeśli sel ma wartość 10, out otrzymuje c.

W przeciwnym razie out otrzymuje 0.

Wiele instrukcji w jednym przypadku

Użyj begin i end dla wielu instrukcji:

case (state)
  2'b00: begin
    out = a;
    flag = 1;
  end
  2'b01: begin
    out = b;
    flag = 0;
  end
  default: out = 0;
endcase

Ważne zasady

ZasadaWyjaśnienie
Wartości przypadków powinny być unikalneW przypadku duplikatów wykonuje się tylko pierwsza pasująca gałąź
Wartości muszą odpowiadać szerokości bitowej2'b01, a nie 1'b1
default jest opcjonalne, ale zalecaneObsługuje nieprzypisane wartości
Bez default nieprzypisane wartości powodują zatrzaskiW logice kombinacyjnej

Case a If-Else

 CaseIf-Else
Najlepsze zastosowanieJedna zmienna, wiele wartościZłożone warunki
CzytelnośćBardzo czytelneMoże stać się nieczytelne
PrzykładMultiplekser, dekoderKomparator, sprawdzanie zakresów
challenge icon

Wyzwanie

Uzupełnij instrukcję case

Co zrobić:

Dodaj brakującą instrukcję case, aby ten multiplekser działał.

Jak to działa:

  • Gdy select = 2'b00, result = in0
  • Gdy select = 2'b01, result = in1
  • Gdy select = 2'b10, result = in2
  • Gdy select = 2'b11, result = in3

Spróbuj swoich sił

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Dodaj instrukcję case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online