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 Linksverschiebung | Verschiebt Bits nach links und füllt mit Nullen auf |
>> | Logische Rechtsverschiebung | Verschiebt Bits nach rechts und füllt mit Nullen auf |
<<< | Arithmetische Linksverschiebung | Wie die logische Linksverschiebung |
>>> | Arithmetische Rechtsverschiebung | Verschiebt nach rechts und erhält das Vorzeichenbit |
Wie sie funktionieren
Linksverschiebung (<<):
8'b00001010 << 2 = 8'b00101000Die Bits werden nach links verschoben. Rechts werden Nullen eingefügt.
Rechtsverschiebung (>>):
8'b00001010 >> 2 = 8'b00000010Die Bits bewegen sich nach rechts. Links werden Nullen aufgefüllt.
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 = 00000010Arithmetische Rechtsverschiebung (>>>)
Bei vorzeichenbehafteten Zahlen bleibt bei der arithmetischen Rechtsverschiebung das Vorzeichenbit 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 Zweierpotenz multiplizieren (Linksverschiebung):
x << 1 // Multiply by 2
x << 2 // Multiply by 4
x << 3 // Multiply by 8Durch eine Zweierpotenz teilen (Rechtsverschiebung):
x >> 1 // Divide by 2
x >> 2 // Divide by 4
x >> 3 // Divide by 8Ein Feld extrahieren:
// Get bits 5-2 from an 8-bit value
field = (data >> 2) & 4'b1111;Aufgabe
Schreibe die richtigen Schiebeausdrücke für jede Aufgabe.
Aufgaben:
- 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 arithmetisch nach rechts 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 im Binärsystem
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