Skip to content

Problem 07: CPU v1

Viktor Prutyanov edited this page Apr 6, 2019 · 9 revisions

CPU

Подготовка

Перейдите в каталог problems/07_cpu_v1 в вашей локальной копии репозитория. Для синхронизации локального репозтория используется команда git pull.

Часть №1 (инструкция ADDI)

Задача №1 (АЛУ)

В файле 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.

Задача №2 (регистровый файл)

В файле 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.

Задача №3

В файле control.v доделайте устройство управления. Шины opcode и funct3 должны соответствовать одноименным полям текущей инструкции.

Задача №4

Задача №5

В файле cpu_top.v опишите правильные соединения модуля ядра core и модуля памяти команд rom.

Задача №6

Проверьте корректность работы процессора в симуляторе 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 - строки никакого вывода нет, значит всё работает правильно.

Clone this wiki locally