Wartości specjalne X i Z
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 17 z 90.
X i Z to specjalne wartości, które dostarczają nam informacji o stanie sprzętu podczas symulacji.
X (nieznana wartość), do debugowania
X pojawia się w symulacji, aby wskazać problemy z projektem.
Gdy widzisz X, często oznacza to:
- Niezainicjalizowany rejestr: nie ustawiono wartości przed użyciem
- Wielu sterowników: dwie różne rzeczy próbują jednocześnie sterować tym samym przewodem
- Naruszenie czasowe: sygnał zmienił się w niewłaściwym momencie, powodując niestabilny stan
X nie istnieje w rzeczywistym sprzęcie. To narzędzie symulacyjne, które informuje, że coś jest nie tak z Twoim projektem, dzięki czemu możesz to naprawić przed zbudowaniem prawdziwego układu scalonego.
Bez X możesz widzieć losowe 0 lub 1 i nie zdawać sobie sprawy, że jest problem. X sprawia, że błędy stają się widoczne.
Częste przyczyny:
reg a; // Początkowo X (nieznane)
reg b;
assign b = a; // b przyjmuje wartość X, ponieważ a ma wartość XZ (wysoka impedancja)
Z oznacza stan wysokiej impedancji lub odłączenia.
- Sygnał ma wartość Z, gdy nic nim nie steruje
- Z oznacza „ten przewód jest odłączony”
- Używane w buforach trójstanowych i współdzielonych magistralach
Częste przyczyny:
wire c; // Początkowo Z (niepodłączony)
assign c = 1'bZ; // Explicitly set to ZZapisywanie X i Z w Verilogu
Możesz przypisywać wartości X i Z tak samo jak 0 i 1:
reg [3:0] data;
data = 4'b10X0; // Bit 1 is unknown (0-indexed from the right)
data = 4'b01Z1; // Bit 1 ma stan wysokiej impedancji
data = 4'bXXXX; // All bits unknown
data = 4'bZZZZ; // Wszystkie bity mają stan wysokiej impedancjiX i Z na przebiegach czasowych
Na przebiegach czasowych symulacji:
- X pojawia się jako czerwona linia lub „X”
- Z pojawia się jako linia pośrodku lub „Z”
Pomagają debugować projekt, pokazując, gdzie sygnały są nieznane lub niepodłączone.
Ważne uwagi
- X propaguje się przez operacje logiczne (X AND 0 = 0, ale X AND 1 = X)
- Z jest zwykle używane w magistralach trójstanowych
- Podczas syntezy X i Z mogą być traktowane inaczej
- Zawsze inicjalizuj sygnały reg, aby uniknąć X w symulacji
Wyzwanie
Uzupełnij kod, wpisując prawidłowe wartości zawierające X i Z.
Co zrobić:
- Ustaw
ana 4-bitową wartość, w której bit 1 jest nieznany (pozostałe to 0) - Ustaw
ctak, aby wszystkie bity były nieznane (4 bity) - Ustaw
dtak, aby wszystkie bity miały wysoką impedancję (4 bity)
Spróbuj swoich sił
module xz_challenge;
wire [3:0] a, c, d;
assign a = 4'b______; // Bit 1 is X (others 0)
assign c = 4'b______; // Wszystkie bity to X
assign d = 4'b______; // All bits Z
initial begin
$display("a = %b", a);
$display("c = %b", c);
$display("d = %b", d);
$finish;
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