До появления Системы 360 все процессоры имели схемное (аппаратное) управление, т. е. каждый сигнал, управляющий ходом операций в процессоре, вырабатывался логическими схемами самого процессора на основе текущей информации о его состоянии, хранящейся в регистрах и триггерах (в частности, используя код текущей выполняемой команды). Сложность аппаратуры такого процессора прямо зависит от сложности его архитектуры, в частности, от богатства системы команд, а для изменения логики его работы (например, для изменения или расширения системы команд) требуется менять его схему.

В младших и средних моделях Системы 360 впервые было использовано микропрограммное управление. Суть его состоит в том, что управляющие сигналы не формируются аппаратурой напрямую, а извлекаются из микропрограммной памяти, технически обычно являющейся постоянным запоминающим устройством (ПЗУ). Все управляющие сигналы, извлекаемые из ПЗУ как единое целое и управляющие аппаратурой процессора в течение одного такта, называются микрокомандой, а совокупность микрокоманд, выполняемых одна за другой для достижения определённой цели (как правило, для выполнения одной команды процессора), — микропрограммой.

Микропрограммное управление позволяет резко упростить аппаратуру процессора, а значит, сделать его более дешёвым, что объясняется несколькими причинами. Во-первых, ПЗУ обычно стоит намного дешевле, чем логические схемы, реализующие аналогичные функции — даже с учётом того, что для управления выборкой микрокоманд из ПЗУ нужна аппаратура, отсутствующая в машинах со схемным управлением. Во-вторых, можно уменьшить разрядность АЛУ и информационных трактов, но реализовать сложную и «широкую» систему команд за счёт разбиения сложной обработки многоразрядных величин на несколько тактов (то же самое можно сделать и в машине со схемным управлением, но это резко увеличит сложность блока управления, что, скорей всего, сведёт на нет любые получаемые от упрощения АЛУ преимущества). В-третьих, становится проще, дешевле и быстрее процесс разработки: при обнаружении ошибок в выдаваемых управляющих сигналах надо лишь внести изменения в микропрограммную память, а не перекраивать схемы процессора. Наконец, в-четвёртых, резко упрощается возможность расширения системы команд вплоть до её полной замены: опять-таки, надо лишь поменять содержимое микропрограммной памяти.

Вместе с тем, первые годы бытовало убеждение, что микропрограммные процессоры всегда будут медленнее, чем процессоры со схемным управлением. По этой причине ранние старшие модели Системы 360 имели схемное управление, аналогичным образом обстояло дело и у нас: у ЕС-1020 и ЕС-1030 управление микропрограммное, а у ЕС-1050 — схемное. Время показало ошибочность этого убеждения: процессор с микропрограммным, а точнее, со смешанным аппаратно-микропрограммным управлением может быть столь же быстрым, как и процессор с чисто схемным управлением, поэтому в более поздних машинах пошли именно по этому пути.

В определённой степени написание микропрограммы схоже с написанием программы на языке ассемблера, однако между ними есть очень существенное различие. Машинные команды, отражением которых является язык ассемблера, привязаны к определённой архитектуре (скажем, у IA-32, ARM и Системы 360 языки ассемблера совершенно разные, поскольку это совершенно разные архитектуры), но не связаны с конкретной аппаратной реализацией этой архитектуры, поэтому программа, написанная, например, на языке ассемблера для архитектуры IA-32, будет успешно выполняться на ПК с процессорами и Intel, и AMD, причём любых — при условии, конечно, что эта программа не использует команды, реализованные в одних процессорах, но отсутствующие в других (архитектуры постепенно развиваются и расширяются). В противоположность этому, микрокоманды привязаны к конкретной аппаратной реализации и напрямую управляют действиями аппаратуры конкретной модели процессора. Кроме того, команда ассемблера обычно задаёт одно-два действия (скажем, сложить два числа, находящихся в регистрах процессора), а микрокоманда одновременно может задавать десятки различных действий, что, опять-таки, связано с особенностями аппаратуры (переслать значение из одного регистра в другой, выполнить в АЛУ такую-то операцию, сбросить тот триггер и установить этот, перейти на ту или другую микрокоманду…).

Структура блока микропрограммного управления

Структурная схема блока микропрограммного управления (БМУ) и временная диаграмма его работы приведены на рисунках.

