Общая структура процессора ЕС-2020
Центральная часть ЭВМ ЕС-1020 — процессор ЕС-2020 — включает три стойки, в которых размещаются следующие устройства:
вычислительное устройство (собственно центральный процессор) с двумя селекторными и одним мультиплексным каналами ЕС-2420;
оперативная память ЕС-3220 ёмкостью 64, 128, 192 или 256 Кбайт;
устройство питания ЕС-0821.
Для размещения эти трёх стоек вместе с навешиваемым на процессорную стойку пультом управления и размещаемым перед ней рабочим местом оператора ЭВМ, основной частью которого является стол с электронной пишущей машинкой ЕС-7070, выполняющей роль консольного терминала, требуется место размером 4300×2300 мм.
Помимо процессора и пультовой пишущей машинки, в состав основного комплекта ЕС-1020 входят:
устройство управления (УВУ, т. е. контроллер) накопителями на магнитных дисках (НМД) ЕС-5551 и два подключённых к нему НМД ЕС-5050, ЕС-5052 или ЕС-5056 (ёмкость каждого сменного пакета магнитных дисков составляет порядка 7,25 Мбайт);
УВУ накопителями на магнитной ленте (НМЛ) ЕС-5511 и четыре НМЛ ЕС-5010 или ЕС-5012;
устройство ввода с перфокарт ЕС-6012;
устройство вывода на перфокарты ЕС-7010;
алфавитно-цифровое печатающее устройство (АЦПУ, т. е. принтер) ЕС-7032;
устройство ввода с перфоленты ЕС-6022;
устройство вывода на перфоленту ЕС-7022.
Такая комплектация вполне достаточна для эффективной работы под управлением операционной системы ДОС ЕС — советского клона IBMовской DOS/360. Для работы ОС ЕС, она же OS/360, требуется большее количество дисков, однако для такой слабой машины применение ОС ЕС представляется не очень разумным, хотя и возможным технически. Заметим, что на модели 30 Системы 360, имевшей примерно такую же производительность, запустить OS/360 невозможно, так как «американка» не может иметь больше 64 Кбайт памяти, а OS/360 для нормальной работы требуется не менее 128 Кбайт (на 64 Кбайтах работать может только так называемый стартёр — специально обрезанная однозадачная версия системы, единственным назначением которой является генерация, т. е. сборка из модулей, «нормальной» системы для эксплуатации на данной конкретной машине).
Общая площадь машинного зала, в котором размещается процессор и основной комплект устройств, составляет 20–30 кв. м. Естественно, при подключении дополнительных устройств необходимо увеличить и площадь зала; кроме того, необходимо заботиться о кондиционировании воздуха (один только процессор потребляет порядка 7 кВт энергии).
Основными функциональными блоками процессора ЕС-2020 являются:
блок синхронизации;
блок микропрограммного управления;
блок регистров;
арифметико-логический блок, в литературе называемый «блоком арифметическим» (БА);
блок защиты;
блок прямого управления;
каналы ввода-вывода;
оперативная память;
пульт управления.
Как уже говорилось, оперативная память конструктивно расположена в отдельной стойке. Оборудование каналов ввода-вывода расположено в раме A стойки процессора, рама B занята, главным образом, постоянной памятью, хранящей микропрограммы, а почти всё остальное оборудование, составляющее собственно процессор, находится на раме C.
Общая структура процессора приведена на рисунке.
![Структурная схема процессора ЕС-2020, скан из [1] Структурная схема процессора ЕС-2020, скан из [1]](https://habrastorage.org/getpro/habr/upload_files/89e/0c0/668/89e0c06684ff30f36d16a3a88c0ef339.png)
Система синхронизации
ЕС-2020, как и абсолютное большинство процессоров, является синхронным: все основные операции выполняются в определённые промежутки времени, а их результаты запоминаются в регистрах по соответствующим тактовым импульсам. Длительность такта ЕС-2020 составляет 1 мкс, что соответствует тактовой частоте 1 МГц; она привязана к полуциклу оперативной памяти.
Формируемые синхросигналы
В течение такта блок синхронизации формирует четыре следующих друг за другом основных синхросигнала С1–С4, каждый длительностью 200 нс; интервалы между синхросигналами составляют 50 нс. Имеется упоминание, что в каких-то ситуациях интервал между С1 и С2 увеличивается до 100 нс, а весь такт, соответственно, до 1050 нс, но никаких подробностей об обстоятельствах такого увеличения и его предназначении нет, поэтому в дальнейшем изложении будем считать, что интервалы всегда равны 50 нс.
![Диаграмма выработки основных синхроимпульсов, скан из [2] Диаграмма выработки основных синхроимпульсов, скан из [2]](https://habrastorage.org/getpro/habr/upload_files/480/97d/930/48097d9303b7ce557a99d3fd191dde16.png)
Сигналы С1–С4 начинают формироваться с момента подачи питания и никогда не останавливаются, но непосредственно для синхронизации практически не используются. Вместо это из них вырабатываются четыре серии рабочих синхроимпульсов: ГИ1–ГИ4, ТИ1–ТИ4, СИ1–СИ4 и ХИ1–ХИ4, совпадающие с импульсами С1–С4, но разрешаемые или запрещаемые по мере необходимости.
Импульсы серии ГИ называются главными и вырабатываются всегда, за исключением случаев, когда процессор в результате возникновения машинной ошибки переходит в состояние так называемого тяжёлого останова, при котором останавливаются все серии синхроимпульсов, кроме основной серии С1–С4 (подробнее о переходе в тяжёлый останов будет сказано при обсуждении работы схем контроля машины; здесь же заметим, что такт, в котором был обнаружен сбой, в любом случае отрабатывает до конца, и синхронизация останавливается после выдачи последнего, четвёртого синхроимпульса). Импульсы ГИ введены больше для удобства, чем из реальной нужды: они используются для синхронизации операций, выполняемых независимо от того, какая из трёх остальных серий синхросигналов активна.
При обычном выполнении микропрограмм, помимо серии ГИ, выдаются сигналы серии ТИ, которые называются просто тактовыми импульсами и управляют почти всеми операциями в процессоре и мультиплексном канале, а также частью операций селекторных каналов.
Если при выполнении микрокоманды возникает какая-либо необычная ситуация, обнаруживаемая аппаратурой (скажем, попытка обращения к несуществующей ячейке памяти или машинный сбой, не приводящий к немедленному тяжёлому останову), в следующем такте выработка серии ТИ блокируется; вместо неё вырабатывается серия ХИ. Сигналы этой серии называются холостыми, хотя аппаратура при этом не совсем уж бездельничает: в течение такта ХИ производится выборка микрокоманды, с которой начинается микропрограмма обработки возникшей ситуации, и выполняются некоторые другие связанные с этим действия. Адреса первых микрокоманд, вызываемых в подобных ситуациях, жёстко фиксированы и определяются исходя из возникшего события. Как правило, после такта ХИ возобновляется генерация серии ТИ и начинается выполнение вызванной в такте ХИ микропрограммы, однако в ситуациях, когда возникает несколько необычных ситуаций, один за другим может быть выполнено несколько тактов ХИ, и в итоге будет вызвана самая приоритетная микропрограмма. Выполнению микропрограмм будет посвящена следующая статья, там эти вопросы будут рассмотрены подробнее.
Наконец, при появлении запроса на выборку или запись данных от одного из селекторных каналов блокируются и серия ТИ, и серия ХИ, и вырабатываются так называемые селекторные синхросигналы серии СИ. По этим сигналам селекторный канал выполняет обращение к основной памяти, а также модифицирует своё внутреннее состояние (адрес памяти, счётчик байтов и т. д.). В зависимости от ситуации для выполнения одного обращения к памяти требуется два или три такта СИ, после чего генерация этих импульсов прекращается, и процессор возвращается к выполнению тактов ХИ или ТИ. Таким образом, серия СИ имеет наивысший приоритет — выше даже, чем у ХИ, которая используется в том числе для вызова микропрограммы обработки аппаратных сбоев. Это необходимо для поддержания максимально возможной скорости обмена через селекторные каналы, что требуется для нормальной работы подключаемых к ним внешних устройств (в первую очередь, магнитных дисков).
Технически все описанные синхросигналы являются инверсными, в прямой вид они преобразуются прямо на ТЭЗах-потребителях.
Помимо перечисленных синхросигналов, в некоторых узлах требуются дополнительные сигналы, несколько задержанные относительно основных; они называются задержанными и носят обозначения вроде СИ2З. Такие сигналы формируются там, где они необходимы, из основных сигналов; о точных временных соотношениях для них абсолютно достоверной информации нет, но есть все основания считать, что задержанный сигнал имеет такую же длительность, как и основной (200 нс), но начинается на 125 нс позже.
Техническая реализация тактового генератора
Почти что принципиальная схема тактового генератора и формирователя серии С1–С4 вместе с временной диаграммой его работы приведена на следующих иллюстрациях.
![Схема генератора основных синхроимпульсов, скан из [1] Схема генератора основных синхроимпульсов, скан из [1]](https://habrastorage.org/getpro/habr/upload_files/aba/959/c09/aba959c09f8b1ab57372bb5536039157.png)
![Временная диаграмма работы генератора синхроимпульсов, скан из [1] Временная диаграмма работы генератора синхроимпульсов, скан из [1]](https://habrastorage.org/getpro/habr/upload_files/904/b83/b15/904b83b1525cd01942e8a30acb1dc1eb.png)
Для начала обратим внимание на обозначения компонентов. Логические элементы, входящие в состав микросхем, как видим, обозначены ПП1-1, ПП2-1 и так далее; почему они носят такие обозначения, я не знаю, — возможно, это соответствует стандартам оформления документации в начале 1970-х годов (позже цифровые микросхемы и их элементы стали обозначать буквами DD). Сами элементы внутри прямоугольников содержат надписи Т150, Т100, Т110 — это ни что иное, как принятое в документации на ЕС ЭВМ обозначение типов микросхем вместо К155ЛР1, ЛА3 и ЛА4 соответственно. Буква «Т» в данном случае означает тип логики — ТТЛ (в схемах на, скажем, ЕС-1035 первой идёт буква «Е» — эта машина была создана, в основном, на микросхемах ЭСЛ 500-й серии). Что означает следующая цифра 1, я не знаю; возможно, ей кодировалась 155-я серия. Наконец, две последние цифры — это две последние цифры обозначения микросхемы-прародителя фирмы TI: в данном случае это SN7450, 00 и 10 соответственно. (Вот интересно, как в документации на ЕС-1033 обозначали К155ХЛ1? — ведь это наша разработка, созданная специально под эту машину…)
Помимо микросхем и дискретных элементов, на схеме видим некий «делитель частоты», какой-то ТПИЧ и, наконец, странный, смахивающий по обозначению на автотрансформатор, элемент ЛЗ.
Назначение элемента ТПИЧ (судя по начальной букве Т, это какой-то триггер), как и функция входа Вх1, мне неизвестны; могу лишь предположить, что он либо управляет длительностью такта (вспомним, что в каких-то случаях первая четверть такта растягивается за счёт увеличения интервала между С1 и С2 с 50 до 100 нм), либо используется для полного останова синхронизации, что может использоваться в процессе наладки машины. При нормальной работе хотя бы один из его выходов, а может, и оба должны выдавать высокий уровень.
Собственно задающий генератор, формирующий частоту 2 МГц (см. временную диаграмму для точки «б», т. е. для выхода элемента ПП2-1: в течение 1 мкс через него проходят два полных импульса), собран на эмиттерных повторителях Т3 и Т4, микросхеме ПП1-1 (К155ЛР1), выполняющей, по сути, роль инвертора, и элемента ЛЗ. Последний, на самом деле, никакой не автотрансформатор, а линия задержки, о чём и говорит её обозначение ЛЗ. О её конструкции в доступных книгах по ЕС-1020 ничего не сказано, но берусь утверждать, что она выполнена в виде примерно 100-метрового отрезка (с кучей промежуточных отводов) коаксиального кабеля ИКМ-2 с нормированной задержкой распространения сигнала 4,5±0,45 нс/м и волновым сопротивлением 100 Ом. Моя уверенность проистекает из того, что именно так устроен тактовый генератор ЕС-1030, о которой я надеюсь подробнее рассказать позже; резонно предположить, что для машин, создававшихся в разных конструкторских бюро, но по идентичным технологиям и в одно и то же время, использовались если не идентичные, то близкие технические решения.
Чтоб лучше понимать работу генератора, необходимо учитывать внутреннее устройство микросхем ТТЛ, а точней, их входных и выходных каскадов. На рисунке приведена схема из документации на микросхему SN7450 (К155ЛР1); поскольку входные и выходные каскады всех стандартных схем ТТЛ устроены одинаково, она годится в качестве иллюстрации и для других типов микросхем.
![Принципиальная схема одного элемента микросхемы SN7450 (К155ЛР1); скан даташита TI Принципиальная схема одного элемента микросхемы SN7450 (К155ЛР1); скан даташита TI](https://habrastorage.org/getpro/habr/upload_files/412/8f6/303/4128f6303c6842e130a82e307585b7df.png)
Резисторы R1, R2 и R3 (см. схему генератора) должны иметь суммарное сопротивление для параллельного соединения, равное 100 Омам, — они выполняют роль терминаторов для линии задержки, чтобы не допускать переотражения сигнала от её концов, которое полностью нарушило бы всю работу генератора. Заметим также, что на нижний конец линии задержки через параллельно соединённые резисторы R2 и R3 подаётся питающее напряжение 5 В, а верхним концом линия подключена к выходу элемента ПП1-1. Непонятным остаётся лишь, зачем 5 В на кабель подаётся через два резистора R2 и R3, а не один с сопротивлением, равным сопротивлению R1.
Когда на выходе ПП1-1 устанавливается уровень логического нуля, напряжение на верхнем конце линии будет чуть выше земли (нижний транзистор выходного каскада элемента ПП1-1 открыт, верхний — закрыт); постоянное напряжение 5 В, прошедшее через R2 и R3 и линию задержки, этому помешать не может: оно целиком падает на суммарном сопротивлении R2, R3 и кабеля (резисторы в данном случае ещё и ограничивают максимальный ток: если на выход микросхемы ТТЛ, на котором установлен логический нуль, подать питающее напряжение, выходной каскад сгорит — это, возможно, самая распространённая причина выхода из строя микросхем ТТЛ при неаккуратных замерах под напряжением или из-за неправильно собранной схемы; современные микросхемы КМОП в этом плане более «идиотоустойчивы»).
Когда на выходе ПП1-1 устанавливается уровень логической единицы (верхний транзистор выходного каскада ПП1-1 открыт, нижний — закрыт), там должно присутствовать напряжение не менее 2,4 В — это требуется для надёжного переключения элемента ПП2-1. В данном случае мы имеем довольно сложный делитель напряжения: если пренебречь током, стекающим на землю через базы эмиттерных повторителей, подключённых к линии задержки (он мал по сравнению с другими токами), то остаётся подключение средней точки делителя резистором R1 к земле, а верхней точки — к питанию 5 В сразу тремя путями:
через 130-омный резистор внутри элемента ПП1-1, выходной транзистор (на нём упадёт 0,2–0,3 В) и диод (ещё примерно 0,7 В); из-за наличия этих полупроводниковых элементов можно считать, что резистор 130 Ом подключён не к 5 В, а к 4 В;
через кабель и параллельно соединённые резисторы R2 и R3;
через резистор в 4 кОм и pn-переход «база-эмиттер» входного транзистора элемента ПП2-1; поскольку на pn-переходе падает примерно 0,7 В, можно считать, что резистор подключён к напряжению 4,3 В.
Если считать, что R1 имеет сопротивление 200 Ом, а R2 и R3 — по 390 Ом, т. е. в сумме даёт почти те же 200 Ом (точней, 195 Ом — что в сумме с R1 даст требуемые ~100 Ом для терминаторов), плюс какое-то сопротивление имеет и кабель, то получим, что напряжение на выходе ПП1-1 будет примерно равным 3,2 В, что полностью удовлетворяет требованиям к уровням логических сигналов («единица» должна иметь напряжение не ниже 2,4 В). Если игнорировать подключение к питанию через линию задержки и ограничиться только локальными «подтяжками» (R1 и резисторами внутри ПП1-1 и ПП2-1), получим напряжение порядка 2,4 В, что тоже является допустимым, хотя и на нижнем пределе.
Переменные резисторы R7 и R9 в эмиттерных повторителях позволяют регулировать ток заряда конденсаторов C1 и C2 и тем самым влиять на длительность высокого и низкого уровней опорной частоты 2 МГц. Судя по диаграмме, при наладке машины их настраивают таким образом, чтобы получить скважность 2, т. е. равенство длительности высокого и низкого уровней.
Зачем нужны два повторителя, а не один, доподлинно неизвестно. У меня есть две гипотезы: либо для возможности изменения длительности периода синхронизации (тогда ТПИЧ выдаёт единицу на одном из своих выходов и нуль — на другом, что, по сути, включает один из повторителей и отключает другой), либо для возможности дополнительного растяжения импульса (время перехода из 1 в 0 и обратно у логических элементов ТТЛ различается). Более правдоподобным мне кажется первое предположение.
Теперь попробуем понять, как генератор работает. На момент включения питания конденсаторы C1 и C2 разряжены; соответственно, на входе ПП1-1 будет низкий логический уровень. Транзисторы эмиттерных повторителей в этот момент закрыты, поскольку для их открытия необходимо подать на их базы напряжение, превышающее таковое их эмиттерах на, грубо говоря, 0,6 В — а в условной середине линии задержки в этот момент напряжение пока ещё нулевое (напряжение питания с любого из концов линии «добежит» к точкам подключения баз транзисторов ещё довольно нескоро). Соответственно, конденсаторы C1 и C2 в этот момент могут заряжаться только через базовые резисторы 4 кОм входных каскадов ПП1-1, что будет продолжаться довольно долго из-за большого сопротивления этих резисторов и из-за того, что сему процессу мешают резисторы R6, R7 и R8, R9, «сливающие» часть тока на землю. Как результат, на выходе ПП1-1 сначала установится напряжение, примерно равное 2,4 В, — т. е. уровень логической единицы.
Далее высокое напряжение (2,4 В с выхода ПП1-1 и 5 В от источника питания) начнёт распространяться вдоль линии задержки, пока, в конце концов, не достигнет точек, к которым подключены базы транзисторов Т3 и Т4. Как только это случится, транзисторы откроются и скорость зарядки конденсаторов резко возрастёт: теперь ток на них поступает не только через резисторы внутри ПП1-1, но и от шины питания через транзистор и весьма небольшой переменный резистор (резисторы R6 и R8 по-прежнему будут по мере сил мешать заряду).
Когда заряд конденсаторов достигнет некоего критического уровня (2,4 В, а в реальности ниже, что зависит от индивидуальных свойств элемента ПП1-1; напряжение 2,4 В является лишь нижним пределом, гарантированно воспринимаемым входным каскадом логического элемента как высокий уровень, но тот вправе посчитать, что на него подали единицу, и раньше — лишь бы напряжение было выше 0,8 В, что уже гарантированно считается нулём), элемент ПП1-1 с некоторой задержкой (обычно примерно за 10 нс) переключится: на его выходе установится логический нуль, весьма близкий к реальному нулю. Этот новый уровень начнёт свой «спуск» по линии задержки и в конце концов закроет транзисторы эмиттерных повторителей. Заряженные конденсаторы начнут разряжаться через резисторы R6, R7 и R8, R9 соответственно, теперь в роли «тормозов» этого процесса выступают внутренние резисторы входных каскадов ПП1-1. Когда заряд опустится достаточно, чтобы ПП1-1 снова переключился, процесс начнётся заново, — т. е. мы действительно получили работающий генератор. Частота его определяется задержкой сигнала в линии и элементе ПП1-1, а скважность (соотношение времени высокого и низкого уровней в течение одного периода) — скоростью заряда-разряда конденсаторов.
Остальные элементы схемы служат для формирования четырёх фаз синхросерии С1–С4. Эмиттерные повторители Т1 и Т2 «экранируют» линию задержки от попадания в неё «лишнего» напряжения питания, что произошло бы, если б элементы ПП2-3 и ПП2-5 подключались к ней напрямую. Точки их подключения к линии задержки определяют моменты формирования сигналов на выходах этих элементов, что, в свою очередь, влияет на длительности выходных сигналов. «Делитель частоты» — это обычный счётный триггер, схема реализации которого была мной приведена в одной из предыдущих заметок (причём инвертор тактового сигнала счётного триггера в данном случае является внешним — это элемент ПП2-4); он просто делит поступающую на него частоту на два, а его выходные сигналы (прямой и инверсный) разрешают формирование из остальных исходных сигналов то одной пары выходных сигналов, то другой (см. диаграмму работы).
Заканчивая разговор о тактовом генераторе, укажем, что длительность выходных сигналов обеспечивается им с точностью всего лишь 10% (200±20 нс) — что требует достаточно широких интервалов между импульсами, а вот частота куда стабильней — 1000±3 кГц. Объясняется это тем, что длительность импульсов сильно зависит от времени переключения логических элементов, которое может довольно сильно изменяться в зависимости от температуры и колебаний напряжения источника питания; свою лепту в нестабильность вносят и изменения параметров транзисторов Т3 и Т4, а также значений сопротивлений резисторов — всё это тоже зависит от температуры. А вот частота определяется почти исключительно параметрами линии задержки, которые куда стабильней, — поэтому, один раз подобрав нужную длину кабеля, можно получить весьма точный генератор. Конечно, кварцевый был бы лучше — но по каким-то причинам в СССР они тогда в вычислительных машинах если и использовались, то редко; IBM применяла кварцы, судя по документации, с первых моделей Системы 360 (в имеющихся документах по модели 30 прямо говорится о кварцевом генераторе), а может, и раньше.
Формирование синхроимпульсов рабочих серий
Формирование рабочих серий тактовых импульсов ГИ, ТИ, ХИ и СИ, как уже говорилось, разрешается или запрещается в зависимости от определённых условий. Чтобы гарантировать правильные разрешение/запрет и при этом в любой ситуации выполнять текущий такт до конца, для каждой из синхросерий используется пара управляющих сигналов — для первой и второй половины такта; они носят обозначения 1ГИ, 2ГИ, 1ТИ, 2ТИ и так далее (не путать с названиями самих синхроимпульсов ГИ1–ГИ4 и т. д.!). Эти сигналы вырабатываются так называемым регистром тактов; в литературе того времени они часто называются «тактовыми потенциалами», поскольку действуют не фронтом (перепадом), а своим уровнем (потенциалом), разрешая или запрещая формирование тактовых сигналов.
Поскольку имеется четыре пары тактовых потенциалов, регистр тактов содержит восемь RS-триггеров управляющими цепями на их входах. Логическая схема регистра тактов приведена на рисунке; от принципиальной она отличается тем, что показывает логику работы узла, но не отражает его фактическое устройство (учитывая скудную элементную базу, принципиальная схема содержит значительно больше элементов). Например, на логической схеме присутствуют элементы 3ИЛИ, 4И и другие, которые отсутствуют среди элементной базы ЕС-2020; очевидно, что соответствующие функции реализованы комбинациями имеющихся элементов. Дефис («минус») перед именами сигналов означает инверсию.
![Логическая схема регистра тактов, скан из [2] Логическая схема регистра тактов, скан из [2]](https://habrastorage.org/getpro/habr/upload_files/3a6/00f/a1c/3a600fa1c43c1d4959f54f692f3065b8.png)
Как видно из схемы, триггеры первой половины такта изменяют своё состояние по сигналу С4, то есть в конце предыдущего такта перед началом нового, а триггеры второй половины — по сигналу С2, т. е. в конце первой половины текущего такта. Благодаря такому решению разрешение на генерацию, выданное на первую половину такта, «переползает» на вторую половину независимо от того, какие к тому времени сложились условия: все изменения будут учтены только для следующего такта. Кроме того, заблаговременное формирование тактового потенциала (С2 и С4 заканчиваются за 50 нс до С3 и С1) позволяет подать его на входы разрешения генерации рабочих серий во время «тихого» 50-нс промежутка между тактовыми импульсами и тем самым не нарушить длительность рабочих импульсов — она будет целиком определяться длительностью С1–С4, а не тактовых потенциалов. Наконец, логические схемы, управляющие формированием разрешений, необходимы только для первых триггеров каждой пары, вторые триггеры лишь копируют содержимое первых — этим достигается экономия корпусов микросхем.
Самое простое управление — для серии ГИ. Триггер сигнала 1ГИ устанавливается при отсутствии сигнала тяжёлого останова и сбрасывается при его наличии, чем достигается прекращение генерации главных синхроимпульсов при тяжёлом останове процессора.
Триггер 1СИ устанавливается, если есть сигнал запроса селекторного канала на обмен с основной памятью (в документации на аппаратуру ЕС ЭВМ каналы обычно именовались «бюрократическим» образом: «канал селекторный» и «канал мультиплексный», а не более естественным для русского языка образом, когда прилагательное стоит перед существительным, — отсюда аббревиатура КС), если при этом отсутствует сигнал тяжёлого останова; отсутствие запроса селекторного канала приводит к сбросу триггера. Заметим, что его явного сброса при появлении сигнала тяжёлого останова не предусмотрено: тяжёлый останов блокирует сигнал запроса в самом канале, что приводит к сбросу триггера 1СИ.
Триггер 1ХИ устанавливается, если есть запрос на этот такт (возникла какая-то необычная ситуация, требующая прерывания выполнения текущей микропрограммы и перехода на другую микропрограмму) и при этом нет ни сигнала тяжёлого останова, ни сигнала 1СИ. Сбрасывается этот триггер при отсутствии запроса на ХИ; как и в случае с СИ, возникновение тяжёлого останова блокирует запрос на ХИ.
Наконец, триггер 1ТИ устанавливается при отсутствии тяжёлого останова и сигналов 1СИ, 1ХИ, т. е. если не запрошено выполнение более приоритетного такта; сбрасывается он при наличии любого этих трёх сигналов.
Временная диаграмма работы регистра тактов показана на рисунке.
![Временная диаграмма работы регистра тактов, скан из [2] Временная диаграмма работы регистра тактов, скан из [2]](https://habrastorage.org/getpro/habr/upload_files/7e8/743/d93/7e8743d93027b7c4ce6f4815a894a3da.png)
Дальнейшее вроде бы просто: синхросигналы рабочих серий формируются путём объединения сигналов С1–С4 с тактовыми потенциалами схемой И, в результате будут сформированы только разрешённые серии. Но, как говорится, есть нюанс — и даже два. Первый из них связан с большими габаритами процессора и вытекающим из этого перекосом сигналов по мере их путешествия к потребителям, ну а вторым является ограниченная нагрузочная способность выходов микросхем. О борьбе с перекосами поговорим позже, а сейчас коснёмся второй проблемы.
Не очень опытные разработчики, имеющие дело только с КМОП-микросхемами, могут забывать про необходимость контроля за нагрузкой на выводы микросхем, а то и вообще не знать о возможных проблемах, — скажем, подросток, мастерящий что-то на «ардуинке», вряд ли столкнётся на практике с такими вещами (разве что попытается подключить прямо к микроконтроллеру целую гирлянду светодиодов), а в как бы учебных «видосиках» об этом обычно даже не упоминают. Однако микросхемы на биполярных транзисторах в этом плане более требовательны к квалификации разработчиков. В случае с ТТЛ дело, в первую очередь, в том, что подача логического нуля на вход такой микросхемы вызывает непрерывное протекание тока через резистор в базовой цепи входного транзистора (4 кОм для 155-серии) и его pn-переход «база-эмиттер» на коллектор нижнего выходного транзистора микросхемы-источника сигнала и через него — на землю. Если к выходу микросхемы подключить слишком много входов других микросхем, через выходной транзистор станет протекать слишком большой ток, и он сгорит. Если говорить о стандартных элементах 155-й серии, то к одному выходу можно подключать не более 10 входов (несколько эмиттеров одного многоэмиттерного входного транзистора рассматриваются как один вход, так как ток поступает на эти эмиттеры через один общий базовый резистор и не зависит от того, сколько именно эмиттеров заземлено). Легко догадаться, что у каждого синхросигнала могут быть сотни потребителей даже в довольно простом процессоре.
Заметим, что эта проблема есть и у КМОП-микросхем, но стоит она далеко не так остро: ток протекает через их входы только в момент смены состояния, заряжая или разряжая затворы входных транзисторов; после завершения переходных процессов ток практически прекращается. Поэтому в КМОП-схемотехнике объединение большого числа входов грозит не столько выходом из строя выходных каскадов источников (сопротивление открытого транзистора очень невелико, и он без последствий способен выдержать довольно большой ток, тем более протекающий крайне ограниченное время), сколько слишком долгим нарастанием-спадом сигнала из-за необходимости заряжать-разряжать большую ёмкость, — а соответственно, в возникновении лишних задержек и падении скорости переключения.
Очевидно, чтобы не допустить перегрузки источников синхросигналов, необходимо применять буферы. Для этого с ТЭЗа задающего генератора и формирователя сигналов С1–С4, распложенного в раме C, выдаются сразу три «копии» этих сигналов — по одной для каждой из трёх рам процессора. Судя по приводимому рисунку, этот ТЭЗ расположен в левом верхнем углу рамы, в ближайшей точке к оси, на которой она вращается, ведь к этому ТЭЗу подключается несколько кабелей, в том числе линия задержки. Неподалёку от него расположен ТЭЗ регистра тактов, на который подаются сигналы С1–С4 и с которого снимаются потенциалы тактов.
![Распределение тактовых импульсов на раме C, скан из [2] Распределение тактовых импульсов на раме C, скан из [2]](https://habrastorage.org/getpro/habr/upload_files/dfa/93e/039/dfa93e039d85eae920cc55219959bffd.png)
На рамы A и B сигналы С1–С4 подаются с помощью коаксиальных кабелей, что, во-первых, снижает влияние помех; во-вторых, даёт весьма предсказуемую задержку сигналов; а в-третьих, гарантирует определённое волновое сопротивление линии передачи, что позволяет, применяя резисторы-терминаторы, предотвратить возникновение переотражений. В пределах каждой из рам любые сигналы синхронизации (как С1–С4, так и рабочих серий) разводятся либо согласованными витыми парами (с резисторами-терминаторами), либо, если длина связи невелика, обычными проводниками. Потенциалы тактов, как и прочие сигналы, разводятся аналогичным образом, за исключением того, что между рамами они передаются по согласованным витым парам: для них нет столь жёстких требований по задержкам, как для синхроимпульсов.
Как видно из рисунка, сигналы С1–С4 и потенциалы тактов поступают на специальные ТЭЗы синхронизации (ТС), устанавливаемые в середине каждой полупанели, в которой имеются ТЭЗы, требующие подачи на них синхросигналов рабочих серий. Все ТЭЗы синхронизации являются идентичными, их задача — сформировать сигналы рабочих серий, вероятно, в двух копиях (для ТЭЗов, расположенных правее и левее ТЭЗа синхронизации). Кроме того, потенциально они могут служить для выравнивания перекосов синхросигналов за счёт подстраиваемой в процессе наладки машины задержки поступающих на них сигналов С1–С4. В более поздних ЭВМ, построенных на микросхемах ЭСЛ, такой способ применяется весьма широко, но на них используются компактные линии задержки в интегральном исполнении. Наличие подобных изделий на момент разработки ЕС-1020 и ЕС-1030 вызывает большие сомнения (иначе зачем использовать стометровый кабель для генерации синхросигнала?); кроме того, частота синхронизации этих машин весьма невелика, что, в общем-то, позволяет обойтись без дополнительных мер: вряд ли задержки синхросигналов превышают 15, максимум 20 нс, что не очень заметно по сравнению с длительностью синхросигналов не только для ЕС-1020, но и для ЕС-1030, частота процессора которой лишь в полтора раза больше — период следования синхросигналов составляет 670 нс (для сравнения: в последнем крупносерийном советском мэйнфрейме, ЕС-1130, период синхронизации составляет 160 нс, а в самых высокопроизводительных ЕСках — ещё раза в два меньше).
С ТЭЗов синхронизации рабочие серии синхроимпульсов расходятся по логическим ТЭЗам, ради которых, собственно, они и были сформированы. Однако, поскольку на каждом логическом ТЭЗе обычно имеется несколько логических элементов, использующих синхроимпульсы, входной синхросигнал сначала подаётся на буферный логический элемент, который заодно инвертирует импульс.
Поскольку потребителей сигналов синхронизации много, а ставить множество буферов — дорого, резонно предположить, что в их роли выступают не обычные логические элементы (скажем, К155ЛА3), а элементы 4И-НЕ с повышенной нагрузочной способностью типа К155ЛА6 (SN7440): если для обычного элемента ТТЛ максимальный выходной ток низкого уровня составляет 16 мА, то у ЛА6 — в три раза больше, 48 мА; соответственно, к одному выходу ЛА6 можно подключить до 30 входов. Кроме того, у них несколько меньше резистор в верхнем плече выходного каскада (100, а не 130 Ом), что позволяет быстрее переключаться из низкого уровня в высокий. Заметим, что максимальный выходной ток высокого уровня в данном случае особой роли не играет: в силу особенностей схемотехники ТТЛ, ограничителем нагрузочной способности является именно ток низкого уровня.
Завершая разговор о схемотехнике системе синхронизации, кратко коснёмся элемента задержки, используемого, по всей вероятности, для формирования задержанных импульсов. Два таких элемента, никак не связанных между собой, размещаются вместе на одном ТЭЗе. «Полупринципиальная» схема одного элемента приведена на рисунке. Помимо собственно задержки (125±15 нс), он гарантирует длительность формируемого импульса отрицательной полярности (200±15 нс).
![Схема и временная диаграмма элемента задержки, скан из [1] Схема и временная диаграмма элемента задержки, скан из [1]](https://habrastorage.org/getpro/habr/upload_files/a07/d38/b7a/a07d38b7a8e829a57f02c5a8b4887403.png)
Порядок выполнения операций в течение такта
Общая временная диаграмма работы процессора на протяжении трёх тактов приведена на рисунке.
![Общая временная диаграмма работы процессора, скан из [2] Общая временная диаграмма работы процессора, скан из [2]](https://habrastorage.org/getpro/habr/upload_files/4f4/dea/c21/4f4deac2114827e4266fe83207ff1ce9.png)
Во время такта выполняется микрокоманда, выбранная из микропрограммной (постоянной) памяти в предыдущем такте, и производится выборка микрокоманды, которая будет выполнена в следующем такте. Именно по этой причине при необходимости сменить выполняемую микропрограмму из-за возникновения необычной ситуации (сбой, запрос на обслуживание со стороны канала и т. п.) вместо такта ТИ выполняется такт ХИ.
Как можно видеть на диаграмме, в начале второй четверти такта, т. е. по импульсу ТИ2, производится занесение адреса следующей микрокоманды и запуск её считывания из постоянной памяти; считывание заканчивается к концу такта, после чего микрокоманда принимается в регистр микрокоманды и вступает в действие в самом конце текущего такта, когда уже все тактовые импульсы завершены — т. е., по сути, в начале следующего такта.
На протяжении обоих импульсов ТИ1 и ТИ2, включая промежуток между ними, производится приём информации во входные регистры арифметико-логического устройства (БА), с чего начинается обработка данных. Результаты появляются на выходе довольно быстро — в середине третьей четверти такта, во время активности импульса ТИ3; их приём в регистр назначения происходит, как правило, по импульсу ТИ4.
Если при выполнении микрокоманды требуется обращение к оперативной памяти (не обязательно к основной памяти, т. е. памяти, видимой программисту, — в состав оперативной памяти машины, как увидим позже, входят также два «внутренних» блока памяти специального назначения), то оно начинается с занесения адреса требуемой ячейки и другой необходимой информации в соответствующие регистры, после чего инициируется собственно выборка или запись информации. В случае выборки она завершается к самому концу такта, её приём в регистр данных памяти производится по задержанному синхроимпульсу ТИ4З. Заметим, что точно так же обращение к памяти производится со стороны селекторного канала, только при этом используются синхроимпульсы серии СИ, а не ТИ, поскольку в такой ситуации обменом управляет не собственно процессор, а селекторный канал.
Оценка системы синхронизации
Если не считать задержанных импульсов, работа процессора организуется с помощью четырёх серий синхросигналов (три из которых вырабатываются по мере необходимости) по четыре сигнала в каждой. Безусловно, эта система слишком сложна, особенно для столь простого процессора. Одной из причин излишней сложности, вероятно, была неопытность разработчиков — не в смысле технической неграмотности, конечно (к тому времени они создали ряд успешных вычислительных машин, в том числе самые популярные в СССР ЭВМ второго поколения серии «Минск»), а в смысле отсутствия опыта работы с микросхемами, что осложнялось требованием быстро создать машину незнакомой, очень сложной по сравнению с тем же «Минском» и во многом революционной архитектуры; косвенно эту гипотезу подтверждает тот факт, что, хотя следующие машины, созданные тем же коллективом, стали сложней и намного производительней, система синхронизации в них стала ощутимо проще. Можно добавить и неуверенность в технических характеристиках отечественных микросхем, только-только запущенных в производство. Но часть характеристик системы синхронизации, безусловно, объясняется чисто техническими причинами, на которых остановимся чуть подробнее.
В идеальном мире сигналы рабочих серий полностью совпадали бы с исходными сигналами С1–С4 и отличались бы только тем, что они включаются или выключаются по мере необходимости, а С1–С4 вырабатываются непрерывно. В реальном же мире приходится считаться с задержками, вносимыми на всех этапах передачи синхроимпульсов потребителям — и логическими элементами, используемыми для управления синхронизацией, и цепями передачи синхросигналов через всю стойку. В результате синхросигнал приходит к потребителю не просто сдвинутым относительно исходного, но ещё и в той или иной степени перекошенным (опережающим или запаздывающим) по сравнению с тем же сигналом, но поступившим другим потребителям: задержка распространения сигнала зависит от пройденного расстояния и от не всегда стабильных и предсказуемых индивидуальных характеристик проводников и логических элементов. Именно этим, а также относительно невысокой стабильностью генератора синхросигналов объясняется весьма большая — 50 нс — задержка между двумя соседними импульсами: она гарантирует, что перекосы не приведут к тому, что в одной части машины уже действует следующий синхросигнал, а в другой — ещё активен предыдущий.
![Схема триггера-защёлки Схема триггера-защёлки](https://habrastorage.org/getpro/habr/upload_files/a03/8f9/6f1/a038f96f1c19a7dd1f018b30507fce7c.png)
Активный уровень сигналов (200 нс) тоже представляется слишком широким. В типичном тактируемом триггере, собранном из отдельных логических элементов, достаточно длительности синхросигнала примерно 100 нс: она определяется учетверённой задержкой распространения через логические элементы (применительно к 155-й серии она в худшем случае составляет 22 нс на каждый элемент, в типичных же условиях она примерно вдвое меньше) и временем задержки в цепях печатной платы, которым можно в данном случае пренебречь. Четырёхкратная задержка необходима из-за того, что сигналу приходится проходить через один или два управляющих логических элемента и затем через два логических элемента, образующих собственно триггер (см. схему триггера-защёлки). Таким образом, длительность активного уровня синхросигналов в процессоре ЕС-2020 примерно вдвое больше, чем необходимо из чисто технических соображений. Кстати, для сравнения: в защёлках, реализованных в рамках одной микросхемы (К155ТМ5 и ТМ7, «в девичестве» SN7477 и SN7475 соответственно) требуемая ширина тактового импульса составляет всего 20 нс, т. е. даже меньше, чем наихудшая задержка логического элемента той же 155-й серии; это объясняется, в первую очередь, тем, что логические элементы, не имеющие выхода наружу, работают на строго определённую нагрузку с заранее известными параметрами, поэтому они могут быть оптимизированы.
Можно предположить, что в этом случае разработчики дважды перестраховались: 1) на случай проблем с задержками в микросхемах (я не располагаю сведениями, насколько временные характеристики первых партий 155-й серии соответствовали значениям, приводимым в даташитах TI 1970-х и в советских справочниках второй половины 1980-х годов, знаю только об их весьма невысокой надёжности — эта проблема была в целом решена к середине 1970-х, когда производство ЕС-1020 уже сворачивалось); 2) на случай, если в процессе разработки для управления триггерами потребуется больше слоёв логики (изменить синхронизацию в ПЛИС — это поправить пару строчек кода на каком-нибудь там Верилоге; изменить в реальной машине 1970-х годов — это резать дорожки печатных плат, припаивать провода, навесным монтажом добавлять детали, проверять, снова резать и припаивать… а потом перечерчивать на кульмане принципиальные схемы и трассировку плат). Кроме того, сам по себе длительный активный уровень синхросигнала не мешает: конечно, управляемые им защёлки будут во время действия синхросигнала передавать свои входные сигналы на выходы, но это не приведёт к преждевременному переключению расположенных далее защёлок, поскольку они управляются другими синхросигналами, не перекрывающимися с данным. Если добавить к этому, что выбранные количество импульсов в такте, длительность одного импульса и интервал между соседними импульсами успешно вписываются в выбранную длительность такта, определяемую полуциклом памяти (1 мкс), то станет ясно, что рисковать сроками и даже успешностью проекта, пытаясь сокращать эти времена, разработчикам никакого смысла не было.
Кстати, о длительности такта. Её привязка к скорости работы оперативной памяти является одним из ошибочных решений, принятых разработчиками, и не позволяет в полной мере реализовать скоростной потенциал микросхем 155-й серии. Этот недостаток был учтён в последующих разработках, в частности, в ЕС-1022.
Возникает ещё один вопрос: даже если отбросить разное назначение серий синхроимпульсов (от целой их кучи в дальнейшем тоже отказались), зачем вообще потребовалось четыре отдельных синхроимпульса в каждом такте, ведь в современных процессорах (во всяком случае, в простых, — например, в Cortex-M3) используется единственный тактовый сигнал? В случае процессора ЕС-2020, как мы уже видели, такой выбор обусловлен «раскладкой» отдельных действий в течение такта и связанной с этим необходимостью запоминать промежуточные результаты в разные моменты времени. Но и другие старые машины используют если не всегда, то почти всегда как минимум двухфазную синхронизацию, и этому имеется как минимум одна чисто техническая причина.
Работа любого цифрового автомата, в том числе процессора, принципиально сводится к тому, что некоторая информация поступает с выхода входного регистра на некую комбинационную схему, где за определённое время преобразуется в выходную информацию, запоминаемую в выходном регистре для использования в последующих тактах (использование весьма большого числа промежуточных ступеней, как в ЕС-2020, не обязательно, — достаточно одной ступени, что и имеет место в процессорах с однофазной синхронизацией). Чтобы информация была обработана и сохранена правильно, необходимо гарантировать, что весь промежуток времени от начала обработки до завершения сохранения результата в выходном регистре состояние выходов входного регистра остаётся постоянным. Вместо отдельных входного и выходного регистров можно обойтись одним общим, который будет принимать результат от комбинационной схемы и одновременно снабжать её исходными данными, но для этого:
этот регистр должен быть либо выполнен на флип-флопах, а не защёлках, либо реализован по структуре «мастер-помощник» (master-slave), поскольку состояние его выхода должно меняться лишь в момент завершения одного такта и начала следующего (по фронту синхросигнала, а не по его уровню);
необходимо гарантировать, чтобы задержки в комбинационной схеме были таковы, что её выход не успел бы изменить своё состояние при уже изменившемся (из-за занесения информации в регистр) входе до тех пор, пока информация ещё не запомнена надёжно, ведь сохранение выполняется не мгновенно — должны соблюдаться требования по временам предустановки и удержания сигналов на входах.
Когда вся схема реализована на одном кристалле микросхемы, разработчик, в принципе, может полагаться на достаточно точные значения ёмкостей и сопротивлений, длины связей и прочие параметры, влияющие на «времянку». Однако в случае реализации на дискретных элементах гарантировать все эти параметры в очень строгих рамках становится намного сложней, а в общем случае — невозможно. Уместно вспомнить и тот факт, что документация на микросхемы, в том числе на 155-ю серию (как и на SN74), указывает максимальное и типичное времена распространения сигнала через элементы, но не указывает минимальное, а соответственно, разработчик не может полагаться на то, что при изменении входного сигнала какой-нибудь К155ЛА3 состояние её выхода не изменится, скажем, уже через 1 нс, — он может рассчитывать лишь на то, что в наихудших условиях это изменение произойдёт не позже, чем через 22 нс (при типичном времени в 11 нс). Соответственно, однофазная синхронизация на «рассыпном» процессоре, скорей всего, окажется недостаточно надёжной, а вот двухфазная при правильно выбранных параметрах гарантирует неизменность входных сигналов комбинационной схемы до надёжной фиксации выходных, так как занесение информации во входные и выходные регистры осуществляется по разным, разнесённым во времени синхросигналам. В принципе, можно считать, что при двухфазной синхронизации мы имеем дело с триггерами структуры «мастер-помощник», чьи защёлки «размазаны» между комбинационными схемами и управляются не одним синхросигналом в прямом и инверсном виде, а двумя неперекрывающимися сигналами. Заметим, что по числу логических элементов, необходимых для реализации регистров, двухфазная синхронизация примерно эквивалентна однофазной: один флип-флоп или триггер «мастер-помощник» примерно вдвое сложней защёлки. (В порядке лирического отступления: а не теми же проблемами объясняется использование двухфазной синхронизации в микропроцессоре i8080, он же К580ИК80, он же КР580ВМ80А?..)
Напоследок заметим, что проблема перекоса сигналов синхронизации в полной мере присутствует и в современных микросхемах, меняются лишь абсолютные величины. Если на современной ПЛИС делать эмулятор почти любой древней ЭВМ, сохраняя структуру и временные параметры последней, то можно пренебречь любыми задержками и перекосами и вообще считать, что сигналы распространяются мгновенно, — ведь ПЛИС рассчитана на частоты в сотни мегагерц, а длины её внутренних связей несопоставимы с кабелями в стойках. Но как только речь заходит о достижении современных скоростей, все эти проблемы дают о себе знать, — и, хотя сейчас их анализом и учётом занимаются (обычно достаточно успешно) инструменты синтеза, грамотному разработчику нужно, по меньшей мере, их знать и хорошо понимать, чтобы при необходимости «помочь» синтезатору.
Список литературы
В. В. Пржиялковский и др. Электронная вычислительная машина ЕС-1020. Под общей редакцией А. М. Ларионова. — М., "Статистика", 1975.
В. В. Пржиялковский и др. Процессор ЭВМ ЕС-1020. Под общей редакцией А. М. Ларионова. — М., "Статистика", 1975.