Menu
CoddyTech

Zahlen mit fester Breite

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

Es gibt eine Möglichkeit, in Verilog eine Zahl mit einer bestimmten Größe zu deklarieren. Sie wird als Zahl mit festgelegter Bitbreite bezeichnet. Das ist nützlich, weil dadurch Unklarheiten darüber vermieden werden, wie viele Bits deine Zahl hat, und sichergestellt wird, dass sich deine Hardware genau wie erwartet verhält.

Eine Zahl mit Größenangabe folgt diesem Format: [bits]'[format][value]

  • bits: die Anzahl der Bits (zum Beispiel 8)
  • ': ein Apostroph, das die Größe vom Format trennt (erforderlich)
  • format: die Basis der Zahl: b für Binärzahlen, d für Dezimalzahlen, h für Hexadezimalzahlen oder o für Oktalzahlen
  • value: die tatsächliche Zahl (zum Beispiel 1010)

Zum Beispiel:

  • 4'b1010: 4 Bits, binär 1010 (dezimal 10)
  • 8'd255: 8 Bits, dezimal 255 (binär 11111111)
  • 16'hFF: 16 Bits, hexadezimal FF (binär 0000000011111111)
  • 3'b1: 3 Bits, binär 001 (die linken Bits werden mit Nullen aufgefüllt)

Codebeispiel:

reg [7:0] data;

data = 8'b10101010;   // 8 bits, binary 10101010
data = 8'd170;        // 8 Bit, dezimal 170
data = 8'hAA;         // 8 bits, hex AA

Alle drei Beispiele weisen data denselben Wert zu.

Warum die Größe eine Rolle spielt

Ohne Größenangabe:

reg [7:0] data;
data = 1;        // Was bedeutet das? 1 Bit? 8 Bit?

Verilog geht standardmäßig davon aus, dass kleine Zahlen 32 Bit groß sind, was zu Problemen führen kann.

Mit Größenangabe:

reg [7:0] data;
data = 8'b00000001;   // Clear: 8-bit value 1

Nullauffüllung

Wenn du einem größeren Vektor einen kleineren Wert zuweist, füllt Verilog die linken Bits mit Nullen:

reg [7:0] data;
data = 4'b1010;    // Becomes 8'b00001010
challenge icon

Aufgabe

Vervollständige den Code, indem du die Zahlen mit der richtigen Bitbreite einträgst.

Aufgabe:

  1. Setze a auf eine 8-Bit-Binärzahl für die Dezimalzahl 170 (binär 10101010)
  2. Setze b auf eine 4-Bit-Binärzahl für die Dezimalzahl 12 (binär 1100)
  3. Setze c auf eine 16-Bit-Hexadezimalzahl für die Dezimalzahl 255 (hex FF)

Probier es selbst

module sized_challenge;
  reg [7:0] a;
  reg [3:0] b;
  reg [15:0] c;
  
  initial begin
    a = ______;   // 8-Bit-Binärzahl für 170 (10101010)
    b = ______;   // 4-Bit-Binärzahl für 12 (1100)
    c = ______;   // 16-Bit-Hexadezimalzahl für 255 (FF)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %h", 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