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 binär 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 auf
- Kehre alle Bits um (aus 0 wird 1, aus 1 wird 0)
- Addiere 1
Beispiel: −5 mit 4 Bits darstellen
| Schritt | Operation | Ergebnis |
|---|---|---|
| 1 | Positives 5 im Binärsystem | 0101 |
| 2 | Alle Bits umkehren | 1010 |
| 3 | 1 addieren | 1011 |
−5 im 4-Bit-Zweierkomplement ist 4'b1011
Negative Zahlen in Verilog schreiben
Du kannst negative Zahlen direkt im Dezimalformat schreiben:
reg signed [3:0] a;
a = -5; // Verilog verwendet automatisch das ZweierkomplementBei Binärzahlen mit fester Breite musst du den Wert im Zweierkomplement schreiben:
a = 4'b1011; // This is -5 in 4-bit two's complementMit Vorzeichen vs. ohne Vorzeichen
Standardmäßig sind reg- und wire-Signale vorzeichenlos. Um mit negativen Zahlen zu arbeiten, deklarierst du Signale als signed:
reg signed [3:0] negative; // Kann Werte von -8 bis 7 speichern
reg [3:0] positive; // Kann Werte von 0 bis 15 speichernWertebereich 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 ermöglichen - Ohne
signedbehandelt einregoderwirejeden Wert als positiv
- Die Zweierkomplement-Arithmetik funktioniert automatisch, wenn du
signedverwendest. - Das höchstwertige Bit bestimmt das Vorzeichen: 1 = negativ, 0 = positiv
Aufgabe
Vervollständige den Code, indem du die richtigen Zweierkomplementwerte einträgst.
Aufgabe:
- Setze
amithilfe des 4-Bit-Zweierkomplements auf -3 - Setze
bmithilfe des 4-Bit-Zweierkomplements auf -8 - Setze
cmithilfe des 4-Bit-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