-
Notifications
You must be signed in to change notification settings - Fork 35
Problem 07: CPU v1
Перейдите в каталог problems/07_cpu_v1 в вашей локальной копии репозитория. Для синхронизации локального репозтория используется команда git pull.
В файле alu.v опишите модуль арифметико-логического устройства (АЛУ). Заголовок модуля должен быть следующий:
module alu(
input [31:0]src_a, // Вход первого операнда
input [31:0]src_b, // Вход второго операнда
input [2:0]op, // Вход выбора номера операции, всего 8 различных операций
output reg [31:0]res // Результат выполнения операции
);АЛУ — комбинационная схема, выполняющая одну выбираемую входом op операцию, над входами-операндами src_A и src_B.
Начните с двух операций:
-
op = 0: тождественная операция (возвращает операнд A в качестве результата) -
op = 1: cложение операнда A и операнда B
Пока остальные операции не определены, пусть АЛУ возвращает 0 для неиспользованных значений op, для этого внутри блока case-endcase можно использовать ключевое слово default.
В файле reg_file.v опишите модуль регистрового файла со следующим заголовком:
module reg_file(
input clk,
input [4:0]raddr0, // Адрес чтения №0
input [4:0]raddr1, // Адрес чтения №1
input [4:0]waddr, // Адрес записи
input [31:0]wdata, // Данные для записи
input we, // Вход разрешения записи
output [31:0]rdata0, // Прочитанные данные №0
output [31:0]rdata1 // Прочитанные данные №1
);
У регистрового файла должно быть 2 порта чтения и 1 порт записи. Всего должно быть 32 32-разрядных регистра. Чтение регистра x0 должно всегда возвращать 0.
В файле control.v доделайте устройство управления. Шины opcode и funct3 должны соответствовать одноименным полям текущей инструкции.
В файле cpu_top.v опишите правильные соединения модуля ядра core и модуля памяти команд rom.
Проверьте корректность работы процессора в симуляторе Icarus Verilog на тестовой программе samples/addi.txt.
Код этой программы следующий:
addi x5, x0, 11
addi x7, x5, 9
nop
addi x11, x7, 0
addi x7, x7, -5
nop
nop
nop
При запуске make test произойдёт автоматическая проверка лога симуляции и эталонного лога. Если после grep "CPUv1" cpu.log | diff cpu_test.log - строки никакого вывода нет, значит всё работает правильно.