Составители:
44
микрокоманд в RАММ[9.0]. Микрокоманда считывается по адресу RAMM из
постоянной памяти микрокоманд ROMM.
В микропрограммах используются условные микрокоманды –
указывается значение условия, при котором выполняются заданные в
микрокоманде операции. Если условие не выполняется, то микрокоманда
пропускается.
На схеме рис. 5.2 условие из PSW и отдельных битов выбирается
мультиплексором mx0 по адресу ifo.
Если выбранное условие
False (0), то мультиплексор mx1 выбирает
структурную микрокоманду 0, что эквивалентно пропуску такта. Таким
образом, исключаются условные переходы, микропрограмма всегда линейная
трасса и микрокоманды выбираются по счетчику.
На этой стадии после выбора общей схемы БМУ возникает вопрос о
размещении первой микрокоманды IR=Code(PC++) выборки команды.
Если эту микрокоманду разместить как последнюю, то она всегда
общая
во всех микропрограммах и исполнение команды всегда начинается с
декодирования, но микрокоманда будет многократно повторяться, так как
расположена по разным адресам.
В целом предпочтительно размещать эту микрокоманду как первую в
общей микропрограмме по фиксированному адресу RAMM=0, что упрощает
начальный запуск и позволяет выделить одну общую фазу при исполнении
команд Instraction Fatch (IF), количество
тактов для выполнения команды
увеличивается на один и микропрограмма стартует с первой (нулевой)
микрокоманды трассы. Следовательно, последняя микрокоманда в трассе
должна сбрасывать регистр RAMM=0 для выборки и исполнения
микрокоманды IR=Code[PC++].
5.3. Реализация конечных автоматов в СU
Многотактные команды mul ab, div ab используют вспомогательные
счетчики тактов, анализируют состояния динамических признаков. При этом
требуются
безусловные и условные переходы в микропрограммах с явным
значением адреса одного из переходов. Это исключает возможность
построения линейных микропрограмм.
Альтернативой БМУ с хранимой микропрограммой является автоматный
подход к синтезу управляющего блока в виде жесткой схемы [4], в которой
допустимы любые переходы между микрокомандами.
Рассмотрим функциональную микропрограмму умножения.
0 RAMM=ADC[Code[PC++]];
1 Wrk=Acc; Асс=0;
2 Wrk1= -8;
3 Ra=Acc; Rb=Wrk; СW=0;
4 if(B[0]) {Acc=Ra+Rb; CC=C;}
5 Sr(CC.Acc.B); Wrk1++; CW=(Wrk1>0xFF);
Страницы
- « первая
- ‹ предыдущая
- …
- 42
- 43
- 44
- 45
- 46
- …
- следующая ›
- последняя »