-
Notifications
You must be signed in to change notification settings - Fork 28
Problem 09: CPU v3
Перейдите в каталог problems/09_cpu_v3
в вашей локальной копии репозитория. Для синхронизации локального репозтория используется команда git pull
.
С помощью симулятора архитектуры набора команд RISC-V посмотрите, как должна работать тестовая программа fib.s
по вычислению чисел Фибоначчи.
Допишите модули core.v
и control.v
так, чтобы заработала инструкция BNE. Шина imm12
уже определена таким образом, чтобы результат после расширения до 32 бит можно было прибавить к pc
и получить адрес перехода.
Подсказка: для сравнения операндов используйте АЛУ, а для вычисления адреса используйте отдельный сумматор.
Проверьте, что всё работает в симуляции и на FPGA.
Добавьте поддержку инструкции BEQ.
Проверьте, что работает программа fib_fpga.s
на FPGA. Это усложненная версия fib.s
, в которую вставлены задержки между выводами результатов, а также происходит переход в начало программы после вывода последнего числа.
Добавьте инструкции 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