Operadores de deslocamento
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 os bits para a esquerda e preenche com zeros |
>> | Deslocamento lógico para a direita | Desloca os bits para a direita e 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 e preserva o bit de sinal |
Como eles funcionam
Deslocamento à esquerda (<strong><<</strong>):
8'b00001010 << 2 = 8'b00101000Os bits se movem para a esquerda. Zeros preenchem o lado direito.
Deslocamento para a direita (<strong>>></strong>):
8'b00001010 >> 2 = 8'b00000010Bits 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 com sinal, o deslocamento aritmético para a direita preserva o bit de sinal:
reg signed [7:0] a;
a = -5; // 11111011
a >>> 2 = 11111110 // Still negativeO deslocamento lógico (>>) preencheria com zeros e perderia o sinal.
Usos comuns
Multiplicar por potência de 2 (deslocamento à esquerda):
x << 1 // Multiplica por 2
x << 2 // Multiplica por 4
x << 3 // Multiplica por 8Dividir por potência de 2 (deslocamento à 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 projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online