Zahlen mit Größenangabe
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 14 von 90.
Es gibt eine Möglichkeit, eine Zahl mit einer bestimmten Größe in Verilog zu deklarieren. Dies wird als sized number bezeichnet. Dies ist nützlich, da es Verwirrung darüber vermeidet, wie viele Bits Ihre Zahl hat, und sicherstellt, dass sich Ihre Hardware genau wie erwartet verhält.
Eine Zahl mit Größenangabe folgt diesem Format: [bits]'[format][value]
<strong>bits</strong>— die Anzahl der Bits (zum Beispiel8)<strong>'</strong>— ein Apostroph, das die Größe vom Format trennt (erforderlich)
<strong>format</strong>— die Basis der Zahl:bfür binär,dfür dezimal,hfür hexadezimal oderofür oktal<strong>value</strong>— die tatsächliche Zahl (zum Beispiel1010)
Zum Beispiel:
4'b1010— 4 Bits, binär 1010 (dezimal 10)8'd255— 8 Bits, dezimal 255 (binär 11111111)16'hFF— 16 Bits, Hex 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, binär 10101010
data = 8'd170; // 8 Bits, dezimal 170
data = 8'hAA; // 8 Bits, hexadezimal AAAlle drei Beispiele weisen data denselben Wert zu.
Warum die Größe wichtig ist
Ohne Größenangabe:
reg [7:0] data;
data = 1; // Was bedeutet das? 1 Bit? 8 Bit?Verilog nimmt standardmäßig an, dass kleine Zahlen 32 Bit groß sind, was zu Problemen führen kann.
Mit Größe:
reg [7:0] data;
data = 8'b00000001; // Eindeutig: 8-Bit-Wert 1Zero Padding
Wenn Sie einem größeren Vektor einen kleineren Wert zuweisen, füllt Verilog die linken Bits mit Nullen auf:
reg [7:0] data;
data = 4'b1010; // Wird zu 8'b00001010Aufgabe
Vervollständigen Sie den Code, indem Sie die Zahlen in der richtigen Größe schreiben.
Was zu tun ist:
- Setzen Sie
aauf eine 8-Bit-Binärzahl für dezimal 170 (binär 10101010) - Setzen Sie
bauf eine 4-Bit-Binärzahl für dezimal 12 (binär 1100) - Setzen Sie
cauf eine 16-Bit-Hexadezimalzahl für dezimal 255 (hex FF)
Spickzettel
Eine Zahl mit Größenangabe (sized number) folgt in Verilog diesem Format: [bits]'[format][value]
bits— Anzahl der Bits'— erforderliches Apostroph als Trennzeichenformat—b(binär),d(dezimal),h(hexadezimal),o(oktal)value— die eigentliche Zahl
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary
data = 8'd170; // 8 bits, decimal
data = 8'hAA; // 8 bits, hex (all three are equal)Ohne Größenangabe verwendet Verilog standardmäßig 32 Bits, was zu unerwartetem Verhalten führen kann. Linke Bits werden mit Nullen aufgefüllt, wenn der Wert kleiner als die deklarierte Größe ist:
reg [7:0] data;
data = 4'b1010; // Becomes 8'b00001010Probier es selbst
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // 8-Bit-Binärwert für 170 (10101010)
b = ______; // 4-Bit-Binärwert für 12 (1100)
c = ______; // 16-Bit-Hexadezimalwert für 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", 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