Schiebeoperatoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 26 von 90.
Schiebeoperatoren verschieben Bits innerhalb eines Vektors nach links oder rechts.
Verfügbare Schiebeoperatoren
| Operator | Operation | Beschreibung |
|---|---|---|
<< | Logische Verschiebung nach links | Verschiebt Bits nach links und füllt mit Nullen auf |
>> | Logische Verschiebung nach rechts | Verschiebt Bits nach rechts und füllt mit Nullen auf |
<<< | Arithmetische Verschiebung nach links | Entspricht der logischen Verschiebung nach links |
>>> | Arithmetische Verschiebung nach rechts | Verschiebt nach rechts und erhält das Vorzeichenbit |
So funktionieren sie
Linksverschiebung (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Bits werden nach links verschoben. Nullen füllen die rechte Seite auf.
Rechtsschieben (<strong>>></strong>):
8'b00001010 >> 2 = 8'b00000010Bits werden nach rechts verschoben. Nullen füllen die linke Seite auf.
Codebeispiel
module shift_demo;
reg [7:0] original, left_shift, right_shift;
initial begin
original = 8'b00001010;
left_shift = original << 2; // 00001010 → 00101000
right_shift = original >> 2; // 00001010 → 00000010
$display("original = %b", original);
$display("<< 2 = %b", left_shift);
$display(">> 2 = %b", right_shift);
$finish;
end
endmoduleAusgabe:
original = 00001010
<< 2 = 00101000
>> 2 = 00000010Arithmetischer Rechtsshift (>>>)
Bei vorzeichenbehafteten Zahlen bleibt das Vorzeichenbit beim arithmetischen Rechtsshift erhalten:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Still negativeEine logische Verschiebung (>>) würde mit Nullen auffüllen und das Vorzeichen verlieren.
Häufige Anwendungen
Mit einer Potenz von 2 multiplizieren (Linksverschiebung):
x << 1 // Mit 2 multiplizieren
x << 2 // Mit 4 multiplizieren
x << 3 // Mit 8 multiplizierenDurch eine Zweierpotenz teilen (Rechtsverschiebung):
x >> 1 // Durch 2 teilen
x >> 2 // Durch 4 teilen
x >> 3 // Durch 8 teilenEin Feld extrahieren:
// Get bits 5-2 from an 8-bit value
field = (data >> 2) & 4'b1111;Aufgabe
Schreibe die korrekten Verschiebungsausdrücke für jede Aufgabe.
Was zu tun ist:
- Verschiebe
aum 3 Bits nach links und speichere das Ergebnis inleft_result. - Verschiebe
aum 1 Bit nach rechts und speichere das Ergebnis inright_result. - Verschiebe
bum 2 Bits nach rechts (arithmetisch) und speichere das Ergebnis inarith_result.
Probier es selbst
module shift_challenge;
reg [7:0] a;
reg signed [7:0] b;
reg [7:0] left_result, right_result;
reg signed [7:0] arith_result;
initial begin
a = 8'b00010001;
b = -8'sd16; // 11110000 in binär
left_result = ______; // Verschiebe a um 3 Bits nach links
right_result = ______; // Verschiebe a um 1 Bit nach rechts
arith_result = ______; // Verschiebe b um 2 Bits nach rechts (arithmetisch)
$display("a = %b", a);
$display("a << 3 = %b", left_result);
$display("a >> 1 = %b", right_result);
$display("b = %b", b);
$display("b >>> 2 = %b", arith_result);
$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