Files
APS/Labs/07. Datapath/board files
Andrei Solodovnikov 85883858ac Переработка лабораторных работ, связанных с памятью (#89)
* Переработка лабораторных работ, связанных с памятью

Существенно переработаны ЛР3 и ЛР7:

Из ЛР3 убрано задание реализовать память данных. Эта память
использовалась только студентами ИВТ и только в рамках одной лабы.
В итоге использовалась готовая память, и ничего не мешает использовать
ее с самого начала.

Задание по реализации памяти инструкций также претерпело изменения.
Теперь код памяти инструкций предоставляется сразу. Это объясняется тем,
что код модуля состоит в общем-то из 4х строк, на которые тратится
слишком много времени (с учетом добавления тестбенча и проверок).
Кроме того, использование готового кода позволяет дать модуль чуть
посложнее (с параметризацией размера).

По итогу правок, третья лабораторная работа превращается чисто в
лабораторную по написанию регистрового файла, что должно положительно
сказаться на кривой сложности лаб. После второй лабы происходит слишком
резкий скачок в объемах работы.

Соответственно, в связи с тем, что память данных больше не делается на
третьей лабе, дополнительная ЛР по памяти данных с byte enable
необходимо перенести до реализации тракта данных.

* ЛР3, 5, 6. Правки из ревью

* ЛР7. Добавление иллюстраций
2024-07-02 10:24:41 +03:00
..

Проверка работы riscv_unit на ПЛИС

После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС.

Инструкция по реализации прототипа описана здесь.

На рис. 1 представлена схема прототипа в ПЛИС.

../../../.pic/Labs/board%20files/nexys_riscv_unit_structure.drawio.svg

Рисунок 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:

'../../../.pic/Labs/board%20files/nexys_riscv_unit_operations.drawio.svg'

Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах.

Демонстрационная программа

В качестве демонстрационной программы, предлагается использовать program.mem. Описание ее работы можно прочитать в разделе #задание.