Уровень 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-триггеров, каждый хранит один бит. Вместо того чтобы писать 8 строк кода вручную, используем generate-for.

  1. Объявите индексную переменную: genvar i;
  2. Откройте блок генерации: generate
  3. Цикл по 8 битам: for (i = 0; i < 8; i = i + 1) begin : dff_gen
  4. Внутри — один D-триггер на бит: dff d(out[i], in[i], clk);
  5. Закройте блок: end endgenerate

Порядок портов DFF: (q, d, clk). Выход q становится out[i], вход din[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