- •Предисловие
- •Введение
- •1. Системный анализ задачи - выделяются процессы и функции, реализация которых будет возложена на мк или ип.
- •Алгоритмизация процессов и функций - разрабатываются алгоритмы решения задачи.
- •Области использования мк
- •Глава 1основы микропроцессорной техники
- •1.1. Классификация микропроцессоров, основные варианты их архитектуры и структуры
- •1.2. Общая структура и принципы функционирования микропроцессорных систем
- •Начиная с младшего байта («Little-Endian»);
- •Начиная со старшего байта («Big-Endian»).
- •1.3. Система команд и способы адресации операндов
- •1.4. Интерфейсы микропроцессорных систем
- •1.4.1. Основные понятия
- •1.4.2. Магистраль vme
- •Verbs находит широкое применение в:
- •VmEbus обеспечивает наилучшее соотношение цена - производительность для системы в целом и предоставляет практически неограниченные возможности наращивания всех ресурсов.
- •1.5. Шина usb
- •На их основе
- •2.1. Структура и функционирование процессоров intel p6
- •2.1.1. Суперскалярная архитектура и организация конвейера команд
- •2.1.2. Режимы работы процессора и организация памяти
- •2.1.3. Регистровая модель
- •1. Функциональные основные регистры:
- •Iopl -уровень привилегий ввода/вывода, задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение команд ввода/вывода;
- •2.3 Режимы работы процессора
- •2.1.4. Внутренняя кэш-память
- •8 Зон по 64 Кбайт, занимающих диапазон адресов 0-7fffFh (512 Кбайт);
- •16 Зон по 16 Кбайт, занимающих диапазон адресов 80000h-8ffffh (256 Кбайт);
- •8 Зон размером от 4 Кбайт до максимального размера физической памяти, которые могут размещаться в любой позиции адресного пространства.
- •2.1.5. Форматы команд и способы адресации
- •Содержимого базового регистра евр (вр) или евх (вх);
- •Содержимого индексного регистра esi (si) или edi (di);
- •Disp команды (см. Рис. 2.11).
- •2.2. Система команд: операции над целыми числами
- •Пересылка данных и адресов
- •Xchg - Обмен между регистрами или памятью и регистром
- •Xlat-Преобразование кодов
- •Imul-Знаковое (целочисленное) умножение аам- ascii-коррекция результата умножения
- •Idiv-Знаковое (целочисленное) деление
- •2.2.1. Команды пересылки
- •2.2.2. Команды арифметических операций
- •2.2.3. Команды логических операций и сдвигов
- •2.2.4. Команды битовых и байтовых операций
- •2.2.5. Команды операций со строками символов
- •2.3. Система команд: операции управления
- •Управление программой
- •Прерывания
- •Int3 - Прерывание в контрольной точке
- •Iret-Возврат из подпрограммы обслуживания прерывания
- •2.3.1. Команды управления программой
- •2.3.3. Команды организации защиты памяти
- •2.3.4. Команды управления процессором
- •2.3.5. Префиксные байты
- •2.4. Система команд: операции над числами с плавающей точкой
- •2.4.3. Команды пересылки данных
- •2.4.4. Команды арифметических операций
- •2.4.6. Команды специальных операций
- •2.4.7. Команды управления fpu
- •Команды преобразования
- •Арифметические команды
- •Inub'- Нахождение меньшего значения (беззнаковые байты) Команды сравнения
- •Команды логических операций
- •2.5.1. Форматы представления данных и выполнение операций
- •2.5.2. Команды пересылки и преобразования данных
- •1 2.5.3. Команды арифметических операций '
- •2.5.4. Команды логических операций и сдвигов
- •2.5.5. Команды сравнения и нахождения максимума/минимума
- •2.6. Система команд: операции sse
- •Команды пересылки данных
- •Команды преобразования данных
- •Арифметические команды
- •Команды нахождения максимума и минимума.
- •Команды преобразования формата чисел.
- •Команды управления
- •2.6.1. Форматы представления данных и выполнение операций
- •2.6.2. Команды пересылки и преобразования данных
- •2.6.3. Команды арифметических операций
- •2.6.6. Команды преобразования формата чисел
- •2.6.7. Команды управления
- •2.6.8. Команды пересылки данных с управлением кэшированием
- •2.7. Работа процессора в защищенном и реальном режимах
- •2.7.1. Сегментация памяти в защищенном режиме
- •2.7.2. Страничная организация памяти
- •2.7.3. Защита памяти
- •2.7.4. Поддержка многозадачного режима
- •2.7.5. Реализация режима виртуального 8086 (v86)
- •2.7.6. Функционирование процессора в реальном режиме
- •2.8. Реализация прерываний и исключений. Обеспечение тестирования и отладки
- •2.8.1. Виды прерываний и исключений, реализация их обслуживания
- •2.8.2. Причины возникновения исключений
- •2.8.3. Средства обеспечения отладки
- •2.8.4. Реализация тестирования и контроля функционирования
- •2.9. Risc-микропроцессоры и risc-микроконтроллеры семейств powerpc (мрс60х, мрс50х)
- •2.9.1. Risc-микропроцессоры семейства мрс60х (powerpc)
- •I (invalid) - недостоверное (аннулированное) содержимое строки.
- •2.9.2. Risc-микроконтроллеры семейства мрс5хх ( power pc)
- •3.1. Общие принципы организации кэш-памяти
- •3.1.1. Понятия тега, индекса и блока
- •3.1.3. Механизм кэш-памяти
- •3.1.2. Механизм кэш-памяти с прямым отображением данных
- •3.1.4. Обновление информации в кэш-памяти
- •1.5. Согласованность кэш-памяти
- •3.2.2. Внутренние кэш-памяти команд и данных
- •3.2.3. Алгоритм кэш-замещений
- •3.2 4. Состояния кэш-памяти данных
- •1.При блокированном чтении:
- •3.2.5. Согласованность внутренних кэш-памятей
- •1) Хранить таблицы страниц и директорий в не копируемой в кэш-память области основной памяти или использовать режим сквозной записи страниц;
- •Процессор может быть заменен (возможен upgraded) без изменения памяти и других подсистем мп вс;
- •Без особого снижения общих характеристик системы могут быть использованы более медленные и менее емкие устройства памяти и устройства ввода/вывода.
- •3.3. Функционирование памяти
- •1) Трансляция сегмента, при которой логический адрес, состоящий из селектора сегмента и смещения (относительного адреса внутри сегмента), преобразуется в линейный адрес.
- •3.3.1. Трансляция сегментов
- •Глобальной таблице дескрипторов (gdt);
- •Локальной таблице дескрипторов (ldt).
- •3.3.2. Адресация физической памяти
- •3.3.4. Комбинирование сегментной и страничной трансляции
- •3.4. Защита памяти
- •3.4.1. Зачем нужна защита?
- •Устанавливает различие между разными форматами дескрипторов;
- •Специфицирует функциональное назначение сегмента.
- •1 Поле предела называют также полем границы.
- •2 Байты сегмента размещены в оп в порядке возрастания адресов памяти или в обратном порядке. Такое размещение также называют соответственно по принципу «младший» и «старший крайний».
- •Cpl (текущий уровень привилегий);
- •Rpl (уровень привилегий источника обращений к сегменту) из селектора, используемый для спецификации сегмента назначения;
- •3)Dpl дескриптора сегмента назначения.
- •Загрузить регистр сегмента данных селектором несогласованного, с разрешением чтения кодового сегмента;
- •Загрузить регистр сегмента данных селектором кодового сегмента, который является согласованным и разрешенным для чтения;
- •Использовать префикс переопределения cs, чтобы прочитать разрешенный для чтения кодовый сегмент, селектор которого уже загружен в cs регистр.
- •Для команды call (или для команды jmp для согласованного сегмента) должны быть выполнены следующие правила привилегий:
- •Привилегированные команды, которые нужны для систем управления вычислительным процессом;
- •Чувствительные команды (Sensitive Instructions), которые используются для ввода/вы вода и для действий, связанных с вводом/выводом.
- •1) Проверка того, имеет ли назначение, специфицированное указателем право доступа к
- •Проверка того, соответствует ли тип сегмента заданному использованию;
- •Проверка указателя на соответствие границе сегмента.
- •Verw (Verify for Writing) - проверка доступности по записи обеспечивает те же самые возможности, что и verr для проверки доступности по чтению.
- •3.4.4. Уровень защиты страниц
- •1) Ограничение адресуемой области; 2) проверка типа страницы.
- •3.4.5. Комбинирование защиты сегментов и страниц
- •Глава 4
- •4.1. Структура современных 8-разрядных микроконтроллеров
- •4.1.1. Модульный принцип построения
- •Tiny avr - mk в 8-выводном корпусе низкой стоимости;
- •Classic avr - основная линия мк с производительностью до 16 mips, Flash память программ объемом до 8 Кбайт и статическим озу данных 128. ..512 байт;
- •Mega avr - мк для сложных приложений, требующих большого объема памяти (Flash пзу до 128 Кбайт), озу до 4 Кбайт, производительностью до 6 mips.
- •4.1.4. Резидентная память мк
- •4.1.5. Порты ввода/вывода
- •Однонаправленные порты, предназначенные в соответствие со спецификацией мк только для ввода или только для вывода информации.
- •Двунаправленные порты, направление передачи которых (ввод или вывод) определяется в процессе инициализации системы.
- •4.1.6. Таймеры и процессоры событий
- •Импульсную последовательность с выхода управляемого делителя частоты fBijs;
- •Внешнюю импульсную последовательность, поступающую на один из входов мк.
- •Простое увеличение числа модулей таймеров; этот путь характерен для части мк компаний «Pfilips» и «Atmel» со структурой msc-51, для мк компаний «Mitsubishi» и «Hitachi».
- •Изменение логического уровня с 0 на 1 (нарастающий фронт сигнала);
- •Изменение логического уровня с 1 на 0 (падающий фронт сигнала);
- •Любое изменение логического уровня сигнала.
2.9.1. Risc-микропроцессоры семейства мрс60х (powerpc)
Начало созданию этого семейства было положено в октябре 1991 гг., когда компании IBM, «Motorola» и «Apple Computers» объявили об организации консорциума для совместной разработки и внедрения RISC-микропроцессоров новой архитектуры. Их прототипом был выбран процессор Power, используемый в широко распространенной рабочей станции RS/6000, которая выпускалась компанией IBM. Для решения этой задачи были сделаны крупные инвестиции (около 1 млрд долл.) и построен новый центр проектирования в г. Остин (Техас), открытый в мае 1992г. Штат центра составили 300 ведущих специалистов из компаний IBM и «Motorola», в результате работы которых уже в октябре 1992 г. были получены первые образцы 32-разрядных RISC-микропроцессоров типа PowerPC 601, а с апреля 1993 г. начался их серийный выпуск. В ноябре 1993 г. началось производство следующей модели - PowerPC 603, предназначенной для использования в портативных компьютерах. В апреле 1994 г. было объявлено о выпуске более высокопроизводительной модели PowerPC 604, а в октябре 1994 г. - о создании модели PowerPC 620, которая положила начало ветви 64-разрядных микропроцессоров этого семейства. В 1995 г. появились модификации моделей PowerPC 603,604 с тактовой частотой 133 и 166 МГц, а в 1996 г. - с частотой 200 МГц. Эти модели микропроцессоров, выпускаемые фирмой «Motorola», входят в семейство МРСбОх. Все микропроцессоры семейства имеют суперскалярную структуру, которая содержит от 4 до 6 параллельно работающих исполнительных устройств, обеспечивающих одновременное выполнение нескольких команд.
Таким образом, менее чем за четыре года было разработано и выпущено семейство из четырех высокопроизводительных микропроцессоров, на базе которых уже реализованы десятки типов компьютеров, серверов и других цифровых систем различного назначения. Эти микропроцессоры послужили основой для создания новых семейств микроконтроллеров МРСбххх и коммуникационных контроллеров МРС860.
В данном параграфе рассматривается архитектура и функционирование наиболее производительной 32-разрядной модели МРС604, а также дается обзор основных характеристик других моделей этого семейства, которое получило название МРСбхх.
Структура и функционирование микропроцессора МРС604. В микропроцессорах PowerPC, как и в семействе М68ххх, реализован принцип выделения отдельных ресурсов для решения задач пользователя и супервизора. В соответствии с этим принципом архитектура PowerPC содержит регистры, входящие в модели пользователя или супервизора, а также имеет ряд привилегированных команд, выполняемых только в режиме супервизора.
В регистровую модель пользователя (рис. 2.66), которая является общей для всего семейства PowerPC, входят:
тридцать два 32-разрядных регистра общего назначения GPR31-0 для хранения целочисленных операндов;
тридцать два 64-разрядных регистра FPR31-0 для хранения операндов с плавающей точкой;
• 32-разрядные регистры условий (признаков) CR и состояния при обработке чисел с плавающей точкой FPSR;
• 32-разрядные регистры XER, LR, CTR, используемые при обработке исключений.
В отличие от CISC-процессоров эта регистровая модель не содержит программного счетчика PC и указателя стека SP. Отсутствие PC связано с тем, что микропроцессоры PowerPC не выполняют команд записи или чтения программного счетчика. Эти микропроцессоры не выполняют также операций со стеком (в случае необходимости стек реализуется программно), поэтому они не содержат SP.
Регистр условий CR (рис. 2.67, а) состоит из восьми 4-битовых полей CR7-0. Младшее поле CRO содержит признаки, формируемые в результате целочисленных операций:
LT= 1 -при отрицательном результате;
GT = 1 -при положительном ненулевом результате;
EQ = 1 - при нулевом результате;
SO - принимает значение аналогичного бита в регистре XER.
Поле CR1 содержит признаки FX, FEX, VX, ОХ, устанавливаемые при операциях над числами с плавающей точкой, которые принимают значения аналогичных битов в регистре FPSCR. Содержимое остальных полей CR7-2 устанавливается по результату операций сравнения целых или вещественных (с плавающей точкой) чисел. При сравнении целых чисел формируются признаки LT (меньше), GT (больше), EQ (равно), SO, назначение которых указано выше. При сравнении вещественных чисел устанавливаются аналогичные признаки FL (меньше), FG (больше), FE (равно), а также признак FU, который принимает значение FU = 1, если хотя бы один из сравниваемых операндов является не-числом (NAN). Наличие различных полей для признаков позволяет сохранять несколько результатов сравнения, которые используются по мере необходимости.
Следует отметить, что в микропроцессорах семейства PowerPC принята нумерация разрядов, начиная со старшего. При этом биты АО, DO содержат старшие разряды, а биты А31, D31 - младшие разряды 32-разрядного слова адреса или данных. Соответственно и содержимое регистров микропроцессора представляется в формате, начальный бит которого имеет номер 0 (см. рис. 2.67,2.69,2.70,2.71).
Регистр FPSCR определяет состояние и режим работы блока обработки чисел с плавающей точкой.
Регистр XER (рис. 2.67, б) содержит признаки переноса СА, переполнения OV, устанавливаемые в результате выполнения арифметических целочисленных операций, и признак общего переполнения SO, который сохраняет установленное при переполнении значение SO = 1 до выполнения команд загрузки в регистр нового содержимого. Значение SO переносится в соответствующие биты регистра CR после каждой операции. Таким образом, признак SO = 1 указывает на возникновение переполнения в ранее выполненных командах программы. Поле SS определяет число байтов (длину строк символов), пересылаемых соответствующими командами.
Регистр связи LR служит для хранения адреса команды, к которой осуществляется условный или безусловный переход. При вызове подпрограммы в этот же регистр заносится адрес команды возврата. В регистр-счетчик CTR заносится число циклов, которое используется для организации программных циклов. При этом содержимое CTR уменьшается на единицу после завершения очередного цикла. Имеются также специальные команды условного ветвления bcctr, использующие содержимое CTR в качестве адреса перехода.
Следует отметить, что в микропроцессорах PowerPC имеются команды обращения к служебным регистрам - mfspr (чтение), mtspr (запись). Поэтому для служебных регистров, кроме имени XER, LR, CTR и др., принята цифровая нумерация SPR1, SPR8, SPR9 и т. д. (рис. 2.66, 2.68), где номер служит для идентификации регистров при обращении к ним с помощью этих команд.
Регистровая модель супервизора (рис. 2.68) включает в себя регистровую модель пользователя, а также содержит несколько групп служебных регистров, часть из которых являются общими для всего семейства PowerPC, а часть - специфичными для модели PowerPC 604.
В группе регистров конфигурации основным является регистр управления MSR, определяющий режим функционирования процессора. Биты его содержимого имеют следующее назначение (рис. 2.69):
ROW - переводит при значении ROW = 1 процессор в режим отключения с пониженным потреблением мощности;
ILE - определяет порядок адресации байтов в слове при обработке исключений: начиная со старшего байта (big-endian) при ILE = 0, начиная с младшего байта (little-endian) при ILE = 1;
ЕЕ - разрешает при ЕЕ = 1 обслуживание внешних запросов прерывания и периодических прерываний от регистра декремента DEC;
PR - задает режим работы процессора: при PR = 0 - режим супервизора, при PR = 1 -пользователя;
FP - разрешает при FP = 1 выполнение операций над числами с плавающей точкой;
ME, SE, BE - разрешают обслуживание внешнего запроса прерывания МСР# (при ME = 1), выполнение пошаговой трассировки (при SE = 1) и трассировки после команд переходов (при BE = 1);
FEO, FE1 - запрещают при FEO = FE1 = 0 обслуживание исключений при обработке чисел с плавающей точкой, при других значениях FEO, FE1 обеспечивают различные варианты обслуживания;
ЕР -определяет базовый адрес размещения векторов исключений: $00000000 при ЕР = О, $РРРОООООприЕР=1;
IT, DT - разрешают трансляцию адресов команд (при IT = 1) и данных (при DT = 1) с помощью устройств управления памятью IMMU, DMMU;
РМ - задает режим процессора, при котором осуществляется контроль эффективности его работы;
RE - обеспечивает при RE = 1 возврат к выполнению прерванной программы после установки начального состояния (RESET) или обслуживания прерывания по внешнему запросу МСР#;
LE - определяет порядок адресации байтов в слове: начиная со старшего байта (big-endian) при LE = 0 или начиная с младшего разряда (little-endian); при переходе к обслуживанию исключений LE принимает значение ELE.
Регистр HI DO содержит биты Hi, определяющие функционирование отдельных устройств микропроцессора. Биты НО-3 в этом регистре разрешают обслуживание исключения типа «контроль процессора» при поступлении внешнего сигнала МСР#, при нарушении четности в циклах обращения к внутренней кэш-памяти или внешней памяти. Бит Н15 запрещает при значении Н15 = 1 выполнение начальной установки при поступлении внешнего сигнала RESET. Биты Н16-21 определяют режим функционирования внутренних кэшей команд и данных. При значении бита Н24 = 0 обеспечивается последовательное выполнение поступающих команд, т. е. не реализуется параллельная работа исполнительных устройств в суперскалярной структуре. Бит Н29 управляет работой блока предсказания ветвлений, задавая статический (при Н29 = 0) или динамический (при Н29 = 1) способ предсказания дальнейшего хода программы.
Регистр PVR содержит коды, указывающие тип микропроцессора и его модификацию, которые записываются в процессе изготовления микросхемы и затем могут только считываться.
Отдельная группа регистров используется в процессе обслуживания исключений. В эту фуппу входят регистры: DAR, хранящий адрес операнда, выборка которого вызвала исключение; DSISR, содержащий код команды, вызвавшей исключение; SRRO, SRR1, в которые заносятся адрес следующей команды и текущее содержимое регистра MSR для возврата к основной программе после обслуживания исключения. Микропроцессор имеет также четыре регистра SPRGO-4, которые обычно служат для хранения адресов, используемых подпрограммой обработки исключения.
К группе вспомогательных регистров относятся регистры: декремента DEC, базового времени ТВ, адресов останова в контрольной точке IABR, DABR, идентификации PIR, а также регистр EAR, используемый для обращения к внешним устройствам с помощью специальных команд eciwx, ecowx.
Регистр DEC работает как вычитающий счетчик с частотой, равной 1/4 от тактовой частоты Ft. Когда его содержимое становится равным нулю, формируется запрос исключения. Таким образом, можно использовать регистр DEC для реализации периодических прерываний.
Регистр PIR содержит 4-разрядный код идентификации PID, определяющий номер микропроцессора в мультипроцессорных системах.
Таймер базового времени ТВ представляет собой 64-разрядный счетчик, переключающийся с частотой Ft. Его содержимое может записываться и считываться путем обращения к 32-разрядным регистрам TBU (младшие 32 разряда) и TBL (старшие 32 разряда). Отметим, что этот регистр доступен также в режиме пользователя, но только для чтения его содержимого.
Регистр IABR содержит адрес команды, а регистр DABR - адрес операнда, при обращении к которым реализуется исключение останова в контрольной точке.
Кроме того, в состав модели супервизора входят пять регистров (MMCRO, PMC1, РМС2, SDA, SIA), которые используются для контроля эффективности работы микропроцессора. В зависимости от значения битов РМ, PR в MSR и содержимого регистра управления MMCRO в регистры РМС1, РМС2 при работе процессора заносятся такие показатели, как число выполненных циклов, число команд, завершившихся в данном цикле, общее количество выполненных ветвлений, число неправильно предсказанных ветвлений, число кэш - промахов и др. Общее число таких контролируемых параметров составляет 46. Эти данные позволяют программисту оценить эффективность программного обеспечения и оптимизировать его в процессе отладки.
При возникновении исключений их вектора (начальные адреса подпрограмм обслуживания) выбираются из таблицы, базовый адрес которой определяется значением бита ЕР в регистре MSR (рис. 2.68, а). Виды исключений и относительные адреса соответствующих векторов приведены в табл. 2.64. Отдельные виды исключений маскируются путем установки в нуль битов ЕЕ, SE, BE, ME в регистре MSR. При реализации большинства исключений в регистр SRRO заносится адрес следующей команды программы, обеспечивающий возврат к ее выполнению после обслуживания исключения, а в регистр SRR1 -текущее содержимое MSR. После выполнения подпрограммы обслуживания команда возврата из исключения RFI производит восстановление содержимого программного счетчика и регистра состояния MSR из SRRO, SRR1.
При исключениях типа «системный сброс», «контроль процессора» в регистре SRRO сохраняется ранее записанное содержимое. Поэтому после их обслуживания можно обеспечить переход к заданной команде, адрес которой предварительно заносится в SRRO. В регистре SRR1 при исключении «контроль процессора» отдельные биты указывают на поступление сигналов ТЕА# = О, МСР# = 0, нарушение четности при обращениях к кэшам команд или данных, при выборке команд или данных из внешней памяти. Анализ содержимого SRR1 позволяет в этом случае определить причину исключения. Если исключение «контроль процессора» замаскировано (в регистре MSR бит ME = 0), то микропроцессор останавливает свою работу, выдавая внешний сигнал контрольной остановки CKSTP - OUT# = 0. При исключениях типа «ошибка выбора данных», «нарушение выравнивания» в регистр DAR заносится код выполнявшейся команды, а в регистр DSISR - адрес операнда, выборка которого вызвала исключение.
Микропроцессор МРС604 имеет суперскалярную структуру (рис. 2.70), которая содержит шесть параллельно работающих исполнительных устройств: блок обработки ветвлений BPU, два устройства для выполнения простых (одноцикловых) целочисленных операций SIU1, SIU2, одно устройство для выполнения сложных (многоцикловых) целочисленных операций MIU, устройство обработки чисел с плавающей точкой FPU и блок выборки операндов из памяти LSU. При этом обеспечивается одновременное выполнение четырех команд. Все операции обработки данных выполняются с регистровой адресацией. Выборка данных из памяти производится только командами пересылки, которые выполняются блоком LSU и осуществляют загрузку данных в регистры GPR, FPR или запись содержимого этих регистров в память.
При параллельной работе исполнительных устройств, возможно, их одновременное обращение к одним регистрам. Чтобы избежать ошибок, возникающих при этом, в случае записи в регистр нового содержимого до того, как другим устройством будет считано предыдущее, введены буферные регистры -12 для GPR, 8 для FPR. Эти регистры служат для промежуточного хранения операндов, дублируя регистры GPR, FPR, используемые при выполнении текущих операций. После завершения этих операций производится перезапись полученных результатов в GPR, FPR (обратная запись).
Конвейер выполнения команд имеет шесть основных каскадов: выборка команды (1) и ее дешифрация (2), распределение команд по исполнительным устройствам (3), выполнение команд (4), запись результатов в буфер (5) и обратная запись результатов в регистры SPR или FPR. Устройство управления одновременно выбирает из кэша и декодирует четыре команды, которые распределяются в соответствующие исполнительные устройства. Большинство команд выполняется за один такт. Эти команды реализуются с помощью SIU1, SIU2, которые осуществляют сложение - вычитание, сравнение, сдвиги, логические операции. Выполнение ряда команд требует нескольких тактов. Например, целочисленное умножение осуществляется за 3-4 такта, деление за 20 тактов. Эти операции производятся MIU. Большинство операций с плавающей точкой (кроме деления), выполняется за три такта, поэтому во внутренней структуре FPU реализовано три исполнительных каскада. Блок завершения обеспечивает получение правильной последовательности результатов выполняемых операций. Он содержит буферную память типа очереди, в которую по мере поступления записываются результаты, получаемые от исполнительных устройств. Обратная запись результатов из буфера в регистры GPR, FPR производится в соответствии с порядком поступления команд, выбираемых устройством управления, т. е. восстанавливается необходимая последовательность результатов.
Блок обработки ветвлений BPU предсказывает направление ветвления программы при поступлении соответствующих команд. В микропроцессорах семейства МРСбхх реализуется два механизма предсказания: статическое предсказание, которое дается программистом и содержится в тексте выполняемой программы, и динамическое предсказание, которое выполняется BPU по результатам предыдущих ветвлений. Блок BPU использует для предсказания кэш-адресов ветвлений ВТАС и таблицу истории ветвлений ВНТ. Кэш ВТАС хранит 64 адреса ветвлений, выполнявшихся предыдущими командами. Если поступившая команда ветвления содержит адрес, совпадающий с одним из имеющихся в ВТАС, то процессор предсказывает ветвление по этому адресу и выбирает команды из соответствующей ветви в конвейер (ветвление выполняется). Если адрес ветвления не содержится в ВТАС, то выбирается следующая команда программы (ветвление отсутствует).
При поступлении команд условных ветвлений BPU анализирует таблицу ВНТ, которая представляет собой кэш-память, где содержатся 512 адресов условных предыдущих ветвлений. Для каждого адреса в таблице имеются два бита, определяющие вероятность ветвления поданному адресу: 00 - практически не выполняется, 01 -выполняется редко, 10-выполняется часто, 11 - выполняется очень часто. Значения этих битов меняются после каждой операции ветвления: если производится ветвление по данному адресу, то вероятность увеличивается на единицу (максимальное значение 11), если данный адрес не использован, то вероятность уменьшается на единицу (минимальное значение 00). Новые адреса вводятся в ВНТ вместо адресов с нулевой вероятностью. Ветвление по имеющемуся в таблице адресу предсказывается, если его вероятность больше 01. Правильность предсказания проверяется после определения соответствующих признаков в регистре условий CR. Если условия не выполняются (неправильное предсказание), то процессор освобождает конвейер от команд из неправильно выбранной ветви, и загружает новые команды из другой ветви. Таким образом, при неправильных предсказаниях требуется перезагрузка конвейера, что снижает производительность процессора.
Так как одновременно могут выполняться несколько команд, изменяющих значения признаков в регистре CR, то в BPU имеются восемь буферных регистров, дублирующих содержимое CR. Эти регистры используются исполнительными различными устройствами, а после завершения соответствующих операций их содержимое переносится в основной регистр условий CR (обратная запись), обеспечивая правильный порядок выполнения условных команд.
Микропроцессор МРС604 осуществляет раздельную выборку команд и данных с помощью двух устройств управления памятью IMMU, DMMU, которые могут выполнять сегментную, страничную и блочную адресацию. Внутренние кэши команд 1C и данных DC имеют емкость по 16 Кбайт.
Контроллер шины BID обеспечивает интерфейс микропроцессора с внешними устройствами. Системная шина передает 32-разрядный адрес АО-31 и 64-разрядные данные DHO-31 (старшее слово), DLO-31 (младшее слово). Для каждого байта адреса и данных передаются и принимаются биты четности, с помощью которых осуществляется контроль ошибок обращения к шине. Увеличенная разрядность шины данных позволяет быстрее производить загрузку строк кэш-памяти, которые содержат по 32 байта. При кэш-промахе производится пакетная передача данных, которая обеспечивает пересылку содержимого строки за 4 последовательных цикла. Контроллер BIU реализует выдачу и прием необходимых сигналов для управления обменом, выполнения прерываний, захвата шин, снупинга (обращения внешнего устройства к внутреннему кэшу данных) и установки начального состояния (RESET). Формируются также сигналы для управления внешней кэш-памятью 2-го уровня.
Микропроцессор содержит специализированный, последовательный порт для выполнения тестирования по стандарту JTAG (IEEE 1149.1). Тестирование осуществляется с помощью специального тест-порта ТАР также, как в микропроцессоре МС68060 и ряде моделей семейства М683хх.
Для питания микропроцессора используется напряжение Vn = 3,3В. При тактовой частоте Ft = 100 МГц потребление мощности не превышает 10 Вт. Пониженное энергопотребление (400 мВт) обеспечивается при останове микропроцессора, который осуществляется программно путем установки в регистре MSR значения бита POW = 1. В этом случае прекращается выполнение команд, продолжают работать только базовый таймер ТВ, регистр декремента DEC и блок обслуживания запросов прерывания. Микропроцессор устанавливает выходной сигнал HALTED = 1, информируя о своем останове внешние устройства. Выход из этого состояния происходит при поступлении внешних сигналов прерывания INT#, MCP#, SMI# или начальной установки RESET#, а также при запросе периодического прерывания от регистра DEC.
Способы адресации и система команд. Микропроцессоры семейства PowerPC используют следующие способы адресации:
регистровую;
косвенно-регистровую со смещением;
косвенно-регистровую с индексированием;
относительную;
абсолютную;
непосредственную.
Все команды арифметических и логических операций, сравнения и сдвигов (табл. 2.65-2.67) выполняются только с регистровой и непосредственной адресацией. Благодаря этому обеспечивается высокая производительность, так как при обработке данных не требуется выполнять циклов обращения к шине для выбора операндов. Трехадресный формат команд позволяет исключить лишние пересылки данных между регистрами. При этом в качестве гО, гА, гВ указываются номера регистров GPR31-0, определяющие регистр размещения результата (rD) и регистры операндов (гА, гВ). Непосредственный операнд со знаком Sim или без знака Dim задается 32-разрядным словом, следующим за кодом команды.
Таблица 2.65
Команды загрузки и сохранения содержимого регистров (табл. 2.68) используют при обращении к памяти косвенно-регистровую адресацию со смещением или индексированием. Эффективный адрес операнда ЕА определяется выражениями:
ЕА =(гА! О) +d32 - при адресации со смещением;
ЕА = (гА! О) + (гВ ) - при адресации с индексированием,
где гА, гВ - номера регистров общего назначения GPR31—1, d32-32 - разрядное смещение. Регистр GPRO не используется при этих способах адресации: если в качестве номера гА указан нуль, то формируется адрес ЕА = d32 при адресации со смещением, ЕА = (гВ) при адресации с индексированием. Так реализуется прямая (абсолютная) адресация с обращением по заданному в команде адресу d32 и косвенно-регистровая адресация по адресу, заданному содержимым регистра гВ.
Команды ветвления (табл. 2.69) используют прямую или относительную адресацию. При этом адресом перехода служит указанный в команде адрес t-adr или сумма (PC + t-adr).
Все команды микропроцессора имеют 32-разрядный формат кода операции. При использовании непосредственной адресации после кода команды следует 32-разрядный операнд. В командах, использующих косвенно-регистровую адресацию со смещением, после кода операции следует 32-разрядное смещение, а в командах ветвления - 32-разрядный адрес t-adr. Таким образом, все команды содержат 4 или 8 байтов.
Команды арифметических операций (табл. 2.65) имеют ряд модификаций, отличающихся формированием признаков по результатам операций. Если после мнемокода операции идет символ «.», то по результатам операции устанавливаются соответствующие значения битов SO, EQ, GT, LT в поле CRO регистра CR (рис. 2.67, а). Если мнемокод команды имеет суффикс «о», то по результату ее выполнения устанавливаются биты OV, SO в регистре XER (рис. 2.67, б), при этом бит SO дублируется в поле CRO. Команды сложения addic, addc, adde, addme, addze и вычитания subfc, subfic, subfe, subfme, subfee вызывают установку признака переноса СА в регистре XER по результату операции. Команда addi при значении гА = 0 производит загрузку непосредственного операнда со знаком Sim в регистр rD, а при гА -I. О выполняет сложение этого операнда с содержимым регистра гВ. Команда непосредственного сложения со сдвигом addis производит при гА =/ 0 сложение содержимого гА с непосредственным операндом Sim, сдвинутым на четыре разряда влево, а при гА = 0 загружает сдвинутый операнд Sim в регистр rD.
Команды умножения и деления могут оперировать с операндами без знака и со знаком. При знаковом умножении 16-разрядных операндов (команды mulli, mullw) в регистре rD размещается 32-разрядный результат. При умножении 32-разрядных чисел со знаком (команда mulhw) или без знака (команда mulhwu) в регистр rD поступают старшие 32 разряда результата, а в следующий регистр с номером (гВ + 1) - младшие 32 разряда. При делении 32-разрядных чисел со знаком (команда divw) или без знака (команда divwu) в регистр rD заносится 32-разрядное частное.
Команда neg меняет знак операнда. Команда extsb преобразует младший байт содержимого регистра rS путем расширения знака в 32-разрядное слово, размещаемое в rD. Команда extsh выполняет аналогичное расширение для 16 младших разрядов (младшее полуслово) содержимого регистра rS.
Команды логических операций (табл. 2.66) производятся над операндами без знака, содержащимися в регистрах (rS, rB) или заданными непосредственно в команде (Dim). Микропроцессор реализует восемь логических операций-И, ИЛИ, Исключающее ИЛИ, НЕ-И, НЕ - ИЛИ, Запрет, Импликация, Эквивалентность. При выполнении команд, имеющих после мнемокода символ «.», производится установка соответствующих признаков в поле CRO регистра условий CR. Команды логических операций со сдвигом andis., oris., xoris. перед выполнением операций И, ИЛИ, Исключающее ИЛИ производят сдвиг непосредственного операнда влево на 16 разрядов. В данную группу входит также команда cntizw, определяющая число последовательно расположенных нулей в регистре rS, начиная со старшего разряда. Это число заносится в регистр гА.
Команды сравнения (табл. 2.67) осуществляют вычитание двух операндов, содержащихся в регистрах (гА, гВ) или заданных непосредственно (Sim, Ulm), которые могут быть числами со знаком (знаковое сравнение) или без знака (беззнаковое сравнение). По результатам вычитания осуществляется установка признаков в поле CRi регистра условий CR. Номер поля i = 7...2 задается операндом crfD в команде Ассемблера. Если этот операнд не задан или равен 0, то признаки устанавливаются в поле CRO. Операнд L в этих командах для микропроцессора МРС604 задается равным 0.
Команды сдвигов (табл. 2.67) реализуют многоразрядные логические (slw, srw), арифметические (sraw, srawi) и циклические (rlwinm, rlwnm, rlwimi) сдвиги содержимого регистра rS с размещением результата в гА. Число разрядов сдвига задается непосредственно операндом Ns или содержимым шести младших разрядов регистра. На вход NMI гВ. При логических сдвигах влево (команда slw) или вправо (команда srw) освободившиеся разряды заполняются нулями. При арифметическом сдвиге вправо (команды sraw, srawi) в освободившихся слева разрядах дублируется знак исходного операнда.
Таблица 2.67
Циклические сдвиги производятся только влево, причем результат сдвига логически умножается на маску М. Маска формируется в соответствии с задаваемыми в команде номерами начального Mb и конечного Me битов. Биты маски с номерами от Me до Mb имеют значение «1», поэтому соответствующие биты результата сохраняются. Остальные биты маски имеют значение «О», и соответствующие биты результата принимают такое же значение. Полученный после маскирования результат размещается в регистре гА. При выполнении команд rlwinm, rlwnm предыдущее содержимое гА не сохраняется. Команда rlwimi сохраняет в регистре гА значения битов, соответствующих замаскированным битам результата (для которых биты маски равны нулю).
Команды сдвигов могут вызывать установку признаков в поле CRO регистра CR в соответствии с результатом операции. Для этого после мнемокода команды следует поставить символ «.».
Команды загрузки и сохранения (табл. 2.68) производят загрузку в регистр GPR с номером rD байта, слова или полуслова (16-разрядное слово) из памяти (команды, начинающиеся с буквы «I» - load), либо записывают в память байт, слово или полуслово из регистра rS (команды, начинающиеся с букв «st» -store). Для обращения к памяти используется косвенно-регистровая адресация со смещением или индексированием. При адресации с индексированием в команде указываются адресный (гА) и индексный (гВ) регистры (мнемокод этих команд заканчивается буквой «х»), при адресации со смещением - адресный регистр (гА) и смещение d32. При загрузке байта (команды Ibz, Ibzx) старшие разряды регистра rD заполняются нулями (расширение нулями). При загрузке полуслова старшие разряды заполняются либо нулями (команды Ihhz, Ihzx), либо значением старшего (знакового) бита Ы 5 загружаемого слова (команды lha, lhax, расширение знаком).
Таблица 2.68
Команды загрузки-сохранения имеют модификации с суффиксом и (указаны в скобках). При наличии данного суффикса в регистр гА после пересылки загружается эффективный адрес ЕА, использованный в данной команде. Эти модификации позволяют, например, реализовать постинкрементную адресацию байтов, полуслов или слов, если задать в соответствующих командах значения смещения d32 = 1,2 или 4. В командах загрузки с суффиксом и нельзя использовать номера rD = гА, при этом реализуется исключение с адресом вектора Av = $00700 (неправильный код команды, табл. 2.64).
Команды Ihbrz, Iwbrz осуществляют перестановку байтов при загрузке в регистр rD полуслова (Ihbrz) или слова (Iwbrz). Команды sthbrx, stwbrx выполняют аналогичную перестановку байтов при записи из регистра rS в память полуслова (sthbrx) или слова (stwbrx).
Команды групповой пересылки Imw, stmw производят загрузку или запись в память содержимого группы регистров, начиная с заданного в команде номера rD или rS до последнего регистра с номером GPR31. Загружаемые или записываемые данные располагаются в ячейках памяти, начиная с адреса ЕА, определяемого косвенно-регистровой адресацией со смещением. Регистр гА не должен входить в группу адресуемых регистров, иначе реализуется исключение с адресом Av = $00700 (неправильный код команды).
Команды пересылки строк символов Iswi, Iswx, stswi, stswx осуществляют загрузку в регистры или запись в память п символов (байтов). Число пересылаемых байтов задается данным в команде операндом Mb (команды Iswi, stswi), или значением 8 старших битов (поле SS, рис. 2.67, а) в регистре XER (команды Iswx, stswx). Начальный адрес пересылаемых байтов ЕА = (гА) - для команд Iswi, stswi (косвенно-регистровая адресация) и ЕА = (гАЮ) + (гВ) - для команд Iswx, stswx (адресация с индексированием). Данные в регистрах размещаются или выбираются, начиная с младшего байта регистра rD или rS.
Команды вызывают исключение с адресом Av = $00700 (неправильный код команды), если гА или гВ входит в число регистров, в которые загружается или из которых выбирается строка символов.
Управление программой производится командами безусловных и условных ветвлений (их мнемокоды начинаются с буквы «b» - branch), программных прерываний tw, twi, системного вызова sc и возврата из прерывания rfi (табл. 2.69). При ветвлениях адрес команды перехода определяется с помощью прямой (команды ba, bla, bca, bcla) или относительной (команды Ь, Ы, be, bcl) адресации. Заданное в команде число t-adr служит при этом абсолютным адресом или смещением, определяющим значение адреса перехода. Если мнемокод команды ветвления имеет суффикс I (команды Ы, bla, bcl, bcla), то при ее выполнении текущее содержимое программного счетчика PC заносится в регистр связи LR, обеспечивая возможность возвращения к следующей команде программы. Таким образом, эти команды могут служить для вызова подпрограмм.
Команды be, bca, bcl, bcla реализуют условные ветвления или вызовы подпрограмм. Условием ветвления является совпадение содержимого поля CRi в регистре условий CR с четырьмя младшими битами заданного в команде операнда ВО. Номер используемого для сравнения поля i задается операндом BI. При совпадении заданного значения ВО и содержимого поля CRi производится переход к команде, адрес которой определяется абсолютной (команды bca, bcla) или относительной (команды be, bcl) адресацией. При их несовпадении выполняется следующая команда программы. Команды bcl, bcla, сохраняющие в регистре LR адрес следующей команды, служат для реализации условных вызовов подпрограммы.
Команды bclr, bclrl реализуют условный возврат из подпрограмм, если заданное значение ВО совпадает с содержимым поля CRi. При этом в программный счетчик PC загружается содержимое регистра связи LR. Команда bcrlri сохраняет в регистре LR текущее содержимое PC, обеспечивая возможность возвращения к подпрограмме.
При выполнении команд bcctr, bcctrl в программный счетчик PC загружается содержимое регистра CTR, если выполняется условие ВО = CRi. Команда bcctrl обеспечивает сохранение текущего содержимого PC в регистре связи LR.
При условных ветвлениях программист может указать на повышенную вероятность ветвления, задав значение «1», для пятого бита операнда ВО. В этом случае блок обработки ветвления BPU обеспечит выборку в конвейер следующих команд в соответствии с данным предсказанием. Такой способ предсказания ветвлений называется статическим. При нулевом значении пятого бита в операнде ВО блок BPU осуществляет динамическое предсказание ветвлений с помощью кэша адресов ВТАС и таблицы истории ветвлений ВНТ.
Команды программных прерываний tw, twi производят условное обращение к подпрограмме обслуживания, вектор которой Ve размещен по адресу Av = $00700 (см. табл. 2.64). Текущее содержимое PC и MSR сохраняется в регистрах SRRO, SRR1. Условием обращения является совпадение признаков в поле CRO, устанавливаемых при сравнении содержимого регистра гА с непосредственным операндом Sim (команда twi) или с содержимым регистра гВ (команда tw), с битами заданного в команде 4-разрядного операнда ТО. Прерывание реализуется, если хотя бы один из установленных в «1» признаков в CRO совпадает с соответствующим битом ВО. Содержимое гА, гВ и операнд Sim представляются при сравнении числами со знаком.
Команда sc осуществляет вызов системного прерывания с подпрограммой обслуживания, вектор которой Ve размещен по адресу Av = $ООСОО (см. табл. 2.64). Команда rfi реализует возврат из прерывания, при котором из регистров SRRO, SRR1 восстанавливается содержимое программного счетчика PC и регистра управления MSR, обеспечивая возвращение к выполнению прерванной программы. Команда rfi может выполняться только в режиме супервизора, так как она изменяет содержимое регистра MSR.
При выполнении команд условных переходов используется содержимое различных полей регистра условий CR. Различные операции с содержимым этого регистра реализуются с помощью специальных команд (табл. 2.70). Команда mtcrf производит загрузку в CR содержимого регистра rS, которое логически умножается на 32-битовую маску, заданную в команде. Эта команда устанавливает требуемые значения содержимого CR или его немаскированных полей. Пересылка содержимого CR в регистр rD производится командой mfcr. Команда mcrxr копирует четыре младших бита из регистра исключений XER (признаки SO, OV, СА, рис. 2.67, а) в поле CRi регистра CR, где номер поля i задается операндом crfD. После копирования признаки SO, OV, СА в регистре XER принимают значение «О». Команда mcrf копирует содержимое поля CRi в поле CRJ, где значения i, j задаются операндами crfS, crfD.
Ряд команд выполняет логические операции над отдельными битами bi, bj содержимого регистра CR (табл. 2.70). Номера i, j этих битов задаются операндами crbA, crbB, результат операции размещается в бите bk, номер которого к определяется операндом crbD. Данные команды обеспечивают выполнение операций И (crand), ИЛИ (сгог), Исключающее ИЛИ (сгхог), НЕ/И (crnand), НЕ/ИЛИ (crnor), Эквивалентность (creqv), Запрет (crandc), Импликация (сгогс).
В группу служебных команд (табл. 2.71) входят команды пересылки содержимого служебных регистров. Команды mtmsr, mfmsr, пересылки содержимого регистра управления MSR выполняются только в режиме супервизора. Команды mtspr, mfspr осуществляют пересылку содержимого служебных регистров SPRi, номер которых i задается операндом SPR. Большинство служебных регистров входит в модель супервизора (см. рис. 2.68), поэтому обращение к ним допускается только в режиме супервизора. Исключение составляют регистры XER (SPR1), LR (SPR8), CTR (SPR9), входящие в модель пользователя (см. рис. 2.66). Обращение к этим регистрам осуществляется командами mtspr, mfspr, выполняемыми в режиме пользователя, при значениях операнда SPR = 1,8 или 9. Команда mftb производит считывание в регистр rD старшего (TBU) или младшего (TBL) слова из базового таймера.
Команды Iwarx, stwcx. обычно используются совместно. При этом задаются одинаковые значения гА, гВ и rD = rS. Команда Iwarx загружает операнд из памяти в регистр rD, а команда stwcx. возвращает его обратно по тому же адресу ЕА = (гА!0) + (гВ), устанавливая в поле CRO соответствующие признаки EQ, GT, LT. Если же перед командой stwcx. произошла новая загрузка rD или запись по адресу ЕА, то эта команда не вызовет каких-либо операций. Данная пара команд обычно используется операционной системой для проверки значений программных «семафоров», аналогично команде ТАЗ в микропроцессорах семейства М68ххх. При поступлении этих команд на внешних выводах микропроцессора, определяющих тип выполняемого цикла, устанавливается определенная комбинация сигналов, которая должна запретить другим устройствам обращение к общей шине до завершения их выполнения.
Команды sync, isync, eieio используются для синхронизации выполнения программ несколькими совместно работающими микропроцессорами. Команда sync вызывает завершение выполнения всех предшествующих команд, а затем разрешает выполнение последующих команд, т. е. осуществляет задержку конвейера до освобождения всех исполнительных устройств. Команда isync обеспечивает завершение выполнения предшествующих команд, после чего освобождает конвейер от поступивших в него последующих команд и выбирает из памяти новую пару команд. Таким образом, эта команда производит очистку конвейера. Команда eieio вызывает завершение выполнения предыдущих команд, требующих обращения к внешней памяти данных. Последующие обращения к памяти данных производятся только после выполнения этой команды, т. е. реализуется задержка обращений, которая может быть использована другими устройствами. При выполнении данной команды на внешних выводах, определяющих тип цикла обращения к шине, устанавливается определенная комбинация сигналов, которая используется, чтобы упорядочить обращения различных устройств к общей оперативной памяти. Команды isync, eieio выполняются микропроцессором только в режиме супервизора.
Команды eciwx, ecowx обеспечивают обращение микропроцессора к выделенным ресурсам системы - специализированным внешним устройствам или разделам памяти, для которых устанавливаются 4-разрядные коды идентификации RID. При обращении к этим ресурсам соответствующий код RID загружается в старшие разряды Ь31-28 регистра EAR (см. рис. 2.68). Младший разряд ЬО этого регистра содержит бит Е, определяющий вид обращения: при Е = О разрешается выполнение команды ecowx, посылающей слово из регистра rS в устройство, идентифицированное кодом RID, при Е = 1 - команды eciwx, принимающей слово от идентифицированного устройства в регистр rD. Код RID выдается микропроцессором на специальные внешние выводы, а на адресную шину поступает адрес ЕА = (гА) + (гВ). При этом на выводах, определяющих тип цикла, устанавливается определенная комбинация сигналов, указывающая на выполнение команды ecwix или ecwox. Данные команды используются микропроцессором при обращении к выделенным внешним устройствам для приема или передачи управляющей информации.
Напомним, что команды rfi, mtmsr, mfmsr, mtspr, mfspr, isync, eoeoi (отмечены символом «*» в табл. 5.69, 5.71) выполняются микропроцессором только в режиме супервизора.
Кроме описанных команд микропроцессор выполняет команды обработки чисел с плавающей точкой и команды управления кэшами и внешней памятью.
Обработка чисел с плавающей точкой. Операции над числами с плавающей точкой выполняются с использованием 64-разрядных регистров FPR31 -0 и регистра управления и состояния FPSCR, входящих в регистровую модель пользователя (см. рис. 2.66). Обрабатываемые числа представляются в формате одинарной (ОТ, 32 разряда) или двойной (ДТ, 64 разряда) точности в соответствии со стандартом IEEE 754. Данные форматы обеспечивают также представление бесконечности и не-чисел (NAN) двух типов-SNAN и QNAN.
Регистр FPSCR управляет обслуживанием исключений при обработке чисел с плавающей точкой, а также определяет вид используемого округления. Отдельные биты содержимого FPSR (рис. 2.71) имеют следующее функциональное назначение:
FX - признак общего исключения FPU, принимает значение FX = 1, если в регистре FPSCR установлен в «1» какой-либо из признаков исключения VX, OX, UX, ZX, XX;
FEX - признак разрешенного общего исключения FPU, принимает значение FEX = 1, если хотя бы один из установленных признаков исключения разрешен для обслуживания битами VE.OE, UE.ZE.XE;
VX —общий признак исключения при выполнении неправильной операции FPU; принимает значение VX = 1, если в FPSCR установлен в «1» какой-либо из признаков неправильной операции (эти признаки отмечены начальными символами VX);
ОХ - признак переполнения принимает значение ОХ = 1, если результат превышает максимальную допустимую величину max;
UX - признак антипереполнения принимает значение UX = 1, если результат меньше минимальной допустимой величины min;
ZX - признак деления на нуль принимает значение ZX = 1 при нулевом делителе;
XX - признак неточного результата принимает значение XX = 1, если произошла потеря точности при округлении (XX копирует признак FI);
VXSNAN, VXISI, VXIDI, VXZDZ, VXIMZ, VXVC.VXSOFT, VXSQRT, VXCVI - признаки неправильной операции FPU при использовании в качестве операнда не-числа (VXSNAN = 1), при вычитании или делении бесконечностей (VXISI = 1 или VXIDI = 1), при делении нуля на нуль (VXZDZ -1) или умножении нуля на бесконечность (VXIMZ = 1), при программном вызове исключения неправильного кода команды (установка VXSOFT = 1 с помощью команд mcrfs, mtfsf, mtfsfi, mtfsbl), попытке извлечения квадратного корня из отрицательного числа (VXSQRT = 1) или неопределенном результате сравнения (VXCVI = 1);
FR - признак округления принимает значение FR = 1, если при выполнении команды производится округление результата;
FI - признак потери точности принимает значение FI = 1, если округление вызывает потерю точности (признак FI копируется в XX);
FPRF или FPCC - поле, определяющее результат выполняемых FPU арифметических операций, округления или сравнения (табл.2.72);
VE, ОЕ, UE, ZE, ХЕ-биты разрешения обслуживания исключений при выполнении неправильной операции (VE = 1), переполнении (ОЕ = 1), антипереполнении (UE = 1), делении на нуль (ZE =1), получении неточного результата (ХЕ = 1);
N1 - переводит FPU при N1 =1 в режим выполнения некоторых операций, не предусмотренных стандартом IEEE 754;
RN - определяет вид выполняемого округления: к ближайшему числу (RN = 00), к нулю (RN = 01), к + -(РМ = 10) или к - ~(RN = 11).
При выполнении команд FPU, вызывающих изменение содержимого регистра условий CR (такие команды имеют символ «.» после мнемокода, см. табл. 2.73 - 2.75), содержимое четырех младших разрядов регистра FPSCR (признаки FX, FEX, VX, ОХ) копируется в поле CR1 регистра CR (рис. 2.67, а).
Признаки FX, OX, UX, ZX, XX, VXSNAN, VXISI, VXIDI, VXZDZ, VXIMZ, VXVC, VXSOFT, VXSQRT, VXCVI сохраняют установленное значение «1», пока оно не будет изменено с помощью команд mcrfs, mtfsfi, mtfsf, mtfsbO. Таким образом, эти признаки хранят информацию о причинах возникших замаскированных исключений, которая в дальнейшем может быть использована подпрограммой обслуживания.
Значения битов 15-19 в регистре FPSCR (поле FPRF или FPCC) зависят от типа выполняемой команды. При арифметических операциях (табл. 2.73) и операциях округления (табл. 2.74) значения битов FPRF устанавливаются согласно табл. 2.72 в соответствии с полученным результатом. При выполнении команд сравнения fcmpu, fcmpo биты 16-19 (поле FPCC) принимают такие же значения (табл. 2.71), как признаки FL (меньше), FG (больше), FE (равно), FU (не сравнимо) в поле CRi регистра условий CR, номер которого задается операндом crfd команды (табл. 2.74).
Команды арифметических операций сложения (fadd), вычитания (fsub), умножения (fmul), деления (fdiv), вычисления квадратного корня (fsqrt), обратной величины (fres) и обратной величины от квадратного корня (fsqrte) выполняются с операндами, располагаемыми в регистрах FPR, номера которых frA, frB, frC, frD задаются в команде (табл. 2.73). Блок FPU реализует также комбинированные операции умножение-сложение (fmadd), умножение-вычитание (fmsub) и аналогичные операции с изменением знака результата (fnmadd, fnmsub). Операции производятся над вещественными числами одинарной точности ОТ, если мнемокод команды имеет в конце суффикс «s», или двойной точности ДТ, если суффикс отсутствует.
Команды fres, frsqrte выполняются только с числами двойной точности. Команда fsei производит сравнение содержимого регистра frA с нулем: если оно больше или равно нулю, то в регистр frD загружается содержимое frC, если меньше нуля или не-число, то содержимое frB.
При операциях сравнения (команды fcmpu, fcmpo) производится сравнение содержимого указанных в команде регистров frA, frB и установка соответствующих признаков в поле CRi регистра условий CR (см. рис. 2.67, а), номер которого i определяется операндом crfD (табл. 2.74). Два варианта операции сравнения, выполняемые FPU, отличаются установкой значений признаков исключений в регистре FPSCR. Команда fcmpu устанавливает значение признака VXSNAN = 1, если какой-либо из сравниваемых операндов является не-числом SNAN. Команда fcmpo в этом случае тоже устанавливает значение VXSNAN = 1, а если исключения при неправильном результате операции не разрешены (в регистре FPSCR бит VE = 0), то устанавливается также признак VXVC. Если же операндом является не-число QNAN, то устанавливается только признак VXVC - 1.
Команда frsp преобразует число двойной точности (64 разряда) из регистра frA в число одинарной точности (32 разряда), посылаемое в регистр frD. В случае необходимости выполняется округление числа в соответствии со значением поля RN в регистре FPSCR. Команды fctiw, fctiwz преобразуют число двойной точности из регистра frA в целое 32-разрядное число со знаком, загружаемое в регистр frD. При этом команда fctiw проводит округление в соответствии с полем RN в регистре FPSCR, а команда fctiwz выполняет округление к нулю.
Таблица 2.74
Команды fmr, fneg, fabs, fnabs (табл. 2.75) производят пересылку содержимого регистра FPR с номером frA в регистр с номером frD. При этом команда fneg изменяет знак операнда, команда fabs пересылает его абсолютное значение, команда fnabs устанавливает отрицательный знак операнда.
Отдельная группа команд служит для пересылки и изменения содержимого регистра FPSCR. Команда mffs пересылает содержимое FPSCR в регистр FPR с номером frD. Команда mcrfs пересылает 4-битовое поле, номер которого задается операндом crfS, из регистра FPSCR в поле CRi регистра условий CR, где значение i = crfD. Команда mtfsfi загружает 4-битовый непосредственный операнд Im в поле регистра FPSCR, номер которого равен crfD. Команда mtfsf заносит в регистр FPSCR старшее 32-разрядное слово (frA)h из регистра с номером frA (разряды 63-32 содержимого регистра FPR), логически умноженные на заданную в команде 32-битную маску FM. Установка в «О» и «1» отдельных битов bi в регистре FPSCR производится командами mtfsbO, mtfsbl, в которых задается номер бита i = crbD.
Большинство рассмотренных команд может изменять содержимое поля CR1 в регистре условий CR (см. рис. 2.67, а), перенося в него значения признаков FX, FEX, VX, ОХ, устанавливаемых в регистре FPSCR. Для этого необходимо после мнемокода команды поставить символ «.» (см. табл. 2.73-2.75).
Команды загрузки и сохранения (табл. 2.76) производят загрузку в регистр FPR с номером frD вещественного числа одинарной (ОТ) или двойной (ДТ) точности из памяти (команды, начинающиеся с буквы «I» - load), либо записывают в память число ОТ или ДТ из регистра frS (команды, начинающиеся с букв «st» - store). Для обращения к памяти используется эффективный адрес ЕА, формируемый с помощью косвенно-регистровой адресации со смещением или индексированием (мнемокод команд с индексированием заканчивается буквой «х»). Команда stfiwx выполняет запись в память по адресу ЕА младшего 32-разрядного слова (frS)l из регистра FPR с номером frS (разряды 31-0 содержимого регистра).
Команды загрузки-сохранения имеют модификации с суффиксом и (указаны в скобках). При наличии этого суффикса в регистр GPR с номером гА после пересылки загружается эффективный адрес ЕА, использованный в данной команде. Эти модификации позволяют реализовать постинкрементную адресацию операндов.
Внутренняя кэш-память и устройства управления памятью. Микропроцессор МРС604 имеет отдельные устройства управления памятью IMMU, DMMU и внутренние кэши для команд 1C и данных DC (см. рис. 2.70). Емкость каждого кэша составляет 16 Кбайт. Устройства управления IMMU, DMMU обеспечивают блочную, сегментную и страничную организацию памяти, а также обращение к внешним устройствам с использованием специального протокола DS.
Принцип работы кэшей команд и данных аналогичен описанному для микропроцессоров семейства М680хх. Однако их организация и функционирование в МРС604 имеет некоторые особенности. Оба кэша организованы в виде группы из 128 наборов, каждый из которых содержит по четыре 32-байтной строки. В качестве тега в МРС604 используются 20 старших разрядов адреса. Старшие 7 разрядов адреса определяют номер набора строк, в котором должны размещаться выбираемые данные или команда. Младшие 5 разрядов адресуют расположенные в строке байт, полуслово или слово. При кэш-промахе в выбранном наборе производится замещение пустой (недостоверной) строки или строки, к которой дольше всего не производилось обращение (метод замещения LRU - least-recently used). Каждая строка в кэше содержит 20-разрядный тег, восемь 32-разрядных слов (данные или команды) и биты, идентифицирующие текущее состояние строки: V или I -для кэша команд, М, Е, 5или I-для кэша данных.
Для строк кэша команд 1C возможны два состояния: V (valid) —достоверное или I (invalid) -недостоверное содержимое строки. Недостоверное (незаполненное) состояние строк этого кэша устанавливается при сбросе процессора в начальное состояние (reset) путем загрузки соответствующего содержимого в регистр конфигурации HIDO или с помощью команды icbi (табл. 2.77), аннулирующей содержимое строки. При заполнении строки устанавливается достоверное состояние ее содержимого.
Для кэша данных DC введено четыре возможных состояния строки, идентификация которых обеспечивает возможность совместного использования нескольких кэшей в мультипроцессорной системе:
М (modified) - содержимое строки модифицировано путем записи по соответствующему адресу, и новое содержимое не переписано в ОЗУ;
Е (exclusive) - содержимое строки хранится только в этом кэше и ОЗУ;
S (shared) - содержимое строки хранится в данном кэше, ОЗУ и каком-либо другом устройстве (кэше);
