Shift Operators
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 |
|---|---|---|
<< | 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 bewahrt das Vorzeichenbit |
So funktionieren sie
Linksverschiebung (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Bits bewegen sich nach links. Nullen füllen die rechte Seite auf.
Rechtsverschiebung (<strong>>></strong>):
8'b00001010 >> 2 = 8'b00000010Bits bewegen sich nach rechts. Nullen füllen die linke Seite.
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 signed Zahlen bewahrt der arithmetische Rechtsshift das Vorzeichenbit:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Immer noch negativEine logische Verschiebung (>>) würde mit Nullen auffüllen und das Vorzeichen verlieren.
Häufige Anwendungen
Mit einer Zweierpotenz 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 field extrahieren:
// Hole Bits 5-2 aus einem 8-Bit-Wert
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 Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler