Сдвиговый регистр
Часть раздела Основы путешествия по Verilog на Coddy. Урок 86 из 90.
Задание
Регистр сдвига сдвигает данные слева направо на каждом фронте тактового сигнала. Каждый бит перемещается на следующую позицию.
Принцип работы 4-битного регистра сдвига
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После 4 тактов первый входной бит достигает q3.
Интерфейс модуля
| Порт | Направление | Разрядность | Описание |
|---|---|---|---|
clk | вход | 1 бит | Тактовый сигнал |
reset | вход | 1 бит | Сброс всех выходов в 0 |
d | вход | 1 бит | Вход данных |
q0 | выход | 1 бит | Выход первого триггера |
q1 | выход | 1 бит | Выход второго триггера |
q2 | выход | 1 бит | Выход третьего триггера |
q3 | выход | 1 бит | Выход четвёртого триггера |
Твоя задача — завершить приведённый ниже модуль.
Что нужно сделать:
- При
resetустановить все выходы в 0 - На каждом восходящем фронте тактового сигнала сдвигать данные слева направо:
- В
q0записываетсяd - В
q1записывается старое значениеq0 - В
q2записывается старое значениеq1 - В
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)
// При сбросе: q0<=0, q1<=0, q2<=0, q3<=0
// Иначе: сдвиг данных: q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2
endmodule
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog