Liczby o nieokreślonej szerokości
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 15 z 90.
Liczba bez określonej szerokości to liczba zapisana bez podania jej liczby bitów. Gdy zapisujesz liczbę bez prefiksu określającego szerokość, Verilog domyślnie zakłada, że ma ona 32 bity.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // To samo co powyżej, ale zapisane jawnieLiczby bez określonego rozmiaru używają tylko formatu i wartości: [format][value]
<strong>format</strong>: podstawa liczby:bdla systemu binarnego,ddla dziesiętnego,hdla szesnastkowego lubodla ósemkowego<strong>value</strong>: właściwa liczba (na przykład1010)
Apostrof ' nadal jest wymagany między formatem a wartością, ale przed nim nie podaje się liczby bitów.
'b1010: 32-bitowa liczba binarna 1010'd255: 32-bitowa liczba dziesiętna 255'hFF: 32-bitowa liczba szesnastkowa FF'b1: 32-bitowa liczba binarna 1 (z 31 zerami wiodącymi)
Przykład kodu:
reg [7:0] data;
initial begin
data = 1010; // Bez określonego rozmiaru: wartość 32-bitowa (może spowodować ostrzeżenie)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Bez określonego rozmiaru: 32-bitowa wartość szesnastkowa FF
endBez określonego rozmiaru a z określonym rozmiarem
| Bez określonego rozmiaru | Z określonym rozmiarem | |
|---|---|---|
| Przykład | 1010 lub 'd255 | 8'b1010 lub 8'd255 |
| Szerokość bitowa | 32 bity (domyślnie) | Jawna (zgodnie ze specyfikacją) |
| Apostrof | Wymagany przy określaniu formatu | Wymagany |
| Kiedy używać | Prosty kod testbencha | Przypisania sprzętowe |
Potencjalny problem
Liczby bez określonego rozmiaru mogą powodować nieoczekiwane zachowanie, gdy są przypisywane do mniejszych rejestrów:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // Wartość 32-bitowa, ale za duża! (ostrzeżenie)Drugi przykład przypisuje 32-bitową wartość 10000 do 4-bitowego rejestru. Zachowywane są tylko 4 młodsze bity (0000), co może nie być tym, czego się spodziewasz.
Kiedy używać liczb bez określonego rozmiaru
Liczby bez określonego rozmiaru są przydatne do:
- Prostych liczb w testbenchach
- Liczników pętli
- instrukcji
$display
W przypadku przypisywania wartości do rzeczywistego sprzętu używaj liczb o określonym rozmiarze, aby zachować jednoznaczność i uniknąć ostrzeżeń.
Wyzwanie
W poniższym kodzie niektóre liczby nie mają określonego rozmiaru. Zmień je na liczby o określonym rozmiarze (8 bitów), aby uniknąć ostrzeżeń.
Co zrobić:
- Zmień
ana 8-bitową liczbę binarną oznaczającą 1010 - Zmień
bna 8-bitową liczbę dziesiętną oznaczającą 255 - Zmień
cna 8-bitową liczbę szesnastkową oznaczającą FF
Spróbuj swoich sił
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Zmień na zapis o określonej szerokości (8-bitowy dziesiętny)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$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