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 enkoderze 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 typu „don't-care”, co jest niemożliwe w przypadku szerokich magistral.
<strong>casez</strong> i <strong>casex</strong> rozwiązują ten problem, pozwalając oznaczyć niektóre bity jako „bez znaczenia” za pomocą ?, z lub x.
Casez vs Casex vs zwykły case
| Instrukcja | Bity bez znaczenia | Najlepsze zastosowanie |
|---|---|---|
case | Brak | Dokładne dopasowanie |
casez | z lub ? | Kodery priorytetowe (zalecane) |
casex | x, z lub ? | Unikaj (ukrywa błędy) |
<strong>casez</strong>ignoruje bity o wartościzlub?(zalecane)<strong>casex</strong>ignoruje również bityx, co może ukrywać błędy symulacji
Zawsze używaj <strong>casez</strong>, a nie <strong>casex</strong>. casex powstało jako pierwsze, ale inżynierowie zdali sobie sprawę, że jest niebezpieczne, ponieważ ignoruje wartości x (które często wskazują na niezainicjalizowane rejestry lub błędy symulacji). casez wprowadzono jako bezpieczniejszą alternatywę.
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 „dowolna wartość”. Ten bit może mieć wartość 0, 1 albo dowolną inną.
Wyzwanie
Co zrobić:
Dodaj brakującą instrukcję casez, aby ten dekoder działał.
Jak to działa:
input = 4'b???1→out = 4'b0001input = 4'b??1?→out = 4'b0010input = 4'b?1??→out = 4'b0100input = 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
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online