Liczby ujemne
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 16 z 90.
W Verilogu liczby ujemne są reprezentowane w formacie uzupełnienia do dwóch. Uzupełnienie do dwóch to sposób reprezentowania zarówno liczb dodatnich, jak i ujemnych w systemie binarnym. Najbardziej znaczący bit (MSB) wskazuje znak:
- 0 = liczba dodatnia
- 1 = liczba ujemna
Jak obliczyć uzupełnienie do dwóch
Aby znaleźć uzupełnienie do dwóch liczby:
- Zapisz liczbę dodatnią w systemie binarnym
- Odwróć wszystkie bity (0 zamienia się w 1, 1 zamienia się w 0)
- Dodaj 1
Przykład: przedstaw -5 na 4 bitach
| Krok | Operacja | Wynik |
|---|---|---|
| 1 | Liczba dodatnia 5 w systemie binarnym | 0101 |
| 2 | Odwróć wszystkie bity | 1010 |
| 3 | Dodaj 1 | 1011 |
-5 w kodzie uzupełnień do dwóch na 4 bitach to <strong>4'b1011</strong>
Zapisywanie liczb ujemnych w Verilogu
Możesz zapisywać liczby ujemne bezpośrednio w formacie dziesiętnym:
reg signed [3:0] a;
a = -5; // Verilog automatycznie używa kodu uzupełnień do dwóchW przypadku liczb binarnych o określonej szerokości musisz zapisać wartość w kodzie uzupełnień do dwóch:
a = 4'b1011; // This is -5 in 4-bit two's complementZe znakiem a bez znaku
Domyślnie Verilog traktuje liczby jako nieujemne. Aby pracować z liczbami ujemnymi, zadeklaruj sygnały jako signed:
reg signed [3:0] negative; // Może przechowywać wartości od -8 do 7
reg [3:0] positive; // Może przechowywać wartości od 0 do 15Zakres liczb ze znakiem
Dla N bitów liczba ze znakiem może reprezentować:
- Minimum: -2^(N-1)
- Maksimum: 2^(N-1) - 1
| Bity | Zakres |
|---|---|
| 4 bity | -8 to 7 |
| 8 bitów | -128 to 127 |
| 16 bitów | -32768 to 32767 |
Ważne uwagi
- Użyj słowa kluczowego
signed, aby umożliwić obsługę liczb ujemnych - Bez
signedVerilog traktuje wszystkie wartości jako dodatnie
- Arytmetyka w kodzie uzupełnień do dwóch działa automatycznie przy użyciu
signed - MSB określa znak: 1 = liczba ujemna, 0 = liczba dodatnia
Wyzwanie
Uzupełnij kod, wpisując poprawne wartości w kodzie uzupełnień do dwóch.
Co zrobić:
- Ustaw
ana -3, używając 4-bitowej liczby binarnej w kodzie uzupełnień do dwóch - Ustaw
bna -8, używając 4-bitowej liczby binarnej w kodzie uzupełnień do dwóch - Ustaw
cna -1, używając 4-bitowej liczby binarnej w kodzie uzupełnień do dwóch
Spróbuj swoich sił
module negative_challenge;
reg signed [3:0] a, b, c;
initial begin
a = 4'b______; // -3 in 4-bit two's complement
b = 4'b______; // -8 in 4-bit two's complement
c = 4'b______; // -1 in 4-bit two's complement
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", 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