Разработка структуры и основных устройств микро-ЭВМ
Функциональный состав микро-ЭВМ, разработка системы команд. Описание взаимодействия всех блоков электронно-вычислительной машины при выполнении команд программы. Арифметико-логическое устройство, кэш-память процессора, функциональное моделирование.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.05.2013 |
Размер файла | 981,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Содержание
Введение
1. Разработка общей структуры микроЭВМ
1.1 Функциональный состав микроЭВМ
1.2 Разработка системы команд
1.3 Описание взаимодействия всех блоков микроЭВМ при выполнении команд программы
2. Разработка основных устройств микроЭВМ
2.1 Запоминающие устройства
2.2 Устройство управления
2.2.1Счетчик команд
2.2.2 Блок выборки команд
2.2.3 Блок декодирования
2.2.4 Блок выборки операндов
2.2.5 Блок выполнения (OperativeBlock)
2.2.6Блок стековой памяти
2.3 Арифметико-логическое устройство
2.3.1 Логическое построение АЛУ и блок РОНов
2.3.2 Реализация арифметических и логических операций
2.4 Организация кэш-памяти процессора
2.5 Описание схемы предсказания переходов
2.6 Описание арбитров
3. Функциональное моделирование
3.1 Пример программы
3.2 Временная диаграмма работы всего устройства
4. Анализ и оптимизация разработанной микроЭВМ
4.1 Конвейерное выполнение фаз последовательностей команд
Заключение
Введение
Архитектура вычислительной машины -- это концептуальная структура вычислительной машины, определяющая проведение обработки информации и включающая методы преобразования информации в данные и принципы взаимодействия технических средств и программного обеспечения.
В настоящее время наибольшее распространение в ЭВМ получили 2 типа архитектуры: принстонская (фон Неймана) и гарвардская. Обе они выделяют 2 основных узла ЭВМ: центральный процессор и память компьютера. Различие заключается в структуре памяти: в принстонской архитектуре программы и данные хранятся в одном массиве памяти и передаются в процессор по одному каналу, тогда как гарвардская архитектура предусматривает отдельные хранилища и потоки передачи для команд и данных.
Разрабатываемая микроЭВМ должна иметь принстонскую архитектуру (фон Неймана). Архитектура фон Неймана -- широко известный принцип совместного хранения программ и данных в памяти компьютера. Вычислительные системы такого рода часто обозначают термином «машина фон Неймана», однако, соответствие этих понятий не всегда однозначно. В общем случае, когда говорят об архитектуре фон Неймана, подразумевают физическое отделение процессорного модуля от устройств хранения программ и данных.
В 1946 году трое учёных: Артур Бёркс, Герман Голдстайн и Джон фон Нейман, опубликовали статью «Предварительное рассмотрение логического конструирования электронного вычислительного устройства». В статье обосновывалось использование двоичной системы для представления данных в ЭВМ (преимущественно для технической реализации, простота выполнения арифметических и логических операций -- до этого машины хранили данные в десятичном виде), выдвигалась идея использования общей памяти для программы и данных. Имя фон Неймана было достаточно широко известно в науке того времени, что отодвинуло на второй план его соавторов, и данные идеи получили название «принципы фон Неймана».
- Принцип двоичного кодирования. Для представления данных и команд используется двоичная система счисления.
- Принцип однородности памяти. Как программы (команды), так и данные хранятся в одной и той же памяти (и кодируются в одной и той же системе счисления -- чаще всего двоичной). Над командами можно выполнять такие же действия, как и над данными.
- Принцип адресуемости памяти. Структурно основная память состоит из пронумерованных ячеек; процессору в произвольный момент времени доступна любая ячейка.
- Принцип последовательного программного управления. Все команды располагаются в памяти и выполняются последовательно, одна после завершения другой, в последовательности, определяемой программой.
- Принцип жесткости архитектуры. Неизменяемость в процессе работы топологии, архитектуры, списка команд.
Компьютеры, построенные на этих принципах, относят к типу фон-неймановских.
В более подробное описание, определяющее конкретную архитектуру, также входят: структурная схема ЭВМ, средства и способы доступа к элементам этой структурной схемы, организация и разрядность интерфейсов ЭВМ, набор и доступность регистров, организация памяти и способы её адресации, набор и формат машинных команд процессора, способы представления и форматы данных, правила обработки прерываний.
По перечисленным признакам и их сочетаниям среди архитектур выделяют:
- По разрядности интерфейсов и машинных слов: 8-, 16-, 32-, 64-, 128- разрядные (ряд ЭВМ имеет и иные разрядности);
- По особенностям набора регистров, формата команд и данных: CISC, RISC, VLIW;
- По количеству центральных процессоров: однопроцессорные, многопроцессорные, суперскалярные.
Необходимо спроектировать микроЭВМ со следующими характерными особенностями:
- Ширина шины данных -- 8 бит, адреса -- 16 бит, следовательно, ЭВМ будет 8-разрядной;
- Процессор имеет фиксированную длину машинных инструкций (32 бита) и простой формат команд; так как в системе реализована прямая и прямая регистровая адресации, то возможно выполнение инструкций, которые обращаются непосредственно к данным в памяти (относится к прямой адресации); для операций с памятью доступны команды load-store; система имеет 28 регистров общего назначения, такое большое количество регистров характерно для RISC-процессоров, в CISC-процессорах их меньше и они выполняют строго определенные функции. Таким образом, реализуемая микроЭВМ соответствует процессорам с RISC архитектурой, за исключением присутствия в системе прямой адресации, не характерной для процессоров данного типа.
1. Разработка общей структуры микро-ЭВМ
1.1 Функциональный состав микроЭВМ
Важнейшей особенностью любой микроЭВМ является наличие конвейера. В данном проекте реализовано 5 стадий конвейера:
1. Выборка команды. На данной стадии определены следующие функциональные блоки разрабатываемой микроЭВМ:
- Счетчик команд (ProgramCounter). Данный элемент сообщает блоку выборки команды (ComandFetch) адрес, по которому необходимо загрузить следующую команду, либо выполнить прыжок по определённому адресу. Если по неверному предсказанию, например, не выполнен прыжок по команде условного перехода, то данный блок укажет адрес, с которого необходимо продолжить работу конвейера после очистки.
- Блок выборки команды (ComandFetch). Элемент, отвечающий за загрузку команды. Проверяется наличие необходимой команды в кэше команд, при ее отсутствии выполняется ее выборка из памяти, с дальнейшим сквозным отображением на кэш. Полученная команда буферизируется и передается блоку декодирования (Decoder) для дешифрации. Данный блок также сообщает счетчику команд адрес следующей операции.
- Кэш команд (CommandCache). 2 банка по 16 строк, в каждой из которых 8 байт.
- Арбитр доступа к кэшу команд (CommandCacheArbiter).Предоставляет доступ к кэшу со стороны блока выборки команд и блока записи результата.
- Предсказатель переходов(Predictor). Блок предсказания условных переходов. Работает по схеме А3, то есть если переход был, то в сдвиговый двухбитный регистр задвигается «1», иначе -- «0». Если в регистре содержится хотя бы одна единица, то предсказатель переходов предсказывает переход. Для определения конкретного сдвигового регистра в таблице истории шаблонов используется 4 бита из адреса текущей команды.
2. Декодирование команды.
- Декодер (Decoder). Блок предназначен для дешифрации команды, полученной от блока выборки операндов. В результате работы данного элемента на блок выборки операндов поступает следующая информация: код операции, режим адресации (прямая либо прямая регистровая), адреса первого и второго операндов, а также адрес регистра, в который необходимо сохранить результат.
3. Выборка операндов.
- Блок выборки операндов (OperandFetch). Блок выполняет работу, схожую с работой блока выборки команд. Если используется прямая адресация, то первый операнд запрашивается из кэша данных или оперативного запоминающего устройства, иначе -- операнд получается из регистров общего назначения. По заданию их количество равно 28. Второй операнд всегда располагается в РОН.
- Кэшданных (DataCache). 2 банка по 16 строк, в каждой из которых 8 байт.
- Арбитр доступа к кэшу данных (DataCacheArbiter).Предоставляет доступ к кэшу со стороны блока выборки операндов и блока записи результата.
4. Выполнение команды.
- Блок арифметико-логического устройства (ALU).Элемент, отвечающий за выполнение операции. Принимает от блока выборки операндов код операции, первый операнд, второй операнд и номер регистра назначения. Выполняет инструкцию в соответствии с ее кодом и возвращает результат.
- Стек (Stack). Функциональный блок, реализующий архитектуру стека и использующийся для команд PUSH (затолкнуть в стек) и POP (вытолкнуть из стека).
- Регистр флагов (Flags). Содержит следующие флаги, значение которых зависит от результата выполнения операции: Z--нулевой результат, G--результат больше нуля, L-- результат меньше нуля, О -- переполнение стека.
5. Запись результата.
- Блок записи результат (Store). При использовании команды STрезультат из регистров общего назначения сохраняется по определённому адресу в оперативном запоминающем устройстве с последующим отображением на кэш.
Также в проекте используется оперативное запоминающее устройство (ОЗУ) и арбитр доступа к нему со стороны блока выборки команда, блока выборки операндов и блока записи результата.
Общая структура микроЭВМ представлена в приложении А.
1.2 Разработка системы команд
Все реализованные команды имеют одинаковую длину -- 32 бита. Так как в системе используется 2 типа адресации, то необходимо иметь 2 различные интерпретации битов команды.
Интерпретация при прямой адресациипредставлена на рисунке 1.1, а при прямой регистровой -- на рисунке 1.2. А ниже приведено пояснение по каждому формату команд.
31………….27 |
26 |
25……………………..10 |
9………….5 |
4………….0 |
|
КОП |
AM |
Адрес |
R2 |
R3 |
Рисунок 1.1 -- Формат команды при прямой адресации
31………….27 |
26 |
25………21 |
20…………10 |
9………….5 |
4………….0 |
|
КОП |
AM |
R1 |
Резерв |
R2 |
R3 |
Рисунок 1.2 -- Формат команды при прямой регистровой адресации
1) КОП -- код операции;
2) AM (AddressingMode)-- режим адресации: 0 для прямой и 1 для прямой регистровой;
3) Адрес -- адрес в оперативном запоминающем устройстве;
4) R1 --номер регистра, в котором находится первый операнд;
5) R2 --номер регистра, в котором находится второй операнд;
6) R3-- номер регистра, куда необходимо занести результат выполнения операции.
7) Резерв -- не используемые биты команды при прямой регистровой адресации.
В таблице 1.1 приведены коды всех реализованных операций.
Таблица 1.1 -- Коды операций
Комбинация битов |
Десятичное значение |
Название команды |
Описание команды |
|
1 |
2 |
3 |
4 |
|
00000 |
0 |
ST |
Запись значения регистра в память |
|
00001 |
1 |
LD |
Загрузка в регистр из памяти |
|
00010 |
2 |
NOTZ |
Инверсия по флагу Z |
|
00011 |
3 |
ROR |
Циклический сдвиг вправо |
|
00100 |
4 |
POP |
Изъятие данных из стека |
|
00101 |
5 |
PUSH |
Помещение данных в стек |
|
00110 |
6 |
AND |
Логическое умножение |
|
00111 |
7 |
CMP |
Сравнение двух операндов |
|
10000 |
16 |
JC |
Прыжок по флагу Z |
|
1 |
2 |
3 |
4 |
|
10001 |
17 |
JMP |
Прыжок |
1.3 Описание взаимодействия блоков микроЭВМ при выполнении команд программы
На рисунке 1.3 представлена общая схема взаимодействия всех функциональных блоков разработанной микроЭВМ.
Рисунок 1.3 -- Схема взаимодействия блоков
Работа конвейера имеет 5 стадий, на которых команды выполняются параллельно. Например, пока выбранная команда дешифрируется в декодере, блок выборки команд уже выбирает следующую команду. В системе реализована концепция так называемого квитирования: каждая последующая стадия конвейера уведомляет предыдущую о том, что она забрала результаты ее обработки. Только после получения данного уведомления блок, отдавший результаты, может приступить к обработке следующей инструкции.
Работа схемы начинается с блока выборки команды. По сигналу от декодера, сообщающему о том, что он забрал предыдущие данные и сброшенному сигналу собственной занятости блок начинает работать. На первом такте в регистры защелкиваются все входные данные, в частности, адрес следующей команды. Затем блок посылает запрос на доступ к кэш арбитру кэша команд и приостанавливает свою работу, пока арбитр не пришлет разрешение на поиск в кэш данной команды. Если кэш возвращает сигнал Hit=1, что сигнализирует о наличие там данной команды, то результат работы данного блока готов, и он передается декодеру для дешифрации. Если Hit=0 (промах), данной инструкции в кэш нет, следовательно, необходимо обратиться к памяти. Блок посылает запрос доступа к оперативному запоминающему устройству его арбитру и ожидает разрешения. Когда приходит разрешение, блок читает из памяти по 1 байту, так как ширина шины данных равна 1 байту, 8 раз и буферизирует полученные данные. Размер команды -- 4 байта, но блок буферизировал 8 байт (2 команды), так как, размер одной строки кэш равен 8 байтам и, следую принципу локальности данных, можно предположить, что следующей командой будет команда, находящаяся в памяти непосредственно за текущей. При втором срабатывании блока, необходимая команда уже будет находиться в кэш, что ускорит работу процессора. После буферизации двух команд, посылается запрос к кэш и по окончании ожидания ответа выполняется их запись. Освобождается кэш и посылается уведомление декодеру о готовности результата.
По приходу сигнала готовности результата от блока выборки команды начинается работа декодера. По первому такту защелкиваем входные данные в регистрах и уведомляем блок выборки команды о том, что данные сняты с шин, и он может продолжить работу. Команда декодируется путем чтения с шины команд данных с определённых проводов. Результат сразу выдается на блок выборки операндов, и выставляется сигнал о готовности результата.
Блок выборки операндов работает подобно блоку выборки команд. Исключение составляет лишь получение операнда/операндов (в зависимости от типа адресации) из регистров. Как только адреса операндов защелкиваются в регистрах, они сразу попадают в блок регистров, который в свою очередь возвращает операнд либо операнды по этим адресам.
После получения сигнала готовности он блока выборки операндов начинает работу арифметико-логическое устройство. Как и на всех блоках, в первую очередь, защелкивают входные данные в регистрах. На шинах с регистров появились данные, которые в блоке выполнения (OperationBlock)выполняются. Если текущая команда--PUSHлибо POP, то встек (Stack) заталкиваются операнды, либо выталкиваются. После выполнения операций также выставляются флаги в регистре флагов. Необходимо проверить правдивость предсказания условного перехода. Если предсказано, что перехода не будет, а он должен быть, то посылается в счетчик программ (ProgramCounter) сигнал, о необходимости прыгнуть по заранее сохраненному адресу, а также посылается сигнал асинхронной очистки всех регистров, счетчиков и других элементов конвейера, в чем и заключается его очистка. Вносятся необходимые изменения в таблицу истории шаблонов, и выводится результат работы блока.
Далее по конвейеру расположен блок записи результата в память. Если текущая команда --ST, то читается с входной шины адрес назначения. Затем выполняется процесс получения доступа к памяти и запись результата в память и, так как по условия синхронизация кэш с памятью сквозная с отображением, этот же результат записывается в кэш данных по описанной ранее схеме.
2. Разработка основных устройств микро-ЭВМ
2.1 Запоминающие устройства
Условно-графическое изображение ОЗУ представлено на рисунке 2.1. Размер шины адреса составляет 16 бит, следовательно, возможно адресовать память объемом 216=65536 слов, каждое из которых имеет размер в 1 байт, так как размер шины данных по условию равен 8 битам.
Рисунок 2.1 -- Условно-графическое обозначение модуля памяти.
На рисунке 2.1 можно увидеть, что память имеет 4 входа и 1 выход:
- data[7..0] -- шина данных, по которой подаются данные для записи по адресу address[14..0];
- wren-- вход разрешения записи, 1 -- запись разрешена, 0 -- запрещена;
- address[14..0] --шина адреса, устанавливает адрес, по которому записываются данные из входа data[7..0];
- clock --синхросигнал;
- q[7..0] --выходная шина данных, данные, прочитанные по адресу address[14..0].
Работа с память осуществляется блоком выборки команд, блоком выборки операндов и блоком записи результата. Для координирования действия всех трех элементов необходимо отдельное устройство. Этим занимается арбитр памяти. Арбитру на вход поступает запрос доступа, если их несколько, то доступ разрешается в соответствии с приоритетом: высший приоритет у блока выборки команды, затем блок выборки операндов и блок записи результата. После определения арбитром, кому необходимо предоставить доступ к памяти, посылается сигнал MemoryGrant, и целевое устройство начинает работать с ОЗУ. По окончанию работы устройство обязано освободить память, послав сигнал MemoryFree, иначе другие устройства не смогут работать с ней. Запись в память осуществляется только командой ST, которая для этого посылает сигнал wren. Чтение осуществляется всеми приведенными ранее блоками, но по 1 байту -- максимальный размер шины данных. Как правило, блокам необходимо прочитать последовательно 8 байт, чтобы записать целую строку в кэш, поэтому чтение обращение к памяти приходится проводить 8 раз.
Разрабатываемая микроЭВМ имеет принстонскую архитектуру. Ее главной особенностью является совместное хранение команд и данных. Таким образом, всё хранится в одной памяти -- оперативном запоминающем устройстве. В данной системе нет необходимости добавления дополнительной памяти.
2.2 Устройство управления
Какое-либо централизованное устройство управления в архитектуре данной микроЭВМ отсутствует. В системе организована концепция квитирования, когда каждый модуль сообщает предыдущий и последующий об окончании определённого этапа обработки. Эта дает возможность правильно функционировать всему конвейеру: не забегать вперед, затирая важные данные, но и не простаивать, замедляя работу процессора. В проекте также реализованы вспомогательные блоки, предназначенные, например, для управления стеком и последовательностью команд.
2.2.1 Счетчик команд
Счетчик команд (ProgramCounter) предназначен для управления последовательностью инструкций. Помимо указания адреса следующей команды, который мог определять и сам блок выборки команды, он отвечает за сохранения адреса возврата в случае ошибки предсказания и очистки конвейера. На рисунке 2.2 представлено его условно-графическое обозначение.
- NextComand[15..0] --адрес следующей команды;
- JumpAddress[15..0]--адрес прыжка;
- AllowJump--сигнал от АЛУ, указывающий, что предсказание по условному переходу было ошибочным и необходимо сделать прыжок там, где его не сделали, либо вернуться по определённому адресу там, где был выполнен прыжок;
- LoadNext--сигнал, поступающий от блока выборки команд после того, как они закончили обработку очередной команды, таким образом, блок извещает счетчик команд и готовности принять следующий адрес;
- Jump--сигнал от АЛУ, указывающий, что необходимо выполнить прыжок и загрузить в блок выборки команд адрес прыжка, приходит вместе с AllowJump;
- Address[15..0] --шина, предоставляющая адрес следующей команды для блока выборки команд.
Рисунок 2.2 --Условно-графическое обозначение счетчика команд
2.2.2 Блок выборки команд
Блок выборки команд представляет собой схему, которая получает от счетчика команд адрес текущей команды, вычисляет адрес следующей команды и отправляет его обратно. Далее производится работа непосредственно с текущим адресом. Сначала предпринимается попытка найти команду в кэш, затем в памяти. Если команды не было в кэш, то она кэшируется для дальнейшего использования. Особенностью здесь является то, что команды выбираются по 2, так как строка кэш в 2 раза больше размера команды, и последующая команда будет находиться в более быстрой памяти, следовательно, получается прирост скорости работы процессора.
Ранее описывалось, что каждый доступ к кэш и памяти сопровождается обращением к соответствующим арбитрам, чтобы не было блокировок либо противоречивых значений на выходе.
Также необходимо отметить одну важную деталь: адрес для памяти берется с небольшими изменениями. 3 младших бита устанавливаются равными нулю, следовательно, мы выравниваем адресацию памяти по 8 байт. В дальнейшем при чтении 8 байт из памяти по 1 слову, величина которого равна 1 байту, счетчик увеличивает значение обнулённой области адреса. Для кэша такой процедуры проводить нельзя, да и нет необходимости, в него заносится по 2 команды сразу, а по младшим 3 битам определяется смещение конкретного слова в строке кэша.
Условно-графическое обозначение блока представлено на рисунке 2.5.
Рисунок 2.3-- Условно-графическое обозначение блока выборки команд
2.2.3Блок декодирования
Блок декодирования -- элемент, предназначенный для дешифрации команды. Он имеет довольно простое устройство и алгоритм его работы таков: подождать освобождения сигнала готовности и сигнала захвата данных от блока выборки операндов; защелкнуть входные данные в регистры; сообщить о буферизации данных блок выборки операндов; дешифрировать команду путем выбора определённых проводов на шине для определённых данных и выдать результат блоку выборки операндов.
Условно-графическое обозначение блока представлено на рисунке 2.4.
Рисунок 2.4-- Условно-графическое обозначение блока декодирования
2.2.4 Блок выборки операндов
Блок выборки операндов представляет собой схему, которая получает от блока декодирования команд код операции, тип адресации, адреса операндов, а также несколько дополнительных данных. Если все операнды находятся в регистрах, то забираются оттуда, выставляется сигнал готовности результата и данные передаются арифметико-логическому устройству. Если же первый операнд находится в памяти (используется прямая адресация), то блок запрашивает у арбитра кэша данных доступ к кэш и ожидает получения разрешения. Если данных нет в кэш, то по такой же схеме данные находятся в памяти, забираются и передаются АЛУ вместе с сигналом готовности результата.
Условно-графическое обозначение блока представлено на рисунке 2.5.
Рисунок 2.5-- Условно-графическое обозначение блока выборки операндов
2.2.5 Блок выполнения (OperativeBlock)
Блок выполнения представляет собой операционный блок, который принимает код операции, первый операнд, второй операнд, флаг Z, а также на него заведена шина из стека, для чтения результата при выполнении команды POP.Внутри данного блока выполняются все операции и если текущая операция имеет результат, то он выводится по выходной шине.
На рисунке 2.6 представлена схема для реализации операции циклического сдвига вправо. На рисунке 2.7 -- схема сравнения двух операндов, которое выполняется вычитанием второго операнда из первого. Кроме того, учитывается знак результата, который затем используется для корректного выставления определённого флага в регистре флагов.
Рисунок 2.6 -- Схема блока циклического сдвига вправо
Рисунок 2.7 -- Схема блока сравнения
На рисунке 2.8 представления схема реализации операции «НЕ» по флагу Z. Если флаг Z=0, то операнд пропускается обычным образом, а если Z=1, то операнд побитно инвертируется.
Рисунок 2.8 -- Схема блока операции «НЕ» по флагу
Все остальные операции реализованы непосредственно в операционном блоке и представлены на чертежах в приложениях.
2.2.6 Блок стековой памяти
Стековая память находится в составе блока АЛУ. Стек состоит из 9 регистров, хранящих по 1 байту каждый.Основным элементом, следящим, за состоянием стека, является счетчик, считающий в обоих направлениях: +1 и ?1. Если текущая операция --POP, то уменьшаем счетчик на единицу и выталкиваем значение на шину результата, если PUSH--увеличиваем счетчик и заталкиваем операнд в стек. Условно-графическое обозначение стека приведено на рисунке 2.9.
Рис 2.9--Условно-графическое обозначение блока стека
2.3 Арифметико-логическое устройство
2.3.1 Логическое построение АЛУ и блок РОНов
В составе блока АЛУ находится блок стека. Если текущая операция --POP или PUSH, то далее работаем со стеком. Извлекаем значение или загружаем его в стек. Проверяется код операции и в зависимости оттого, какая операция, происходит действие над операндами или операндом. В регистр результата, которым является регистр, указанный в команде, как регистр назначения, записывается результат всех команд кроме ST (тут мы должны записать результат в память, и он подается на вход блока записи результата), а также JMP,JNC (так как результат равен нулю и в регистр не записывается) и PUSH (так как в результате этой операции ничего получиться не должно).
На рисунке 2.10 представлено условно-графическое обозначение блока АЛУ.
Рисунок 2.10--Условно-графическое обозначение блока АЛУ.
В блоке регистров общего назначения находится 28 регистров, построенных на D-триггерах, способных сохранить по 1 байту каждый. Условно-графическое обозначение этого блока представлено на рисунке 2.11.
Рис 2.11--Условно-графическое обозначение блока регистров общего назначения
Входы блока:
- FirstReg[4..0]--номер регистра с первым операндом;
- SecondReg[4..0]--номер регистра со вторым операндом;
- Data[7..0]-- данные для записи;
- Destination[4..0]-- номер регистра, предназначенного для сохранения результата текущей операции;
- Write-- сигнал записи в регистр.
Выходы:
- FirstOperand[7..0]-- значение первого операнда из регистра;
- SecondOperand[7..0]-- значение второго операнда.
2.3.2 Реализация арифметических и логических операций
1) ST-- операция записи операнда в память. Однако напрямую с памятью может работать толькоарбитр доступа к памяти. В данном случае при записи данных в память блок записи результата посылает арбитру запрос на получение доступа для работы с памятью и, когда получает разрешение, то происходит запись данных.
Таблица 2.1 -- Команда ST
Код операции |
00000 (0) |
|
Пример |
ST 128, R0 |
|
В десятичном виде |
0 2 0 0 |
|
В двоичном виде |
00000000 00000010 00000000 00000000 |
2) LD-- операция загрузки операнда из памяти. Точно также через запросы к арбитру доступа к памяти происходит работа в блоке выборки операндов.
Таблица 2.2-- Команда LD
Код операции |
00001 (1) |
|
Пример |
LD 0, R0 |
|
В десятичном виде |
80 0 0 |
|
В двоичном виде |
00001000 00000000 00000000 00000000 |
3) NOTZ - при этой операции в АЛУ с помощью инвертирующего элемента будет получено значение, равное инверсии операнда, но только в том случае, если флаг Z=1.
Таблица 2.3-- Команда NOTZ
Код операции |
00010 (2) |
|
Пример |
NOTZR2, R4 |
|
В десятичном виде |
20 64 0 4 |
|
В двоичном виде |
00010100 01000000 00000000 00000100 |
4) ROR--операция циклического побитового сдвига вправо.
Таблица 2.4-- Команда ROR
Код операции |
00011 (3) |
|
Пример |
RORR0, R1 |
|
В десятичном виде |
28 0 0 1 |
|
В двоичном виде |
00011100 00000000 00000000 00000001 |
5) POP-- операция для работы со стеком, который находится в АЛУ. При распознавании этой операции операнд читается из стека.
Таблица 2.5-- Команда POP
Код операции |
00100 (4) |
|
Пример |
POPR4 |
|
В десятичном виде |
36 0 0 4 |
|
В двоичном виде |
00100100 00000000 00000000 00000100 |
6) PUSH-- операция для работы со стеком, который находится в АЛУ. При распознавании этой операции операнд записывается в стек.
Таблица 2.6-- Команда PUSH
Код операции |
00101 (5) |
|
Пример |
PUSHR2 |
|
В десятичном виде |
44 64 0 0 |
|
В двоичном виде |
00101100 01000000 00000000 00000000 |
7) AND-- при выполнении этой операции в АЛУ над двумя операндами производится операция И. Результат записывается в регистр результата.
Таблица 2.7-- Команда AND
Код операции |
00110 (6) |
|
Пример |
AND R0, R1, R2 |
|
В десятичном виде |
52 0 0 34 |
|
В двоичном виде |
00110100 00000000 00000000 00100010 |
8) CMP- при этой операции сравниваются 2 операнда с помощью вычитания второго из первого с учетом знака. Далее в соответствии с полученным результатом выставляются флаги: равно нулю (Z), больше нуля (G), меньше нуля (O).
Таблица 2.8-- Команда CMP
Код операции |
00111 (7) |
|
Пример |
CMP R2, R2 |
|
В десятичном виде |
60 64 0 64 |
|
В двоичном виде |
00111100 01000000 00000000 01000000 |
9) JC- при поступлении кода этой операции, при удовлетворительном значении Z флага, выполняется прыжок.
Таблица 2.9-- Команда JC
Код операции |
10000 (16) |
|
Пример |
JC 0 |
|
В десятичном виде |
128 0 0 0 |
|
В двоичном виде |
10000000 00000000 00000000 00000000 |
10) JMP - при поступлении кода этой операции,выполняется прыжок.
Таблица 2.9-- Команда JC
Код операции |
10001 (17) |
|
Пример |
JMP 0 |
|
В десятичном виде |
136 0 0 0 |
|
В двоичном виде |
10001000 00000000 00000000 00000000 |
2.4 Организация кэш-памяти процессора
В разработанной микроЭВМ используется 2 кэша: кэш команд и кэш данных. Оба они имею идентичную структуру: 2 банка по 16 строк, в каждой их которых 64 бита. Степень ассоциативности кэш-- 2. Синхронизация с памятью -- сквозная с отображением. Алгоритм замещения строк -- без анализа. На рисунке 2.12 представления схема интерпретации адреса блоком кэш.
электронный вычислительный процессор моделирование
15……………………………………………………7 |
6…….…....3 |
2………..0 |
|
tag |
index |
offset |
Рисунок 2.12 -- Интерпретация адреса блоком кэш
На представленном рисунке offset--смещение байт в одной строке кэш. Так как длина строки -- 8 байт, то 3 младших бита используется для смещения по ним. Indexиспользуется для выбора необходимой строки в кэш. Остальные 9 бит являются тэгом, и поиск соответствия в выбранном множестве происходит именно по ним.
Условно-графическое обозначение кэш показано на рисунке 2.13. На рисунке 2.14 показано условно-графическое обозначение банка кэш, а на рисунке 2.15 -- ячейка кэш.
Рисунок 2.13 -- Условно-графическое обозначение кэш.
Рисунок 2.14-- Условно-графическое обозначение банка кэш
Рисунок 2.15-- Условно-графическое обозначение ячейки кэш
2.5 Описание схемы предсказания переходов
Предсказания динамические, т.к. используется информациях о переходах в прошлом. В состав этого входит блок PHT (patternhistorytable) -- таблица истории для шаблонов. Элемент таблицы (ShiftReg) -- сдвиговый регистр на 2 ячейки. Если хотя бы в одной из ячеек будет 1, то скорее всего переход будет. Для определения ячейки таблицы шаблонов, надо4 бита значения счетчика. Ячейками таблицы шаблонов являются сдвиговые регистры.
На рисунке 2.16 показано УГО блока предсказателя.
Рисунок 2.16 -- УГО блока предсказателя
Блок имеет следующие входы:
- Jump-- значение совершился переход или нет;
- Shift-- тактовый сигнал;
- Address[15..0]-- значение счетчика команд.
И следующий выход:
- Branch - предсказание.
На рисунке 2.17 представлено УГО блока PHT.
Рисунок 2.17-- УГО блока PHT
Блок имеет следующие входы:
- Jump-- значение совершился переход или нет;
- Shift-- тактовый сигнал;
- Pattern[3..0]--4 бита, выделенные из адреса для выбора сдвигового регистра.
И следующий выход:
- Branch - предсказание.
2.6 Описание арбитров
В схеме используется 3 арбитра: для доступа к кэшу команд, для доступа к кэшу данных и для доступа к ОЗУ. К кэшу команд могут обращаться блок выборки команд и блок записи результата, к кэшу данных могут обращаться блок выборки операндов и блок записи результата, к памяти могут обращаться блок выборки команд, блок выборки операндов и блок записи результата. Писать в память может только блок записи результата. Все 3 арбитра работают по одной и той же схеме. Определенное устройство, желающее получить доступ к кэш либо к памяти, посылает соответствующий запрос и ожидает, пока арбитр пришлет разрешение, далее работает с целевыми блоками, и обязательно освобождает. Если одновременно от нескольких блоков приходит запрос, то разрешение выдается в порядке приоритетов.
На рисунке 2.18 представлено УГО арбитра доступа к памяти. На 2.19 -- к кэшу команд и на 2.20 -- к кэшу данных.
Рис 2.18-- УГО арбитра доступа к памяти
Рис 2.19-- УГО арбитра доступа к кэшу команд
Рис 2.20-- УГО арбитра доступа к кэшу данных
3. Функциональное моделирование
3.1 Пример программы
Программу, которая выполняется на микроЭВМ, разработанную для курсового проекта, можно увидеть в таблице 3.1. В таблице используется символьный вид, бинарный и десятичный. Первые 5 бит -- это код операции, 1 бит - тип адресации, далее 16 бит показывают адрес первого операнда либо 5 бит -- номер регистра с первым операндом и 11 бит зарезервированных (в случае прямой регистровой адресации), следующие 5 бит -- это номер регистра, в котором хранится второй операнд, последние 5 бит -- номер регистра для сохранения результата.
Таблица 3.1-Листинг программы
№ |
Символьный вид |
Бинарный вид |
Десятичный вид |
|
1 |
LD0,R0 |
00001|0|00_000|00000_000000|00_000|00000 |
8 8 0 0 |
|
2 |
ST 128,R0 |
00000|0|00_000|00010_000000|00_000|00000 |
0 2 0 0 |
|
3 |
LD 128,R0 |
00001|0|00_000|00010_000000|00_000|00000 |
8 2 0 0 |
|
4 |
ANDR0,R1,R2 |
00110|1|00_000|00000_000000|00_001|00010 |
52 0 0 34 |
|
5 |
NOTZ R2,R4 |
00010|1|00_010|00000_000000|00_000|00100 |
20 64 0 4 |
|
6 |
PUSH R2 |
00101|1|00_010|00000_000000|00_000|00000 |
446400 |
|
7 |
POP R4 |
00100|1|00_011|00000_000000|00_000|00100 |
36004 |
|
8 |
CMP R2, R2 |
00111|1|00_010|00000_000000|00_010|00000 |
6064064 |
|
9 |
JC 8 |
10000|0|00_000|00000_001000|00_000|00000 |
1280320 32 0 |
|
10 |
JMP 8 |
10001|0|00_000|00000_001000|00_000|00000 |
1360320 |
1) Первой командой программа в регистр R0 загружает значение из памяти по адресу 0, следовательно после выполнения в R0 будет храниться 8.
2) Второй командой значение из R0 сохраняется в память по 128 адресу -- это хорошо видно, если сравнить рисунки 3.1 и 3.2.
3) Третьей командой загружаем в регистр R0 значение ячейки памяти по адресу 128, то есть должны прочитать только что записанную 8.
4) Четвертая команда выполняет побитовой «И» регистров R0 и R1 и сохраняет результат в регистре R2.
5) Пятая команда выполняет побитовую инверсию значения регистра R2 и сохраняет результат в регистр R4 при условии, что установлен флаг Z, на данный момент он не установлен.
6) Шестая команда заталкивает в стек значение регистра R2 и сразу же выталкивает это значение в регистр R4.
7) Восьмая команда выполняет сравнение двух регистров, так как это один и тот регистр, то результатом выполнения будет ноль, следовательно, будет установлен флаг Z.
8) На девятой команде будет выполнен прыжок по 8 адресу, так флаг Z установлен.
9) Десятая команда загрузится в счетчик программ, но не выполнится. Следует отметить, что первый раз предсказатель переходов не угадает исход выполнения условного перехода, и будет выполнена очистка конвейера, а последующие разы, предсказатель переходов всегда будет предсказывать прыжок правильно.
На рисунке 3.1 представлена приведенная программа, записанная в ОЗУ микроЭВМ, а на рисунке 3.2 -- состояние ОЗУ после работы программы.
Рисунок 3.1 -- Состояние ОЗУ до работы программы
Рисунок 3.2 -- Состояние памяти после работы программы
Временная диаграмма работы всего устройства
3.2
Описание:
- Clock-- тактирующий сигнал;
- PC-- счетчик команд;
- AddressStored-- адрес команды в блоке выборки команд сохранен;
- ComandFetched-- блок выборки команд выбрал команду;
- Cmd - команда;
- ComandStored-- декодер забуферизировал команду, которая пришла на вход.
- ComandDecoded-- команда декодирована;
- OCForOF-- декодирован код операции;
- AMForOF--декодирован тип адресации;
- FOpForOF-- декодирован адрес первого операнда;
- SOpForOF-- декодирован адрес второго операнда;
- DForOF--декодирован адрес назначения;
- DecodedComandSaved--блок выборки операндов подал сигнал декодеру о забранных данных;
- OperandsFetched-- завершена выборка операндов. Сигнал от блока выборки операндов к АЛУ;
- OCForALU-- код операции для АЛУ;
- FOpForALU-- первый операнд для АЛУ;
- SOpForALU-- второй операнд для АЛУ;
- DForALU-- адрес назначения для АЛУ;
- OperandsSaved-- сигналблоку выборки операндов от АЛУ о забранных данных;
- Data-- результат работы АЛУ;
- MemoryAddress-- адрес по которому надо писать в память;
- MemoryDatap--данные на выходе из памяти;
- CF--блок выборки команды получил доступ к памяти;
- OF-- блок выборки операндов получил доступ к памяти;
- Savedaa--блок записи результата записал данные в память;
- DR--запрос доступа к кэшу данных;
- CR--запрос доступа к кэшу команд;
- Z--Z флаг;
- Prediction -- предсказание;
- Clear--сигнал очистки конвейера;
4. Анализ и оптимизация разработанной микроЭВМ
4.1 Конвейерное выполнение фаз последовательностей команд
Конвейер, на основе которого работает данная реализация микроЭВМ, имеет пять ступеней. На первой ступени конвейера выполняется выборка команд. Как только начинает работать блок выборки команд, выставляется бит занятости этого блока. Сначала команда ищется в кэше команд, для чего необходимо послать запрос доступа к кэшу и получить разрешение для работы с ним. Если в кэше команды не оказалось, то поиск будет осуществлен в памяти. Для этого также необходимо послать запрос доступа к памяти, а после получение проделать необходимые операции. Однако, учитывая то, что шина данных имеет размерность 8 бит, а прочитать надо 64 бита, чтение происходит в 8 этапов. Прочитали слово, буферизировали его, увеличили адрес в памяти, с которого читать. И так происходит, пока все 8 слов не будут прочитаны. Прочитанная команда записывается в кэш команд, чтобы в следующий раз читать не из памяти, а из кэш. Результат выборки команды подается на вход следующего блока -- блока декодирования команды. Также подается сигнал этому блоку, что команда выбрана, и он может приступать к работе. Блок декодирования, получая данные, выставляет бит занятости этого блока и подает сигнал блоку выборки команд, что команда принята. Блок декодирования является второй ступенью конвейера. Команда расчленяется на искомые части: код операции, тип адресации, адрес первого операнда, адрес второго операнда (номер регистра), адрес сохранения результата. После завершения декодирования выставляется бит, что блок свободен. Также посылается сигнал следующему блоку -- блоку выборки операндов -- что работа завершена, и он может принимать результаты этой работы. Следующая ступень конвейера -- блок выборки операндов. При получении данных, блок выборки операндов выставляет бит занятости блока. Также подается сигнал предыдущему блоку, что данные приняты. Как и в блоке выборки команд, первый операнд ищется в кэше, а если не находится, то ищется в памяти и записывается в кэш данных. Второй операнд всегда хранится в каком-либо регистре. После завершения выборки операндов, выставляется бит занятости блока, блок свободен. Также подается сигнал следующему блоку -- АЛУ -- что работа сделана. Следующая, четвертая, ступень конвейера -- АЛУ. При получении данных, посылается сигнал предыдущему блоку о том, что данные забраны, и выставляется бит занятости блока. Тут выполняются вычисления, а после вычислений в зависимости оттого, какая операция закодирована, результат соответствующих вычислений записывается либо в регистр, либо подается на вход следующего блока, это при условии выполнения команды ST, либо вообще не сохраняется, например, при прыжке или PUSH. После завершения работы посылается сигнал следующему блоку и выставляется бит занятости, т.е. блок АЛУ свободен. Последняя ступень конвейера -- сохранение результата в память. Этот блок сохраняет результат после команды сохранения в память. Однако для этого надо сначала послать запрос для работы с памятью, а потом получить разрешение для записи в память. Стоит заметить, что это единственный блок, который может писать в память, ведь блок выборки команд и блок выборки операндов могут лишь читать из памяти.
Заключение
В результате работы, была разработана микроЭВМ на основе пятиступенчатого конвейера, имеющего в своем составе 2 блока кэш: данных и команд. В каждом блок 2 банка по 16 строк, в каждой и которых 64 байта. Архитектура -- принстонская, т.е. данные и команды хранятся в одном массиве памяти. Разрядность шины данных 8 бит, шины адреса 16 бит. В блоке регистров общего назначения содержатся 28 регистров. Стек состоит из 9 регистров, направление роста у которых вверх. Архитектура процессора рассчитана на работу с тремя арбитрами, по одному на блок выборки команд, блок выборки операндов и блок записи результата в память. Важной особенностью является наличие конвейера, 5 команд могут выполнять одновременно на различных стадиях. Благодаря предсказателю переходов, реализована возможность предсказывать исход работы команды условного перехода, таким образом, резко повышая производительно процессоров, например, при вычислении каких-либо данных по циклу. Минусом является то, что при ошибке предсказания необходимо полностью очищать конвейер и возвращаться к выполнению операции, которая должна была начаться вместо неверного разветвления алгоритма.
В таблице 4.1 еще раз приведен список реализованных в проекте инструкций.
Таблица 4.1 -- Реализованные инструкции
Название операции |
Описание операции. |
|
ST |
Сохранить в память |
|
LD |
Загрузить из памяти |
|
PUSH |
Затолкнуть в стек |
|
POP |
Вытолкнуть из стека |
|
AND |
Логическая операция «И» |
|
NOTZ |
Инверсия по флагу Z. |
|
CMP |
Сравнение двух операндов. |
|
ROR |
Циклический сдвиг вправо. |
|
JC |
Прыжок по флагу Z. |
Размещено на Allbest.ru
Подобные документы
Изучение элементов структуры микропроцессора i80386 и алгоритмов выполнения множества команд. Разработка проекта структуры АЛУ и структуры микро-ЭВМ на базе гипотетического процессора. Описание и создание программы эмуляции по выполнению заданных команд.
курсовая работа [484,4 K], добавлен 07.09.2012Синтез структуры простого магистрального процессора с одним АЛУ, выполняющего 8 заданных команд. Разработка формата и кодировки команд, структурной схемы процессора, функциональные схемы всех его блоков в целом с указанием шин и управляющих сигналов.
реферат [123,9 K], добавлен 18.05.2009Типы системной памяти. ОЗУ (оперативное запоминающее устройство), ПЗУ (постоянное запоминающее устройство), "энергонезависимая память" (CMOS). Процессор. Основные шины. Адресные данные. Совокупность всех возможных команд - система команд процессора.
контрольная работа [24,3 K], добавлен 30.03.2009Разработка программы для изображения в графическом режиме на экране структуры модели вычислительной машины и демонстрация функционирования при выполнении программы вычисления. Описание процесса разработки, обоснование структур данных и их форматов.
курсовая работа [170,3 K], добавлен 07.06.2019Общий вид вычислительной системы. Начальная последовательность действий. Элементы организации основных блоков ЭВМ. Архитектурная организация процессора ЭВМ. Организация систем адресации и команд ЭВМ. Система внешних устройств. Средства вывода информации.
курсовая работа [39,5 K], добавлен 28.01.2012Разработка структурной схемы процессора; синтез микропрограммного и управляющего автомата с жесткой логикой. Функциональная организация процессора: программные модели, форматы данных и команд. Организация оперативной памяти. Проектирование блока операций.
учебное пособие [1,1 M], добавлен 09.04.2013Разработка программы эмулятора, которая должна имитировать рабочий цикл процессора для каждой команды. Анализ структуры микропроцессора. Моделирующие переменные. Мнемоника команд моделируемого процессора. Разработка структуры программы: классов, методов.
курсовая работа [156,8 K], добавлен 07.11.2012Структура и основные элементы микроконтроллера. Разрядность и система команд процессора. Методы представления информации. Память и её типы. Режимы работы портов электронного устройства. Многофункциональность выводов микро-ЭВМ. Семейства микроконтроллеров.
презентация [1,2 M], добавлен 16.12.2011Принципы организации и построения электронно-вычислительной машины. Основные характеристики и режимы работы ЭВМ. Организация интерфейса. Устройства управления в процессоре. Вычислительные системы и арифметико-логическое устройство. Микрооперация сдвига.
курс лекций [880,9 K], добавлен 31.05.2014Функциональная и структурная организация ЭВМ. Разработка функциональных микропрограмм заданных команд. Их объединение и привязка к структуре операционного автомата процессора. Разработка управляющего автомата процессора с программируемой логикой.
дипломная работа [4,0 M], добавлен 25.03.2012