Menu
CoddyTech

Liczby o nieokreślonej szerokości

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 15 z 90.

Liczba bez określonego rozmiaru to liczba zapisana bez podania, z ilu bitów się składa. Gdy zapisujesz liczbę bez prefiksu określającego jej rozmiar, Verilog domyślnie zakłada, że ma ona 32 bity.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // Tak samo jak powyżej, ale zapisane jawnie

Liczby bez określonego rozmiaru używają tylko formatu i wartości: [format][value]

  • format: podstawa liczby: b dla systemu binarnego, d dla dziesiętnego, h dla szesnastkowego lub o dla ósemkowego
  • value: właściwa liczba (na przykład 1010)

Apostrof ' jest nadal wymagany przed literą formatu, ale nie ma przed nim 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ślonej szerokości: wartość 32-bitowa (może wywołać ostrzeżenie)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Bez określonej szerokości: 32-bitowa wartość szesnastkowa FF
end

Bez określonej szerokości a z określoną szerokością

 Bez określonej szerokościZ określoną szerokością
Przykład1010 lub 'd2558'b1010 lub 8'd255
Szerokość bitowa32 bity (domyślnie)Jawna (zgodnie ze specyfikacją)
ApostrofWymagany wraz z formatemWymagany
Kiedy używaćProsty kod testbenchPrzypisania sprzętowe

Potencjalny problem

Liczby bez określonego rozmiaru mogą powodować nieoczekiwane zachowanie, gdy są przypisywane do mniejszych rejestrów:

reg [3:0] small_reg;
small_reg = 'b1111;   // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000;  // Wartość 32-bitowa, ale zbyt duża! (ostrzeżenie)

Drugi przykład przypisuje 32-bitową wartość 10000 do 4-bitowego rejestru. Zachowywane są tylko 4 najmłodsze bity (0000), co może nie być tym, czego oczekujesz.

Kiedy używać liczb bez określonego rozmiaru

Liczby bez określonego rozmiaru są wygodne w przypadku:

  • Prostych liczb w środowiskach testowych
  • Liczników pętli
  • instrukcji $display

W przypadku przypisywania wartości do rzeczywistego sprzętu używaj liczb o określonym rozmiarze, aby jasno określić ich rozmiar i uniknąć ostrzeżeń.

challenge icon

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ć:

  1. Zmień a na 8-bitową liczbę binarną o wartości 1010
  2. Zmień b na 8-bitową liczbę dziesiętną o wartości 255
  3. Zmień c na 8-bitową liczbę szesnastkową o wartości 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
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

Sprawdź konwersję: Konwerter systemów liczbowych