Разработка общей структуры микро-ЭВМ
Функциональный состав микро-ЭВМ. Разработка системы команд. Описание взаимодействия блоков микро-ЭВМ при выполнении команд программы. Запоминающие устройства. Организация кэш-памяти процессора. Описание схемы предсказания переходов. Пример программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.05.2013 |
Размер файла | 267,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
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.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.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 представлено условно-графическое обозначение блока АЛУ.
В блоке регистров общего назначения находится 28 регистров, построенных на D-триггерах, способных сохранить по 1 байту каждый. Условно-графическое обозначение этого блока представлено на рисунке 2.11.
Рисунок 2.10 - Условно-графическое обозначение блока АЛУ.
Рис. 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 |
|
В десятичном виде |
8 0 0 0 |
|
В двоичном виде |
00001000 00000000 00000000 00000000 |
3) NOTZ - при этой операции в АЛУ с помощью инвертирующего элемента будет получено значение, равное инверсии операнда, но только в том случае, если флаг Z=1.
Таблица 2.3 - Команда NOTZ
Код операции |
00010 (2) |
|
Пример |
NOTZ R2, R4 |
|
В десятичном виде |
20 64 0 4 |
|
В двоичном виде |
00010100 01000000 00000000 00000100 |
4) ROR - операция циклического побитового сдвига вправо.
Таблица 2.4 - Команда ROR
Код операции |
00011 (3) |
|
Пример |
ROR R0, R1 |
|
В десятичном виде |
28 0 0 1 |
|
В двоичном виде |
00011100 00000000 00000000 00000001 |
5) POP - операция для работы со стеком, который находится в АЛУ. При распознавании этой операции операнд читается из стека.
Таблица 2.5 - Команда POP
Код операции |
00100 (4) |
|
Пример |
POP R4 |
|
В десятичном виде |
36 0 0 4 |
|
В двоичном виде |
00100100 00000000 00000000 00000100 |
6) PUSH - операция для работы со стеком, который находится в АЛУ. При распознавании этой операции операнд записывается в стек.
Таблица 2.6 - Команда PUSH
Код операции |
00101 (5) |
|
Пример |
PUSH R2 |
|
В десятичном виде |
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 (pattern history table) - таблица истории для шаблонов. Элемент таблицы (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 |
LD 0, 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 |
AND R0, 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 |
44 64 0 0 |
|
7 |
POP R4 |
00100|1|00_011|00000_000000|00_000|00100 |
36 0 0 4 |
|
8 |
CMP R2, R2 |
00111|1|00_010|00000_000000|00_010|00000 |
60 64 0 64 |
|
9 |
JC 8 |
10000|0|00_000|00000_001000|00_000|00000 |
128 0 32 0 |
|
10 |
JMP 8 |
10001|0|00_000|00000_001000|00_000|00000 |
136 0 32 0 |
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.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 - сигнал очистки конвейера;
команда программа процессор устройство
Размещено на Allbest.ru
...Подобные документы
Функциональный состав микро-ЭВМ, разработка системы команд. Описание взаимодействия всех блоков электронно-вычислительной машины при выполнении команд программы. Арифметико-логическое устройство, кэш-память процессора, функциональное моделирование.
курсовая работа [981,4 K], добавлен 27.05.2013Изучение элементов структуры микропроцессора i80386 и алгоритмов выполнения множества команд. Разработка проекта структуры АЛУ и структуры микро-ЭВМ на базе гипотетического процессора. Описание и создание программы эмуляции по выполнению заданных команд.
курсовая работа [484,4 K], добавлен 07.09.2012Синтез структуры простого магистрального процессора с одним АЛУ, выполняющего 8 заданных команд. Разработка формата и кодировки команд, структурной схемы процессора, функциональные схемы всех его блоков в целом с указанием шин и управляющих сигналов.
реферат [123,9 K], добавлен 18.05.2009Разработка структурной схемы процессора; синтез микропрограммного и управляющего автомата с жесткой логикой. Функциональная организация процессора: программные модели, форматы данных и команд. Организация оперативной памяти. Проектирование блока операций.
учебное пособие [1,1 M], добавлен 09.04.2013Структура и основные элементы микроконтроллера. Разрядность и система команд процессора. Методы представления информации. Память и её типы. Режимы работы портов электронного устройства. Многофункциональность выводов микро-ЭВМ. Семейства микроконтроллеров.
презентация [1,2 M], добавлен 16.12.2011Разработка программы эмулятора, которая должна имитировать рабочий цикл процессора для каждой команды. Анализ структуры микропроцессора. Моделирующие переменные. Мнемоника команд моделируемого процессора. Разработка структуры программы: классов, методов.
курсовая работа [156,8 K], добавлен 07.11.2012Разработка устройства, реализующего набор команд из числа операций с плавающей точкой семейства процессора i486. Структура сопроцессора FPU. Принцип выполнения операций, разработка блок-схемы, построение структурной схемы основных блоков процессора.
курсовая работа [734,9 K], добавлен 27.10.2010Проектирование микро-ЭВМ. Программа вычисления матрицы. Кодирование программ и регистров, формат команды. Микропрограммное устройство управления. Граф-схемы выполнения операций. Прошивка ПЗУ микрокоманд, точек входа. Разработка принципиальной схемы.
курсовая работа [1,1 M], добавлен 01.03.2013Распределение шин интерфейса, их связь с внешней системой, выбор алгоритмов арифметических и логических операций. Построение структурной схемы микро-ЭВМ, определение формата микрокоманд, составление таблиц соответствия двоичного и символьного кодирований.
курсовая работа [1,6 M], добавлен 05.06.2013Функциональная и структурная организация ЭВМ. Разработка функциональных микропрограмм заданных команд. Их объединение и привязка к структуре операционного автомата процессора. Разработка управляющего автомата процессора с программируемой логикой.
дипломная работа [4,0 M], добавлен 25.03.2012Нахождение наибольшего элемента массива, расположенного во внутренней памяти, сохранение его значения в стеке. Описание используемых команд: запись из внутренней памяти в аккумулятор данных, безусловный переход по метке. Составление кода программы.
лабораторная работа [41,4 K], добавлен 18.11.2014Разработка принципиальной схемы, выбор управляющего микроконтроллера. Общий алгоритм работы программы. Блок анализа и реализации команд, принятых от персонального компьютера. Описание используемых интерфейсов. Формат данных RS-232C, листинг программы.
курсовая работа [1,2 M], добавлен 26.12.2012Типы системной памяти. ОЗУ (оперативное запоминающее устройство), ПЗУ (постоянное запоминающее устройство), "энергонезависимая память" (CMOS). Процессор. Основные шины. Адресные данные. Совокупность всех возможных команд - система команд процессора.
контрольная работа [24,3 K], добавлен 30.03.2009Общая характеристика гидроэлектростанций Республики Беларусь. Разработка автоматизированной системы управления каскадом малых и микро гидроэлектростанций. Программирование логического контроллера датчиков температуры и оборотов турбин электростанции.
дипломная работа [4,1 M], добавлен 14.07.2014Функциональная организация процессора. Сложение с нормализацией, синтез операций, выборка команды. Описание структурной схемы процессора. Синтез управляющего автомата, разметка граф схемы. Разбиение микроопераций по полям и кодирование логических условий.
курсовая работа [91,8 K], добавлен 24.09.2010Разработка программы вычисления выражения y = (x+10)5. Ход работы, структурная схема алгоритма. Окна основных обозревателей системы, текстовый редактор. Интерфейс модели ЭВМ, методы ввода и отладки программы, действия основных классов команд, адресация.
лабораторная работа [523,4 K], добавлен 28.12.2014Разработка на программируемой логической интегральной микросхеме арифметико-логического устройства для выполнения операций над числами. Описание его функционирования. Коды команд АЛУ. Реализация действия RS триггера. Структура, тело и работа программы.
курсовая работа [697,1 K], добавлен 16.12.2014Рассмотрение принципа работы процессора и его практической реализации с использованием языка описания аппаратуры Verilog. Проектирование системы команд процессора. Выбор размера массива постоянной памяти. Подключение счетчика инструкций и файла регистра.
курсовая работа [1,2 M], добавлен 26.05.2022Разработка структурной схемы вычислительного устройства, выбор системы команд и определение форматов. Разработка алгоритма командного цикла, выполнения арифметических и логических операций. Проектирование операционного автомата, устройств управления.
курсовая работа [2,8 M], добавлен 15.05.2014Функциональная схема микропроцессора Intel 8086 (i8086). Формирование физического адреса памяти, выборка команд из памяти и запись их в очередь команд. Система команд процессора. Суть защищенного режима, переход из защищенного режима в реальный режим.
практическая работа [93,3 K], добавлен 24.03.2013