Удержание регистра адреса RA
Одиним из случаев приостановки работы АЛУ и микропрограммы является удержание регистра адреса RA.
Регистра RA содержит адрес, выставляемый на шину AD в цикле чтения/записи. Ввиду того, что этот реигстр не буферизирован, а транслируется на шину напрямую, он требует защиты от перезаписи в то время, пока адрес удерживается на шине AD. За защиту RA от перезаписи отвечает сигнал RA_HOLD.
Работа АЛУ с регистром RA отличается от работы с другими регистрами следующими особенностями:
1. Регистр RA может обновлятся не только в конце цикла АЛУ (по WR2), сохраняя результат математическо-логической операции, но и в самом начале цикла АЛУ (по ALU_WR). Такая возможность позволяет более удобно и быстро реализовывать постинкрементные режимы адресации, когда одна операция АЛУ сперва выдает исполнительный адрес блоку ввода-вывода, а затем инкрементирует адрес, в то время, как блок ввода-вывода уже работает.
2. Каждая запись в регистр RA сразу же запрашивает цикл ввода-вывода. И если блок ввода-вывода свободен, начинается обмен.
3. Как только запрошен цикл ввода-вывода, регистр RA блокируется сигналом RA_HOLD до тех, пор, пока не будет получен ответ AR (подтверждение адреса), с задержкой до 2-х тактов (по заднему фронту сигнала RTA). Если RA заблокирован, то любой следующий цикл АЛУ/микрокоманды, обновляющий RA, будет приостановлен до тех пор, пока не будет снят сигнал RA_HOLD. Цикл, не обновляющий RA, будет работать без задержки.
На графике приведены примеры блокировки регистра RA.
1. Слева RA обновляется в начале цикла АЛУ (по ALU_WR). Задержка следующей микрокоманды 2 такта.
2. Справа RA обновляется в конце цикла АЛУ (по WR2). Задержка следующей микрокоманды 4 такта.
https://pic.maxiol.com/images2/16054...1951043.ra.png
p.s.: Предыдущий пост тоже обновлен и дополнен.
Полная карта аппаратных прерываний ВМ2
Расшифровал и составикл карту аппаратных прерываний.
Справа-налево:
1. Номер записи в ПЛМ прерываний
2. Группа условий для срабатывания прерывания
3. Служебные флаги
4. Вектор и описание, приоритет в квадратных скобках
Комбинации поля RI:
000 - режим WAIT
001 - нет запроса на прерывание
100 - прерывание в режиме USER
110 - прерывание в режиме HALT
111 - начальный пуск
Примечание: TOVF - зависание, TOVF2 - двойное зависание
Замечание: Во всех случаях, если не указано иное, AC0_ECHO=1
Код:
[0]
Подготовка начального пуска?
10: AC0_ECHO=0 ALCO_FALL=0 VECID=0x0, RI=000 AC0 WAIT?
Начальный пуск
1: AC0_ECHO=0 ALCO_FALL=1 VECID=0xF, RI=111 ACLO_ACK VEC=0x00 (Начальный пуск)
[1.0]
Зависание при приеме АВП
6: TOVF=1 VEC=1 VECID=0x4, RI=110, TOVF_ACK VEC=0xBC (Зависание при приеме АВП)
[1.1]
Двойное зависание
2: TOVF=1 VEC=0 TOVF2=1 VECID=0xC, RI=110, TOVF_ACK VEC=0x7C (Двойное зависание)
Зависание
0: TOVF=1 VEC=0 TOVF2=0 VECID=0xD, RI=100, TOVF_ACK VEC=0x04 (Зависание в режиме USER)
0,18: TOVF=1 VEC=0 TOVF2=0 PSW8=1 VECID=0xD, RI=110, TOVF_ACK VEC=0x04 (Зависание в режиме HALT)
[3]
Прерывание по T-разряду
8: TOVF=0 WAIT/TBIT=01 VECID=0xA, RI=100 VEC=0x0C (T-разряд)
8,12: TOVF=0 WAIT/TBIT=01 RTT=1 VECID=0xA, RI=001 VEC=0x0C (Т-разряд + RTT) (Нет прерывания?)
[4]
Сигнал ACLO в режиме HALT с запрещенными прерываниями
13: TOVF=0 ALCO_RISE=1 PSW87=11 WAIT/TBIT=00 VECID=0x0, RI=001 Нет прерывания
17: TOVF=0 ALCO_RISE=1 PSW87=11 WAIT=1 VECID=0x0, RI=000 WAIT
Сигнал АCLO не в режиме HALT с запрещенными прерываниями
15,22: TOVF=0 ALCO_RISE=1 PSW87!=11 WAIT/TBIT!=01 VECID=0x0, RI=100, ACLO_ACK VEC=0x14 (ACLO)
[5]
Прерывание по сигналу HALT в режиме USER
7,9: TOVF=0 ALCO_RISE=0 HALT=1 PSW8=0 WAIT/TBIT!=01 VECID=0x2, RI=110 VEC=0x78 (HALT)
Прерывание по сигналу HALT в режиме HALT
11: TOVF=0 ALCO_RISE=0 HALT=1 PSW8=1 WAIT/TBIT=00 VECID=0x0, RI=001 Нет прерывания
21: TOVF=0 ALCO_RISE=0 HALT=1 PSW8=1 WAIT=1 VECID=0x0, RI=000 WAIT
[5.1]
Прерывания запрещены, не обрабатывать EVNT и VIRQ
4: TOVF=0 ALCO_RISE=0 HALT=0 PSW7=1 WAIT/TBIT=00 VECID=0x0, RI=001 Нет прерывания
16: TOVF=0 ALCO_RISE=0 HALT=0 PSW7=1 WAIT=1 VECID=0x0, RI=000 WAIT
[6]
Прерывание по событию EVNT
3,5: TOVF=0 ALCO_RISE=0 HALT=0 EVNT_RISE=1 PSW7=0 WAIT/TBIT!=01 VECID=0x3, RI=100 EVNT_ACK VEC=0x40 (EVNT)
[7]
Векторное прерывание VIRQ
19,23: TOVF=0 ALCO_RISE=0 HALT=0 EVNT_RISE=0 VIRQ=1 PSW7=0 WAIT/TBIT!=01 VECID=0x0, RI=101
[8]
Всякий режим, когда нет ни одного запроса прерывания
14: TOVF=0 ALCO_RISE=0 HALT=0 EVNT_RISE=0 VIRQ=0 WAIT/TBIT=00 VECID=0x0, RI=001 Нет прерывания
20: TOVF=0 ALCO_RISE=0 HALT=0 EVNT_RISE=0 VIRQ=0 WAIT=1 VECID=0x0, RI=000 WAIT
Модификатор выборки микрокоманды RI
Модификатор выборки микрокоманды RI.
Трехбитный модификатор выборки микрокоманды RI имеет многофункциональное назначение, в зависимости от выбранного режима.
1. Режим выборки инструкции (стробируется сигналом IR_STB). Инициируется сигналом SET_CEND (PL26=1, PL25=0, /NA=0), и используется только в одной микрокоманде с адресом 0x01.
RI0 - поле dd инструкции использует R7 (любая адресация, с использованием R7)
RI1 - HALT-режим (PSW[8]=1)
RI2 - поле ss модифицирует R7 (адресация (R7), (R7)+, -(R7), @(R7)+, @-(R7), X(Rn), @X(Rn))
2. Режим разбора запроса аппаратного прерывания (стробируется сигналом PLI_ACK). Инициируется сигналом PLI_REQ (PL27=0, /NA1=0). Обычно инициируется в последней микрокоманде каждой инструкции, перед переходом на микрокоманду 0x01.
RI2.RI1.RI0:
000 - режим WAIT
001 - нет запроса на прерывание
100 - прерывание в режиме USER
110 - прерывание в режиме HALT
111 - начальный пуск
3. Режим разбора запроса программного прерывания (стробируется сигналом PI_STB). Инициируется, если PLM0=1. Используется в инструкциях программных прерываний.
нет описания
Замечание. В режиме (1) RI0 может только сбрасываться, а RI1 и RI2 только устанавливаться. Потому микрокоманда выборки инструкции чаще всего вызывается после микрокоманды инициирующей разбор запроса прерывания, со входящим значением RI равным 001.
p.s.: Предыдущие статьи тоже обновились.