Структура блока микропрограммного управления, скан из [1]
Структура блока микропрограммного управления, скан из [1]
Временная диаграмма работы БМУ, скан из [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]
Формат микрокоманды, скан из [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 регистра РБД; сброшен при выполнении микропрограмм процессора и установлен при выполнении микропрограмм каналов;

  • ТБЗ — триггер блока защиты; установлен, если у процессора нет блока защиты памяти (технически это, скорее, не триггер, а линия с жёстко установленным логическим уровнем);

  • ТРП — триггер разрешения пакета; установлен, если устройство, подключённое к мультиплексному каналу, запрашивает работу в монопольном режиме.

Поле М определяет один из четырёх способов формирования адреса следующей микрокоманды (подробнее см. ниже):

00

АПД

Адрес перехода длинный

01

АПК

Адрес перехода короткий

10

АПД/В

Адрес перехода длинный или сброс РАПП

11

Ф, РС, РМ, ГРИ

Функциональный переход или переход по содержимому одного из трёх регистров РВС, РВМ или РГРИ

Поле КСТ/АПСТ при выполнении микрооперации АПД (адрес перехода длинный) содержит разряды 11:8 адреса следующей микрокоманды, в остальных случаях она содержит старшую часть 8-разрядной константы, которая используется при соответствующих значениях полей А, В и АДРЕС. Поле АПМЛ почти всегда содержит биты 7:2 адреса следующей микрокоманды. Подробнее использование этих полей для адресации микрокоманды будет описано ниже.

Прочие разряды

О полях константы КСТ/АПСТ (биты 45:48) и КМЛ (49:52) уже говорилось: они участвуют в формировании собственно константы, используемой в качестве операнда АЛУ или адреса оперативной памяти, в управлении триггерами каналов ввода-вывода и в определении адреса следующей микрокоманды.

Бит 59 тоже уже упоминался: если он установлен, биты РМК[45:49] (поле КСТ/АПСТ целиком и старший бит поля КМЛ) используются для управления триггерами каналов; когда он сброшен, они используются обычным образом.

Биты 60:61 не используются.

Наконец, биты 44, 62 и 63 являются контрольными и обозначаются КР1, КР2 и КР3 соответственно. Их функции заключаются в следующем:

  • бит КР1 (44) является контрольным разрядом константы (либо только разрядов 49:52, либо всех разрядов 45:52 в зависимости от ширины константы в конкретной микрокоманде; если константа не используется, значение этого разряда безразлично);

  • бит КР2 (62) является контрольным разрядом регистра адреса постоянной памяти РАПП: если чётность битов РАПП не совпадает со значением этого разряда, фиксируется ошибка. Поскольку каждая микрокоманда располагается в постоянной памяти по строго определённому адресу, а последний задаётся РАПП, этот бит даёт возможность простого контроля правильности функционирования последнего;

  • бит КР3 (63) является контрольным разрядом регистра микрокоманды РМК, т. е. обеспечивает контроль правильности считывания информации из постоянной памяти.

Формирование адреса микрокоманды

Как отмечалось в предыдущей статье, посвящённой синхронизации, при возникновении особых условий нормальный порядок выполнения микрокоманд прерывается и управление передаётся той или иной микрокоманде с предопределённым адресом. Всего имеется шесть таких адресов (приведены в шестнадцатеричной форме).

  • 0001 — адрес микропрограммы гашения системы. Гашением в советской литературе до примерно середины 1970-х годов именовался сброс — в данном случае, всей ЭВМ, включая процессор и каналы; затем этот термин стал постепенно вытесняться привычным сегодня сбросом. Данный адрес заносится в РАПП сигналом аппаратного гашения АГ, формируемым при нажатии на пульте управления любой из кнопок «Питание вкл.», «Гашение» или «Загрузка» (последняя инициирует начальную загрузку программы, перед чем всегда выполняется сброс).

  • 0004 — адрес микропрограммы обработки особых случаев («исключений», в современной терминологии) адресации и защиты — т. е. попыток программы обратиться к несуществующей или к защищённой области памяти, что приводит к возникновению программного прерывания; выполнение текущей команды при этом досрочно завершается. Кроме того, это же микропрерывание происходит при попытке выполнить аналогичное обращение в процессе выполнения операции ввода-вывода мультиплексным каналом, а в некоторых случаях — и селекторными каналами. Дело в том, что любые операции мультиплексного канала, а также все операции, кроме собственно обмена данными, селекторных каналов выполняются микропрограммно — а соответственно, и реакция аппаратуры на недопустимые обращения оказывается идентичной. (Передача данных селекторными каналами выполняется полностью аппаратно, и при возникновении аналогичных особых случаев происходит досрочное завершение передачи, при этом устанавливается соответствующий триггер селекторного канала, позже анализируемый микропрограммно для определения успешности выполнения операции.)

  • 0006 — адрес микропрограммы обслуживания мультиплексного канала; её вызов производится в ситуациях, когда мультиплексный канал требует внимания (скажем, устройство, с которым выполняется обмен данными, готово получить или передать очередной байт информации; подробнее об этом будет говориться в статьях, посвящённых вводу-выводу).

  • 0007 — адрес микропрограммы обслуживания селекторных каналов.

  • 0008 — адрес микропрограммы обработки машинных ошибок (подробнее о ней будет сказано в статье, посвящённой средствам аппаратного контроля).

  • 000C — адрес микропрограммы сканирования постоянной памяти. Этот адрес заносится в РАПП, когда выполняемая микрокоманда задаёт занесение в РАПП адреса из регистра РГРИ (т. е. переход на микрокоманду, адресуемую этим регистром, см. ниже), а переключатель «Тип памяти» на пульте управления стоит в положении «ПП». Эта микропрограмма применяется в диагностических целях, но никаких подробностей о её работе (как, впрочем, и об остальных диагностических средствах) в доступной литературе нет.

Поскольку в один и тот же момент времени может присутствовать несколько запросов микропрерываний, им присвоены приоритеты:

  • самым приоритетным по очевидным причинам является сброс;

  • на втором месте находятся микропрерывания от схем контроля и по вызову микропрограммы сканирования (по всей вероятности, при работе диагностических микропрограмм микропрерывание от схем контроля блокируется, поэтому эти два запроса одновременно не появляются);

  • на третьем месте расположен запрос на обслуживание от селекторных каналов. При одновременном возникновении запросов от обоих каналов выбор более приоритетного канала определяется логикой самих каналов, которая будет описана в соответствующей статье;

  • на четвёртом месте расположен запрос на обслуживание от мультиплексного канала (если во время выполнения микропрограммы обслуживания мультиплексного канала приходит запрос от селекторного канала, обслуживание мультиплексного канала приостанавливается, но не наоборот);

  • на последнем месте находится микропрерывание по особому случаю адресации или защиты.

Фиксированный адрес микрокоманды, переход на которую происходит в результате микропрерывания, заносится в РАПП по тактовому импульсу ХИ2.

В случае вызова микропрограммы обслуживания селекторного канала адрес возврата к прерванной микропрограмме запоминается в регистре РВС, при вызове микропрограммы обслуживания мультиплексного канала адрес возврата запоминается в регистре РВМ. Занесение в эти регистры осуществляется из РАПП по тактовому импульсу ХИ1. Остальные причины микропрерываний не предполагают возврата к прерванной микропрограмме, поэтому адрес возврата не запоминается.

В отсутствие запросов на микропрерывание адрес следующей микрокоманды формируется в соответствии с текущей выполняемой микрокомандой по правилам, зависящим, в первую очередь, от содержимого поля М (биты РМК[42:43]). Сформированный адрес заносится в РАПП по тактовому импульсу ТИ2.

Адрес микрокоманды, как уже говорилось, состоит из 13 разрядов, нумеруемых в нестандартном для архитектуры порядке (нулевой бит является младшим, а не старшим), он позволяет адресовать 8192 микрокоманды. По способу управления разрядами адреса их можно разделить на четыре группы.

Старший бит, РАПП[12], изменяется очень редко, поэтому управление его состоянием вынесено в поле УСТАНОВ: микрооперации 1ПЗУ и 2ПЗУ переключают половины постоянной памяти, сбрасывая и устанавливая так называемый триггер постоянной памяти (ТПП), который является, по сути, битом РАПП[12]. Если в текущей выполняемой микрокоманде поле УСТАНОВ содержит любую микрооперацию, кроме одной из этих двух, старший разряд адреса микрокоманды не изменяется (из этого правила есть пара исключений, о которых будет сказано ниже).

Разряды РАПП[11:8] меняются тоже довольно редко: большинство микропрограмм весьма невелики и укладываются в 256 и даже меньшее число микрокоманд. По этой причине он изменяется лишь операцией длинного перехода, задаваемой комбинацией 00 и, в некоторых случаях, 10 в поле М (из этого правила имеется та же самая пара описываемых позже исключений): в такой ситуации в РАПП[11:8] заносится содержимое поля КСТ/АПСТ, т. е. биты РМК[45:48].

Младшие восемь битов адреса могут изменяться в каждой микрокоманде. Биты РАПП[7:2], как правило (исключения те же), просто копируются из разрядов РМК[53:58] (поле АПМЛ), а вот правила формирования двух младших разрядов задаются специальными полями микрокоманды — УСЛ1 и УСЛ0 соответственно.

Теперь о влиянии значения поля М на формирование адреса следующей микрокоманды.

Комбинации 00 и 01 задают соответственно микрооперации АПД и АПК — адрес перехода длинный и короткий. В обоих случаях правила формирования адреса стандартные; разница заключается только в том, что при АПД происходит загрузка разрядов РАПП[11:8] из РМК[45:48], а при АПК эти разряды не изменяются.

Комбинация 10 задаёт микрооперацию АПД/В и является первым из упомянутых исключений. Способ формирования адреса в данном случае зависит от результатов анализа условий, задаваемых полями УСЛ1 и УСЛ0: если хотя бы одно из условий соблюдается, выполняется микрооперация АПД (как если бы поле М содержало комбинацию 00), если условия не соблюдаются, во все разряды РАПП заносятся нули, т. е. производится переход на микрокоманду с нулевым адресом, с которой начинается микропрограмма выборки очередной команды (отсюда буква В в мнемонике данной микрооперации). Заметим, что если условие для анализа задаётся лишь одним из полей УСЛ1 и УСЛ0, а второе поле задаёт безусловное занесение в соответствующий разряд РАПП нуля или единицы, проверяется выполнение единственного условия. Как машина реагирует на случай, когда оба этих поля задают безусловное занесение, литература умалчивает; скорей всего, такие микрокоманды попросту не используются.

Комбинация 11 — второе исключение — задаёт два возможных способа перехода, что определяется анализом битов РМК[57:58] (два младших разряда поля АПМЛ):

  • если РМК[57:58] = 00, имеет место так называемый функциональный переход. Разряды РАПП[12:5, 0] принимают значения по обычным правилам (РАПП[12] изменяется микрооперациям поля УСТАНОВ, РАПП[11:8] не изменяются, РАПП[7:5] загружаются из трёх старших битов АПМЛ, а РАПП[0] определяется микрооперацией поля УСЛ0), а вот в разряды РАПП[4:1] заносится содержимое битов РВ[0:3], т. е. старшего полубайта операнда В АЛУ. Таким образом, функциональный переход позволяет выполнить ветвление сразу на 32 направления, что используется, например, для дешифрации кода команды;

  • если РМК[57:58] содержит любую другую комбинацию битов, содержимое всех разрядов РАПП загружается из регистра, кодируемого этими двумя битами: 01 задаёт регистр РВС, 10 — РВМ, 11 — РГРИ.

Регистры РВС и РВМ уже упоминались — они содержат адрес возврата из микропрерываний по запросам селекторного и мультиплексного канала соответственно; таким образом, загрузка их содержимого в РАПП обеспечивает возврат к микропрограмме, чьё выполнение было прервано запросом от канала.

Регистр РГРИ — это, на самом деле, комбинация из трёх регистров. Основное его назначение — хранить один из адресов обращения к оперативной памяти, но, как видим, он позволяет хранить и адрес микрокоманды, на которую нужно выполнить переход (адрес микрокоманды содержится в 13 младших разрядах этого регистра, старшие разряды игнорируются). Этот способ перехода применяется при проверке работы оборудования процессора.

Разработка микропрограмм

Хотя можно разрабатывать микропрограммы прямо в двоичном виде, удовольствие это, скажем так, сильно ниже среднего (разрабатывать обычную программу не на ассемблере, а прямо в машинном коде, как правило, ощутимо легче). Поэтому на практике разрабатывают и используют специальные программы, которые можно назвать микроассемблерами.

Представление о том, как микрокоманды ЕС-1020 записывались в документации, можно получить из приведённого рисунка. А вот информации о том, в каком виде они записывались для трансляции машиной, не приводится, как нет сведений и о самом трансляторе. Резонно предположить, что написан он был для ЭВМ «Минск-32» — лучшего из того, что на тот момент имелось в распоряжении разработчиков.

Запись микрокоманды в документации, скан из [1]
Запись микрокоманды в документации, скан из [1]

Литература

  1. В. В. Пржиялковский и др. Процессор ЭВМ ЕС-1020. Под общей редакцией А. М. Ларионова. — М., "Статистика", 1975.

  2. В. В. Пржиялковский и др. Каналы ввода-вывода ЭВМ ЕС-1020. Под общей редакцией А. М. Ларионова. — М., "Статистика", 1975.

Комментарии (34)