Меню:
|
Пример сложной микропрограммы
Можно написать последовательность микрокоманд и для
выполнения более сложной команды. В качестве примера такой команды можно взять
такую же команду сложения, но с косвенной адресацией. При косвенной адресации
операндами команды являются не данные, хранящиеся в регистрах, а данные,
хранящиеся в оперативной памяти по адресам, указанным в регистрах. Предыдущая
команда вычисляла сумму содержимого регистра А с содержимым регистра В и
записывала в регистр С. Команда с косвенной адресацией должна содержимое
оперативной памяти по адресу, указанному в регистре А, прибавить к содержимому
оперативной памяти по адресу, указанному по в регистре В и записать в
оперативную память по адресу, указанному в регистре С.
|
Содержимое
памяти по адресу регистра А прибавить к содержимому памяти по адресу регистра
В и записать в память по адресу регистра С
|
Адрес
этой микрокоманды
|
0000
|
1000
|
0001
|
1001
|
0010
|
0011
|
0100
|
1100
|
Адрес
след. микрокоманды
|
000
|
001
|
001
|
010
|
011
|
100
|
100
|
1100
|
Выбор
условия 0-2
|
010
|
000
|
010
|
000
|
000
|
000
|
010
|
000
|
Сброс
регистра состояния
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
Выбор
источника входа А
|
0
|
11
|
00
|
00
|
00
|
11
|
00
|
00
|
Выбор
источника входа В
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
Запрос
шины
|
1
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
Чтение
команды по шине
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
Чтение
данных по шине
|
1
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
Запись
по шине
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
Выбор
сдвига 0-1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
Функция
АЛУ 0-4
|
11010
|
00000
|
00000
|
00000
|
00000
|
00001
|
00000
|
00000
|
Запись
результата в регистр А
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
Запись
результата в регистр B
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
Запись
в регистр А
|
1
|
1
|
1
|
0
|
0
|
1
|
0
|
0
|
Запись
в регистр В
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
Запись
в файл
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
Запись
в счетчик команд
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
Запись
в регистр состояния
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
Запись
в регистр адреса шины
|
1
|
0
|
1
|
0
|
1
|
0
|
0
|
0
|
Запись
в регистр данных шины
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
|
R(A)=>A,R(B)=>B,B=>регистр
адреса шины, чтение
|
Если есть ответ шины, то данные шины => B
|
A=>регистр
адреса шины, Запрос шины, ждем ответа
|
Если есть ответ шины то R(C)=>
А
|
А=>Регистр адреса шины
|
Регистр данных шины +B=> Регистр
данных шины
|
Запись данных по шине, ждем ответа
|
Чтение следующей команды
|
|
Шаг 1
|
Шаг 2
|
Шаг 3
|
Шаг 4
|
Шаг 5
|
Шаг 6
|
Шаг 7
|
Шаг 8
|
Шаг 1
Первой микрокомандой мы можем извлечь из регистрового
файла содержимое регистров, указанных в качестве первых двух аргументов команды
и записать во входные регистры АЛУ. Чтобы исключить возможное влияние переноса,
который мог оставаться в регистре состояния от предыдущей команды следует
установить сигнал сброса регистра состояния. Этой же микрокомандой можно
содержимое входного регистра В через АЛУ передать в регистр адреса шины.
Коммутацию узлов и пути передачи данных на этом шаге удобнее отобразить на
рисунке. Синим цветом обозначены узлы-источники данных, и синими стрелочками –
маршрут этих данных к узлам-приемникам. Красная стрелочка – маршрут дальнейшей
передачи данных от узла – приемника на внешнюю шину данных. Зеленый цвет –
передача адресов аргументов команды для их извлечения из регистрового файла.
Одновременно с выдачей адреса на шину, можно установить сигналы «чтение данных
по шине» и «запрос шины» и перейти к ожиданию данных. Поле адреса следующей
микрокоманды должен совпадать с адресом этой микрокоманды, т.е. ее выполнение
будет повторяться до поступления данных из шины. Чтобы выполнение этой
микрокоманды прекратилось, когда данные будут считаны из памяти, в качестве
условия необходимо выбрать сигнал ответа шины, имеющий номер 010.
Шаг 2
Когда будет получен сигнал ответа шины, в адресе текущей
микрокоманды изменится третий (с нуля) разряд, и произойдет переход к
микрокоманде, имеющей адрес 1000. Этой микрокомандой нам необходимо заменить
адрес, находящийся во входном регистре В на данные, полученные из оперативной
памяти. Организовать короткий маршрут данных от регистра данных шины до
регистра В не получается, поэтому придется передавать данные через регистр А,
далее через АЛУ и сдвигатель. Полная схема такого маршрута показана на рисунке
синей стрелочкой. Для коммутации такого маршрута необходимо выбрать в качестве
источника данных для входного регистра А регистр данных шины, установить сигнал
«запись в регистр А», разрешающий запись в этот регистр в середине такта, в
качестве функции АЛУ указать передачу данных со входа А на выход без изменений.
Для передачи данных с выхода АЛУ во входной регистр В необходимо указать
сдвигателю передавать данные без сдвига, выбрать в качестве источника данных
для входного регистра В выбрать выход сдвигателя и разрешить запись в конце
такта (запись результата) во входной регистр В. В качестве адреса следующей
микрокоманды следует указать адрес, на единицу больший, чем текущий, без учета
третьего разряда, т.е. 001.
Шаг 3
Следующая микрокоманда должна опять повторно считать из
регистрового файла содержимое регистра, указанного в команде в качестве
аргумента А и записать его во входной регистр АЛУ, поскольку его содержимое
было стерто при выполнении предыдущей микрокоманды. Для этого необходим сигнал
«запись в регистр А». Затем, через АЛУ и сдвигатель необходимо передать данные
на выход сдвигателя без изменений, для чего сигналы управления АЛУ и
сдвигателем должны иметь нулевое значение. Данные с выхода сдвигателя должны
быть записаны в регистр адреса шины при помощи сигнала «запись в регистр адреса
шины». Этот маршрут показан на рисунке синей стрелочкой. При извлечении данных
из регистрового файла необходимо использовать всегда формируемые в начале такта
адресные сигналы, показанные на рисунке зеленым цветом. После выполнения
передачи данных может быть запущена операция чтения из памяти при помощи
сигналов «чтение данных по шине» и «запрос шины». Кроме того, необходимо
скоммутировать селектор адреса шины для передачи из регистра адреса шины на
шину. Также, как и на первом шаге, эта микрокоманда должна выполняться до
получения ответа шины, для чего в качестве адреса следующей микрокоманды нужно
указать ее собственный адрес, а в качестве условия перехода – сигнал ответа
шины.
Шаг 4
При получении ответа шины произойдет переход к
микрокоманде с адресом 1001. Поскольку извлечение слагаемых из памяти к этому
моменту уже закончено – одно слагаемое находится в регистре В, а другое в
регистре данных шины, нам необходимо подготовить адрес, по которому будет
записан в память результат выполнения операции сложения. Поэтому текущая
микрокоманда должна выбрать из регистрового файла содержимое регистра,
указанного в команде в качестве аргумента С и записать его в буферный регистр
А. Других действий эта микрокоманда выполнить не сможет, т.к. адрес третьего
аргумента команды передается в регистровый файл только во второй половине
такта, а содержимое регистра, указанного в качестве третьего аргумента команды
происходит только в конце выполнения микрокоманды. Маршрут передачи данных
показан на рисунке синими стрелочками, а зеленым цветом – маршрут передачи адреса
в регистровый файл.
Шаг 5
Следующая микрокоманда, имеющая адрес 010 продолжает
подготовку к обращению в память по адресу, указанному в команде в качестве
аргумента С.Для этого она должна переписать содержимое входного регистра А в
регистр адреса шины. Для этого АЛУ должно выполнять функцию передачи на выход
без изменений из регистра А, а сдвигатель на отсутствие сдвига. Этот маршрут
показан на рисунке синими стрелочками. К концу этой микрокоманды все данные
будут подготовлены к выполнению самой операции – в регистре В будет находится
одно из слагаемых, в регистре данных шины – другое слагаемое, в регистре адреса
шины – адрес памяти, по которому должен быть записан результат. Регистр
состояния будет иметь нулевое значение, поскольку был очищен при выполнении
самой первой микрокоманды.
Шаг 6
К этому шагу выполнены все необходимые подготовительные
действия. Теперь необходимо выполнить саму арифметическую операцию, в данном
случае сложение данных, и записать результат в регистр данных шины. Для этого,
в качестве источника данных для входного регистра А нужно указать регистр
данных шины (на рисунке показан синим цветом), установить сигнал «запись в
регистр А» и установить функцию АЛУ равную 00001 (сложение). Для записи
результата операции необходимо установить сигнал «запись в регистр данных
шины». Регистр данных шины на самом деле состоит из двух частей – одна
используется для приема данных с шины и на данном шаге служит источником
данных, а другая служит приемником данных (на рисунке показана красным цветом)
и служит для передачи данных на шину. Кроме того, необходимо установить сигнал
«запись в регистр состояния» для сохранения признаков выполнения операции.
Шаг 7
Поскольку в регистре адреса шины уже находится адрес, по
которому необходимо записать результат, а сам результат уже записан в регистр
данных шины, для завершения операции остается только установить сигналы «запись
по шине» и «запрос шины». Поскольку как и при предыдущих обращениях к памяти
необходимо дождаться сигнала ответа шины, должно быть выбрано условие перехода
к следующей микрокоманде 010 (ответ шины), а адрес следующей микрокоманды
должен совпадать с адресом текущей. Тогда при выполнении условия в нем
изменится старший разряд и произойдет переход. Соответственно, следующая
микрокоманда должна располагаться по адресу, отличающемуся от адреса текущей
старшим разрядом.
Шаг 8 и последний
Поскольку сама операция уже выполнена, осталось получить
из памяти слеующую команду и записать ее в регистр команд. Для этого необходимо
лишь установить сигнал «чтение команды по шине» и «запрос шины». Как только
команда будет получена, произойдет увеличение счетчика команд и запись новой
команды в регистр команд. Одновременно будет очищен регистр адреса следующей
микрокоманды, поэтому указывать условие перехода не требуется. В качестве
адреса следующей микрокоманды должен быть указан адрес текущей, чтобы ее
выполнение происходило до тех пор, пока следующая команда не будет получена из
памяти. После этого начнется выполнение уже другой команды.
Автор текста - Молчанов Н.Н. |
Дополнительно:
|