mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
ЛР7. Дополнение порядка выполнения задания
This commit is contained in:
@@ -44,12 +44,12 @@ endmodule
|
|||||||
|
|
||||||
_Рисунок 1. Микроархитектура ядра процессора RISC-V._
|
_Рисунок 1. Микроархитектура ядра процессора RISC-V._
|
||||||
|
|
||||||
Предложенная микроархитектура похожа на микроархитектуру процессора `CYBERcobra 3000 Pro 2.0` из прошлой лабораторной, имеет схожую структуру, с некоторыми изменениями.
|
Предложенная микроархитектура имеет схожую структуру c процессором `CYBERcobra 3000 Pro 2.0` из [ЛР№4](../04.%20Primitive%20programmable%20device/), с некоторыми изменениями.
|
||||||
|
|
||||||
В первую очередь изменились входы и выходы процессора:
|
В первую очередь изменились входы и выходы процессора:
|
||||||
|
|
||||||
- память инструкций вынесена наружу процессора, таким образом, у процессора появляются входы и выходы: `instr_addr_o` и `instr_i`;
|
- память инструкций вынесена наружу процессора, таким образом, у процессора появляются входы и выходы: `instr_addr_o` и `instr_i`;
|
||||||
- помимо прочего, у модуля появились сигналы интерфейса памяти данных:
|
- помимо прочего, у модуля появились сигналы интерфейса памяти данных, реализованной в [ЛР№6](../06.%20Main%20memory/):
|
||||||
- `mem_addr_o` — адрес внешней памяти;
|
- `mem_addr_o` — адрес внешней памяти;
|
||||||
- `mem_req_o` — запрос на обращение во внешнюю память;
|
- `mem_req_o` — запрос на обращение во внешнюю память;
|
||||||
- `mem_size_o` — размер данных при обращении в память;
|
- `mem_size_o` — размер данных при обращении в память;
|
||||||
@@ -63,7 +63,7 @@ _Рисунок 1. Микроархитектура ядра процессор
|
|||||||
|
|
||||||
Константы `I`, `U`, `S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие что именно будет подаваться на АЛУ.
|
Константы `I`, `U`, `S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие что именно будет подаваться на АЛУ.
|
||||||
|
|
||||||
Обратите внимание на константу `imm_U`. В отличие от всех остальных констант, она не знакорасширяется, вместо этого к ней приклеивается справа 12 нулевых бит.
|
Обратите внимание на константу `imm_U`. В отличие от всех остальных констант, она не знакорасширяется, вместо этого к ней "приклеивается" справа 12 нулевых бит.
|
||||||
|
|
||||||
Константы `B` и `J` используются для условного и безусловного перехода (в киберкобре для этого использовалась одна константа `offset`).
|
Константы `B` и `J` используются для условного и безусловного перехода (в киберкобре для этого использовалась одна константа `offset`).
|
||||||
|
|
||||||
@@ -198,14 +198,19 @@ _Листинг 2. Программа из Листинга 1, представ
|
|||||||
1. Процесс реализации модуля очень похож на процесс описания модуля cybercobra, однако теперь появляется:
|
1. Процесс реализации модуля очень похож на процесс описания модуля cybercobra, однако теперь появляется:
|
||||||
1. декодер
|
1. декодер
|
||||||
2. дополнительные мультиплексоры и знакорасширители.
|
2. дополнительные мультиплексоры и знакорасширители.
|
||||||
|
2. Сперва рекомендуется создать все провода, которые будут подключены к входам и выходам каждого модуля на схеме.
|
||||||
|
3. Затем необходимо создать экземпляры модулей.
|
||||||
|
4. Также необходимо создать 32-разрядные константы I, U, S, B и J-типа и программный счетчик.
|
||||||
|
5. После необходимо описать логику, управляющую созданными в п. 2.1 проводами.
|
||||||
|
6. В конце останется описать логику работы программного счетчика.
|
||||||
3. Создайте в проекте новый `SystemVerilog`-файл `riscv_unit.sv` и опишите в нем модуль `riscv_unit`, объединяющий ядро процессора (`riscv_core`) с памятями инструкция и данных.
|
3. Создайте в проекте новый `SystemVerilog`-файл `riscv_unit.sv` и опишите в нем модуль `riscv_unit`, объединяющий ядро процессора (`riscv_core`) с памятями инструкция и данных.
|
||||||
1. **При создании объекта модуля `riscv_core` в модуле `riscv_unit` вы должны использовать имя сущности `core` (т.е. создать объект в виде: `riscv_core core(...`)**
|
1. **При создании объекта модуля `riscv_core` в модуле `riscv_unit` вы должны использовать имя сущности `core` (т.е. создать объект в виде: `riscv_core core(...`)**.
|
||||||
3. После описания модуля, его необходимо проверить с помощью тестового окружения.
|
3. После описания модуля, его необходимо проверить с помощью тестового окружения.
|
||||||
1. Тестовое окружение находится [`здесь`](tb_riscv_unit.sv).
|
1. Тестовое окружение находится [`здесь`](tb_riscv_unit.sv).
|
||||||
2. Программа, которой необходимо проинициализировать память инструкций находится в файле [`program.mem`](program.mem).
|
2. Программа, которой необходимо проинициализировать память инструкций находится в файле [`program.mem`](program.mem).
|
||||||
3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||||
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
|
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
|
||||||
5. **Во время симуляции убедитесь, что в логе есть сообщение о завершении теста!**
|
5. **По завершению симуляции убедитесь, что в логе есть сообщение о завершении теста!**
|
||||||
6. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вы должны сами, такт за тактом проверить что процессор правильно выполняет описанные в _Листинге 1_ инструкции. Для этого, необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это.
|
6. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вы должны сами, такт за тактом проверить что процессор правильно выполняет описанные в _Листинге 1_ инструкции. Для этого, необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это.
|
||||||
7. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле.
|
7. Вполне возможно, что после первого запуска вы столкнетесь с сообщениями о множестве ошибок. Вам необходимо [исследовать](../../Vivado%20Basics/Debug%20manual.md) эти ошибки на временной диаграмме и исправить их в вашем модуле.
|
||||||
4. Проверьте работоспособность вашей цифровой схемы в ПЛИС. Для этого:
|
4. Проверьте работоспособность вашей цифровой схемы в ПЛИС. Для этого:
|
||||||
@@ -215,6 +220,7 @@ _Листинг 2. Программа из Листинга 1, представ
|
|||||||
2. Выберите `nexys_riscv_unit` в качестве модуля верхнего уровня (`top-level`).
|
2. Выберите `nexys_riscv_unit` в качестве модуля верхнего уровня (`top-level`).
|
||||||
3. Выполните генерацию битстрима и сконфигурируйте ПЛИС. Для этого воспользуйтесь [следующей инструкцией](../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md).
|
3. Выполните генерацию битстрима и сконфигурируйте ПЛИС. Для этого воспользуйтесь [следующей инструкцией](../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md).
|
||||||
4. Описание логики работы модуля верхнего уровня и связи периферии ПЛИС с реализованным модулем находится в папке [`board files`](https://github.com/MPSU/APS/tree/master/Labs/07.%20Datapath/board%20files).
|
4. Описание логики работы модуля верхнего уровня и связи периферии ПЛИС с реализованным модулем находится в папке [`board files`](https://github.com/MPSU/APS/tree/master/Labs/07.%20Datapath/board%20files).
|
||||||
|
5. После всех проверок вы можете загрузить ваше индивидуальное задание, написанное на языке ассемблера RISC-V чтобы проверить, что ваш процессор вычисляет корректный результат.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user