Автор работы: Пользователь скрыл имя, 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
Хотя регистр ESP тоже относится к регистрам общего назначения, он содержит указатель на вершину стека и его не стоит использовать для других целей.
Формат регистров общего назначения БОД БФТ представлен на рисунке 9.
Рисунок 9 – Формат регистров общего назначения БОД БФЗ
Блок вычислений с плавающей точкой (FPU – Floating Point Unit) содержит набор внутренних регистров различного назначения. Эти регистры выполняют функции хранения операндов, управления и индикации состояния.
В состав блока FPU входят восемь 80-разрядных регистров данных R7-R0, регистр тегов TW, регистры управления FPCR (CW — Control Word) и состояния FPSR (SW — Status Word) (рис. 1), а также указатель инструкции FIP, указатель данных (последнего операнда) FDP. [13]
Регистры R7-R0 в совокупности представляют регистровый стек FPU. Регистры стека ассоциируются с физическими регистрами R7-R0 и обозначаются ST(0)-ST(7). В регистре SW поле TOP указывает на вершину стека ST(0). Каждому регистру R0..R7 соответствует 2-х битовое поле в регистре тэгов TW. Режимами работы сопроцессора управляет регистр CW. [15]
Формат регистров БОД БПТ представлен на рисунке 10.
Рисунок 10 - Формат регистров БОД БПТ
Регистр состояния SW хранит 16-разрядное слово состояния FPU. В нем хранится указатель на вершину стека FPU (TOP).
Структура и значение полей регистра состояния SWпоказаны на рисунке 11.
Рисунок 11 - Формат и значение полей регистра состояний SW
Регистр управления CW предназначен для управления режимами работы сопроцессора. Он содержит ряд полей, значения которых влияют на точность результата, поведение процессора при встрече некорректных операндов и результатов и т.п. [15]
Формат и назначение полей регистра управления CW представлены на рисунке 12.
Рисунок 12 - Формат и назначение полей регистра управления CW
В регистр управления CW входят следующие поля:
- IC (бит 12: Intel287, 8087). Управление бесконечностью. В сопроцессорах Intel287 и 8087 данный бит определяет, что + и - считаются одной беззнаковой бесконечностью (IC = 0) — «проективная арифметика»; или что + и - считаются двумя знаковыми бесконечностями (IC = 1) — «аффинная арифметика». В более поздних сопроцессорах, поддерживающих стандарт IEEE-754 (Intel387, Intel486, Pentium), данный бит, хотя и может программироваться, но не влияет на работу FPU. Независимо от значения IC всегда применяется аффинная арифметика (- < + );
- RC (биты 11, 10). Управление округлением. Поле RC определяет выбор одного из четырех методов округления результата операций FPU;
- PC (биты 9, 8). Управление точностью. Указывает точность представления результата арифметических операций FADD, FADDP, FSUB, FSUBP, FSUBR, FSUBRP, FMUL, FMULP, FDIV, FDIVP, FDIVR, FDIVRP и FSQRT. На другие команды эти биты влияния не оказывают. Уменьшение точности может быть полезно для совместимости с ранними моделями арифметических сопроцессоров.
- IEM (бит 7, только для 8087). Во всех современных микропроцессорах (Intel287, Intel387, Intel486, …) бит 7 регистра CW зарезервирован.
В сопроцессоре 8087 это бит маскирует флаг запроса прерывания IR, т.е. независимо от значений шести масок исключений сигнал IEM = 1 запрещает генерацию прерываний при возникновении ошибок сопроцессора.
- PM, UM, OM, ZM, DM, IM (биты 5, 4, 3, 2, 1, 0) – маски исключений. Биты содержат индивидуальные маски для каждой из шести исключительных ситуаций сопроцессора. Установка бита маски запрещает прерывание при возникновении соответствующей ошибки FPU. [15]
Слово тэгов TW описывает содержимое всех регистров регистрового стека FPU.
Значения тэгов соответствуют физическим регистрам R0 – R7. Поле TOP регистра состояния используется для определения соответствия тэгов к относительным регистрам стека ST(0)…ST(7). Cодержит 16-разрядное слово, включающее восемь двухбитных тегов tag7-0. Каждый тег (признак) характеризует содержимое соответствующего регистра данных R7-0, указывая, является ли регистр пустым (незаполненным) или в нем размещается конечное число, нуль или неопределенное значение (например, бесконечность). Значение тега позволяет проверить содержимое регистра, не проводя анализ хранящихся в нем данных. [15]
Формат регистра тегов TWпредставлен на рисунке 13.
Рисунок 13 - Формат регистра тегов TW
Значения тегов (tag):
- 00 − допустимое ненулевое число;
- 01 – нуль;
- 10 − специальное значение (бесконечность);
- 11 − незаполненный регистр.
Сегментные регистры: CS, SS, DS, ES, FS,GS. Имеют разрядность 16 бит каждый. Не все сегментные регистры равнозначны:
- CS − сегментный регистр кода;
- SS − сегментный регистр стека.
- DS − сегментный регистр данных;
- ES − сегментный регистр дополнительных данных;
- FS − сегментный регистр дополнительных данных;
- GS − сегментный регистр дополнительных данных.
Для выборки кода команды всегда используется сегментный регистр CS. При обращении к стеку (смещение формируется с использованием регистров SP/ESP/RSP или BP/EBP/RBP) всегда используется сегментный регистр SS. В строковых операциях при обращении к операнду-приёмнику (смещение в регистре DI/EDI/RDI) применяется сегментный регистр ES. Во всех остальных случаях, если не используется префикс замены сегмента, доступ к памяти осуществляется с использованием сегментного регистра DS. При наличии префикса замены сегмента вместо DS используется указанный префиксом сегментный регистр. [16]
Рисунок 14 − Формат сегментных регистров
Счетчик адреса команд. Указатель команд EIP представляет собой 32-разрядный регистр, содержимое которого используется в качестве смещения при определении адреса следующей выполняемой команды. Смещение задается относительно базового адреса сегмента команд, задаваемого регистром CS. Младшие 16 бит EIP (биты 15-0) содержат 16-разрядный указатель команд с именем IP, который используется при 16-разрядной адресации. Содержимое EIP (IP) изменяется при выполнении команд передачи управления и прерываний.
Формат регистра EIP представлен на рисунке 15.
Рисунок 15 – Формат регистра EIP
Регистры чтения и записи ОП. Формат регистров чтения и записи ОП представлен на рисунке 16.
Рисунок 16 – Формат регистров чтения и записи ОП
Регистр адреса ОП. Формат регистра адреса ОП представлен на рисунке 17.
Рисунок 17 – Формат регистра адреса оперативной памяти
Регистр флагов EFLAGS. Регистр EFLAGS содержит группу флагов состояния, управления и системных флагов. Младшие 16 бит регистра представляют собой 16-разрядный регистр флагов и состояния МП 8086, называемый FLAGS, который наиболее полезен при исполнении программ для МП 8086 и 80286. Структура регистра флагов показана на рисунке. Неопределенные биты зарезервированы, то есть на данный момент они не имеют значения, однако могут быть использованы для специальных целей в последующих версиях микропроцессора. Далее термин "установлен" означает значение 1, а термин "сброшен" - значение 0.
Некоторые из флагов могут быть изменены специально предназначенными для этой цели инструкциями. Для изменения или проверки группы флагов можно воспользоваться командами:
- LAHF/SAHF - загрузка/сохранение младших 8 битов регистра флагов в регистре AH;
- PUSHF/POPF - помещение/извлечение из стека младших 16 битов регистра флагов;
- PUSHFD/POPFD - помещение/извлечение из стека 32-битного регистра EFLAGS.
Рисунок 18 – Формат регистра EFLAGS
Флаги статуса CF, PF, AF, ZF, SF и OF отражают статус выполнения арифметических инструкций (таких как ADD, SUB, MUL, DIV). Регистр включает флаги:
- CF - флаг переноса (Carry Flag). Установлен, если операция привела к переносу из старшего бита при сложении или к займу для старшего бита при вычитании, иначе сброшен. Для 8-, 16-, 32-разрядных операций этот бит устанавливается при переносе из битов 7, 15 и 31 соответственно. Для беззнаковых операций флаг сигнализирует о переполнении. Значение этого флага может быть изменено непосредственно при помощи инструкций: CLC - сбросить CF в 0, STC - установить CF в 1, CMC - инвертировать CF. Также используется в операциях сдвига;
- PF - флаг четности (Parity Flag). Установлен, если младшие восемь бит операнда содержат четное число единиц (проверка на четность) иначе сброшен. На этот флаг влияют только младшие восемь бит независимо от длины операнда;
- AF - флаг вспомогательного переноса (Adjust Flag). Используется для упрощения сложения и вычитания упакованных двоично-десятичных чисел. Независимо от длины операнда (8, 16 или 32 бит) флаг AF установлен, если операция привела к займу из бита 3 при вычитании или переносу из бита 3 при сложении, иначе он сброшен;
- ZF - флаг нуля (Zero Flag). Установлен, если все биты результата равны нулю, иначе сброшен;
- SF - флаг знака (Sign Flag). Установлен, если установлен старший бит результата, иначе он сброшен. Для 8-, 16- и 32-разрядных операций этот флаг отражает состояние 7, 15 и 31 бита соответственно. Для знаковых чисел старший бит отражает знак числа: 0 - неотрицательное, 1 – отрицательное;
- OF - флаг переполнения (Overflow Flag). Флаг установлен, если операция привела к переносу (займу) в знаковый (самый старший) бит результата, но не привела к переносу (займу) из самого старшего бита, или наоборот. Для операций над числами со знаком сигнализирует о переполнении;
- DF - флаг направления (Direction Flag) управляет поведением цепочечных инструкций (MOVS, CMPS, SCAS, LODS, STOS). Когда флаг сброшен, при выполнении цепочечной команды происходит автоинкремент адресов источника и приемника. Когда флаг установлен - автодекремент. Флаг можно непосредственно установить при помощи инструкции STD и сбросить при помощи CLD.
Системные флаги и поле IOPL влияют на процесс исполнения задачи, и поэтому не должны изменяться прикладной программой. Назначение этих флагов следующее:
- TF - флаг ловушки (Trap Flag). Установка флага TF переводит МП в пошаговый режим для отладки. Процессор автоматически генерирует исключение #1 после каждой команды, что позволяет проверить программу на исполнение каждой команды. Когда флаг TF сброшен, то ловушка по исключению #1 возникает в точках адресов останова, загружаемых в регистры отладки DR0-DR3;
- IF - флаг разрешения прерываний (Interrupt enable Flag). Установка флага IF позволяет МП воспринимать запросы внешних маскируемых прерываний. Очистка этого бита запрещает такие прерывания. Флаг не влияет на обработку, как немаскируемых внешних прерываний, так и исключений;
- IOPL - уровень привилегий ввода-вывода (I/O Privilege Level field, 286+). Это двухбитное поле используется в защищенном режиме. Биты IOPL показывают наивысшее значение текущего уровня привилегий (CPL), позволяющее выполнять команды ввода-вывода, не приводя к исключению #13 или обращению к битовой карте разрешения ввода-вывода. Это поле показывает также наивысшее значение CPL, которое позволяет изменять бит IF с помощью команд STI или CLI, а также при выборке нового значения из стека в регистр EFLAGS. Это поле может быть изменено инструкциями POPF или IRET только, если текущий уровень привилегий задачи равен 0;
- NT - флаг вложенной задачи (Nested Task flag, 286+). Если при переключении задач происходит вложение задач, то этот флаг устанавливается в 1. Совместно с полем "Связь TSS" в сегменте состояния задачи обеспечивает корректное вложение задач;
- RF - флаг возобновления (Resume Flag, 386+). Временно приостанавливает обработку исключений отладки (т.е. возвращает к нормальному исполнению программы) так, что исполнение команды может быть повторено после обработки исключения для отладки, не вызывая немедленно обработку другого исключения для отладки;
- VM - режим виртуального МП 8086 (Virtual-8086 Mode flag, 386+). Бит обеспечивает для задачи функционирование в режиме виртуального МП 8086. Бит VM может быть установлен только двумя способами: при восстановлении флагов из стека по инструкции IRET на нулевом уровне привилегий и переключением на задачу, в TSS которой в образе EFLAGS бит VM выставлен;
- AC - флаг контроля выравнивания (Alignment Check flag, 486+). Разрешает контроль выравнивания для текущей задачи. Контроль выравнивания производится, если CR0.AM=1 и EFLAGS.AC=1 и CR0.PE=1 и CPL=3. Контроль выравнивания требует, чтобы при обращениях к памяти двойное слово обязательно должно начинаться с адреса, кратного 4, а 16-битное слово - с адреса, кратного 2, иначе генерируется нарушение контроля выравнивания (исключение #17);
- VIF - виртуальный флаг прерывания (Virtual Interrupt Flag, Pentium+). Виртуальный образ флага IF, используется совместно с флагом VIP. Процессор распознает VIF, если CR4.VME=1 или CR4.PVI=1 (разрешено расширение виртуального режима) и IOPL<3;
- VIP - виртуальный флаг задержки прерывания (Virtual Interrupt Pending flag, Pentium+). Системное ПО устанавливает этот флаг, если требуется отложить обработку прерывания. Используется совместно с VIF. Процессор читает этот флаг, но никогда не изменяет его. Флаг распознается, если CR4.VME=1 или CR4.PVI=1 (разрешено расширение виртуального режима) и IOPL<3;
- ID - флаг поддержки CPUID (Identification flag). Если программа может изменить этот флаг (т.е. процессор хранит то значение, которое программа запишет в этот флаг), то процессор поддерживает инструкцию CPUID. Инструкцию CPUID поддерживают не только Pentium и P6, но и некоторые модели i486. [14]
Формат системного регистра CR0 представлен на рисунке 19.
Регистр CR0 содержит флаги, которые управляют или показывают условия, относящиеся к системе в целом, а не к отдельной задаче. Младшие 16 бит (биты с 0 по 15) этого регистра называются словом состояния машины (Machine Status Word - MSW) для совместимости с МП 80286. Регистр включает в себя флаги:
- PE - разрешение защиты (Protection Enable, 286+). Когда PE=1 процессор находится в защищенном режиме. Если бит сброшен, то процессор находится либо в режиме реального адреса, либо в режиме системного управления (тип режима определяется аппаратно: в режиме системного управления активен сигнал SMIACT#);
Информация о работе Проектирование процессора ЭВМ с архитектурой IA-32