Shift Operators
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 26 de 90.
Os operadores de deslocamento movem bits para a esquerda ou para a direita dentro de um vetor.
Operadores de deslocamento disponíveis
| Operador | Operação | Descrição |
|---|---|---|
<< | Deslocamento lógico para a esquerda | Desloca bits para a esquerda, preenche com zeros |
>> | Deslocamento lógico para a direita | Desloca bits para a direita, preenche com zeros |
<<< | Deslocamento aritmético para a esquerda | Igual ao deslocamento lógico para a esquerda |
>>> | Deslocamento aritmético para a direita | Desloca para a direita, preserva o bit de sign |
Como eles funcionam
Deslocamento à esquerda (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Os bits se movem para a esquerda. Zeros preenchem o lado direito.
Deslocamento à direita (<strong>>></strong>):
8'b00001010 >> 2 = 8'b00000010Os bits se movem para a direita. Zeros preenchem o lado esquerdo.
Exemplo de código
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
endmoduleSaída:
original = 00001010
<< 2 = 00101000
>> 2 = 00000010Deslocamento aritmético para a direita (>>>)
Para números signed, o deslocamento aritmético para a direita preserva o bit de sinal:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Ainda negativoO deslocamento lógico (>>) preencheria com zeros e perderia o sinal.
Usos comuns
Multiplicar por potência de 2 (deslocamento para a esquerda):
x << 1 // Multiplica por 2
x << 2 // Multiplica por 4
x << 3 // Multiplica por 8Dividir por potência de 2 (deslocamento para a direita):
x >> 1 // Divide por 2
x >> 2 // Divide por 4
x >> 3 // Divide por 8Extraia um campo:
// Obtém os bits 5-2 de um valor de 8 bits
field = (data >> 2) & 4'b1111;Desafio
Escreva as expressões de deslocamento corretas para cada tarefa.
O que fazer:
- Desloque
a3 bits para a esquerda e armazene emleft_result - Desloque
a1 bit para a direita e armazene emright_result - Desloque
b2 bits para a direita (aritmético) e armazene emarith_result
Experimente você mesmo
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 em binário
left_result = ______; // Desloca a para a esquerda em 3 bits
right_result = ______; // Desloca a para a direita em 1 bit
arith_result = ______; // Desloca b para a direita em 2 bits (aritmético)
$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
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators 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 LogicPratique por conta própria: Compilador de Verilog online