Unsized Numbers
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 15 von 90.
Eine Unsized number ist eine Zahl, die geschrieben wird, ohne anzugeben, wie viele bits sie hat. Wenn du eine Zahl ohne Größenpräfix schreibst, nimmt Verilog standardmäßig an, dass sie 32 bits umfasst.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Dasselbe wie oben, aber explizitUnsized-Zahlen verwenden nur das Format und den Wert: [format][value]
<strong>format</strong>: die Basis der Zahl:bfür binary,dfür decimal,hfür hexadezimal oderofür oktal<strong>value</strong>: die eigentliche Zahl (zum Beispiel1010)
Das Apostroph ' wird weiterhin zwischen Format und Wert benötigt, aber davor steht keine Bitanzahl.
'b1010: 32-bit binary 1010'd255: 32-bit decimal 255'hFF: 32-bit hex FF'b1: 32-bit binary 1 (mit 31 führenden Nullen)
Code-Beispiel:
reg [7:0] data;
initial begin
data = 1010; // Unsized: 32-Bit-Wert (kann Warnung verursachen)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Unsized: 32-Bit-Hex FF
endUnsized vs Sized
| Unsized | Sized | |
|---|---|---|
| Beispiel | 1010 oder 'd255 | 8'b1010 oder 8'd255 |
| Bitbreite | 32 bits (Standard) | Explizit (wie angegeben) |
| Apostroph | Bei Verwendung eines Formats erforderlich | Erforderlich |
| Wann verwenden | Einfacher Testbench-Code | Hardwarezuweisungen |
Mögliches Problem
Unsized-Zahlen können unerwartetes Verhalten verursachen, wenn sie kleineren Registern zugewiesen werden:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = '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 Unsized-Zahlen verwendet werden
Unsized-Zahlen sind praktisch für:
- Einfache Zahlen in Testbenches
- Schleifenzähler
$display-Anweisungen
Für tatsächliche Hardwarezuweisungen verwende Zahlen mit Größenangabe, um eindeutig zu sein und Warnungen zu vermeiden.
Aufgabe
Im folgenden Code sind einige Zahlen ohne Größenangabe. Ändere sie in Zahlen mit Größenangabe (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; // Zu sized ändern (8-Bit dezimal)
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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler