Микрокод Intel

редактировать

Микрокод Intel - это микрокод, который выполняется внутри Процессоры x86 производства Intel. Поскольку микроархитектура P6 была представлена ​​в середине 1990-х годов, программы микрокода могут быть исправлены операционной системой или BIOS прошивкой для обхода ошибок, обнаруженных в ЦП после выпуск. Первоначально Intel разработала обновления микрокода для отладки процессора в рамках инициативы для тестирования (DFT).

После ошибки Pentium FDIV функция исправления микрокода получила более широкое распространение. Цель - обеспечить обновление в полевых условиях без необходимости отзыва продукта.

В микроархитектурах P6 и более поздних версиях списки инструкций x86 внутренне преобразованы в более простые RISC - стиль микрооперации, относящиеся к конкретному процессору и ступенчатому уровню.

Содержание
  • 1 Микрооперации
  • 2 Возможность обновления
    • 2.1 Интерфейс процессора
      • 2.1.1 Формат обновления микрокода
  • 3 Отладка
    • 3.1 Тестирование прямого доступа
  • 4 Ссылки
  • 5 Дополнительная литература
Микрооперации

На Pentium Pro каждая микрооперация 72-битной шириной или 118-битной шириной. Это включает в себя код операции, два исходных поля и одно поле назначения, с возможностью хранения 32-битного немедленного значения. Pentium Pro может обнаруживать ошибки четности во внутреннем микрокоде ROM и сообщать о них с помощью архитектуры машинной проверки.

Микрооперации имеют согласованный формат с размером до три исходных входа и два целевых выхода. Процессор выполняет переименование регистров для отображения этих входов в реальный файл регистров (RRF) и из него до и после их выполнения. Выполнение вне очереди - это используются, поэтому микрооперации и инструкции, которые они представляют, могут не появляться в одном и том же порядке.

Во время разработки Pentium Pro несколько исправлений микрокода были включены между степпингами A2 и B0. Для Pentium II (на основе P6 Pentium Pro) были добавлены дополнительные микрооперации для поддержки набора инструкций MMX. В нескольких случаях были добавлены «вспомогательные средства микрокода» для надежной обработки редких угловых ситуаций.

Pentium 4 может одновременно выполнять 126 микроопераций в полете. Микрооперации декодируются и сохраняются в кэше трассировки выполнения с 12 000 записей, чтобы избежать повторного декодирования одних и тех же инструкций x86. Группы из шести микроопераций упаковываются в линию трассировки. Микрооперации могут занимать дополнительное пространство для немедленных данных в той же строке кэша. Сложные инструкции, такие как обработка исключений, приводят к переходу к ПЗУ микрокода. Во время разработки Pentium 4 микрокод составлял 14% ошибок процессора по сравнению с 30% ошибок процессора во время разработки Pentium Pro.

В микроархитектуре Intel Core, представленной в 2006 году, добавлено «слияние микроопераций "для некоторых общих пар инструкций, включая сравнение с последующим переходом. Декодеры инструкций в Core преобразуют инструкции x86 в микрокод тремя различными способами:

Преобразование инструкций x86 в микрооперации на ядре
инструкции x86декодеры x86микро- операции
обычныйпростой декодер × 31–3
большинство другихсложный декодер × 1≤4
очень сложныйсеквенсор микрокодамногие

Для реализации гиперпоточности Intel одновременной многопоточности, ПЗУ микрокода, кэш трассировки и декодеры команд используются совместно, но очередь микроопераций не используется совместно.

Средство обновления

В середине 1990-х средство для поставки нового микрокода первоначально называлось Pentium Pro Файл данных шага и Функция обновления BIOS . Предполагалось, что приложения пользовательского режима должны выполнять вызов прерывания BIOS для подачи нового «блока данных обновления BIOS», который BIOS будет частично проверять и сохранять в энергонезависимой памяти BIOS ; это может быть передано установленным процессорам при следующей загрузке.

Intel распространила программу под названием BUP_UTIL.EXE, переименованную в CHECKUP3.EXE, которая могла быть запущена под ДОС. Коллекции нескольких обновлений микрокода были объединены и пронумерованы расширением .PDB, например, PEP6.PDB.

Интерфейс процессора

Процессор загружается с использованием набора микрокод хранится внутри процессора и хранится во внутренней ПЗУ. Обновление микрокода заполняет отдельную SRAM и набор «регистров соответствия», которые действуют как точки останова в ПЗУ микрокода, чтобы позволить переходить к обновленному списку микрокода. -операции в SRAM. Сопоставление выполняется между указателем инструкции микрокода (UIP) и всеми регистрами сопоставления, при этом любое сопоставление приводит к переходу к соответствующему адресу микрокода назначения. В исходной архитектуре P6 есть место в SRAM для 60 микроопераций и нескольких пар регистров соответствия / назначения. Для перехода от микрокода ПЗУ к исправленному микрокоду, хранящемуся в SRAM, требуется один цикл процессора . Регистры сопоставления состоят из адреса сопоставления микрокода и адреса назначения микрокода.

Процессор должен находиться в кольце защиты ноль («кольцо 0»), чтобы инициировать обновление микрокода. Каждый ЦП в схеме симметричной многопроцессорной обработки необходимо обновлять индивидуально.

