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 angegebenZahlen ohne Größenangabe verwenden nur das Format und den Wert: [format][value]
format: die Basis der Zahl:bfür binär,dfür dezimal,hfür hexadezimal oderofür oktalvalue: die eigentliche Zahl (zum Beispiel1010)
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
endOhne Größenangabe vs. mit Größenangabe
| Ohne Größenangabe | Mit Größenangabe | |
|---|---|---|
| Beispiel | 1010 oder 'd255 | 8'b1010 oder 8'd255 |
| Bitbreite | 32 Bit (Standard) | Explizit (wie angegeben) |
| Apostroph | Mit Format erforderlich | Erforderlich |
| Wann verwenden | Einfacher Testbench-Code | Hardwarezuweisungen |
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.
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:
- Ändere
ain eine 8-Bit-Binärzahl für 1010 - Ändere
bin eine 8-Bit-Dezimalzahl für 255 - Ändere
cin 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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler
Prüfe eine Umrechnung: Zahlensystem-Konverter