- •Содержание
- •Часть 1. Описание схемы 4
- •Часть 2. Вспомогательное программное обеспечение. 7
- •Введение
- •Часть 1. Описание схемы Шинная организация
- •Иерархический принцип
- •Синхронизация
- •Система прерываний
- •Микрокомандное управление
- •Часть 2. Вспомогательное программное обеспечение. Ассемблер микрокоманд
- •Симулятор (модель) процессора
- •Литература
- •Приложение №1. Иерархия блоков эвм.
- •Приложение №2. Описание формата микрокоманд.
- •Приложение №3. Полный код микропрограммы.
- •Приложение №4. Исходный код ассемблера микрокоманд и сопутствующих утилит. Ассемблер микрокоманд
- •Утилитаmcd2mif
- •Утилитаlabelmap2mif
- •Приложение №5. Исходный код симулятора
Микрокомандное управление
В схеме используется микрокомандное управления для обеспечения функционирования вычислительного процесса. Процесс исполнения каждой инструкции процессора подразделяется на несколько стадий, называемых микрооперациями. Это может быть пересылка регистра в регистр, выполнение арифметических операций и т.п. - все, что необходимо для обеспечения требуемой функциональности. Для облегчения и ускорения процесса декодирования инструкции в схеме промена таблица соответствия кода инструкции и адреса в памяти микрокоманд. Каждая микропрограмма обработки инструкции должна заканчиваться директивой Gotoдля перехода на метку выборки следующей инструкции. Полный список микрокомандных директив приведен в приложении [2] и в программном коде ассемблера микрокоманд.
В ходе работы было реализовано в общей сложности 53 различные инструкции (47 помимо 6 входящих в задание), что было необходимо для всестороннего тестирования схемы и получения опыта работы с системой Quartusи опыта проектирования схем. Полный код микрокопрограммы приведен в приложении[3].
Рассмотрим принцип работу микропрограмм на примере инструкции mov direct, direct.Вот часть микрокода, отвечающая за исполнение этой инструкции:
Начало формы
.....
@Next: # Next instruction
If=!IntrFlag;BusB16=Code;PC++;SetInstruction
.....
@$85: # mov dest_direct, src_direct
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++
BusA=Wrk1;BusB8=Data[BusA];Wrk2Src=BusB;SetWrk2;Goto;Romm=@MOV_Wrk2Dest;
.....
@MOV_Wrk2Dest:
BusC16=Code;PC++;Wrk1Src=BusC;SetWrk1;Romm++
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для выборки следующей инструкции.