Negative Zahlen
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 16 von 90.
In Verilog werden negative Zahlen im Zweierkomplement dargestellt. Das Zweierkomplement ist eine Möglichkeit, sowohl positive als auch negative Zahlen im Binärsystem darzustellen. Das höchstwertige Bit (MSB) gibt das Vorzeichen an:
- 0 = positive Zahl
- 1 = negative Zahl
So berechnest du das Zweierkomplement
So findest du das Zweierkomplement einer Zahl:
- Schreibe die positive Zahl binär
- Kehre alle Bits um (0 wird zu 1, 1 wird zu 0)
- Addiere 1
Beispiel: -5 in 4 Bit darstellen
| Schritt | Operation | Ergebnis |
|---|---|---|
| 1 | Positive 5 im Binärsystem | 0101 |
| 2 | Alle Bits umkehren | 1010 |
| 3 | 1 addieren | 1011 |
-5 im 4-Bit-Zweierkomplement ist <strong>4'b1011</strong>
Negative Zahlen in Verilog schreiben
Du kannst negative Zahlen direkt im Dezimalformat schreiben:
reg signed [3:0] a;
a = -5; // Verilog verwendet automatisch das ZweierkomplementFür Binärzahlen mit fester Breite musst du den Zweierkomplementwert schreiben:
a = 4'b1011; // This is -5 in 4-bit two's complementVorzeichenbehaftet vs. vorzeichenlos
Standardmäßig behandelt Verilog Zahlen als vorzeichenlos. Um mit negativen Zahlen zu arbeiten, deklariere Signale als signed:
reg signed [3:0] negative; // Kann -8 bis 7 speichern
reg [3:0] positive; // Kann 0 bis 15 speichernBereich vorzeichenbehafteter Zahlen
Für N Bits kann eine vorzeichenbehaftete Zahl Folgendes darstellen:
- Minimum: -2^(N-1)
- Maximum: 2^(N-1) - 1
| Bits | Bereich |
|---|---|
| 4 Bits | -8 bis 7 |
| 8 Bits | -128 bis 127 |
| 16 Bits | -32768 bis 32767 |
Wichtige Hinweise
- Verwende das Schlüsselwort
signed, um die Verarbeitung negativer Zahlen zu aktivieren - Ohne
signedbehandelt Verilog alle Werte als positiv
- Die Zweierkomplement-Arithmetik funktioniert automatisch bei der Verwendung von
signed - Das MSB bestimmt das Vorzeichen: 1 = negative, 0 = positive
Aufgabe
Vervollständige den Code, indem du die richtigen Zweierkomplementwerte einträgst.
Was zu tun ist:
- Setze
amithilfe des 4-Bit-Binär-Zweierkomplements auf -3. - Setze
bmithilfe des 4-Bit-Binär-Zweierkomplements auf -8. - Setze
cmithilfe des 4-Bit-Binär-Zweierkomplements auf -1.
Probier es selbst
module negative_challenge;
reg signed [3:0] a, b, c;
initial begin
a = 4'b______; // -3 in 4-bit two's complement
b = 4'b______; // -8 in 4-bit two's complement
c = 4'b______; // -1 in 4-bit two's complement
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", 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