Антик М.И. 11_03_91 МИРЭА УПРАВЛЯЮЩИЕ АВТОМАТЫ. ОСНОВНЫЕ СПОСОБЫ АДРЕСАЦИИ МИКРОКОМАНД Начнем с рассмотрения простейшего варианта управления, в котором не участвуют предикатные функции (переменные), т.е. в микропрограмме переходы только безусловные. В таком случае УА является автономным синхронным автоматом. В более общем случае функция переходов УА зависит от предикатных переменных, но УА должен быть автоматом Мура. Условимся о некоторых ограничениях, позволяющих упрос- тить схему на начальных этапах проектирования (от которых легко впоследствии и отказаться): - на каждом шаге процесса вычислений ветвление может осу- ществляться только по одной двузначной предикатной перемен- ной (т.е. разветвление возможно лишь на два направления); - начальные значения всех регистров УА являются нулевыми. Впредь на схемах УА не будем показывать цепей установки на- чальных значений. Для реализации в самом общем случае микропрограмм произ- вольной структуры будем строить УА так, чтобы основным мате- риальным носителем управляющей (автоматной) компоненты мик- ропрограммы являлась бы управляющая память (реализованная, например, в виде ПЗУ). В этом случае структура слова управля- ющей памяти - МИКРОИНСТРУКЦИЯ - состоит из двух составных частей: микрокоманды и адресной части. Адресная часть микроинструкции содержит информацию, поз- воляющую в следующем такте работы выбрать ( указать ) новый адрес управляющей памяти. Реализация именно этого момента яв- ляется основным предметом дальнейшего рассмотрения и опреде- ляет, в основном, структуру, объем аппаратуры и быстродей- ствие УА. При этом подлежит рассмотрению реализация следующих типов переходов как между шагами алгоритма, так, соот- ветственно, и между микроинструкциями: - безусловный переход, - условный переход, - функциональный переход, - переход к микроподпрограмме с возвратом. Будем изучать работу управляющих автоматов различной структуры, демонстрирующие основные применяемые варианты ад- ресации микроинструкций, на следующем алгоритме: ███ ┌───┐│ │ ┌VV─┐ n1│ │m1 │ n1 { m1 } │ └─┬─┘ │ ┌─V─┐ n2 { m2 } n2│ │m2 │ │ └─┬─┘ g1 <> │ │<──┐ │ ┌V┐ 0│ n3 { m3 } g1│ < a >─┘ │ └┬┘ n4 { m4 } │ 1│<────┐ │ │┌───┐│ g2 <> │ ┌─VV┐ ││ n3│ │m3 │ ││ n5 { m5 } │ └─┬─┘ ││ │ ┌─V─┐ ││ g3 <> n4│ │m4 │ ││ │ └─┬─┘ ││ │10 ┌V┐ 01││ g2└──< ab>──┘│ 11 └┬┘ │ 00│┌───┐│ ┌─VV┐ ││ n5 │m5 │ ││ └─┬─┘ ││ ┌V┐ 0 ││ g3 < a >──┘│ └┬┘ 1 │ └─────┘ Укажем на некоторые особенности этого алгоритма: Опера- тор перехода (предикатная вершина), помеченный меткой g1, называют ждущим. Оператор, помеченный меткой g2, использует для перехода 4-значный предикат, что не удовлeтворяет выше- указанному ограничению. Поэтому потребуются эквивалентные преобразования алгоритма для того, чтобы удовлетворить этому ограничению. Алогоритмы эквмвалентны, если они преобразуют информа- цию одинаковым образом. Наиболее распространенным приемом эк- вивалентного преобразования алгоритмов и микропрограмм явля- ется включение микроблоков и, соответственно, тактов, в кото- рых не выполняется модификация памяти ОА - "нет операции". Но и это преобразование может быть не эквивалентным - см.при- мер при определении понятия "микроблок"; кроме того, следует учесть различное поведение во времени предикатных переменных типа "РА" и "РВ" - см. раздел "Взаимодействие ОА и УА". ( Запретить модификацию памяти можно, вводя условную синхронизацию ОА, но для этого должна быть изменена микроко- манда, предшествующая добавляемому такту.) СХЕМА С АДРЕСНЫМ ПЗУ Начнем рассмотрение с управляющего автомата, структура которого совпадает с канонической структурой автомата Мура. ┌───┐ ┌───┐ ┌┬──┬┐ ┌───┐ │MUX│ q │ROM│ ││RG││ │ROM│ a─>┤0 ├──>┤ │ S' ││ ││ S │ │ Y b─>┤1 │ │ ╞═══>╡│ │╞═╦>╡ ╞══> │ │ ╔>╡ │ ││ ││ ║ │ ├─┐ │А │ ║ │ 2 │ C││ ││ ║ │ 1 │ │ └A──┘ ║ └───┘ ─/┴┴──┴┘ ║ └───┘ │ │ H ╚═════════════════╝ │ └──────────────────────────────┘ Функцию перехода и функцию выхода реализуем в виде ПЗУ. В литературе, рассматривающей микропрограммные устройства уп- равления, УА с такой структурой называют микропрограммным ав- томатом Уилкса. В ПЗУ (ROM_1), реализующем функцию выхода, следует раз- местить микрокоманды; при этом их распределение по определен- ным адресам совершенно произвольно, за исключением начальной микрокоманды, которая в силу вышеуказанного ограничения дол- жна располагаться по нулевому адресу. ПЗУ (ROM_2), реализующее функцию переходов автомата, можно трактовать как адресное ПЗУ. Ячеек в адресном ПЗУ в два раза больше, чем в ПЗУ микрокоманд. Каждой ячейке ПЗУ микро- команд соответствуют две ячейки в адресном ПЗУ, в которых за- писываются два альтернативных адреса. n1 { m1 } S│ Y H│ S q│S'│ ─┼────┤ ───┼──┤ n2 { m2 } 0│m1 x│ 0 0│ 1│ │ │ 0 1│ 1│ <> │ │ │ │ 1│m2 0│ 1 0│ 2│ d1 { m0 } │ │ 1 1│ 3│ │ │ │ │ <> 2│m0 0│ 2 0│ 2│ │ │ 2 1│ 3│ n3 { m3 } │ │ │ │ 3│m3 x│ 3 0│ 4│ n4 { m4 } │ │ 3 1│ 4│ │ │ │ │ <> 4│m4 0│ 4 0│ 5│ │ │ 4 1│ 0│ d2 { m0 } │ │ │ │ 5│m0 1│ 5 0│ 6│ <> │ │ 5 1│ 4│ │ │ │ │ n5 { m5 } 6│m6 0│ 6 0│ 6│ │ │ 6 1│ 4│ <> ─┴────┘ ───┴──┘ Конвейерный вариант схемы с таким же способом адресации должен программироваться с учетом замечаний, сделанных в раз- деле "Взаимодействие ОА и УА". Кроме того, ограничения на расположение микрокоманд в ROM_1 выглядят несколько иначе: по 0-адресу в ROM_1 можно расположить микрокоманду, после кото- рой безусловно выполняется начальная микрокоманда. ┌───┐ q ┌───┐ ┌───┐ ┌┬──┬┐ │MUX├──────────>┤ROM│ │ROM│Y ││RG││ Y' a─>┤0 │ C │ │ S │ ╞══>╡│ │╞══> b─>┤1 │ ─/┬┬──┬┐ │ ╞═╦>╡ │H ││ ││ │ │ ╔>╡│RG│╞═>╡ │ ║ │ ├──>┤│ │├┐ │А │ ║ ││ ││S'│ 2 │ ║ │ 1 │ C││ │││ └A──┘ ║ └┴──┴┘ └───┘ ║ └───┘ ─/┴┴──┴┘│ │H' ╚═══════════════╝ │ └────────────────────────────────────┘ СХЕМА С ЯВНЫМ УКАЗАНИЕМ АЛЬТЕРНАТИВНЫХ АДРЕСОВ ╔═══════════════════════════╗ ║╔═════════════════════════╗║ ║║ ┌───┐ ┌┬──┬┐ ┌───┐A0║║ ║║ │MUX│ ││RG││ │ROM╞══╝║ ║╚>╡0 │ ││ ││A │ │A1 ║ ┌───┐╚═>╡1 ╞═══>╡│ │╞═>╡ ╞═══╝ │MUX│ │ │ ││ ││ │ ╞══>Y a─>┤0 │ │А │ C││ ││ │ ├┐ b─>┤1 │ └A──┘ ─/┴┴──┴┘ └───┘│H │А ├────┘ │ └A──┘ │ └────────────────────────────┘ Конвейерный вариант ╔════════════════════════════╗ ║╔══════════════════════════╗║ ║║ ┌───┐ ┌────┐A0 ┌┬──┬┐A0'║║ ║║ │MUX│ │ROM ╞══>╡│RG│╞═══╝║ ║║ │ │ │ │A1 ││ ││A1' ║ ║╚>╡0 │A │ ╞══>╡│ │╞════╝ ┌───┐╚═>╡1 ╞═>╡ │ Y ││ ││ Y' │MUX│ │ │ │ ╞══>╡│ │╞══> │ │ │ │ │ │ H ││ ││ a─>┤0 │ │А │ │ ├──>┤│ │├┐H' b─>┤1 │ └A──┘ └────┘ ─/┴┴──┴┘│ │А ├────┘ C │ └A──┘ │ └────────────────────────────┘ Эта схема отличается от предыдущей тем, что, по сущес- тву, тот же способ адресации выполнен с использованием только одного ПЗУ. В этом варианте альтернативные адреса записывают- ся в той же микроинструкции, что и микрокоманда. n1 { m1 } A│ Y H A0 A1│ ─┼──────────┤ n2 { m2 } 0│m1 x 1 1│ │ │ <> 1│m2 0 2 3│ │ │ d1 { m0 } 2│m0 0 2 3│ │ │ <> 3│m3 x 4 4│ │ │ n3 { m3 } 4│m4 0 5 0│ │ │ n4 { m4 } 5│m0 1 6 4│ │ │ <> 6│m5 0 6 4│ ─┴──────────┘ d2 { m0 } <> n5 { m5 } <> СХЕМА С ЧАСТИЧНОЙ ЗАПИСЬЮ АДРЕСА Последовательный вариант Конвейерный вариант ┌────────────────────────┐ ┌─────────────────────────┐ │ ┌───┐ ┌┬──┬┐ ┌───┐│e │ ┌───┐ ┌───┐ e ┌┬──┬┐│ │ │MUX│ q ││RG││q'│ROM├┘ │ │MUX│ q'│ROM├────>┤│RG│├┘ └>┤0 ├────>┤│ │├─>┤ │ Y └>┤0 ├──>┤ │ Y ││ ││Y' a─>┤1 │ S ││ ││S'│ ╞══> a─>┤1 │ S'│ ╞════>╡│ │╞═> b─>┤2 │ ╔══>╡│ │╞═>╡ ╞══╗ b─>┤2 │ ╔>╡ │ H ││ ││ │А │ ║ C││ ││ │ ╞╗ ║ │ │ ║ │ ├────>┤│ │╞═╗ └A──┘ ║ ─/┴┴──┴┘ └───┘║ ║ │ │ ║ │ │ S ││ ││ ║ ║ H ╚════════════════╝ ║ │А │ ║ │ ╞════>╡│ │╞╗║ ╚═══════════════════════╝ └A──┘ ║ └───┘ ─/┴┴──┴┘║║ ║ H' ║ C ║║ ║ ╚═════════════════╝║ ╚═══════════════════════╝ При этом способе адресации альтернативные адреса отлича- ются только одним разрядом ( в данном варианте - младшим ), формируемым входным сигналом. Остальные разряды адреса указы- ваются вместе с микрокомандой в одной и той же микроинструк- ции. При безусловном переходе в данном варианте схемы младший разряд также указывается в микроинструкции. При адресации одного и того же микроблока различными операторами условного перехода может возникнуть КОНФЛИКТ АДРЕСАЦИИ. В этом случае одну и ту же микроинструкцию приходится располагать в различ- ных ячейках управляющей памяти. Если различные операторы ус- ловного перехода одними и теми же предикатными значениями указывают на одни и те же микроблоки, то нет и конфликта ад- ресации. Адрес n1 { m1 } --(0,0),(2,1) S'q'│ Y H S e│ ────┼────────┤ n2 { m2 } --(4,0) 0 0 │m1 0 4 0│ │ │ <>-- 1,x 0 1 │m4 1 2 x│ │ │ d1 { m0 } --(1,0) 1 0 │m0 1 1 x│ │ │ <>-- 1,x 1 1 │m3 0 0 1│ │ │ n3 { m3 } --(1,1),(3,1) 2 0 │m0 2 3 x│ │ │ n4 { m4 } --(0,1) 2 1 │m1 0 4 0│ │ │ <>-- 2,x 3 0 │m5 1 3 x│ │ │ d2 { m0 } --(2,0) 3 1 │m3 0 0 1│ │ │ <>-- 3,x 4 0 │m2 1 1 x│ │ │ n5 { m5 } --(3,0) ────┴────────┘ <>-- 3,x Распределять микроинструкции по ячейкам памяти удобно в следующем порядке: - связать с различными операторами условного перехода, кон- фликтующими между собой по адресации, различающиеся между со- бой старшие разряды адреса; - распределить микроблоки по ячейкам памяти с учетом назнач- енных старших разрядов адреса и входных значений; - оставшимся нераспределенным микроблокам назначить произ- вольные свободные адреса. СХЕМА С СОКРАЩЕННЫМ ТАКТОМ Использование этой схемы позволяет при сохранении пре- имуществ последовательного варианта взаимодействия сократить наиболее длинные цепи, общие для ОА и УА, до длины цепей кон- вейерного варианта. ┌──────────────────────────────────┐ ──┬──────────┬ │ ╔══════════════════════════╗│ ROM_0 A'│ Y H A e│ │ ║ ┌────┐ ║│ ──┼──────────┼ │ ║ │ROM ╞═╬A ║│ 0 │m1 0 4 0│ │ ║ │ ├─╫e ║│ 1 │m0 1 1 x│ │ ╠>╡ ╞═╬Y ┌───┐ ┌┬──┬┐║│ 2 │m0 2 3 x│ │ ║ │ ╞═╬H │MUX│ ││RG│╞╝│ 3 │m5 1 3 x│ │ ║ │ 0 │ ╚══>╡0 │ ││ │├─┘e' 4 │m2 1 1 x│ │ A'║ ├────┤ │ │ ││ ││ ──┴──────────┘ │ ║ │ROM ╞═╬A │ ╞══>╡│ │╞══>Y' ──┬──────────┬ │ ┌───┐║ │ │ ╠══>╡1 │ ││ ││ ROM_1 A'│ Y H A e│ │ │MUX│╚>╡ ├─╫e │А │ C││ │╞╗H' ──┼──────────┼ └>┤0 │ │ ╞═╬Y └A──┘ ─/┴┴──┴┘║ 0 │m4 1 2 x│ a>┤1 │ │ 1 ╞═╬H │ ║ 1 │m3 0 0 1│ b>┤2 │ └────┘ │ ║ 2 │m1 0 4 0│ │А ├──────────────┘ ║ 3 │m3 0 0 1│ └A──┘ ║ ──┴──────────┴ ╚══════════════════════════════╝ Способ адресации, по существу, такой же, как и в преды- дущей схеме. Только в рассматриваемой схеме входной сигнал управляет выбором одного из двух блоков ПЗУ (можно интерпре- тировать этот сигнал как старший разряд адреса). СХЕМА С РЕГУЛЯРНОЙ АДРЕСАЦИЕЙ ┌───┐ ┌──┐ 0W- +1 │MUX├─>┤M2├──┐ 1W- загрузка 0─>┤0 │┌>┤ │ ─V┬┬──┬┐ ┌───┐ Y a─>┤1 ││ └──┘ W││CT││ │ROM╞══> b─>┤2 ││ ││ ││ │ │H │ ││ ││ ││A │ ╞════╗ │А ││ ╔══>╡│ │╞═>╡ │e ║ └A──┘│ ║ ││ ││ │ ├──┐ ║ ║ │ ║ C││ ││ │ ╞═╗│ ║ ║ │ ║ ─/┴┴──┴┘ └───┘S║│ ║ ║ │ ╚═════════════════╝│ ║ ║ └───────────────────────┘ ║ ╚═════════════════════════════╝ В этой схеме при разветвлении процесса вычислений пара альтернативных адресов получается следующим образом: один ад- рес всегда на единицу больше, чем текущий ( т.е. изменяется "регулярным" образом ), второй адрес - произвольный и содер- жится вместе с микрокомандой в микроинструкции. Элементом, "вычисляющим" адрес, является счетчмк, управ- ляемый сигналом, являющимся входным для УА. При различных значениях входного сигнала счетчик выполняет две функции: ли- бо прибавляет единицу к значению, которое хранилось в счетчи- ке и являлось текущим адресом, либо загружается значением ад- реса из управляющей памяти. В схему введен элемент М2, позволяющий инвертировать значение входного сигнала, что облегчает распределение микро- инструкций по ячейкам управляющей памяти. Адрес n1 { m1 } -- 0 A │ Y H e S│ ──┼───────────┤ n2 { m2 } -- 1 0 │m1 x x 1│ │ │ <> 1 │m2 1 0 3│ │ │ d1 { m0 } -- 2 2 │m0 1 1 2│ │ │ <> 3 │m3 x x 4│ │ │ n3 { m3 } -- 3 4 │m4 1 0 0│ │ │ n4 { m4 } -- 4 5 │m0 2 0 3│ │ │ <> 6 │m5 1 1 6│ │ │ d2 { m0 } -- 5 7 │m0 0 1 3│ ──┴───────────┘ <> n5 { m5 } -- 6 <> В схеме для конвейерного варианта взаимодействия регу- лярное изменение адреса приходится организовывать так, чтобы не увеличивать число мест конвейера. ╔══════════════════════════════╗ ║╔═════════════════════╗ ║ ║║ ┌┬──┬┐ ┌───┐║ ┌───┐S║ ║║ ┌───┐ ││RG││ │MUX│║ │ROM╞═╝ ║╚═>╡INC╞═>╡│ │╞>╡0 │║ │ │Y ┌┬──┬┐Y' ║ └───┘ C││ ││ │ │║ │ ╞══>╡│RG│╞══> ║ ─/┴┴──┴┘ │ ╞╩>╡ │ ││ ││ ║ ─/┬┬──┬┐ │ │A │ │H ││ ││H' ║ C││RG││ │ │ │ ╞══>╡│ │╞══╗ ╚═════════>╡│ │╞>╡1 │ │ │e ││ ││e'║ ││ ││ │А │ │ ├──>┤│ │├┐ ║ ┌───┐ └┴──┴┘ └A──┘ └───┘ ─/┴┴──┴┘│ ║ │MUX│ ┌──┐ │ C │ ║ 0─>┤0 ├─>┤M2├────┘ │ ║ a─>┤1 │┌>┤ │ │ ║ b─>┤2 ││ └──┘ │ ║ │А ││ │ ║ └A──┘└─────────────────────────────┘ ║ ╚═══════════════════════════════════╝ СХЕМА С ЕСТЕСТВЕННОЙ АДРЕСАЦИЕЙ И СОВМЕЩЕННЫМ НАЗНАЧЕНИЕМ РАЗРЯДОВ ЯЧЕЙКИ ПЗУ ╔════════════════════════════╗ C ║╔═══════════════════╗ ║ ─/┬┬──┬┐H' ║║ ┌┬──┬┐ ┌───┐║ ┌───┐ ║ ╔══>╡│RG│╞══╗ ║║ ┌───┐ ││RG││ │MUX│║ │ROM│ ║ ║ ┌>┤│ │├─┐║ ║╚>╡INC╞>╡│ │╞>╡0 │║ │ │S║H║e│ └┴──┴┘ │║ ║ └───┘C││ ││ │ │║ │ │ ║ ║ │ ┌┬──┬┐Y│║ для RG"Y" ║ ─/┴┴──┴┘ │ ╞╩>╡ ▐██████>╡│RG│╞>│║ ║ ─/┬┬──┬┐ │ │A │ │ w c││ ││ │║ 0w-загрузка ║ C││RG││ │ │ │ │ ─A─/┴┴──┴┘ │║ ╚═══════>╡│ │╞>╡1 │ │ │k │ ┌┬─┬┐k'│║ 1w-нет загрузки ││ ││ │ А │ │ ├────┴─>┤│T│├┐ │║ ┌───┐ └┴──┴┘ └─A─┘ └───┘ ─/┴┴─┴┘│ │║ k ┌───┐ │MUX│ ┌──┐ ┌─┐│ C │ │║ └────┤ 1 ├─ CC 0>┤0 ├─>┤M2├─>┤&├┘ │ │║ ┌────┤ │ a>┤1 │┌>┤ │┌>┤ │ │ │║ SYN └───┘ b>┤2 ││ └──┘│ └─┘ │ │║ │А ││e' └──────────────────────────┘ │║ где CC - └A──┘└──────────────────────────────────┘║ синхронизация ОА ╚═══════════════════════════════════════╝ Эта схема используется только в конвейерном варианте взаимодействия. Метод вычисления адреса для следующего такта такой же, как и в схеме с регулярной адресацией. (Другой тер- мин -"естественный" - употреблен только ради различения самих схем.) Но в этой схеме, по сравнению с уже рассмотренными, разряд управляющей памяти с одним и тем же номером (разрядный срез) в различных микроинструкциях может быть использован различным образом. Будем различать микроинструкции двух ти- пов: - операционные, - алресации (выбора). В лданном варианте схемы тип микроинструкции устанавли- вается разрядом с именем "k". При k=0 выполняется микро- инструкция операционного типа. Все остальные разряды ячейки загружаются в регистр микрокоманды и управляют выполнением микроопераций в ОА. Следующий адрес всегда на единицу больше. При k=1 выполняется микроинструкция адресации. Все разряды микроинструкции могут быть использованы для вычисле- ния следующего адреса. В данном варианте схемы, так же как и в схеме с регулярной адресацией, один из адресов явно записы- вается в микроинструкцию, другой альтернативный адрес на еди- ницу больше текущего. Адрес A ▌k│ Y │ n1 { m1 } -- 0 ▌ │ H│ e│ S│ ──▌─┼──┴──┴──┤ n2 { m2 } -- 1 0 ▌0│ m1 │ 1 ▌0│ m2 │ g1 <>-- 2 ──▌─┼──┬──┬──┤ 2 ▌1│ 1│ 1│ 2│ n3 { m3 } -- 3 ──▌─┼──┴──┴──┤ 3 ▌0│ m3 │ n4 { m4 } -- 4 4 ▌0│ m4 │ ──▌─┼──┬──┬──┤ g2 <>-- 5 5 ▌1│ 1│ 0│ 0│ 6 ▌1│ 2│ 0│ 3│ g3 <>-- 6 ──▌─┼──┴──┴──┤ 7 ▌0│ m5 │ n5 { m5 } -- 7 ──▌─┼──┬──┬──┤ 8 ▌1│ 1│ 1│ 7│ g4 <>-- 8 9 ▌1│ 0│ 1│ 3│ Вместе с этой схемой обычно используется условная син- хронизация, которая позволяет удлинить такт выполнения микро- команды в ОА на время выполнения микроинструкций адресации. SYN ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──── └─┘ └─┘ └─┘ └─┘ └─┘ | | | | | k 0 ▄▄▄▄▄▄▄▄ 0 ▄▄▄▄▄▄▄▄─────▄▄▄▄▄▄▄▄─────▄▄▄▄▄▄▄▄ 0 ▄▄▄ ──────▀▀▀▀▀▀▀▀─────▀▀▀▀▀▀▀▀ 1 ▀▀▀▀▀▀▀▀ 1 ▀▀▀▀▀▀▀▀─────▀▀▀ | | | | | CC┐ ┌──────────┐ ┌────────────────────────────────────┐ ┌──── └─┘ └─┘ └─┘ | | | | | Y────▄────────────▄──────────────────────────────────────▄─── ─────▀────────────▀──────────────────────────────────────▀─── ФУНКЦИОНАЛЬНЫЙ ПЕРЕХОД. ПЕРЕХОД НА МИКРОПОДПРОГРАММУ С ВОЗВРАТОМ Функциональный переход При необходимости выполнения нескольких вычислительныых функций, управление которыми представляется в виде независи- мых микропрограмм, необходимо организовать независимый вызов этих микропрограмм. Начальные адреса микропрограмм, управляющих вычислениями различных функций, обычно существуют вне управляющей памяти. В УА достаточно предусмотреть механизм коммутации, позволя- ющий сделать начальный адрес текущим. Это можно осуществить в любой из рассмотренных схем. (К механизму коммутации относят- ся, кроме аппаратуры, специальные разряды управляющей памяти и специальные микроинструкции.) ╔══════════════════════╗ C ╔══════║══════════════╗ ║ ─/ ┬┬──┬┐H' ║ ║ ┌───┐║ ┌───┐ ║ ╔══>╡│RG│╞══╗ ║ ║ │MUX│║ │ROM│ ║ ║ ┌>┤│ │├─┐║ F ═║══════║════════>╡0 │║ │ │ ║ ║ │ └┴──┴┘ │║ ║ ║ ┌┬──┬┐ │ │║ │ │ ║ ║ │ │║ ║ ║ ││RG││ │ │║ │ │ ║ ║ │ │║ ║ ╚>╡│ │╞═>╡1 │║ │ │S║H║e│ │║ ║ C││ ││ │ │║ │ │ ║ ║ │ ┌┬──┬┐Y│║ для RG"Y" ║ ─/┴┴──┴┘ │ ╞╩>╡ ▐██████>╡│RG│╞>│║ ║ ┌┬──┬┐ │ │A │ │ ││ ││ │║ 0w-загрузка ║ ┌───┐ ││RG││ │ │ │ │ w c││ ││ │║ ╚>╡INC╞═>╡│ │╞╦>╡2 │ │ │ ─A─/┴┴──┴┘ │║ 1w-нет загр. └───┘ C││ ││║ │ │ │ │ │ │║ ─/┴┴──┴┘║ │ │ │ │ │ │║ ╔══════════╝ │ │ │ │ │ │║ ║ ┌┬─────┬┐ │ │ │ │ ┌┘k │║ ╚>╡│STACK│╞═>╡3 │ │ │K │ ┌┬──┬┐K' │║ └┴────A┴┘ │ │ │ ╞═══╧>╡│RG│╞╗ │║ ║ │ А │ │ │ ││ ││║ │║ ║ └─A─┘ └───┘ ─/┴┴──┴┘║ │║ ┌───┐ ║ ║ C ║ │║ │MUX│ ┌──┐ ┌╨──────╨┐ ║ │║ 0>┤0 ├─>┤M2├>┤ CS ╞<══════════════════╝ │║ a>┤1 │┌>┤ │ │ │ │║ b>┤2 ││ └──┘ └────────┘ │║ k ┌───┐ │А ││e' │║ └─┤ 1 ├─CC └A──┘└──────────────────────────────────────┘║ ──┤ │ ╚═══════════════════════════════════════════╝ SYN └───┘ Переход к микроподпрограмме с возвратом При реализации достаточно сложных вычислений удобно вос- пользоваться механизмом микроподпрограмм. Одна и та же микроподпрограмма может быть вызвана из разных точек вызывающих микропрограмм. Поэтому при вызове микроподпрограммы необходимо запомнить адрес, с тем, чтобы восстановить его при возвращении из микроподпрограммы. Чтобы запомнить и восстановить адреса возврата от вложенных вызо- вов, используется безадресная память - стек (stack). Принцип (дисциплина) работы стека описывается условием "последний вошел - первым вышел" (Last In - First Out, LIFO). чтобы описать этот принцип будем считать, что слова, хранящи- еся в стеке, перенумерованы с помощью первых натуральных чи- сел 1,2,...,N. Слово с наибольшим номером называют вершиной стека. Стек может выполнять следующие действия: -"чтение" слова с наибольшим номером, -"выталкивание" (стирание) из памяти слова с наибольшим но- мером, -"запись" нового слова с присваиванием ему наибольшего номе- ра. При вызове микроподпрограммы выполняется операция "запи- си" адреса возврата в стек. При возвращении из микроподпрог- раммы выполняется операция "чтения" адреса возврата, затем - "выталкивания" его же из стека. Операция "чтения" без "выталкивания" выполняется при ис- пользовании стека для организации циклов. Разряды с именем "К" определяют тип выполняемой микро- инструкции. В связи с тем, что теперь в схеме существует 4 источника адреса для управляющей памяти, возможны 4 типа бе- зусловных переходов, кроме того, возможны различные условные переходы в различных сочетаниях комбинирующие эти источники адреса и входные переменные. С помощью комбинационной схемы CS разряды микроинструкции "К" преобразуются в сигналы управления стеком и мультиплексо- ром. УПРАВЛЕНИЕ С ПРЕДВОСХИЩЕНИЕМ В конвейерном варианте для команд переходов по предикат- ным переменным, зависящих без сдвига от сигналов управления, приходится добавлять еще один такт для того, чтобы "увидеть" значение переменной, по которой выполняется ветвление, и выб- рать нужную МКИ. Можно построить управляющий автомат, в котором для уско- рения выполнения программы выполняются следующие действия: Предварительно выбирается из ПЗУ одна из двух альтернативных МКИ, соответствующая наиболее вероятному значению переменной ветвления. Это значение должно храниться в той МКИ, после ко- торой выполняется ветвление. В конце такта выработанное ре- альное значение переменной сравнивается с предсказанным, если они совпадают, то выбранная из ПЗУ МКИ записывается в выход- ной регистр, если нет, то предыдущий такт продлевается, т.е. не синхронизируются ОА и RG'МКИ. Микропрограмма будет такой же как и для последовательного варианта взаимодействия ОА и УА, но в МКИ добавляются два разряда: F = { 1, если используется предвосхищение; 0, если нет }, P - наиболее вероятное значение переменной ветвления. Фрагмент схемы УА, обеспечивающий предвосхищение может быть таким: ──────────────┐ │ │W ┌┬──┬┐ │ ─V┬───┐ q ┌A───┐ f t ││RG││ └──>┤MUX├───>┤ SS ├<──────────────────────┐ ──┬───>┤│ │├────>┤ │┌──>┤ ├<─────────────────────┐│ │ ││ ││ │ ││t │ │ p ││ │ ─\┴┴──┴┘ └───┘│ ─\┴┬───┘ ││ │ │ │ │ │j ││ └───┼────────────────┘ │─V┬───┐ ┌─────┐ P ┌┬──┬┐p││ │ │ │MUX│ │ ROM ├───>┤│RG│├─┘│ │ │ │ │ │ │ F ││ ││f │ │ │ │ ├───>┤│ │├──┘ │ │ │ │ ││ ││ │ │ │ ▐███>││ │▐██> │ │ │ │ ││ ││ C │ │ └─────┘ ─\A┴┴──┴┘ ────┴───────────────────┴───────────────────┘└────── W Пусть c=1 в конце такта. Схема SS это автомат, который может находиться в одном из двух состояний s0 и s1, если s0, 0f, то w=1, j=q если s0, 1f, 0c, то w=0, j=p если s0, 1f, 1c, p==t, то w=1, j=p если s0, 1f, 1c, p=/=t, то w=0, j=x, переход в s1 если s1, то w=1, j=q, переход в s0