:)
Вид для печати
:)
@Alex_K, @Vslav, интересную особенность заметил в микрокоде ВМ2, но пока подробно в этом не разбирался.
В режимах HALT и USER по разному анализируется ситуации при выборке следующей команды, когда адресация регистра-источника модифицирует R7, и когда регистр приемник использует R7. Хотя, казалось бы, какая разница, какой режим, HALT или USER.
Это при выборке следующей команды или предвыборке следующей команды? Какие типы адресаций - 67 и 77? Если используется 67 или 77, то по идее процессор может использовать предвыбранную команду в качестве индексного значения для адресации. Да, и в режиме HALT с запрещёнными прерываниями CPC и CPSW не обновляются.
А, вот, наверное, с этим и связано.
- - - Добавлено - - -
Пока еще не разбирался.
Но там два условия, обозначенных признаками RI0 и RI2:
RI0 - dd использует R7 (любая адресация, с использованием R7)
RI2 - ss модифицирует R7 (любая адресация по (R7), либо индексная адресация)
T.e. ss = (R7), (R7)+, -(R7), @(R7)+, @-(R7), X(Rn), @X(Rn)
Коротко об интересном.
В процессоре ВМ2 дофигищи 16-битных регистров. Гораздо больше, чем доступно посредством инструкций PDP-11.
Если бы микрокод был другим, то, я думаю, процессор мог быть гораздо интереснее и богаче по возможностям.
Интересно, что на шину X АЛУ может выставляться один из 16 регистров,
А на шину Y АЛУ может выставляться один из 32 регистров/констатнт/частей слова инструкции:
В списке нет, например, PC2, который может читаться только на шину X АЛУ.Код:0 - R0
1 - R1
2 - R2
3 - R3
4 - R4
5 - R5
6 - R6
7 - PC1
8 - EA1
9 - EA2
10 - нет регистра
11 - RS
12 - PSW
13 - ACC
14 - RA
15 - BRD
16 - IR & 0x000F
17 - IR & 0x003F
18 - 0x0001 (если ALT_CNST=0 (байтовый инкремент))), 0x0002 (если ALT_CNST=1 (словный инкремент)) (константа автоинкремента при формировании исполнительного адреса)
19 - 0x0002
20 - 0x0000
21 - 0x0004
22 - CPSW
23 - BIR
24 - IR & 0x00FF с расширением знака до 16 бит
25 - 0x0000 (если PSW3=0), 0xFFFF (если PSW3=1) (флаг N)
26 - PSW0 & 0x0001 (флга C)
27 - 0x0000
28 - выбор константы вектора прерывания
29 - 0x0014
30 - PC
31 - PC
- - - Добавлено - - -Код:0 - R0
1 - R1
2 - R2
3 - R3
4 - R4
5 - R5
6 - R6
7 - PC1 (если RA_FR1 = 0) или PC2 (если RA_FR1 = 1)
8 - EA1
9 - EA2
10 - нет регистра
11 - RS
12 - PSW
13 - ACC
14 - нет регистра
15 - BRD
Кроме того, есть запись результата обратно в регистр, который выставлялся на X или на Y:
Обратная запись для X:
Код:0 - R0
1 - R1
2 - R2
3 - R3
4 - R4
5 - R5
6 - R6
7 - PC2
8 - EA1
9 - EA2
10 - EA_CTLD (счетчик для расширенной арифметики)
11 - RS
12 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW.
13 - ACC
14 - нет регистра
15 - BRD (если QD_SWAP=1, то QSWP=1) (обмен байт при обращении по нечетному адресу)
Обратная запись для Y:
Код:0 - R0
1 - R1
2 - R2
3 - R3
4 - R4
5 - R5
6 - R6
7 - PC2
8 - EA1
9 - EA2
10 - EA_CTLD (счетчик для расширенной арифметики)
11 - RS
12 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW.
13 - ACC
14 - нет регистра
15 - BRD (если QD_SWAP=1, то QSWP=1) (обмен байт при обращении по нечетному адресу)
16 - R0
17 - R1
18 - R2
19 - R3
20 - R4
21 - R5
22 - CPSW
23 - R7
24 - EA1
25 - EA2
26 - EA_CTLD (счетчик для расширенной арифметики)
27 - RS
28 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW.
29 - ACC
30 - PC
31 - PC
Краткое описание ядра и основного цикла процессора 1801ВМ2.
Описание составлено исключительно по оригинальной потранзисторной схеме @Vslav'a, за которую ему огромная благодарность.
Все сигналы имеют те же наименования, что и на транзисторной схеме Vslav'a. За исключением сигналов NA0..NA5 (адрес следующей микрокоманды), и сигналов PL0..PL36 (выход ПЛМ микрокоманд), которые при описании микрокоманды и адреса микрокоманды приведены в инверсном виде, что более точно отражает суть информации, заложенной в них. Кроме того, добавлено некоторое количество сигналов, не именованых на схеме Vslav'а.
В данном описании будет рассмотрено ядро процессора на примере простейшего цикла выборки команды типа регистр-регистр. Прерывания, таймауты шины и прочие тонкости пока что не рассматриваются.
Основным времязадающим и управляющим узлом процессора является микропрограммный автомат, который непосредственно управляет АЛУ и блоком ввода-вывода. Управление АЛУ синхронное, т.е. можно сказать, что АЛУ является частью микропрограммного автомата. Управление блоком ввода-вывода асинхронное.
Каждая инструкция процессора выполняется как минимум за две микрокоманды. Первой из которых всегда является команда выборки и преддекодирования инструкции. Цикл микрокоманды равен 4-м тактам входной частоты процессора CLCI. В дальнейшем тактом будет называться один цикл CLCI, а полутактом - половина цикла CLCI. Цикл АЛУ в большинстве случаев также выполняется за 4 такта синхронно с микророграммным автоматом. АЛУ используется как для выполнения математическо-логических операций, так и для вычисления исполнительного адреса. Цикл чтения шины AD блока вввода-вывода, при отсутствии задержек доступа к внешнему устройству, выполняется за 8 тактов. Исключение составляет недокументированный режим чтения шины с опережающим RPLY, который выполняется за 6 тактов, и рассматриваться здесь не будет.
Для выполнения простейшей инструкции процессора требуется две микрокоманды (8 тактов), и один один цикл ввода (8 тактов). Блок ввода-вывода работает в параллель с микропрограммным автоматом, поэтому общее время выполнения простейшей инструкции также составляет 8 тактов.
Микропрограммный автомат может приостанавливаться в некоторых случаях. Чаще всего это происходит, когда буферный регистр инструкции (BIR) еще не содержит действительных данных. Выполнение микропрограммы приостанавливается, пока блок ввода-вывода не прочитает с шины слово инструкции и не обновит BIR.
Микропрограмма находится в ПЛМ микрокоманд, и состоит из 198-ми записей, которые, в свою очередь, условно обьединены примерно в 64 микрокоманды. Та или иная запись выбирается в зависимости от условий, передаваемых в ПЛМ в виде адреса инструкции (16 бит), получаемого с преддекодера адреса микрокоманды (6 бит) и двух трехбитных модификаторов RI0,RI1,RI2 и IX0,IX1,IX2. Преддекодер для упрощения пока что не рассматриваем.
В зависимости от входных данных, выбирается одна или несколько записей ПЛМ, которые обьединяются по логическому ИЛИ (OR), и поступают на выход матрицы в виде сигналов PL0..PL36. В сигналах PL закодированы следующие данные:
1. Номер регистра для шины X АЛУ.
2. Номер регистра или константы для шины Y АЛУ.
3. Математическо-логическая функция для АЛУ.
4. Функция сдвига для АЛУ.
5. Тип операции ввода-вывода.
6. Группа модификаторов, влияющих на выполнение команды.
Трехбитный модификатор выборки микрокоманды RI имеет многофункциональное назначение. В микрокоманде выборки слова инструкции значение следующее:
RI0 - поле dd инструкции использует R7 (любая адресация, с использованием R7)
RI1 - HALT-режим (PSW[8]=1)
RI2 - поле ss модифицирует R7 (адресация (R7), (R7)+, -(R7), @(R7)+, @-(R7), X(Rn), @X(Rn))
Другие значения поля RI будут рассмотрены в отдельной главе.
Трехбитный модификатор выборки микрокоманды IX может меняться для каждого шага микрокоманды и означает:
IX0 - идентификатор словной двухоперандной инструкции записи
IX1 - двухоперандная инструкция использующя R7, выполнено условие условного перехода, или RCMD (требует уточнения)
IX2 - некоторые двухоперандные инструкции
Кроме того, блок преддекодера выдает следующие сигналы, влияющие на исполнение микрокоманд:
DC_RTT - инструкция RTT
DC_FB - инструкция работает с байтом, а не словом
DC_MOP0 и DC_MOP1 - кодирует тип цикла инструкции:
Часть сигналов PL, получаемых с выхода ПЛМ микрокоманд используется для выбора режима работы микрокоманды. Большинство же запоминаются в регистре слова микрокоманды (REG_MCMD_WORD), и доступны в виде PLM0..PLM36. Часть сигналов инвертируется.Код:DC_MOP1 DC_MOP0 Операция ввода-вывода Цикл памяти
0 0 IO_RD, IO_IN, IO_WR RMW
0 1 IO_WR W
1 0 IO_RD, IO_IN R
1 1 NOWRA -
Диаграммы работы микропрограммного автомата, АЛУ и блока ввода-вывода на примере выполнения простейшей инструкции типа регистр-регистр.
Слева пример с нулевой задержкой памяти, справа пример с задержкой памяти на 2 такта:
https://pic.maxiol.com/images2/16053...51951043.2.png
Для каждой инструкции выполняется микрокоманда с адресом 0x01 (выборка инструкции), и микрокоманда исполнения самой инструкции.
Для наглядности приведен только один цикл АЛУ, и один цикл блока ввода-вывода.
Код:Полутакт:
7 - Готовы сигналы PL с ПЛМ микрокоманд.
Модификатор микрокоманды SET_CEND, означающий выборку следующей инструкции.
Адрес микрокоманды 0x01.
8 - Начало микрокоманды. Регистр BIR (буферный регистр инструкции) содержит действительны данные,
поэтому безо всякой задержки запускается конвейер преддекодера инструкции.
9 - Данные с преддекодера инструкций выставляются на шину PLD.
10 - Данные с преддекодера инструкций стабильны и могут быть защелкнуты в регистре инструкций.
Они содержат слово инструкции, адрес первой микрокоманды инструкции, модификаторы IX, RI.
В соответствии с микрокомандой на шину X АЛУ выдается PC2 (опережающий счетчик команд),
а на шину Y АЛУ выдается константа 0x0002.
11 - В соответствии с микрокомандой формируется операция ввода-вывода IO_RD (чтение шины AD),
IO_IN (данные предназначены для BIR), IO_RCD (сохранять данные также в BRD (буферный региср данных)
12 - RA (регистр адреса) = PC2. Запросить цикл шины IO_RD.
Блок ввода-вывода свободен, поэтому сразу начинается операция ввода.
На шину адреса выставляется регистр адреса RA, в котором содержится значение опережающего счетчика команд PC2.
13 - PC=PC1=PC2 (действие операции IO_RCD).
16 - PC2=PC2+2 (результат работы АЛУ).
Выставляется сигнал SYNC (адрес выставлен на шине).
Сразу получаем в ответ сигнал AR (подтверждение получени адреса).
В этом же полутакте начинается исполнение следующей микрокоманды, собственно и выполняющей инструкцию.
18 - Выставляется сигнал DIN (ввод информации с шины).
20 - Получено подтверждение RPLY.
22 - Данные на шине AD стабильны, и начинают записываться в регистры BIR и BRD.
24 - Начало следующей микрокоманды, извлекающей инструкцию из регистра BIR.
26 - Снимается сигнал DIN. Шина AD может быть освобождена.
28 - В ответ внешнее устройство снимает SYNC, AR и RPLY. Возможна новая операция ввода-вывода.