6 Разработка программы эмуляции микро эвм
30
6.1 Структура эмулятора
Программа эмуляции предназначена для наглядной демонстрации работы разработанного гипотетического микропроцессора и визуализации процесса выполнения команд в нем.
Программа предусматривает возможность демонстрации работы микропроцессора в двух режимах: пошаговом и автоматическом.
В автоматическом режиме работы эмулятора, программа позволяет регулировать скорость протекания процесса трассировки.
Внешне, программа представляет собой детализированную схему разработанного гипотетического микропроцессора и при демонстрации отображает содержимое РПП и РПД, регистров АЛУ, регистра команд (РК), счетчика команд (СК) и регистра-указателя данных (РУД), а также шины, используемые текущей микрооперацией.
6.2 Алгоритм функционирования эмулятора
Общая схема функционирования эмулятора представлена на рисунке 6.1.
Рисунок 6.1 – Схема функционирования эмулятора
Работа эмулятора начинается с задания начальных параметров: скорости и режима трассировки.
Эмулятор позволяет наблюдать работу процессора в двух режимах: пошаговом и автоматическом. При автоматическом режиме трассировки программа автоматически изменяет состояние системы через равные промежутки времени, задаваемые таймером. В пошаговом режиме, изменение состояния системы происходит только по команде пользователя при нажатии соответствующей кнопки.
В автоматическом режиме трассировки, так же возможно задание скорости трассировки, которое фактически изменяет интервал работы таймера.
Минимально возможное значение скорости трассировки равняется 500 мс, максимально возможное – 2000мс.
Э 31
Последовательность эмуляции команд в эмуляторе схематично представлена на рисунке 6.2.
Рисунок 6.2 – Последовательность эмуляции команд
Каждая команда гипотетического МП в программе представляется отдельной функцией с одноименным названием. В зависимости от текущей исполняемой команды происходит вызов той или иной функции с определенным параметром равным шагу или этапу выполнения команды.
За хранение значений текущего шага выполнения команды и текущей выполняемой команды в программе отвечают две глобальные переменные: num_operation и num_step.
После завершения очередного шага выполнения команды переменная num_step, отвечающая за хранение текущего шага выполнения команды инкрементируется.
После завершения выполнения очередной команды, инкрементируется переменная num_operation, отвечающая за хранение значения текущей выполняемой команды, а переменная num_step устанавливается в ноль.
После полного прохода цикла выполнения команд. Обе переменные обнуляются и цикл начинается снова.
Программа эмуляции является демонстрационной, поэтому в ней используется минимальное количество переменных, отвечающих, в основном, за контроль шагов выполнения команд.
Ниже приведен список переменных, используемых в программе.
num_operation – номер текущей исполняемой команды.
num_step – номер шага в исполнении текущей команды.
Функции, используемые в работе программы связаны, в основном, с прорисовкой текущего исполняемого шага, и текущей исполняемой команды, а так же с установкой начальных условий начальных условий.
В программе используются следующие функции:
R 32
RL() – эмуляция команды RL;
MOV() – эмуляция команды MOV;
LJMP() – эмуляция команды LJMP;
DoOperation() – переключатель выполняемых команд.
ВЫВОДЫ
В процессе реализации данного проекта были достигнуты цели, которые ставились при создании проекта, а именно:
спроектировано АЛУ гипотетического микропроцессора по способу реализации ЗМО, АЛУ предназначено для выполнения операций сложения, умножения, обмена и сдвига;
разработаны алгоритмы выполнения команд MOV, LJMP и LJMP;
разработана структурная схема гипотетического микропроцессора, систему команд которого составляют команды ADDC, MUL, RL, XCH, MOV, JMP и LJMP;
разработана структурная схема микро-ЭВМ на базе спроектированного гипотетического микропроцессора;
создана программа эмуляции выполнения команд из системы команд гипотетического микропроцессора.
Однако в дальнейшем и усовершенствованиям и доработкам могут подвергаться, как разработанный микропроцессор, так и спроектированная на его основе микро ЭВМ и программа-эмулятор.
Возможно создание более совершенной структуры микропроцессора, либо модернизация уже существующей, за счет расширения существующей системы команд, введения дополнительных операционных элементов, позволяющих работать со стеком, реорганизации и расширения АЛУ.
С другой стороны, существующая программа-эмулятор может быть улучшена за счет введения дополнительных возможностей.
К ним можно отнести дополнение системы интегрированным учебником с теоретическими данными по структуре и командам микропроцессора МК51, увеличение количества команд, эмулируемых системой, углубление и детализация процесса эмуляции, введений системы тестов контроля знаний.
СПИСОК ИСПОЛЬЗОВАНЫХ ИСТОЧНИКОВ
Проектирование цифровых устройств на однокристальных микроконтроллерах/ В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева. – М.: Энергоатомиздат, 1990 – 224с.
Толковый словарь по вычислительным системам / Под ред. В. Иллингуорта и др.: Пер. с англ. А.К. Белоцкого и др.; Под ред. Е.К. Масловского. – М.: Машиностроение, 1991. – 560 с.: ил.
Юров В. Assembler: специальный справочник - СПб: Издательство «Питер», 2000. - 496 с.: ил.
Липовецкий Г.П. и др. Однокристальные микроЭВМ: семейство МК48,МК51. М.: МП «Бином» 1992. – 339 с.
Приложение А
Техническое задание НА МИКРОЭВМ
А.1 Общие сведения
Полная тема курсового проекта: «Разработка структуры и эмулятора микро ЭВМ на базе гипотетического микропроцессора».
Проект разрабатывается студентом группы ИС-02а Лесько Николаем Васильевичем.
Дата получения задания: 4 октября 2004 года. Плановый срок окончания работы: 25 декабрь 2004 года.
А.2 Назначение и цели создания проекта
Основной целью создания проекта является разработка структуры микроЭВМ. В процессе разработки необходимо разработать структуру микропроцессора и арифметико-логического устройства микропроцессора.
Результатом разработки будет структурная схема микроЭВМ и структурная схема микропроцессора.
А.3 Требования к функциональным характеристикам
А.3.1 Требования к МЭВМ
Разрабатываемая микроЭВМ должна иметь шинный интерфейс и содержать следующие элементы:
микропроцессор;
оперативное запоминающее устройство;
генератор синхросигналов и начальных установок;
шину адреса;
шину данных;
шину управления.
А.3.2 Требования к МП
А.3.2.1 Требования к составу МП
В состав разрабатываемого МП должны входить следующие элементы:
буфер данных;
буфер команд;
программный счетчик;
регистр данных;
регистр команд;
регистр состояний программы, содержащий 8 бит условий:
C – флаг переноса;
AC – флаг вспомогательного переноса (сигнализирует переносе или заем в бите 3);
F0 – флаг нуля;
OV – флаг переполнения;
P – флаг паритета(Если число единичных бит аккумулятора нечетное, то P=1);
аккумулятор;
арифметико-логическое устройство;
устройство управления и синхронизации;
А.3.2.2 Требования к командам МП
Разрабатываемый МП должен выполнять команду ADDC(сложение аккумулятора с байтом из РОН и переносом), MUL(умножение аккумулятора на регистр B), RL(циклический сдвиг аккумулятора влево), MOV(пересылка в регистр прямоадресуемого байта), XCH(обмен аккумулятора с прямо адресуемым байтом), LJMP(длинный переход в полном объеме памяти программ), JMP(косвенный относительный переход).
А.3.3 Требования к АЛУ
АЛУ должно реализовать работу ОА с ЗМО. В состав АЛУ должны входить следующие элементы:
комбинационная часть;
запоминающая часть;
выходная шина комбинационной части;
входная шина комбинационной части;
входная шина запоминающей части;
шина для записи внешних данных;
регистры запоминающей части.
А.4 Стадии и этапы разработки
Стадии и этапы разработки представлены в таблице А.1.
Таблица А.1- Стадии и этапы разработки ПП
№ | Этапы работы | Срок выполнения (недели) |
1 | Анализ структуры и алгоритмов выполнения заданных команд в микропроцессоре прототипе. Уяснение заданий. | 1 |
2 | Разработка технического задания на проект | 1 |
3 | Разработка структуры АЛУ для выполнения арифметических операций | 1 |
4 | Разработка алгоритмов выполнения АО. | 1 |
5 | Разработка структуры микропроцессора, реализующего заданный набор команд | 1 |
6 | Разработка алгоритмов выполнения команд | 1 |
7 | Разработка эмулятора выполнения заданных команд | 2 |
8 | Отладка эмулятора | 2 |
9 | Тестирование эмулятора | 2 |
10 | Написание пояснительной записки к проекту | 2 |
11 | Защита проекта | 1 |
Приложение Б
Техническое задание НА ПРОГРАММУ-ЭМУЛЯТОР
Б.1 Общие сведения
Полная тема курсового проекта: «Разработка структуры и эмулятора микро ЭВМ на базе гипотетического микропроцессора»
Программа разрабатывается студентом группы ИС-02а Лесько Николаем Васильевичем.
Дата получения задания: 4 октября 2004 года. Плановый срок окончания работы: 25 декабрь 2004 года.
Б.2 Назначение и цели создания программного продукта
Основной целью создания программного продукта является разработка средств наглядной демонстрации выполнения команд микроЭВМ на базе гипотетического микропроцессора.
Б.3 Требования к функциональным характеристикам программы
Программа должна:
иметь удобный пользовательский интерфейс, позволяющий управлять режимами демонстрации исполнения команд МЭВМ: пошаговое или автоматическое выполнение;
отображать структуру микроЭВМ;
обеспечивать отображение результатов выполнения команд.
Б.4 Требования к программному и аппаратному обеспечению
Для правильного функционирования программного продукта необходимо:
IBM – совместимый компьютер;
операционная система MS Windows – 95/NT и выше.
Б.5 Стадии и этапы разработки
Стадии и этапы разработки представлены в таблице Б.1.
Таблица Б.1- Стадии и этапы разработки ПП
№ | Этапы работы | Срок выполнения (недели) |
1 | Анализ структуры и алгоритмов выполнения заданных команд в микропроцессоре прототипе . Уяснение заданий. | 1 |
2 | Разработка технического задания на проект | 1 |
3 | Разработка структуры АЛУ для выполнения арифметических операций | 1 |
4 | Разработка алгоритмов выполнения АО | 1 |
5 | Разработка структуры микропроцессора, реализующего заданный набор команд | 1 |
6 | Разработка алгоритмов выполнения команд | 1 |
7 | Разработка эмулятора выполнения заданных команд | 2 |
8 | Отладка эмулятора | 2 |
9 | Тестирование эмулятора | 2 |
10 | Написание пояснительной записки к проекту | 2 |
11 | Защита проекта | 1 |
Приложение В
40
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Данная система предназначена для ознакомления с некоторыми особенностями процесса выполнения команд в микропроцессоре МК51, а так же на демонстрационном примере в трассировочном режиме пронаблюдать за алгоритмами выполнения следующей группы команд:
– RL – циклический сдвиг аккумулятора влево;
– MOV – пересылка прямоадресуемого байта в регистр;
– LJMP – длинный переход в полном объеме памяти программ .
В.1 Функциональное деление системы
Система, предлагаемая вашему вниманию, функционально разбита на две основные части: управляющую и отображающую.
В.1.1 Управляющая часть
Управляющая часть системы представляет собой панель, на которой расположены управляющие элементы, при помощи которых осуществляется доступ к основным функциональным возможностям системы, а так же осуществляется управление процессом отображения информации в отображающей части системы.
В.1.2 Отображающая часть
Отображающая часть системы, представляет собой панель, на которой в схематичной форме изображена структурная схема гипотетического микропроцессора, разработанного на основе микропроцессора-прототипа МК51. Отображающая часть системы несет в себе основную информационную нагрузку, поскольку именно на ней происходит отображение этапов выполнения той или иной команды.
В.2 Функциональные возможности системы
Разработанная система позволяет наблюдать за процессом выполнения заданной системы команд в трассировочном режиме.
Основным достоинством системы является то, что возможность трассировки в ней представлена в двух видах: пошаговом и автоматическом.
Автоматический режим трассировки отличается от пошагового тем, что процесс перехода от одного состояния эмулируемой команды другое в нем происходит без участия со стороны пользователя посредством специального системного таймера. Однако пользователю доступна возможность изменения и установки интервала системного таймера.
В пошаговом режиме переход от одного состояния эмулируемой команды в другое, осуществляется только при нажатием пользователем соответствующей клавиши.
41
В.3 Описание назначения управляющих элементов системы
Система располагает следующим набором управляющих элементов:
– кнопка Автоматический режим – отвечает за пуск системного таймера, и автоматического режима трассировки команд;
– кнопка Следующий шаг – переход в ручной режим трассировки и переход к следующему шагу;
– кнопка Сброс – приведение процесса трассировки в исходное состояние;
– полоса скорости трассировки – устанавливает скорость трассировки в автоматическом режиме.
Приложение Г
42
ЭКРАННЫЕ ФОРМЫ
Рисунок Г.1 – Общий вид окна программы.
Рисунок Г.2 – Вид системы в процессе эмуляции.
Приложение Д
43
ЛИСТИНГ ПРОГРАММЫ
int num_step=0;
int num_operation=0;
char nsm[8];
void ResetAllC()
{
Form1->C1->Color=RGB(210,210,210); Form1->C2->Color=RGB(210,210,210);
Form1->C3->Color=RGB(210,210,210); Form1->C4->Color=RGB(210,210,210);
Form1->C5->Color=RGB(210,210,210); Form1->C6->Color=RGB(210,210,210);
Form1->C7->Color=RGB(210,210,210); Form1->C8->Color=RGB(210,210,210);
Form1->C9->Color=RGB(210,210,210); Form1->C10->Color=RGB(210,210,210);
Form1->C11->Color=RGB(210,210,210); Form1->C12->Color=RGB(210,210,210);
Form1->C13->Color=RGB(210,210,210); Form1->RPP->Color=RGB(210,210,210);
Form1->KOP->Text=""; Form1->Op1->Text=""; Form1->Op2->Text="";
Form1->Operat->Caption="RL A";
}
void rlA()
{
char c=nsm[0]; char s1[8];
strcpy((char*)s1,(char*)nsm); int i=0;
for(i=0;i<7;i++) nsm[i]=s1[i+1];
nsm[i]=c;
}
void RL()
{
switch(num_step)
{
case 0:
ResetAllC(); Form1->Operat->Caption="RL A"; Form1->RPP->Color=RGB(27,122,186);
Form1->C1->Color=RGB(27,122,186); Form1->C2->Color=RGB(27,122,186);
Form1->C3->Color=RGB(27,122,186); Form1->C5->Color=RGB(27,122,186);
Form1->C11->Color=RGB(27,122,186); Form1->C12->Color=RGB(27,122,186);
Form1->Panel_PC->Color=RGB(27,122,186); Form1->UUiS->Color=RGB(27,122,186);
Form1->RK->Color=RGB(27,122,186); Form1->Gen->Color=RGB(27,122,186);
Form1->KOP->Text="23h"; Form1->PC->Text="0Bh"; num_step++;
break;
case 1:
Form1->Op1->Text="08h"; Form1->PC->Text="0Ch"; num_step++;
break;
case 2:
Form1->RPP->Color=RGB(210,210,210); Form1->C1->Color=RGB(210,210,210);
Form1->C2->Color=RGB(210,210,210); Form1->C3->Color=RGB(210,210,210);
Form1->C5->Color=RGB(210,210,210); Form1->Panel_PC->Color=RGB(210,210,210);
Form1->C8->Color=RGB(27,122,186); Form1->C7->Color=RGB(27,122,186);
Form1->Panel_RA->Color=RGB(27,122,186); Form1->RPD->Color=RGB(27,122,186);
Form1->RA->Text="08h"; num_step++;
break;
case 3:
Form1->C8->Color=RGB(210,210,210); Form1->C7->Color=RGB(210,210,210);
44
Form1->Panel_ALU->Color=RGB(27,122,186); Form1->C13->Color=RGB(27,122,186);
Form1->NSM->Text=Form1->RPD_v->Cells[1][3].c_str(); num_step++;
break;
case 4:
ResetAllC(); Form1->RPD->Color=RGB(210,210,210);
Form1->C12->Color=RGB(27,122,186); Form1->C13->Color=RGB(27,122,186);
strcpy((char*)nsm,Form1->NSM->Text.c_str()); rlA();
Form1->NSM->Text=(AnsiString)nsm; Form1->RK->Color=RGB(210,210,210);
num_step++;
break;
case 5:
Form1->C13->Color=RGB(210,210,210);
Form1->Panel_ALU->Color=RGB(210,210,210); Form1->C11->Color=RGB(27,122,186);
Form1->C8->Color=RGB(27,122,186); Form1->RK->Color=RGB(27,122,186);
Form1->Panel_RA->Color=RGB(27,122,186); Form1->RA->Text="08h"; num_step++;
break;
case 6:
Form1->Panel_ALU->Color=RGB(27,122,186); Form1->C7->Color=RGB(27,122,186);
Form1->RPD->Color=RGB(27,122,186);
Form1->RPD_v->Cells[1][3]=Form1->NSM->Text;
Form1->C13->Color=(TColor)RGB(27,122,186); num_step=0; num_operation++;
break;
}
}
void MOV()
{
switch(num_step)
{
case 0:
ResetAllC();
Form1->Operat->Caption="MOV Rn,ad"; Form1->RPD->Color=RGB(210,210,210);
Form1->Panel_ALU->Color=RGB(210,210,210);
Form1->Panel_RA->Color=RGB(210,210,210);Form1->C12->Color=RGB(27,122,186);
Form1->C11->Color=RGB(27,122,186); Form1->C5->Color=RGB(27,122,186);
Form1->C3->Color=RGB(27,122,186); Form1->C2->Color=RGB(27,122,186);
Form1->C1->Color=RGB(27,122,186); Form1->Panel_PC->Color=RGB(27,122,186);
Form1->KOP->Text="A8h"; Form1->PC->Text="0Dh"; num_step++;
break;
case 1:
ResetAllC();
Form1->RPD->Color=RGB(210,210,210); Form1->Panel_ALU->Color=RGB(210,210,210); Form1->Panel_RA->Color=RGB(210,210,210);
Form1->C12->Color=RGB(27,122,186); Form1->C11->Color=RGB(27,122,186);
Form1->C5->Color=RGB(27,122,186); Form1->C3->Color=RGB(27,122,186);
Form1->C2->Color=RGB(27,122,186); Form1->C1->Color=RGB(27,122,186);
Form1->Panel_PC->Color=RGB(27,122,186); Form1->Op1->Text="03h";
Form1->PC->Text="0Eh"; num_step++;
break;
case 2:
ResetAllC(); Form1->RPD->Color=RGB(210,210,210);
Form1->Panel_ALU->Color=RGB(210,210,210);
45
Form1->C11->Color=RGB(27,122,186); Form1->C5->Color=RGB(27,122,186);
Form1->C3->Color=RGB(27,122,186); Form1->C2->Color=RGB(27,122,186);
Form1->C1->Color=RGB(27,122,186); Form1->Panel_PC->Color=RGB(27,122,186);
Form1->Op2->Text="A0h"; Form1->PC->Text="0Fh"; num_step++;
break;
case 3:
Form1->C1->Color=RGB(210,210,210);
Form1->C2->Color=RGB(210,210,210);
Form1->C3->Color=RGB(210,210,210);
Form1->C5->Color=RGB(210,210,210);
Form1->Panel_PC->Color=RGB(210,210,210);
Form1->C8->Color=RGB(27,122,186);
Form1->Panel_RA->Color=RGB(27,122,186);
Form1->RA->Text="A0h";
num_step++;
break;
case 4:
Form1->C7->Color=RGB(27,122,186); Form1->RPD->Color=RGB(27,122,186);
num_step++;
break;
case 5:
Form1->C7->Color=RGB(210,210,210); Form1->C8->Color=RGB(210,210,210);
Form1->Panel_RA->Color=RGB(210,210,210); Form1->RK->Color=RGB(210,210,210);
Form1->C9->Color=RGB(27,122,186); Form1->C13->Color=(TColor)RGB(27,122,186);
Form1->Panel_ALU->Color=(TColor)RGB(27,122,186); Form1->NSM->Text="10h";
num_step++;
break;
case 6:
Form1->RK->Color=(TColor)RGB(27,122,186);
Form1->C9->Color=(TColor)RGB(210,210,210);
Form1->Panel_ALU->Color=(TColor)RGB(210,210,210);
Form1->C7->Color=(TColor)RGB(27,122,186);
Form1->C8->Color=(TColor)RGB(27,122,186);
Form1->Panel_RA->Color=(TColor)RGB(27,122,186); Form1->RA->Text="03h";
Form1->RPD_v->Cells[1][1]="10h"; num_step=0; num_operation++;
break;
}
}
void LJMP()
{
switch(num_step)
{
case 0:
Form1->Operat->Caption="LJMP ad16";
Form1->RPD->Color=(TColor)RGB(210,210,210);
Form1->Panel_ALU->Color=(TColor)RGB(210,210,210);
Form1->C9->Color=(TColor)RGB(210,210,210);
Form1->C13->Color=(TColor)RGB(210,210,210);
Form1->C7->Color=(TColor)RGB(210,210,210);
Form1->C8->Color=(TColor)RGB(210,210,210);
46
Form1->C5->Color=(TColor)RGB(27,122,186);
Form1->C3->Color=(TColor)RGB(27,122,186);
Form1->C2->Color=(TColor)RGB(27,122,186);
Form1->C1->Color=(TColor)RGB(27,122,186);
Form1->Panel_PC->Color=(TColor)RGB(27,122,186);
Form1->RPP->Color=(TColor)RGB(27,122,186);
Form1->KOP->Text="02h"; Form1->PC->Text="10h"; num_step++;
break;
case 1:
Form1->Op1->Text="B1h"; Form1->PC->Text="11h"; num_step++;
break;
case 2:
Form1->C5->Color=(TColor)RGB(210,210,210);
Form1->C3->Color=(TColor)RGB(210,210,210);
Form1->C2->Color=(TColor)RGB(210,210,210);
Form1->C1->Color=(TColor)RGB(210,210,210);
Form1->Panel_PC->Color=(TColor)RGB(210,210,210);
Form1->RPP->Color=(TColor)RGB(210,210,210);
Form1->C8->Color=(TColor)RGB(27,122,186);
Form1->C7->Color=(TColor)RGB(27,122,186);
Form1->Panel_RA->Color=(TColor)RGB(27,122,186);
Form1->RA->Text="B1h";
num_step++;
break;
case 3:
Form1->C7->Color=(TColor)RGB(210,210,210);
Form1->C8->Color=(TColor)RGB(210,210,210);
Form1->Panel_RA->Color=(TColor)RGB(210,210,210);
Form1->RPD->Color=(TColor)RGB(27,122,186);
Form1->C9->Color=(TColor)RGB(27,122,186);
Form1->C5->Color=(TColor)RGB(27,122,186);
Form1->Panel_PC->Color=(TColor)RGB(27,122,186); Form1->PC->Text="0Ah";
num_operation=0; num_step=0;
break;
}
}
void DoOperation()
{
switch(num_operation)
{
case 0:
RL();
break;
case 1:
MOV();
break;
case 2:
LJMP();
break;
}
}