Обновление инициируется помещением его адреса в регистр eax, установка ecx = 0x79и выполнение wrmsr(Запись регистра для конкретной модели ).

Формат обновления микрокода

Intel распространяет обновления микрокода в виде 2048 (2 килобайта) двоичных файлов. blob. Обновление содержит информацию о том, для каких процессоров оно предназначено, чтобы это можно было проверить по результату инструкции CPUID. Структура представляет собой 48-байтовый заголовок, за которым следуют 2000 байтов. предназначен для непосредственного чтения процессором для обновления:

  1. программа микрокода, которая выполняется процессором во время процесса обновления микрокода. Этот микрокод может реконфигурировать и включать или отключать компоненты с помощью специального регистра, и он должен обновляться регистры совпадения точек останова.
  2. до шестидесяти исправленных микроопераций, которые должны быть заполнены в SRAM.
  3. заполнение состоит из g случайных значений предназначены для затруднения понимания формата обновления микрокода.

Каждый блок кодируется по-разному, и большая часть из 2000 байтов не используется в качестве программы конфигурации, а содержимое самих микропрограмм SRAM намного меньше. Окончательное определение и проверка того, можно ли применить обновление к процессору, выполняется во время дешифрования через процессор. Каждое обновление микрокода зависит от конкретной версии ЦП и предназначено для отклонения ЦП с другим степпинговым уровнем. Обновления микрокода зашифрованы для предотвращения взлома и для обеспечения возможности проверки.

В Pentium есть два уровня шифрования, и точные детали явно не документируются Intel, а известны только менее чем десяти сотрудникам.

Обновления микрокода для Intel Atom, Nehalem и Sandy Bridge дополнительно содержат дополнительный 520-байтовый заголовок, содержащий 2048-битный RSA модуль с показателем степени 17.

Наблюдаемая длина блока данных микрокода Intel (в байтах)
МикроархитектураПримеры процессоровПоставляемая длинаФункциональная длинаПредполагаемая кодировка
P6Pentium Pro2000864; 872; 944; 196864-битный блочный шифр
CorePIII… Core 240483096
NetburstP4, Pentium D, Celeron2000–71202000 + N * 1024блочный шифр с цепочкой
Atom, Nehalem, Sandy BridgeCore i3 / i5 / i7976–16336976 + N * 1024; 5120Подпись AES + RSA
Отладка

Может быть загружен специальный микрокод для отладки, чтобы включить расширенную трассировку выполнения, которая затем выводит дополнительную информацию через выводы монитора точки останова. На Pentium 4 загрузка специального микрокода может дать доступ к режиму Microcode Extended Execution Trace. При использовании JTAG тестового порта доступа (TAP) пара регистров контроля точки останова позволяет взламывать адреса микрокода.

В середине 1980-х NEC и Intel имели давнишнее дело федерального суда США об авторском праве на микрокод. NEC выступала в качестве второго источника для процессоров Intel 8086 со своим NEC μPD8086 и имела долгосрочные соглашения о перекрестном лицензировании патентов и авторских прав с Intel. В августе 1982 года Intel подала в суд на NEC за нарушение авторских прав на реализацию микрокода. NEC одержала победу, продемонстрировав с помощью разработки программного обеспечения для чистых помещений, что сходство в реализации микрокода на процессорах V20 и V30 было результатом ограничений, установленных архитектурой, а не копированием.

Intel 386 может выполнять встроенное самотестирование микрокода и массивов программируемой логики, при этом значение самотестирования помещается в регистр EAX. Во время BIST счетчик микропрограмм повторно используется для обхода всех ПЗУ с сопоставлением результатов через сеть регистров сигнатур с множеством входов (MISR) и регистров сдвига с линейной обратной связью. При запуске Intel 486 аппаратно-управляемый BIST работает в течение 2 тактовых циклов для проверки различных массивов, включая ПЗУ микрокода, после чего управление передается микрокоду для дальнейшего самотестирования регистров и вычислений. единицы. ПЗУ с микрокодом Intel 486 содержит 250 000 транзисторов.

AMD заключила долгосрочный контракт на повторное использование микрокода Intel 286, 386 и 486. В октябре 2004 года суд постановил, что соглашение не распространяется на распространение AMD микрокода Intel 486 внутрисхемной эмуляции (ICE).

Тестирование прямого доступа

Тестирование прямого доступа (DAT) входит в состав ЦП Intel как часть проекта для тестирования (DFT) и инициатив Design for Debug (DFD), позволяющих полностью тестировать отдельные ЦП перед продажей.

В В мае 2020 года сценарий, считываемый непосредственно из шины регистров управления (CRBUS) (после использования «красной разблокировки» в JTAG USB-A to USB-A 3.0 с возможностями отладки, без D +, D- и Vcc) использовался для чтения из Были прочитаны порт тестирования локального прямого доступа (LDAT) процессора Intel Goldmont и загруженный микрокод и массивы исправлений. Эти массивы доступны только после того, как CPU был переведен в определенный режим, и состоят из пяти массивов, доступ к которым осуществляется через смещение 0x6a0:

  1. ROM: триады микрокода
  2. ROM: константы микрокода
  3. RAM : Константы микрокода (обновляемый)
  4. RAM: пары Match / Patch (обновляемый)
  5. RAM: триады микрокода (обновляемый)
Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-24 03:58:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте