Skip to content

Problem 09: CPU v3

Viktor Prutyanov edited this page Oct 11, 2019 · 2 revisions

Подготовка

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

Задача №1

С помощью симулятора архитектуры набора команд RISC-V посмотрите, как должна работать тестовая программа fib.s по вычислению чисел Фибоначчи.

Задача №2

Допишите модули core.v и control.v так, чтобы заработала инструкция BNE. Шина imm12 уже определена таким образом, чтобы результат после расширения до 32 бит можно было прибавить к pc и получить адрес перехода.

Подсказка: для сравнения операндов используйте АЛУ, а для вычисления адреса используйте отдельный сумматор.

Проверьте, что всё работает в симуляции и на FPGA.

Задача №3

Добавьте поддержку инструкции BEQ.

Проверьте, что работает программа fib_fpga.s на FPGA. Это усложненная версия fib.s, в которую вставлены задержки между выводами результатов, а также происходит переход в начало программы после вывода последнего числа.

Задача №4 (**)

Добавьте инструкции JAL и JALR.

Напоминание: JAL и JALR требуются для работы псевдоинструкций CALL и RET соответственно. Более подробно про псевдоинструкции можно прочитать по этой ссылке.

Если всё сделано правильно, то можно будет запустить написанную на языке C программу fib_riscv.c. Собрать её можно следующим образом:

riscv64-linux-gnu-gcc -nostdlib -fomit-frame-pointer -O1 -mabi=ilp32 -march=rv32i -c fib_riscv.c -o fib_riscv.o
riscv64-linux-gnu-as -march=rv32i -mabi=ilp32 -c loader.s -o loader.o
riscv64-linux-gnu-ld -Ttext=0x1000 -melf32lriscv loader.o fib_riscv.o -o fib_riscv.out
make fib_riscv.txt # для получения файла прошивки ROM