Menu
CoddyTech

CaseX i CaseZ

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

Czasami interesują Cię tylko konkretne bity w wartości, a pozostałe bity można zignorować. Na przykład w koderze priorytetowym chcesz znaleźć pierwszy bit 1, niezależnie od pozostałych bitów.

Zwykła instrukcja case wymagałaby wypisania każdej możliwej kombinacji bitów bez znaczenia, co jest niemożliwe w przypadku szerokich magistral.

casez i casex rozwiązują ten problem, pozwalając oznaczać niektóre bity jako „bez znaczenia” za pomocą ?, z lub x.

casez vs casex vs zwykłe case

InstrukcjaBity bez znaczeniaNajlepsze zastosowanie
caseBrakDokładne dopasowanie
casezz lub ?Kodery priorytetowe (zalecane)
casexx, z lub ?Unikaj (ukrywa błędy)
  • casez ignoruje bity, które mają wartość z lub ? (zalecane)
  • casex ignoruje również bity x, co może ukrywać błędy symulacji

Zawsze używaj casez, a nie casex. casex jest niebezpieczne, ponieważ ignoruje wartości x (które często wskazują na niezainicjalizowane rejestry lub błędy symulacji). casez jest bezpieczniejszą alternatywą, ponieważ nie traktuje x jako wartości „bez znaczenia”.

Przykład

casez (data)
  4'b???1: out = 0;   // Bit0 must be 1, others don't matter
  4'b??1?: out = 1;   // Bit1 must be 1, others don't matter
  4'b?1??: out = 2;   // Bit2 must be 1, others don't matter
  4'b1???: out = 3;   // Bit3 must be 1, others don't matter
endcase

? oznacza „bez znaczenia”. Ten bit może mieć wartość 0, 1 lub dowolną inną.

challenge icon

Wyzwanie

Co zrobić:

Dodaj brakującą instrukcję casez, aby ten dekoder działał.

Jak to działa:

  • input = 4'b???1 → out = 4'b0001
  • input = 4'b??1? → out = 4'b0010
  • input = 4'b?1?? → out = 4'b0100
  • input = 4'b1??? → out = 4'b1000
  • Domyślnie → out = 4'b0000

Spróbuj swoich sił

module decoder (
  input [3:0] in,
  output reg [3:0] out
);
  
  always @(*) begin
    // TODO: Dodaj instrukcję casez
    // in = 4'b???1 -> out = 4'b0001
    // in = 4'b??1? -> out = 4'b0010
    // in = 4'b?1?? -> out = 4'b0100
    // in = 4'b1??? -> out = 4'b1000
    // default -> out = 4'b0000
  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