Menu
Coddy logo textTech

Shift Register

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

challenge icon

Задание

Регистр сдвига сдвигает data слева направо на каждом фронте clk. Каждый бит перемещается на следующую позицию.

Как работает 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 тактов clk первый входной бит достигает q3.

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

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

Ваша задача — завершить приведённый ниже модуль.

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

  1. При reset установить все выходы в 0
  2. На каждом восходящем фронте clk сдвигать data слева направо:
    1. В q0 записывается d
    2. В q1 записывается old q0
    3. В q2 записывается old q1
    4. В q3 записывается old 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)
  // При сбросе: q0<=0, q1<=0, q2<=0, q3<=0
  // Иначе: сдвиг данных: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2

endmodule

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog