* Переработка лабораторных работ, связанных с памятью Существенно переработаны ЛР3 и ЛР7: Из ЛР3 убрано задание реализовать память данных. Эта память использовалась только студентами ИВТ и только в рамках одной лабы. В итоге использовалась готовая память, и ничего не мешает использовать ее с самого начала. Задание по реализации памяти инструкций также претерпело изменения. Теперь код памяти инструкций предоставляется сразу. Это объясняется тем, что код модуля состоит в общем-то из 4х строк, на которые тратится слишком много времени (с учетом добавления тестбенча и проверок). Кроме того, использование готового кода позволяет дать модуль чуть посложнее (с параметризацией размера). По итогу правок, третья лабораторная работа превращается чисто в лабораторную по написанию регистрового файла, что должно положительно сказаться на кривой сложности лаб. После второй лабы происходит слишком резкий скачок в объемах работы. Соответственно, в связи с тем, что память данных больше не делается на третьей лабе, дополнительная ЛР по памяти данных с byte enable необходимо перенести до реализации тракта данных. * ЛР3, 5, 6. Правки из ревью * ЛР7. Добавление иллюстраций
4.5 KiB
Проверка работы riscv_unit на ПЛИС
После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС.
Инструкция по реализации прототипа описана здесь.
На рис. 1 представлена схема прототипа в ПЛИС.
Рисунок 1. Структурная схема модуля nexys_riscv_unit
.
Прототип позволяет потактово исполнять программу, прошитую в память инструкций. Также прототип отображает операцию исполняемую в данный момент.
Note
Объект модуля
riscv_core
в модулеriscv_unit
должен называтьсяcore
. Т.е. строка создания сущности модуля должна выглядеть следующим образом:riscv_core core(...)
.
Описание используемой периферии
-
Кнопки
BTND
— при нажатии создает тактовый импульс, поступающий на порт тактированияclk_i
модуля дизайна. Стоит помнить то, что инструкции, работающие с внешней памятью, требуют несколько тактов для своего выполнения.CPU_RESET
— соединен со входомrst_i
модуля дизайна. Поскольку в модулеriscv_unit
используется синхронный сброс (то есть сигнал сброса учитывается только во время восходящего фронта тактового сигнала), то для сброса модуляriscv_unit
и вложенных в него модулей необходимо при зажатой кнопке сброса еще нажать кнопку тактирования.
-
Семисегментные индикаторы
Семисегментные индикаторы разбиты на 2 блока (см. рис. 1):
PC
— отображают в виде шестнадцатеричного числа младшие 16 бит программного счетчика, которые вычисляются на основе выходаinstr_addr_o
модуля процессорного ядра.operation
— отображают операцию, исполняемую процессором на текущем такте.
Операции, отображаемые прототипом
Прототип определяет тип операции по младшим 7 битам инструкции.
Если тип операции является легальным в рамках процессорного устройства, реализуемого на лабораторных работах, то отображается соответствующий опкод. Опкоды описаны в decoder_pkg.sv. Если определенный прототипом тип операции является нелегальным, то на семисегментных индикаторах отображается ILL
(от illegal).
Соответствие операции ее отображению на семисегментных индикаторах представлено на рис. 2:
Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах.
Демонстрационная программа
В качестве демонстрационной программы, предлагается использовать program.mem. Описание ее работы можно прочитать в разделе #задание.