From 6017513b7a4f529321ffc52927791e05afdaa22b Mon Sep 17 00:00:00 2001 From: Vladislav Date: Tue, 28 Nov 2023 10:54:47 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A010.=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B8=D1=81=D1=83=D0=BD=D0=BA=D0=BE=D0=B2=20=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/10. Interrupt subsystem/README.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index 90f36aa5..2d9fd973 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`) все последующие запросы на прерывание игнорируются. За это отвечают вентили И и ИЛИ-НЕ в правом верхнем углу схемы.