diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index 90f36aa5..bc4ef856 100644 --- a/Labs/10. Interrupt subsystem/README.md +++ b/Labs/10. Interrupt subsystem/README.md @@ -179,7 +179,7 @@ _Таблица 5. Кодирование причины перехвата в ## Структура разрабатываемых устройств -В рамках лабораторной работы необходимо реализовать поддержку обработки аппаратных прерываний. Для этого необходимо реализовать для два аппаратных блока: блок управления регистрами контроля и статуса (**CSR-контроллер**) и контроллер прерываний **(Interrupt Controller)**. +В рамках лабораторной работы необходимо реализовать поддержку обработки аппаратных прерываний. Для этого необходимо реализовать два модуля: блок управления регистрами контроля и статуса (**CSR-контроллер**) и контроллер прерываний **(Interrupt Controller)**. Блок управления регистрами контроля и статуса позволяет добавить особые **архитектурные регистры**, которые будут использоваться нами при обработке прерываний и исключений. @@ -187,17 +187,17 @@ _Таблица 5. Кодирование причины перехвата в ![../../.pic/Labs/lab_10_irq/fig_03.drawio.png](../../.pic/Labs/lab_10_irq/fig_03.drawio.png) -_Рисунок 2. Место разрабатываемых блоков в структуре процессора._ +_Рисунок 3. Место разрабатываемых блоков в структуре процессора._ Пока что вам нужно реализовать только блоки **irq controller** и **control status registers**, а не саму схему, приведенную выше. ### CSR-контроллер -Рассмотрим один из возможных вариантов организации блока **Control and Status Registers**. Основную часть схемы занимают мультиплексор, подающий на выход **read_data_o** значение регистра, соответствующего пришедшему адресу, и демультиплексор маршрутизирующий сигнал разрешения на запись **write_enable_i** (en) на тот же регистр. +Рассмотрим один из возможных вариантов организации блока **Control and Status Registers**. Основная работа по описанию схемы блока состоит в описании мультиплексора и демультиплексора. Мультиплексор подает на выход **read_data_o** значение регистра, который соответствует пришедшему адресу. В свою же очередь, демультиплексор маршрутизирует сигнал разрешения на запись **write_enable_i** (en) на тот же регистр. ![../../.pic/Labs/lab_10_irq/fig_04.drawio.png](../../.pic/Labs/lab_10_irq/fig_04.drawio.png) -_Рисунок 3. Структурная схема контроллера CS-регистров_ +_Рисунок 4. Структурная схема контроллера CS-регистров_ 3-битный вход **opcode_i** определяет операцию, которая будет производиться над содержимым CSR по адресу **addr_i**. @@ -207,20 +207,18 @@ _Рисунок 3. Структурная схема контроллера CS- ### Контроллер прерываний -Рассмотрим один из возможных способов реализации простейшего контроллера прерываний, представленного на _рис. 4_. +Рассмотрим один из возможных способов реализации простейшего контроллера прерываний, представленного на _рис. 5_. ![../../.pic/Labs/lab_10_irq/fig_05.drawio.png](../../.pic/Labs/lab_10_irq/fig_05.drawio.png) -_Рисунок 4. Структурная схема контроллера прерываний_ +_Рисунок 5. Структурная схема контроллера прерываний_ -Несмотря на простоту схемы, данный контроллер состоит из: +Контроллер состоит из логики: -- логики обработки вложенных прерываний, частью которой являются регистры отслеживания обработки прерывания и исключения (`irq_h` и `exc_h` соответственно), -- логики установки и сброса этих регистров (которая вместе с этими регистрами заключена в штрихованные прямоугольники), -- логики приоритета исключений над прерываниями, -- а так же логики маскирования запросов на прерывание. - -Разберем каждую из этих частей. +- обработки вложенных прерываний, частью которой являются регистры отслеживания обработки прерывания и исключения (`irq_h` и `exc_h` соответственно), +- установки и сброса этих регистров (которая вместе с этими регистрами заключена в штрихованные прямоугольники), +- приоритета исключений над прерываниями, +- маскирования запросов на прерывание. Регистры отслеживания обработки прерывания и исключения нужны для того, чтобы мы могли понимать, что в данный момент процессор уже выполняет обработку прерывания / исключения. В такие моменты (если любой из регистров `exc_h`/`irq_h` содержит значение `1`) все последующие запросы на прерывание игнорируются. За это отвечают вентили И и ИЛИ-НЕ в правом верхнем углу схемы.