Уровень 37: Регистр (Verilog)
Задание
Соберите 8-битный регистр из D-триггеров. Регистр хранит 8 бит данных и обновляется по фронту тактового сигнала clk.
Модуль Reg8 принимает 8-битную шину in[7:0] и однобитный clk, на выходе — out[7:0].
Используйте конструкцию generate-for, чтобы инстанцировать 8 D-триггеров. Каждый DFF хранит один бит: q = d в момент фронта clk.
Ключевая идея: это первый sequential-уровень — симулятор обрабатывает такты последовательно, состояние сохраняется между тестами.
Материалы по теме
- D-триггер — умный запоминатель
- DFF — D-триггер
Решение
Регистр — это массив D-триггеров, каждый хранит один бит. Вместо того чтобы писать 8 строк кода вручную, используем generate-for.
- Объявите индексную переменную:
genvar i; - Откройте блок генерации:
generate - Цикл по 8 битам:
for (i = 0; i < 8; i = i + 1) begin : dff_gen - Внутри — один D-триггер на бит:
dff d(out[i], in[i], clk); - Закройте блок:
end endgenerate
Порядок портов DFF: (q, d, clk). Выход q становится out[i], вход d — in[i], а clk — общий для всех.
Симулятор подаёт тактовые сигналы через поле inClock каждого тестового вектора:
- Такт 0:
in = 42, фронт clk →out = 42 - Такт 1:
in = 42, clk = 0 →outсохраняет 42 - Такт 2:
in = 100, clk = 0 →outвсё ещё 42 - Такт 3:
in = 100, фронт clk →out = 100