Shift-Operatoren
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, füllt mit Nullen auf |
>> | Logische Rechtsverschiebung | Verschiebt Bits nach rechts, füllt mit Nullen auf |
<<< | Arithmetische Linksverschiebung | Gleich wie logische Linksverschiebung |
>>> | Arithmetische Rechtsverschiebung | Verschiebt nach rechts, behält das Vorzeichenbit bei |
Wie sie funktionieren
Links-Shift (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Bits bewegen sich nach links. 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.
Code-Beispiel
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 (>>>)
Für vorzeichenbehaftete Zahlen bewahrt die arithmetische Rechtsverschiebung das Vorzeichenbit:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Immer noch negativLogische Verschiebung (>>) würde mit Nullen auffüllen und das Vorzeichen verlieren.
Häufige Anwendungen
Multiplikation mit einer Zweierpotenz (Linksverschiebung):
x << 1 // Multiplikation mit 2
x << 2 // Multiplikation mit 4
x << 3 // Multiplikation mit 8Division durch Zweierpotenz (Rechtsschub):
x >> 1 // Durch 2 dividieren
x >> 2 // Durch 4 dividieren
x >> 3 // Durch 8 dividierenEin Feld extrahieren:
// Bits 5-2 aus einem 8-Bit-Wert extrahieren
field = (data >> 2) & 4'b1111;Aufgabe
Schreiben Sie die korrekten Schiebe-Ausdrü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
barithmetisch um 2 Bits nach rechts und speichere das Ergebnis inarith_result
Spickzettel
Shift-Operatoren verschieben Bits innerhalb eines Vektors nach links oder rechts:
| Operator | Beschreibung |
|---|---|
<< | Logische Linksverschiebung (füllt mit Nullen auf) |
>> | Logische Rechtsverschiebung (füllt mit Nullen auf) |
<<< | Arithmetische Linksverschiebung (identisch mit logischer) |
>>> | Arithmetische Rechtsverschiebung (behält Vorzeichenbit bei) |
8'b00001010 << 2 // = 8'b00101000
8'b00001010 >> 2 // = 8'b00000010
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 // = 11111110 (Vorzeichen beibehalten)Häufige Anwendungen:
x << n // Multiplikation mit 2^n
x >> n // Division durch 2^n
// Extrahiere Bits 5-2 aus einem 8-Bit-Wert
field = (data >> 2) & 4'b1111;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. 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