Skip to content

Commit

Permalink
Merge pull request #27 from fhideous/master
Browse files Browse the repository at this point in the history
ЛР10. Переименование рисунков и небольшие предложения по тексту
  • Loading branch information
HepoH3 authored Nov 28, 2023
2 parents 19bc1af + bdf824c commit 5c6554d
Showing 1 changed file with 11 additions and 13 deletions.
24 changes: 11 additions & 13 deletions Labs/10. Interrupt subsystem/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,25 +179,25 @@ _Таблица 5. Кодирование причины перехвата в

## Структура разрабатываемых устройств

В рамках лабораторной работы необходимо реализовать поддержку обработки аппаратных прерываний. Для этого необходимо реализовать для два аппаратных блока: блок управления регистрами контроля и статуса (**CSR-контроллер**) и контроллер прерываний **(Interrupt Controller)**.
В рамках лабораторной работы необходимо реализовать поддержку обработки аппаратных прерываний. Для этого необходимо реализовать два модуля: блок управления регистрами контроля и статуса (**CSR-контроллер**) и контроллер прерываний **(Interrupt Controller)**.

Блок управления регистрами контроля и статуса позволяет добавить особые **архитектурные регистры**, которые будут использоваться нами при обработке прерываний и исключений.

Контроллер прерываний позволит обрабатывать входящие запросы на прерывания: маски́ровать их, выбирать один запрос из нескольких, а так же игнорировать запросы во время обработки текущего прерывания.

![../../.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**.

Expand All @@ -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`) все последующие запросы на прерывание игнорируются. За это отвечают вентили И и ИЛИ-НЕ в правом верхнем углу схемы.

Expand Down

0 comments on commit 5c6554d

Please sign in to comment.