Автор работы: Пользователь скрыл имя, 17 Мая 2013 в 00:00, курсовая работа
В ходе выполнение данного курсового проекта был разработан процессор с архитектурой Intel-32. Данный процессор выполняет 2 команды, согласно индивидуальному варианту задания: ADD Reg8, Reg8; FCMOVB ST(0), ST(i). К данному курсовому проекту прилагается пояснительная записка, содержащая подробное описание работы процессора, три электрические схемы: структурная, функциональная и принципиальная.
В качестве базовой архитектуры была выбрана архитектура P6, разработанная компанией Intel и лежащая в основе микропроцессоров Pentium Pro, Pentium II, Pentium III, Celeron и Xeon.
Введение 5
1 Задание на курсовой проект 6
1.1 Общие аспекты проектирования процессора 6
1.2 Исходные данные 9
2 Архитектура процессора 12
2.1 Формат машинных команд IA-32 12
2.2 Форматы данных 18
2.3 Расчет и выбор разрядности основных узлов процессора 25
2.4 Регистровая модель 26
2.5 Виды адресации 39
3 Структурная организация процессора 41
3.1 Общая структура процессора 41
3.2 Выбор и обоснование элементной базы 43
3.3 Блок обработки данных 44
3.3.1 Блок с фиксированной точкой 44
3.3.2 Блок с плавающей точкой 49
3.4 Управляющий автомат с микропрограммным управлением 49
3.5 Регистровая память 53
3.6 Оперативная память 55
3.7 Блок интерфейса 56
4 Содержательные схемы алгоритмов работы процессора 57
4.1 Общий алгоритм цикла работы процессора 57
4.2 Выборка команд 57
4.3 Формирование исполнительного адреса и выборка операндов 59
4.4 Обработка прерываний 62
4.5 Выполнение двух операций из индивидуального задания 64
5 Микропрограммное управление 67
5.1 Формат микрокоманды 67
5.2 Микропрограмма выполнения операции с плавающей точкой 69
Заключение 72
Физически операнды располагаются в кольцевом регистровом стеке FPU;
в) Способы используемой адресации.
При работе с памятью используется косвенно-регистровая 32-битная адресация, указанная в задании к курсовому проекту;
г) Основное содержание команды (выполняемая операция) и формируемые признаки результата.
Команда условного переноса проверяет значения флагов в регистре EFLAGS на предмет их соответствия условию, заданному командой. Если условие CF = 1 выполняется, производится копирование значения операнда-источника в операнд-назначение. Операндом-источником всегда является элемент регистрового стека ST(i), а операндом-назначением вершина регистрового стека ST(0).
Флаги C0, C2, C3 регистра SW после выполнения команды неопределены, флаг C1 устанавливается равным 0 в случае возникновения стековой ошибки #IS.
Особые ситуации защищенного режима:
- #NM, если CR0.EM = 1 или CR0.TS = 1.
Особые ситуации режима реальной адресации:
- #NM, если CR0.EM = 1 или CR0.TS = 1.
Особые ситуации режима V86:
- #NM, если CR0.EM = 1 или CR0.TS = 1.
2 Архитектура процессора
2.1 Формат машинных команд IA-32
Машинная команда представляет собой закодированное по определенным правилам указание процессору на выполнение некоторой операции. Правила кодирования команд называются форматом команд. Команды процессоров архитектуры IA-32 считаются сложными. Максимальная длина машинной команды IA-32 составляет 15 байт. Реальная команда может содержать гораздо меньшее количество полей, вплоть до одного — только код операции. Приведенный на рис. 3.1 формат машинной команды является наиболее полным. Прямого соответствия между структурой команды ассемблера и соответствующей машинной командой нет. Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов.
Рисунок 1 - Формат машинной команды
Машинная команда всегда однозначна по отношению к производимым ею действиям на уровне аппаратуры. Логически любая команда языка ассемблера содержит несколько элементов:
- элемент, описывающий, что делать, называется кодом операции (КОП). Значение в поле кода операции некоторым образом определяет в блоке микропрограммного управления подпрограмму, реализующую действия для данной команды;
- элементы, описывающие объекты, с которыми нужно что-то делать, являются операндами. Операнды в команде могут и не задаваться, а подразумеваться по умолчанию;
- элементы, описывающие, как делать, являются типами операндов и обычно задаются неявно. Они используются транслятором ассемблера при формировании машинной команды для определения значения поля кода операции.
Эти же элементы имеет и машинная команда, но в закодированном виде. Перевод команд ассемблера в соответствующие машинные команды осуществляет специальная программа — ассемблер, которую можно также назвать транслятором (компилятором) ассемблера.
Префиксы (поле префиксов) — необязательные однобайтные элементы машинной команды. Назначение префиксов — изменить действия, выполняемые командой. Процессор распознает префиксы по их значениям. Машинная команда может иметь до четырех префиксов одновременно. В памяти префиксы предшествуют команде. Порядок их следования при этом может быть любым.
Далее перечислены типы префиксов, которые может использовать прикладная программа:
- префикс замены сегмента в явной форме указывает, какой сегментный регистр используется в данной команде для адресации стека или данных. Префикс отменяет выбор сегментного регистра по умолчанию;
- префикс повторения используется с цепочечными командами (командами обработки строк). Этот префикс «зацикливает» команду для обработки всех элементов цепочки. Система команд поддерживает два типа префиксов: безусловные, заставляющие цепочечную команду повторяться некоторое количество раз, условные, которые при зацикливании проверяют некоторые флаги, и в результате проверки возможен досрочный выход из цикла;
- префикс блокировки шины инициирует выдачу процессором сигнала LOCK# (значение 0F0h) для блокировки системной шины. Используется в многопроцессорных конфигурациях для обеспечения монопольного владения системной шиной. Сигнал LOCK# может формироваться лишь с определенной номенклатурой команд процессора, работающих в цикле «чтение-модификация-запись»;
- префикс размера адреса (значение 67h) уточняет разрядность адреса: 16 или 32 бита. Каждой команде, в которой используется адресный операнд, ставится в соответствие разрядность адреса этого операнда. Если разрядность адреса для данной команды составляет 16 битов, это означает, что команда содержит 16-разрядное смещение и оно соответствует 16-разрядному смещению адресного операнда относительно начала некоторого сегмента (см. рис. 3.1). Если разрядность адреса составляет 32 бита, это означает, что команда содержит 32-разрядное смещение, оно соответствует 32-разрядному смещению адресного операнда относительно начала сегмента и по его значению формируется 32-разрядное смещение в сегменте (см. рис. 3.1). С помощью префикса разрядности адреса можно изменить действующее по умолчанию значение разрядности адреса. Это изменение будет касаться только той команды, которой предшествует префикс;
- префикс размера операнда (значение 66h) аналогичен префиксу размера адреса, но указывает на разрядность операндов (32 или 16 битов), с которыми работает команда.
Код операции — обязательный элемент, описывающий операцию, выполняемую командой. Код операции может занимать от одного до трех байт. Для некоторых машинных команд часть битов кода операции может находиться в байте mod r/m.
Многим командам соответствует несколько кодов операций, каждый из которых определяет нюансы выполнения операции. Отметим, что поле кода операции не имеет однозначной структуры. В зависимости от конкретных команд, не обязательно разных с точки зрения языка ассемблера, оно может иметь в своем составе от одного до трех элементов. Один из этих трех элементов является непосредственно кодом операции или ее частью, остальные уточняют детали операции. Такое строение поля кода операции усложняет, в частности, процесс дизассемблирования. Для определения размера и границ очередной команды необходимо полностью проанализировать ее поле кода операции.
Таблица 1 - Назначение дополнительных битов поля кода операции
Поле |
Количество |
Назначение |
d |
1 |
Определяет направление передачи данных: 0 — передача данных из регистра reg в память (или регистр), адресуемую полем т/т; 1 — передача данных из памяти (или регистра), адресуемой нолем r/m, в регистр reg. При наличии байта sib адрес операнда в памяти формируется с учетом содержимого этого байта |
s |
1 |
Задает необходимость расширения 8-разрядного непосредственного операнда до 16 или 32 бита. Старшие биты при этом заполняются значением старшего (знакового) бита исходного 8-разрядного операнда |
w |
1 |
Определяет размер данных, которыми оперирует команда: байт, слово, двойное слово: 0 — 8 битов; 1 — 16 битов для 16-разрядного размера операндов или 32 бита для 32-разрядного размера операндов |
reg |
3 |
Определяет регистр, используемый в команде. Значение поля зависит от ноля w, в том числе если поле w отсутствует |
Последующие поля машинной команды определяют характеристики и местоположение операндов, участвующих в операции, и особенности их использования.
Байт режима адресации mod r/m, иногда называемый постбайтом, несет информацию об операндах и режиме адресации. Операнды могут находиться в памяти, а также в одном или двух регистрах. Архитектура IA-32 не допускает, чтобы оба операнда команды находились в памяти. Если операнд находится в памяти, то байт mod r/m определяет компоненты (смещение, базовый и индексный регистры), используемые для вычисления его эффективного адреса.
Байт mod r/m состоит из трех полей:
- поле mod (два бита) определяет способ адресации и количество байтов, занимаемых в команде адресом операнда (поле смещения в команде). Поле mod используется совместно с полем r/m, которое определяет способ модификации адреса операнда полем смещения в команде. Поле mod в комбинации с полем r/m образует 32 возможных значения, обозначающих один из восьми регистров и 24 режима адресации. К примеру, если mod = 00, то поле смещения в команде отсутствует и адрес операнда определяется содержимым базового и/или индексного регистра. Какие именно регистры потребуются для вычисления эффективного адреса, определяется значением этого байта. Если mod = 01, то поле смещения в команде присутствует, занимает один байт и модифицируется содержимым базового и/или индексного регистра. Если mod = 10, то поле смещения в команде присутствует, занимает два или четыре байта (в зависимости от значения, действующего по умолчанию или определяемого префиксом размера адреса) и модифицируется содержимым базового и/или индексного регистра. Если mod = 11, то операндов в памяти нет — они находятся в регистрах. Это же значение байта mod используется в случае, когда команда работает с непосредственным операндом;
- поле reg (3 бита) определяет либо регистр, находящийся в команде на месте второго операнда, либо возможное расширение кода операции (давая в совокупности размер поля КОП в 11 битов).
- поле r/m используется совместно с полем mod и определяет либо регистр, находящийся в команде на месте первого операнда (если mod = 11), либо базовые и индексные регистры, применяемые для вычисления эффективного адреса (совместно с полем смещения в команде).
Таблица 2 - Значения кодов в поле reg (поле w присутствует в команде)
Поле reg |
w = 0 |
w = 1 |
000 |
AL |
AX/EAX |
001 |
CL |
CX/ECX |
010 |
DL |
DX/EDX |
011 |
BL |
BX/EBX |
100 |
AH |
SP/ESP |
101 |
CH |
BP/EBP |
110 |
DH |
SI/ESI |
111 |
BH |
DI/EDI |
Таблица З - Значения кодов в поле reg (поле w отсутствует)
Поле reg |
16-рфзрядные операции |
32-разрядные операции |
000 |
AX |
EAX |
001 |
CX |
ECX |
010 |
DX |
EDX |
011 |
BX |
EBX |
100 |
SP |
ESP |
101 |
BP |
EBP |
110 |
SI |
ESI |
111 |
DI |
EDI |
Байт масштаба, индекса и базы (Scale-Index-Base — sib) используется для расширения возможностей адресации операндов. На наличие байта sib в машинной команде указывает сочетание одного из значений 01 или 10 поля mod и значения поля r/m = 100.
Байт sib состоит из трех элементов:
- в поле масштаба (ss) размещается масштабный множитель для индексного компонента index, занимающего следующие три бита байта sib. В поле ss может содержаться значение 1, 2, 4 или 8. При вычислении эффективного адреса на это значение будет умножаться содержимое индексного регистра;
- поле index позволяет хранить номер индексного регистра, содержимое которого применяется для вычисления эффективного адреса операнда;
- поле base требуется для хранения номера базового регистра, содержимое которого также применяется для вычисления эффективного адреса операнда. В качестве базового и индексного регистров могут использоваться большинство регистров общего назначения.
По значению байта sib легко восстановить компоненты машинных команд, содержащие адрес операнда с учетом его масштабирования.
Поля смещения и непосредственного операнда. Поле смещения в команде — это 8-, 16- или 32-разрядное целое число со знаком, представляющее собой полностью или частично (с учетом приведенных ранее рассуждений) значение эффективного адреса операнда.
Поле непосредственного операнда — необязательное поле, представляющее собой 8-, 16- или 32-разрядный непосредственный операнд. Наличие этого поля, конечно, отражается на значении байта mod r/m.
2.2 Форматы данных
Информация о работе Проектирование процессора ЭВМ с архитектурой IA-32