mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 01:30:10 +00:00
* WIP: APS cumulative update * Update How FPGA works.md * Перенос раздела "Последовательностная логика" в отдельный док * Исправление картинки * Исправление оформления индексов * Переработка раздела Vivado Basics * Добавление картинки в руководство по созданию проекта * Исправление ссылок в анализе rtl * Обновление изображения в sequential logic * Исправление ссылок в bug hunting * Исправление ссылок * Рефактор руководства по прошивке ПЛИС * Mass update * Update fig_10 * Restore fig_02
47 lines
4.5 KiB
Markdown
47 lines
4.5 KiB
Markdown
# Проверка работы riscv_unit на ПЛИС
|
||
|
||
После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС.
|
||
|
||
Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/07.%20Program%20and%20debug.md).
|
||
|
||
На _рис. 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](../../05.%20Main%20decoder/decoder_pkg.sv). Если определенный прототипом тип операции является нелегальным, то на семисегментных индикаторах отображается `ILL` (от **ill**egal).
|
||
|
||
Соответствие операции ее отображению на семисегментных индикаторах представлено на _рис. 2_:
|
||
|
||

|
||
|
||
_Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах._
|
||
|
||
## Демонстрационная программа
|
||
|
||
В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#задание](../README.md#задание).
|