Процессор ЭВМ ЕС-1020. Микропрограммное управление
Введение
До появления Системы 360 все процессоры имели схемное (аппаратное) управление, т. е. каждый сигнал, управляющий ходом операций в процессоре, вырабатывался логическими схемами самого процессора на основе текущей информации о его состоянии, хранящейся в регистрах и триггерах (в частности, используя код текущей выполняемой команды). Сложность аппаратуры такого процессора прямо зависит от сложности его архитектуры, в частности, от богатства системы команд, а для изменения логики его работы (например, для изменения или расширения системы команд) требуется менять его схему.
В младших и средних моделях Системы 360 впервые было использовано микропрограммное управление. Суть его состоит в том, что управляющие сигналы не формируются аппаратурой напрямую, а извлекаются из микропрограммной памяти, технически обычно являющейся постоянным запоминающим устройством (ПЗУ). Все управляющие сигналы, извлекаемые из ПЗУ как единое целое и управляющие аппаратурой процессора в течение одного такта, называются микрокомандой, а совокупность микрокоманд, выполняемых одна за другой для достижения определённой цели (как правило, для выполнения одной команды процессора), — микропрограммой.
Микропрограммное управление позволяет резко упростить аппаратуру процессора, а значит, сделать его более дешёвым, что объясняется несколькими причинами. Во-первых, ПЗУ обычно стоит намного дешевле, чем логические схемы, реализующие аналогичные функции — даже с учётом того, что для управления выборкой микрокоманд из ПЗУ нужна аппаратура, отсутствующая в машинах со схемным управлением. Во-вторых, можно уменьшить разрядность АЛУ и информационных трактов, но реализовать сложную и «широкую» систему команд за счёт разбиения сложной обработки многоразрядных величин на несколько тактов (то же самое можно сделать и в машине со схемным управлением, но это резко увеличит сложность блока управления, что, скорей всего, сведёт на нет любые получаемые от упрощения АЛУ преимущества). В-третьих, становится проще, дешевле и быстрее процесс разработки: при обнаружении ошибок в выдаваемых управляющих сигналах надо лишь внести изменения в микропрограммную память, а не перекраивать схемы процессора. Наконец, в-четвёртых, резко упрощается возможность расширения системы команд вплоть до её полной замены: опять-таки, надо лишь поменять содержимое микропрограммной памяти.
Вместе с тем, первые годы бытовало убеждение, что микропрограммные процессоры всегда будут медленнее, чем процессоры со схемным управлением. По этой причине ранние старшие модели Системы 360 имели схемное управление, аналогичным образом обстояло дело и у нас: у ЕС-1020 и ЕС-1030 управление микропрограммное, а у ЕС-1050 — схемное. Время показало ошибочность этого убеждения: процессор с микропрограммным, а точнее, со смешанным аппаратно-микропрограммным управлением может быть столь же быстрым, как и процессор с чисто схемным управлением, поэтому в более поздних машинах пошли именно по этому пути.
В определённой степени написание микропрограммы схоже с написанием программы на языке ассемблера, однако между ними есть очень существенное различие. Машинные команды, отражением которых является язык ассемблера, привязаны к определённой архитектуре (скажем, у IA-32, ARM и Системы 360 языки ассемблера совершенно разные, поскольку это совершенно разные архитектуры), но не связаны с конкретной аппаратной реализацией этой архитектуры, поэтому программа, написанная, например, на языке ассемблера для архитектуры IA-32, будет успешно выполняться на ПК с процессорами и Intel, и AMD, причём любых — при условии, конечно, что эта программа не использует команды, реализованные в одних процессорах, но отсутствующие в других (архитектуры постепенно развиваются и расширяются). В противоположность этому, микрокоманды привязаны к конкретной аппаратной реализации и напрямую управляют действиями аппаратуры конкретной модели процессора. Кроме того, команда ассемблера обычно задаёт одно-два действия (скажем, сложить два числа, находящихся в регистрах процессора), а микрокоманда одновременно может задавать десятки различных действий, что, опять-таки, связано с особенностями аппаратуры (переслать значение из одного регистра в другой, выполнить в АЛУ такую-то операцию, сбросить тот триггер и установить этот, перейти на ту или другую микрокоманду…).
Структура блока микропрограммного управления
Структурная схема блока микропрограммного управления (БМУ) и временная диаграмма его работы приведены на рисунках.
Структура блока микропрограммного управления, скан из [1]
Временная диаграмма работы БМУ, скан из [1]
В состав БМУ входят:
постоянная память ПП, хранящая микропрограммы;
регистр микрокоманды РМК, принимающий текущую выполняемую микрокоманду из ПП и передающий её на дешифраторы полей микрокоманды, сигналы с выходов которых управляют работой процессора;
регистр адреса постоянной памяти РАПП, в который заносится адрес следующей выполняемой микрокоманды, с чего начинается её считывание из ПП;
узел занесения информации в РАПП (УЗАН РАПП), являющийся, по сути, мультиплексором, подающим на вход РАПП ту или иную информацию;
узел формирования адреса микрокоманды УФАМ, управляющий работой узла занесения;
регистры адресов возврата РВМ и РВС.
Длина микрокоманды процессора ЕС-2020 составляет 64 бита, биты РМК нумеруются слева направо — старший бит имеет номер 0, младший 63, что соответствует порядку, принятому в Системе 360. Назначение её полей будет подробно рассмотрено ниже.
Ёмкость постоянной памяти — 8192 микрокоманды; соответственно, регистр адреса содержит 13 разрядов. В отличие от подавляющего большинства других регистров процессора, биты РАПП (а также РВС и РВМ) нумеруются справа налево — номер 0 имеет младший разряд.
Постоянная память
На момент создания ЕС-1020 микросхемы ПЗУ ещё не производились. Инженеры IBM, судя по доступным документам, любили использовать так называемую конденсаторную постоянную память, создатели же ЕС ЭВМ предпочитали трансформаторную. Принцип её работы очень прост.
Как известно, переменный ток, протекающий в проводнике, порождает переменное магнитное поле, которое, в свою очередь, наводит переменный ток во всех проводниках, до которых может «дотянуться». На этом явлении электромагнитной индукции основана работа трансформатора: если через его первичную обмотку пропустить переменный ток, во вторичной обмотке тоже возникнет ток с той же частотой, а его амплитуда будет соотноситься с амплитудой тока в первичной обмотке в соответствии с числом витков в обмотках; в частности, при равенстве числа витков в обеих обмотках ток во вторичной обмотке по своим характеристикам совпадает с током в первичной обмотке.
Подавать на трансформатор переменный ток в непрерывном режиме не обязательно. Достаточно пропустить через первичную обмотку одиночный импульс или короткую пачку импульсов — и тогда во вторичной обмотке тоже возникнет импульс или пачка импульсов. Именно это свойство используется в трансформаторной памяти.
В первом приближении, когда происходит обращение к некоторой ячейке постоянной памяти, дешифратор, стоящий на выходе адресного регистра, формирует импульс, проходящий через все трансформаторы, относящиеся к адресуемой ячейке памяти. В трансформаторах тех битов, из которых должна считываться логическая единица, вторичная обмотка физически присутствует — и в ней возникает ответный импульс. В тех же битах, из которых должен считываться нуль, провод вторичной обмотки пропущен в обход трансформатора — и импульс в нём, естественно, не возникает. Далее все эти провода поступают на усилители считывания, на выходе которых формируются правильные логические уровни; считанная информация запоминается в регистре данных.
Конечно, иметь 524 288 трансформаторов, чтобы хранить 8К 64-разрядных слов постоянной памяти процессора ЕС-2020, является весьма накладным по объёму и стоимости. К счастью, имеется простой способ резко уменьшить габариты ПП. Заключается он в том, что каждый трансформатор «хранит» не один, а сразу 128 бит информации: он имеет одну первичную и 128 вторичных обмоток. Малые габариты трансформатора обеспечиваются тем, что все обмотки являются вырожденными — состоят из одного витка. Упрощается и дешифрация адреса: вместо громадного дешифратора на 13 входов и 8192 выходов имеется два дешифратора на 6 и 7 входов и 64 и 128 выходов соответственно.
Стоимость ПП трансформаторного типа при серийном производстве весьма невелика благодаря тому, что промышленностью была освоена технология автоматизированного производства печатных обмоток и сборки трансформаторов с разъёмными сердечниками, что сводило к минимуму участие людей в этом процессе. В то же время трансформаторное ПЗУ оставляет возможность ручной модификации содержимого ячеек: достаточно перерезать ненужные дорожки и вместо них проложить требуемые связи тонким проводом, либо идущим мимо сердечника, либо проходящим через него, — отсюда, кстати, и пошёл термин «прошивка», означающий процесс записи информации в ПЗУ и само содержимое постоянной памяти.
ПП в ЕС-2020 имеет модульную организацию. Каждый модуль содержит 512 слов и состоит из 128 карт, каждая из которых может заменяться индивидуально. Она расположена на раме B; помимо карт памяти, на этой раме, судя по всему, расположена и остальная аппаратура БМУ (РАПП, РВМ и РВС, дешифраторы адреса, усилители считывания и РМК).
Формат микрокоманды
64 разряда микрокоманды разделены на 18 полей, управляющих различными блоками процессора. Их можно объединить в пять групп:
управление работой арифметического блока (БА);
управление работой оперативной памяти;
управление занесением информации в различные регистры и триггеры;
управление адресом следующей микрокоманды;
прочие биты.
Формат микрокоманды показан на рисунке. Заметим, что в [1] информация неполна, она дополняется сведениями, почерпнутыми из [2].
Формат микрокоманды, скан из [1]
Управление работой БА
Работой БА управляют четыре поля микрокоманды:
поле A (биты 5:8) задаёт операнд A, подаваемый на один из входов АЛУ;
поле ФУНКЦИЯ (биты 9:12) указывает, какая операция должна выполняться;
поле B (биты 13:17) задаёт операнд B, подаваемый на другой вход АЛУ;
поле ДЕФОРМАЦИЯ B (биты 18:20) определяет способ передачи операнда B на соответствующий вход АЛУ.
Кроме этих четырёх полей, в подаче операндов в БА могут участвовать ещё одно или два поля:
поле КСТ/АПСТ (биты 45:48) может содержать четыре старших разряда константы. Если для формирования адреса следующей микрокоманды используется операция длинного перехода, это поле содержит часть адреса перехода (см. далее), поэтому, если в той же микрокоманде задано использование константы, старшие её разряды будут нулевыми;
поле КМЛ (биты 49:52) может содержать четыре младших разряда константы.
Подробно устройство и работа БА будут описаны в соответствующей статье, здесь же заметим, что АЛУ процессора ЕС-2020 — однобайтовое, что предопределяет низкую производительность 32-разрядной машины (и её относительно небольшую стоимость).
В поле A кодируется один из 16 возможных источников информации для входа A, как показано в следующей таблице:
0000 | РА | 0100 | РД | 1000 | РИ | 1100 | РП |
0001 | РН | 0101 | РТ | 1001 | константа | 1101 | РБК |
0010 | РЗ | 0110 | РУ | 1010 | РМ | 1110 | РБЗ |
0011 | РЛ | 0111 | РР | 1010 | РГ | 1111 | нули |
Большинство из источников операнда А — внутренние регистры процессора, о назначении которых будет сказано в одной из последующих статей. Здесь заметим, что РА — это регистр входа А АЛУ, и данное поле определяет, что именно будет занесено в этот регистр для последующего использования в АЛУ. Если поле А содержит комбинацию 0000, состояние РА во время выполнения данной микрокоманды не изменяется, а на вход АЛУ подаётся значение, занесённое в него предыдущей микрокомандой.
Код 1111 задаёт обнуление РА, а код 1001 — занесение в него константы, содержащейся в разрядах 44:52 или 49:52 микрокоманды (эти биты мы ещё несколько раз встретим позднее — они имеют несколько функций).
Поле B задаёт один из 30 возможных источников второго входа АЛУ, а точнее, его входного регистра РВ; два последних значения не используются:
00000 | РВ | 01000 | РИ | 10000 | РР3 | 11000 | РРД |
00001 | РН | 01001 | константа | 10001 | РР4 | 11001 | РКП |
00010 | РЗ | 01010 | РФ | 10010 | РР5 | 11010 | нули |
00011 | РЛ | 01011 | РЕ | 10011 | РР6 | 11011 | ББА |
00100 | РД | 01100 | РО | 10100 | РР9 | 11100 | РРЕ |
00101 | РТ | 01101 | РБД | 10101 | РРБ | 11101 | РРП |
00110 | РУ | 01110 | РБС | 10110 | РРВ | 11110 | |
00111 | РР | 01111 | РБР | 10111 | РРГ | 11111 |
Как и в предыдущем случае, на вход АЛУ подаются либо нули, либо константа из микрокоманды, либо содержимое одного из регистров. В данном случае стоит, забегая вперёд, сделать небольшое пояснение относительно регистров с именами вида РРN, где N — цифра. Эти регистры принадлежат пульту управления, каналам и тому подобному оборудованию и существуют в нескольких экземплярах; к какому именно из экземпляров выполняется обращение, задаётся битами 2:5 регистра РБС, который будет обсуждаться в одной из следующих статей.
Легко заметить, что среди регистров нет ничего, напоминающего доступные программисту регистры общего назначения, регистры с плавающей запятой или PSW. Это неудивительно: то, что является регистром с точки зрения программиста, вовсе не обязательно является таковым с точки зрения разработчика процессора. Конкретно в ЕС-2020 регистры общего назначения и регистры с плавающей запятой вообще не являются регистрами — это ячейки оперативной памяти, содержимое же PSW «размазано» между несколькими «настоящими» регистрами и триггерами процессора и, опять-таки, ячейками памяти, о чём будет сказано в одной из следующих статей.
Поле ФУНКЦИЯ задаёт одну из 15 возможных операций АЛУ и имеет ещё одно специальное значение:
0000 | A | B | 0100 | А ТРАНЗИТ | 1000 | A | ~B | 1100 | СДВИГ B ВПРАВО |
0001 | косвенная функция | 0101 | A & B | 1001 | B ТРАНЗИТ | 1101 | СДВИГ B ВЛЕВО |
0010 | A — B ДЕС | 0110 | B — A ДЕС | 1010 | A ^ B | 1110 | A + B ДЕС |
0011 | A — B ДВ | 0111 | B — A ДВ | 1011 | ~A & B | 1111 | A + B ДВ |
Обозначения логических операций в таблице соответствуют привычным побитовым операциям языка C; в оригинальных советских документах и литературе того времени использовались другие обозначения.
Назначение большинства операций понятно из их обозначения. Операции А ТРАНЗИТ и В ТРАНЗИТ означают прямую передачу операнда А и В соответственно на выход АЛУ без выполнения какой-либо операции. ДВ и ДЕС в обозначениях операций сложения и вычитания обозначают, как можно догадаться, двоичные и десятичные операнды соответственно (напомню, что система команд Системы 360 содержит команды десятичной арифметики, обрабатывающие двоично-кодированные десятичные числа переменной длины). Наконец, «косвенная функция» означает операцию, заданную в одной из предыдущих микрокоманд и занесённую в регистр косвенной функции (РКФ); эта возможность даёт возможность частично совмещать микропрограммы, реализующие разные команды (например, очевидно, что команды И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ выполняются, в общем-то, одинаково, различаясь лишь собственно функцией АЛУ; для таких случаев и предназначена косвенная функция).
Подробно выполнение операций будет рассмотрено в статье, посвящённой устройству БА.
Последнее из полей управления работой БА, ДЕФОРМАЦИЯ В, содержит три бита и кодирует способ передачи операнда В из регистра РВ на собственно вход АЛУ:
000 | ПРЯМО | Содержимое РВ передаётся прямо на вход В АЛУ |
001 | НАКРЕСТ | Старший и младший полубайты РВ меняются местами |
010 | МЛАДШИЕ ПРЯМО | Младший полубайт передаётся прямо, вместо старшего полубайта подаются нули |
011 | СТАРШИЕ ПРЯМО | Старший полубайт передаётся прямо, вместо младшего полубайта подаются нули |
100 | МЛАДШИЕ НАКРЕСТ | Младший полубайт передаётся вместо старшего, а его место занимают нули |
101 | СТАРШИЕ НАКРЕСТ | Старший полубайт передаётся вместо младшего, а его место занимают нули |
110 | ПЕРЕКОС | Младший полубайт передаётся вместо старшего, а его место занимает содержимое 4-разрядного буферного регистра перекоса. Старший полубайт сохраняется в этом регистре для последующего использования |
111 | ПЕР КФ | Установка режима перекоса косвенной функции. Если он был установлен, при выполнении косвенной функции операнд В подвергается перекосу, если не установлен — передаётся так, как определяется данным полем (т. е. идентично с прямой функцией). Сброс режима перекоса косвенной функции выполняется микрооперацией ЗКФ поля УСТАНОВ, если в этой же микрокоманде не задана микрооперация ПЕР КФ |
Подробнее выполнение микроопераций, задаваемых этим полем, будет рассмотрено при обсуждении устройства БА; там же станет яснее, зачем все они, кроме самой первой, понадобились (спойлер: главным образом, для реализации команд десятичной арифметики).
Управление работой памяти
Работой памяти управляют три поля микрокоманды:
поле АДРЕС (биты 21:23) определяет источник адреса памяти;
поле РЕЖИМ (биты 24:25) задаёт выполняемую операцию;
поле ТИП (биты 26:27) указывает тип памяти, к которой выполняется обращение.
Подробнее работа с памятью и регистры, которые могут содержать адреса, рассматриваются в следующих статьях, здесь же приводится расшифровка данных полей.
Источник адреса обращения к памяти определяется тремя битами поля АДРЕС:
000 | Используется значение адреса, ранее уже занесённое в адресный регистр памяти РМН | |
001 | РМФЕ | В РМН заносится адрес из регистра РМФЕ |
010 | РГРИ | В РМН заносится адрес из регистра РГРИ |
011 | РПТУ | В РМН заносится адрес из регистра РПТУ |
100 | РР | В младший байт РМН заносится содержимое регистра РР, старшие разряды РМН не изменяются |
101 | РТ | В младший байт РМН заносится содержимое регистра РТ, старшие разряды РМН не изменяются |
110 | РД | В младший байт РМН заносится содержимое регистра РД, старшие разряды РМН не изменяются |
111 | константа | В младший байт РМН заносится константа из микрокоманды (поля КСТ/АПСТ и КМЛ), старшие разряды РМН не изменяются |
Операция (поле РЕЖИМ) задаётся двумя битами:
00 | Нет обращения к памяти | |
01 | ЧТ | Чтение ячейки памяти, адресуемой регистром РМН, в регистр данных памяти РНЗ |
10 | ЗП, РГ | Запись или регенерация: сохранение содержимого РНЗ в ячейке памяти, адресуемой РМН |
11 | СТ | Стирание: считывание ячейки памяти, адресуемой регистром РМН, без сохранения значения в РНЗ |
Тип памяти (поле ТИП) также задаётся двумя битами:
00 | З | Память ключей защиты |
01 | О | Основная память |
10 | Л | Локальная память |
11 | М | Мультиплексная память |
Управление занесением информации в регистры и триггеры
Записью результата операции в АЛУ в различные регистры управляет поле С (биты 0:4), а многофункциональное поле УСТАНОВ (биты 28:32) отвечает, главным образом, за установку и сброс отдельных триггеров процессора.
Пятибитовое поле С задаёт запись информации в следующие регистры:
00000 | нет | 01000 | РИ | 10000 | РБС | 11000 | РР7 |
00001 | РН | 01001 | РМ | 10001 | РБР | 11001 | РР8 |
00010 | РЗ | 01010 | РФ | 10010 | РБК | 11010 | РР9 |
00011 | РЛ | 01011 | РЕ | 10011 | РБЗ | 11011 | РРА |
00100 | РД | 01100 | РО | 10100 | РР1 | 11100 | |
00101 | РТ | 01101 | РГ | 10101 | РР2 | 11101 | |
00110 | РУ | 01110 | РП | 10110 | РР5 | 11110 | |
00111 | РР | 01111 | РБД | 10111 | РР6 | 11111 |
Поле УСТАНОВ также состоит из пяти разрядов и задаёт следующие микрооперации:
00000 | Нет операции | |
00001 | ГАШ | Гашение (сброс) триггеров ТНДД, ТРПФ, ТРКФ, ТППФ, ТПКФ, ТПЕР, входящих в состав байта состояния арифметико-логического блока — регистра ББА. Триггеры ТППФ и ТПКФ сбрасываются лишь в том случае, если выполняемая в этом же такте арифметико-логическая операция не должна изменять их состояние, в противном случае триггер будет сброшен или установлен по результату операции |
00010 | 0БС2 | Сброс разряда РБС[2] |
00011 | 0БС3 | Сброс разряда РБС[3] |
00100 | 0БС4 | Сброс разряда РБС[4] |
00101 | 0БС5 | Сброс разряда РБС[5] |
00110 | 1БС2 | Установка разряда РБС[2] |
00111 | 1БС3 | Установка разряда РБС[3] |
01000 | 1БС4 | Установка разряда РБС[4] |
01001 | 1БС5 | Установка разряда РБС[5] |
01010 | 0ППФ | Сброс ТППФ и подача 0 на вход переноса для текущей прямой операции БА. Сброс ТППФ будет выполнен лишь в том случае, если текущая выполняемая БА операция не требует изменения его состояния по результату операции, в противном случае ТППФ будет установлен по результату операции, и микрооперация 0ППФ определит лишь входной перенос для прямой функции |
01011 | 1ППФ | Установка ТППФ и подача 1 на вход переноса для текущей прямой операции БА. Ограничения аналогичны микрооперации 0ППФ |
01100 | 0ПКФ | Сброс ТПКФ и подача 0 на вход переноса для текущей косвенной операции БА. Ограничения аналогичны микрооперации 0ППФ, однако относятся к косвенной функции БА |
01101 | 1ПКФ | Установка ТПКФ и подача 1 на вход переноса для текущей косвенной операции БА. Ограничения аналогичны микрооперации 0ППФ, однако относятся к косвенной функции БА |
01110 | 0РПФ | Сброс ТРПФ |
01111 | 0РКФ | Сброс ТРКФ |
10000 | 0ТБП | Сброс ТБП |
10001 | 1ТБП | Установка ТБП |
10010 | 0ТВК | Сброс ТВК |
10011 | 1ТВК | Установка ТВК |
10100 | 0ТАК | Сброс ТАК |
10101 | 1ТАК | Установка ТАК |
10110 | ИГН | Игнорирование межбайтового переноса. Истинный входной перенос устанавливается равным нулю (будет проинвертирован при выполнении вычитания), выходной перенос теряется |
10111 | ЗКФ | Занесение косвенной функции: содержимое поля микрокоманды КМЛ заносится в регистр косвенной функции РКФ; кроме того, если в поле ПЕРЕКОС В не задан код ПЕР КФ, производится сброс предварительно заданного режима перекоса |
11000 | СБП | Сброс буфера перекоса |
11001 | КУ1 | Установка кода условия (разряды РБС[6:7]) для знаковой арифметической операции: — 00 — результат равен нулю; — 01 — результат меньше нуля; — 10 — результат больше нуля; — 11 — переполнение |
11010 | КУ2 | Установка кода условия (разряды РБС[6:7]) для беззнаковой арифметической операции: — 00 — результат равен нулю, нет переноса; — 01 — результат не равен нулю, нет переноса; — 10 — результат равен нулю, есть перенос; — 11 — результат не равен нулю, есть перенос |
11011 | 1ПЗУ | Сброс ТПП |
1C | 2ПЗУ | Установка ТПП |
1D | 1ПСО | Установка потенциала состояния останова |
1E | НКР | Вероятно, этот код задаёт упоминаемую, но явно не описываемую микрооперацию НКР, вызывающую инверсию седьмого разряда выходной информации БА перед подачей его на вход схемы контроля, что используется для диагностики |
1F | 1ТТО | Установка ТТО |
Изрядная часть микроопераций поля УСТАНОВ влияет на работу БА или модифицирует отдельные разряды РБС, они будут рассмотрены в соответствующих статьях. Здесь же остановимся на прочих операциях данного поля.
Микрооперации 0ТБП и 1ТБП соответственно сбрасывают и устанавливают триггер блокировки прерывания ТБП. Когда он установлен, микропрерывания по особым случаям адресации и защиты и по машинному сбою (см. ниже) заблокированы. При нормальной работе машины эти микропрерывания разрешены; их запрет требуется на время выполнения сброса процессора, а также в некоторых диагностических микропрограммах.
Микрооперации 0ТВК и 1ТВК изменяют состояние триггера выборки команды ТВК. Его точное назначение не описано; похоже, это просто индикатор выполнения выборки: он устанавливается в её начале и сбрасывается при завершении.
Микрооперации 0ТАК и 1ТАК изменяют состояние триггера адреса команды ТАК. Нулевое значение этого триггера указывает, что адрес команды находится в регистре РМФЕ, единичное — что он сохранён в локальной памяти. Сохранение адреса требуется, главным образом, при выполнении команд формата SS, имеющих два операнда в памяти: РМФЕ в такой ситуации используется в качестве регистра адреса одного из операндов. Когда он не нужен для адресации данных, в нём находится адрес команды, т. е. содержимое битов PSW[40:63]: это позволяет ускорить процесс выборки команды (не тратится время на обращения к локальной памяти).
Микрооперации 1ПЗУ и 2ПЗУ управляют состоянием триггера постоянной памяти ТПП, являющегося, по сути, старшим разрядом РАПП (см. ниже раздел, описывающий формирование адреса микрокоманды).
Микрооперация 1ПСО устанавливает триггер потенциала состояния останова ПСО (названия триггеров почти всегда начинаются с буквы Т, а регистров — с буквы Р, но имеются исключения), что переводит процессор в состояние «стоп». Хотя в этом состоянии, как и в состоянии «ожидание», задаваемом программой в PSW, процессор команды не выполняет, между ними имеются следующие принципиальные различия:
состояние «ожидание» устанавливается программой по своей инициативе; в состояние «стоп» программа перевести процессор не может — переход в него происходит только в результате ручных манипуляций с пультом управления машиной (в частности, при нажатии кнопки «Стоп»);
процессор автоматически выходит из состояния «ожидание», если появляется незамаскированный запрос прерывания; из состояния «стоп» он сам не выходит никогда (человек должен нажать на пульте управления кнопку «Пуск»; кроме того, в многопроцессорных или многомашинных комплексах процессор может выйти из состояния останова по приказу другого процессора).
Микрооперация 1ТТО устанавливает триггер тяжёлого останова ТТО, в результате чего процессор переходит в состояние тяжёлого останова (останова по аппаратной ошибке). В отличие от обычного останова, при этом прекращается выработка всех серий сигналов синхронизации, кроме основных сигналов С1–С4, а для выхода из него надо сначала сбросить состояние тяжёлого останова. В процессе выполнения обычных микропрограмм, реализующих систему команд машины, отвечающих за прерывания и т. п., эта микрооперация не используется: в случае возникновения фатального сбоя ТТО устанавливается аппаратно. Она предназначена исключительно (или почти исключительно — не имея полного технического описания процессора, судить об этом со стопроцентной уверенностью нельзя) для микропрограмм диагностики процессора: если такая микропрограмма обнаруживает не то состояние процессора, которое должно иметь место в процессе выполнения теста, она останавливает дальнейшую работу.
Чтобы обеспечить микропрограммное управление весьма многочисленными триггерами каналов ввода-вывода и при этом не раздувать микрокоманду редко используемыми микрооперациями, разработчики процессора ЕС-2020 пошли не совсем обычным путём. Если в текущей микрокоманде установлен бит 59 либо если поле С задаёт запись результата в регистр РР1, то биты РМК[45:49] (поле КСТ/АПСТ целиком и старший бит поля КМЛ) определяют операцию, выполняемую с триггерами выбранного для работы канала. Подробнее соответствующие микрооперации будут описаны в статьях, касающихся выполнения операций ввода-вывода.
Управление формированием адреса следующей микрокоманды
Адрес следующей выполняемой микрокоманды при отсутствии аппаратных запросов на его смену (о них будет сказано отдельно) задаётся пятью полями, а также микрооперациями 1ПЗУ и 2ПЗУ поля УСТАНОВ:
поле УСЛ1 (биты 33:36) управляет формированием бита 1 адреса следующей микрокоманды;
поле УСЛ0 (биты 37:41) управляет формированием бита 0 адреса следующей микрокоманды;
поле М (биты 42:43) определяет способ формирования следующего адреса;
поле КСТ/АПСТ (биты 45:48) может содержать либо старшую половину константы, либо часть разрядов адреса следующей микрокоманды;
поле АПМЛ (биты 53:58) почти всегда содержит часть разрядов адреса следующей микрокоманды.
Два значения поля УСЛ1 определяют нулевое и единичное значение разряда 1 адреса следующей микрокоманды, ещё два (1100 и 1111) не используются. Все остальные значения задают проверку значения того или иного триггера и по результату этой проверки заносят в 1-й разряд адреса либо нуль (условие не выполнено), либо 1 (условие выполнено):
0000 | 0 | 0 |
0001 | 1 | 1 |
0010 | 1БС1 | 1, если бит РБС[1] = 1, иначе 0 |
0011 | 1БС3 | 1, если бит РБС[3] = 1, иначе 0 |
0100 | 1БС5 | 1, если бит РБС[5] = 1, иначе 0 |
0101 | 1БС7 | 1, если бит РБС[7] = 1, иначе 0 |
0110 | 0РПФ | 1, если ТРПФ = 0, иначе 0 |
0111 | 1РПФ | 1, если ТРПФ = 1, иначе 0 |
1000 | 0РКФ | 1, если ТРКФ = 0, иначе 0 |
1001 | 1РКФ | 1, если ТРКФ = 1, иначе 0 |
1010 | 0ППФ | 1, если ТППФ = 0, иначе 0 |
1011 | 1ППФ | 1, если ТППФ = 1, иначе 0 |
1101 | 1ПКФ | 1, если ТПКФ = 1, иначе 0 |
1110 | 1ЧЕТ | 1, если ТЧЕТ = 1, иначе 0 |
Все проверяемые полем УСЛ1 триггеры входят в состав либо регистра РБС, либо байта состояния арифметико-логического блока ББА, их функции будут рассмотрены в соответствующих статьях.
Поле УСЛ0 работает аналогичным образом (коды 10110 и 11000–11111 не используются), но определяет состояние нулевого разряда адреса следующей микрокоманды:
00000 | 0 | 0 |
00001 | 1 | 1 |
00010 | 1БС0 | 1, если бит РБС[0] = 1, иначе 0 |
00011 | 1БС2 | 1, если бит РБС[2] = 1, иначе 0 |
00100 | 1БС4 | 1, если бит РБС[4] = 1, иначе 0 |
00101 | 1БС6 | 1, если бит РБС[6] = 1, иначе 0 |
00110 | 0РПФ | 1, если ТРПФ = 0, иначе 0 |
00111 | 1РПФ | 1, если ТРПФ = 1, иначе 0 |
01000 | 0РКФ | 1, если ТРКФ = 0, иначе 0 |
01001 | 1РКФ | 1, если ТРКФ = 1, иначе 0 |
01010 | 0ППФ | 1, если ТППФ = 0, иначе 0 |
01011 | 1ППФ | 1, если ТППФ = 1, иначе 0 |
01100 | 0ПКФ | 1, если ТПКФ = 0, иначе 0 |
01101 | 1ПКФ | 1, если ТПКФ = 1, иначе 0 |
01110 | 1ТЗН | 1, если ТЗН = 1, иначе 0 |
01111 | 1ПЕР | 1, если ТПЕР = 1, иначе 0 |
10000 | 1НДД | 1, если ТНДД = 1, иначе 0 |
10001 | 1ВВВ | 1, если ТВВВ = 1, иначе 0 |
10010 | 1ТАК | 1, если ТАК = 1, иначе 0 |
10011 | 1ТВК | 1, если ТВК = 1, иначе 0 |
10100 | 1ТЦП | 1, если с= 1, иначе 0 |
10101 | 1ТБЗ | 1, если ТБЗ = 1, иначе 0 |
10111 | 1ТРП | 1, если ТРП = 1, иначе 0 |
Помимо уже упоминавшихся, это поле даёт возможность проанализировать состояние следующих триггеров:
ТВВВ — триггер запроса прерываний ввода-вывода и внешних прерываний; устанавливается при появлении соответствующих запросов;
ТЦП — триггер центрального процессора, он же разряд 0 регистра РБД; сброшен при выполнении микропрограмм процессора и установлен при выполнении микропрограмм каналов;
ТБЗ — триггер блока защиты; установлен, если у процессора нет блока защиты памяти (технически это, скорее, не триггер, а линия с жёстко установленным логическим уровнем);
ТРП — триггер разрешения пакета; установлен,