Уровень 40: Datapath (Verilog)
Задание
Соберите тракт данных (datapath) — конвейер из четырёх компонентов: счётчик адреса, ПЗУ команд, АЛУ и аккумулятор. Это упрощённая модель процессора, которая читает команды из ROM и накапливает результат.
Модуль Datapath принимает clk и выдаёт result[7:0]. ROM содержит данные: адрес 0→5, 1→7, 2→3, 3→10, 4→2. АЛУ выполняет сложение (op_code = 0).
Используйте модули: Counter8 (уровень 38), ROM (builtin), ALU8 (уровень 36), Reg8 (уровень 37).
Решение
Datapath — это цепочка из четырёх блоков, соединённых последовательно, с обратной связью через аккумулятор:
- Объявите провода:
wire [7:0] addr, rom_data, alu_out;иwire carry_unused; - Счётчик генерирует адрес:
Counter8 pc(addr); - ROM читает данные по адресу:
ROM rom(addr, rom_data); - АЛУ складывает данные из ROM с текущим результатом:
ALU8 alu(alu_out, carry_unused, rom_data, result, 1'b0);— op_code=0 (сложение) - Регистр-аккумулятор сохраняет результат:
Reg8 acc(result, alu_out);
result — одновременно выходной порт модуля, выход аккумулятора и вход b АЛУ. Обратная связь позволяет накапливать сумму: 0 → 5 → 12 → 15 → 25 → 27.
Порядок портов ALU8: (out, carry_out, a, b, op_code). Константа 1'b0 на op_code выбирает сложение. Порядок портов ROM: (addr, data) — два порта, чтение комбинационное.