Shift-Operatoren
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 26 von 90.
Shift-Operatoren verschieben Bits innerhalb eines Vektors nach links oder rechts.
Verfügbare Shift-Operatoren
| Operator | Operation | Beschreibung |
|---|---|---|
<< | Logischer Linksshift | Verschiebt Bits nach links, füllt mit Nullen auf |
>> | Logischer Rechtsshift | Verschiebt Bits nach rechts, füllt mit Nullen auf |
<<< | Arithmetischer Linksshift | Gleich wie logischer Linksshift |
>>> | Arithmetischer Rechtsshift | Verschiebt nach rechts, erhält das Vorzeichenbit |
Wie sie funktionieren
Left Shift (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Bits bewegen sich nach links. Nullen füllen die rechte Seite.
Right Shift (<strong>>></strong>):
8'b00001010 >> 2 = 8'b00000010Bits bewegen sich nach rechts. Nullen füllen die linke Seite.
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 = 00000010Arithmetischer Rechtsshift (>>>)
Bei vorzeichenbehafteten Zahlen bewahrt der arithmetische Rechtsshift das Vorzeichenbit:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Immer noch negativEin logischer Shift (>>) würde mit Nullen auffüllen und das Vorzeichen verlieren.
Häufige Anwendungsfälle
Multiplikation mit einer Zweierpotenz (Linksverschiebung):
x << 1 // Mit 2 multiplizieren
x << 2 // Mit 4 multiplizieren
x << 3 // Mit 8 multiplizierenDurch Zweierpotenz teilen (Rechtsshift):
x >> 1 // Durch 2 teilen
x >> 2 // Durch 4 teilen
x >> 3 // Durch 8 teilenExtract a field:
// Hole Bits 5-2 aus einem 8-Bit-Wert
field = (data >> 2) & 4'b1111;Aufgabe
Schreiben Sie die korrekten Shift-Ausdrücke für jede Aufgabe.
Was zu tun ist:
- Verschieben Sie
aum 3 Bits nach links (left) und speichern Sie es inleft_result - Verschieben Sie
aum 1 Bit nach rechts (right) und speichern Sie es inright_result - Verschieben Sie
bum 2 Bits nach rechts (arithmetic) und speichern Sie es 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ärformat
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