Menu
Coddy logo textTech

Сдвиговый регистр

Часть раздела Основы путешествия по Verilog на Coddy — урок 86 из 90.

challenge icon

Задание

Сдвиговый регистр (shift register) сдвигает данные слева направо на каждом фронте тактового сигнала. Каждый бит перемещается в следующую позицию.

Как работает 4-битный сдвиговый регистр

Initial: q0=0, q1=0, q2=0, q3=0
Clock 1: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Clock 2: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2

Через 4 тактовых цикла первый входной бит достигает q3.

Интерфейс модуля

ПортНаправлениеШиринаОписание
clkinput1 битТактовый сигнал
resetinput1 битСброс всех выходов в 0
dinput1 битВход данных
q0output1 битВыход первого триггера
q1output1 битВыход второго триггера
q2output1 битВыход третьего триггера
q3output1 битВыход четвертого триггера

Ваша задача — дописать модуль ниже.

Что нужно сделать:

  1. По сигналу reset установите все выходы в 0
  2. На каждом переднем фронте тактового сигнала сдвигайте данные слева направо:
    1. q0 получает значение d
    2. q1 получает старое значение q0
    3. q2 получает старое значение q1
    4. q3 получает старое значение q2

Попробуйте сами

module shift_register (
  input clk,
  input reset,
  input d,
  output reg q0,
  output reg q1,
  output reg q2,
  output reg q3
);
  
  // TODO: Добавьте always @(posedge clk or posedge reset)
  // При сбросе (reset): q0<=0, q1<=0, q2<=0, q3<=0
  // Иначе: сдвиг данных: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

Все уроки раздела Основы