Скачиваний:
21
Добавлен:
09.05.2014
Размер:
176.36 Кб
Скачать

Микрокомандное управление

В схеме используется микрокомандное управления для обеспечения функционирования вычислительного процесса. Процесс исполнения каждой инструкции процессора подразделяется на несколько стадий, называемых микрооперациями. Это может быть пересылка регистра в регистр, выполнение арифметических операций и т.п. - все, что необходимо для обеспечения требуемой функциональности. Для облегчения и ускорения процесса декодирования инструкции в схеме промена таблица соответствия кода инструкции и адреса в памяти микрокоманд. Каждая микропрограмма обработки инструкции должна заканчиваться директивой Gotoдля перехода на метку выборки следующей инструкции. Полный список микрокомандных директив приведен в приложении [2] и в программном коде ассемблера микрокоманд.

В ходе работы было реализовано в общей сложности 53 различные инструкции (47 помимо 6 входящих в задание), что было необходимо для всестороннего тестирования схемы и получения опыта работы с системой Quartusи опыта проектирования схем. Полный код микрокопрограммы приведен в приложении[3].

Рассмотрим принцип работу микропрограмм на примере инструкции mov direct, direct.Вот часть микрокода, отвечающая за исполнение этой инструкции:

Начало формы

  1. .....

  2.  

  3. @Next: # Next instruction

  4. If=!IntrFlag;BusB16=Code;PC++;SetInstruction

  5.  

  6. .....

  7.  

  8. @$85: # mov dest_direct, src_direct

  9. BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++

  10. BusA=Wrk1;BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Goto;Romm=@MOV_Wrk2Dest;

  11.  

  12. .....

  13.  

  14. @MOV_Wrk2Dest:

  15. BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++

  16. BusA=Wrk1;BusB8=Wrk2;BusB->Data[BusA];Goto;Romm=@Next

(часть кода, не относящаяся к данной инструкции, пропущена)

Прокомментируем каждую строчку отдельно. В строках 1-2 пропущенный код инициализирует контроллер, записывая нули в регистры Acc,Bи т.д., а так же, устанавливаетSPв 0x07. Строчка 4 – выборка инструкции. Сначала происходит проверка условия отсутствия запроса на прерывание (директиваIf=!IntrFlag). Если прерываний не поступало, то микрооперация выполняется, иначе – пропускается. При выполнении микрооперации, на шинуBusBподаётся выход памятиCode(в качестве адреса по умолчанию используется значение регистраPC). ДирективаSetInstructionзаписывает текущее значение с шиныBusBв регистрIR(InstructionRegister), а так же устанавливает счетчик микрокоманд в значение соответствующее адресу начала микропрограммы обработки инструкции. ДирективаPC++ инкрементирует программный счетчик (как уже было отмечено, запись регистров происходит на такте 2, а инкремент счетчиков – на такте 3, поэтомуPCинкрементируется после записи в регистрIR).

После этого, в регистре-счетчике микрокоманд оказывается адрес начала микропрограммы movdirect,direct(метка @$85). В девятой строке на шину подается память кода по адресуPC++ (BusC16=Code;PC++;) и происходит запись байта с шины во временный регистрWrk1 (Wrk1Src=BusC;SetWrk1;). Последняя директива (Romm++) увеличивает значение счетчика микропрограмм на 1 (для перехода к следующей микрооперации). В строке 10 происходит подача значения регистраWrk1 на адресную шинуBusAи подача значения из памятиDataпо адресу с шиныBusAчерез шинуBusBв регистрWrk2. Таким образом, эти две строки обеспечили выборку адреса источника и запись значения источника во временный регистр. После этого происходит безусловный переход на метку @MOV_Wrk2Dest(Goto;Romm=@MOV_Wrk2Dest;). Безусловные переходы в микрокомандах обеспечивают повторное использование кода различными микропрограммами и уменьшают требования к памяти микропрограмм.

По метке @MOV_Wrk2Destнаходятся микрокоманды выборки адреса приемника и записи значения из регистраWrk2 в приемник. Последняя микрокоманда содержит директивуGoto;Romm=@Next, которая делает переход по метке @Nextдля выборки следующей инструкции.

Соседние файлы в папке Отчет