Menu
Coddy logo textTech

Registrador de Deslocamento

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 86 de 90.

challenge icon

Desafio

Um registrador de deslocamento desloca os dados da esquerda para a direita a cada borda de clock. Cada bit move-se para a próxima posição.

Como funciona um registrador de deslocamento de 4 bits

Initial: q0=0, q1=0, q2=0, q3=0
Each clock: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Shifting in d = 1, 0, 1, 0:
Clock 1 (d=1): q0=1, q1=0, q2=0, q3=0
Clock 2 (d=0): q0=0, q1=1, q2=0, q3=0
Clock 3 (d=1): q0=1, q1=0, q2=1, q3=0
Clock 4 (d=0): q0=0, q1=1, q2=0, q3=1

Após 4 ciclos de clock, o primeiro bit de entrada chega a q3.

Interface do módulo

PortaDireçãoLarguraDescrição
clkentrada1 bitSinal de clock
resetentrada1 bitRedefine todas as saídas para 0
dentrada1 bitEntrada de dados
q0saída1 bitSaída do primeiro flip-flop
q1saída1 bitSaída do segundo flip-flop
q2saída1 bitSaída do terceiro flip-flop
q3saída1 bitSaída do quarto flip-flop

Sua tarefa é completar o módulo abaixo.

O que fazer:

  1. Em reset, defina todas as saídas como 0
  2. A cada borda de subida do clock, desloque os dados da esquerda para a direita:
    1. q0 recebe d
    2. q1 recebe o q0 antigo
    3. q2 recebe o q1 antigo
    4. q3 recebe o q2 antigo

Experimente você mesmo

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q0,
  output reg q1,
  output reg q2,
  output reg q3
);
  
  // TODO: Adicione always @(posedge clk or posedge reset)
  // No reset: q0<=0, q1<=0, q2<=0, q3<=0
  // Senão: desloque os dados: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online