mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
59 lines
5.6 KiB
Markdown
59 lines
5.6 KiB
Markdown
# Лабораторная работа №11 "Интеграция подсистемы прерывания"
|
||
|
||
После реализации подсистемы прерывания, её необходимо интегрировать в процессорную систему. Для этого необходимо обновить модуль `processor_core` по схеме, приведённой на _рис. 1_:
|
||
|
||

|
||
|
||
_Рисунок 1. Интеграция подсистемы прерываний в ядро процессора._
|
||
|
||
<details>
|
||
<summary>Схема без выделения новых частей относительно старой версии модуля</summary>
|
||
|
||

|
||
|
||
_Рисунок 2. Схема без выделения новых частей относительно старой версии модуля._
|
||
|
||
</details>
|
||
|
||
## Задание
|
||
|
||
Интегрировать модули `csr_controller` и `irq_controller` в модуль `processor_core`. При этом у модуля `processor_core` будет обновлённый прототип (поскольку добавился вход `irq_req_i` и `irq_ret_o`):
|
||
|
||
```Verilog
|
||
module processor_core (
|
||
input logic clk_i,
|
||
input logic rst_i,
|
||
|
||
input logic stall_i,
|
||
input logic [31:0] instr_i,
|
||
input logic [31:0] mem_rd_i,
|
||
input logic irq_req_i,
|
||
|
||
output logic [31:0] instr_addr_o,
|
||
output logic [31:0] mem_addr_o,
|
||
output logic [ 2:0] mem_size_o,
|
||
output logic mem_req_o,
|
||
output logic mem_we_o,
|
||
output logic [31:0] mem_wd_o,
|
||
output logic irq_ret_o
|
||
);
|
||
```
|
||
|
||
Обновите код создания экземпляра модуля `processor_core` в модуле `processor_system` с учётом появившихся портов. Для этого создайте провода `irq_req` и `irq_ret` и подключите их к соответствующим входам `processor_core`. Другим концом эти провода не будут пока что ни к чему подключены — это изменится в [ЛР№13](../13.%20Peripheral%20units/).
|
||
|
||
В случае, если вы захотите расширить количество источников прерывания, вы можете выполнить вспомогательную [ЛР№12](../12.%20Daisy%20chain).
|
||
|
||
## Порядок выполнения работы
|
||
|
||
1. Замените файл `program.mem` в `Design Sources` проекта новым файлом [program.mem](program.mem), приложенном в данной лабораторной работе. Данный файл содержит программу из _листинга 1_ ЛР№10.
|
||
2. Интегрируйте модули `csr_controller` и `irq_controller` в модуль `processor_core`.
|
||
1. Обратите внимание, что что в модуле `processor_core` появились новые входные и выходные сигналы: `irq_req_i` и `irq_ret_o`. Эти порты должны быть использованы при подключении `processor_core` в модуле `processor_system`.
|
||
1. Ко входу `irq_req_i` должен быть подключён провод `irq_req`, другой конец которого пока не будет ни к чему подключён.
|
||
2. К выходу `irq_ret_o` необходимо подключить провод `irq_ret`, который также пока не будет использован.
|
||
3. Имена проводов `irq_req` и `irq_ret` должны быть именно такими, т.к. используются верификационным окружением при проверке данной лабораторной работы.
|
||
2. Обратите внимание на то, что появилась константа `imm_Z` — это единственная константа ядра, которая расширяется нулями, а не знаковым битом.
|
||
3. Проверьте модуль с помощью верификационного окружения, представленного в файле [lab_11.tb_processor_system.sv](lab_11.tb_processor_system.sv).
|
||
1. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня в `Simulation Sources`.
|
||
2. Как и в случае с проверкой процессора архитектуры CYBERcobra, вам не будет сказано пройден тест или нет. Вам необходимо самостоятельно, такт за тактом проверить что процессор правильно выполняет [описанные](../10.%20Interrupt%20subsystem#пример-обработки-перехвата) в _Листинге 1_ ЛР№10 инструкции (см. порядок выполнения задания ЛР№4). Для этого, необходимо сперва самостоятельно рассчитать что именно должна сделать данная инструкция, а потом проверить что процессор сделал именно это.
|
||
4. Данная лабораторная работа не предполагает проверки в ПЛИС.
|