Zahlen ohne Größenangabe
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 15 von 90.
Ein unsized Number (Zahl ohne Größenangabe) ist eine Zahl, die geschrieben wird, ohne anzugeben, wie viele Bits sie hat. Wenn Sie eine Zahl ohne Größen-Präfix schreiben, geht Verilog standardmäßig von 32 bits aus.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // Dasselbe wie oben, aber explizitZahlen ohne Größenangabe (Unsized numbers) verwenden nur das Format und den Wert: [format][value]
<strong>format</strong>— die Basis der Zahl:bfür binär (binary),dfür dezimal (decimal),hfür hexadezimal (hex) oderofür oktal<strong>value</strong>— die eigentliche Zahl (zum Beispiel1010)
Der Apostroph ' ist zwischen dem Format und dem Wert weiterhin erforderlich, aber es steht keine Bitanzahl davor.
'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)
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 |
| Bit width | 32 bits (Standard) | Explicit (wie angegeben) |
| Apostroph | Erforderlich mit Format | Erforderlich |
| Wann zu verwenden | Einfacher Testbench-Code | Hardware-Zuweisungen |
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 werden beibehalten (0000), was möglicherweise nicht das ist, was Sie erwarten.
Wann nicht-dimensionierte Zahlen verwendet werden sollten
Nicht-dimensionierte Zahlen sind praktisch für:
- Einfache Zahlen in Testbenches
- Schleifenzähler
$display-Anweisungen
Für tatsächliche Hardware-Zuweisungen verwenden Sie sized Zahlen, um explicit zu sein und Warnungen zu vermeiden.
Aufgabe
In dem folgenden Code sind einige Zahlen ohne Größenangabe (unsized). Ändern Sie diese in Zahlen mit Größenangabe (8 bits), um Warnungen zu vermeiden.
Was zu tun ist:
- Ändern Sie
ain eine 8-bit binary Zahl für 1010 - Ändern Sie
bin eine 8-bit decimal Zahl für 255 - Ändern Sie
cin eine 8-bit hex Zahl 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; // Ändere zu sized (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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen