Menu
Coddy logo textTech

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:

  1. Zapisz liczbę dodatnią w systemie binarnym
  2. Odwróć wszystkie bity (0 zamienia się w 1, 1 zamienia się w 0)
  3. Dodaj 1

Przykład: przedstaw -5 na 4 bitach

KrokOperacjaWynik
1Liczba dodatnia 5 w systemie binarnym0101
2Odwróć wszystkie bity1010
3Dodaj 11011

-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óch

W 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 complement

Ze 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 15

Zakres liczb ze znakiem

Dla N bitów liczba ze znakiem może reprezentować:

  • Minimum: -2^(N-1)
  • Maksimum: 2^(N-1) - 1
BityZakres
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 signed Verilog 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
challenge icon

Wyzwanie

Uzupełnij kod, wpisując poprawne wartości w kodzie uzupełnień do dwóch.

Co zrobić:

  1. Ustaw a na -3, używając 4-bitowej liczby binarnej w kodzie uzupełnień do dwóch
  2. Ustaw b na -8, używając 4-bitowej liczby binarnej w kodzie uzupełnień do dwóch
  3. Ustaw c na -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
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