Menu
CoddyTech

Zahlen ohne feste Breite

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 15 von 90.

Eine Zahl ohne Größenangabe ist eine Zahl, bei der nicht angegeben wird, wie viele Bits sie hat. Wenn du eine Zahl ohne Größenpräfix schreibst, nimmt Verilog standardmäßig an, dass sie 32 Bits hat.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // Wie oben, aber explizit angegeben

Zahlen ohne Größenangabe verwenden nur das Format und den Wert: [format][value]

  • format: die Basis der Zahl: b für binär, d für dezimal, h für hexadezimal oder o für oktal
  • value: die eigentliche Zahl (zum Beispiel 1010)

Der Apostroph ' ist weiterhin vor dem Formatbuchstaben erforderlich, aber davor steht keine Bitanzahl.

  • 'b1010: 32-Bit-Binärzahl 1010
  • 'd255: 32-Bit-Dezimalzahl 255
  • 'hFF: 32-Bit-Hexadezimalzahl FF
  • 'b1: 32-Bit-Binärzahl 1 (mit 31 führenden Nullen)

Codebeispiel:

reg [7:0] data;

initial begin
  data = 1010;      // Ohne Größenangabe: 32-Bit-Wert (kann eine Warnung auslösen)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Ohne Größenangabe: 32-Bit-Hexadezimalwert FF
end

Ohne Größenangabe vs. mit Größenangabe

 Ohne GrößenangabeMit Größenangabe
Beispiel1010 oder 'd2558'b1010 oder 8'd255
Bitbreite32 Bit (Standard)Explizit (wie angegeben)
ApostrophMit Format erforderlichErforderlich
Wann verwendenEinfacher Testbench-CodeHardwarezuweisungen

Mögliches Problem

Zahlen ohne Größenangabe können bei der Zuweisung an kleinere Register zu unerwartetem Verhalten führen:

reg [3:0] small_reg;
small_reg = 'b1111;   // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000;  // 32-Bit-Wert, aber zu groß! (Warnung)

Das zweite Beispiel weist einem 4-Bit-Register einen 32-Bit-Wert 10000 zu. Nur die unteren 4 Bits bleiben erhalten (0000), was möglicherweise nicht deinen Erwartungen entspricht.

Wann ungrößenbeschränkte Zahlen verwendet werden

Ungößenbeschränkte Zahlen sind praktisch für:

  • Einfache Zahlen in Testbenches
  • Schleifenzähler
  • $display-Anweisungen

Verwende bei tatsächlichen Hardware-Zuweisungen Zahlen mit festgelegter Bitbreite, um die Bitbreite explizit anzugeben und Warnungen zu vermeiden.

challenge icon

Aufgabe

Im folgenden Code haben einige Zahlen keine Größenangabe. Ändere sie in Zahlen mit einer Bitbreite von 8 Bit, um Warnungen zu vermeiden.

Was zu tun ist:

  1. Ändere a in eine 8-Bit-Binärzahl für 1010
  2. Ändere b in eine 8-Bit-Dezimalzahl für 255
  3. Ändere c in eine 8-Bit-Hexadezimalzahl für FF

Probier es selbst

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // In eine Darstellung mit festgelegter Breite ändern (8-Bit-Dezimalzahl)
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler

Prüfe eine Umrechnung: Zahlensystem-Konverter