Микрокод Intel - это микрокод, который выполняется внутри Процессоры x86 производства Intel. Поскольку микроархитектура P6 была представлена в середине 1990-х годов, программы микрокода могут быть исправлены операционной системой или BIOS прошивкой для обхода ошибок, обнаруженных в ЦП после выпуск. Первоначально Intel разработала обновления микрокода для отладки процессора в рамках инициативы для тестирования (DFT).
После ошибки Pentium FDIV функция исправления микрокода получила более широкое распространение. Цель - обеспечить обновление в полевых условиях без необходимости отзыва продукта.
В микроархитектурах P6 и более поздних версиях списки инструкций x86 внутренне преобразованы в более простые RISC - стиль микрооперации, относящиеся к конкретному процессору и ступенчатому уровню.
На 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 | микро- операции |
---|---|---|
обычный | простой декодер × 3 | 1–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 байтов. предназначен для непосредственного чтения процессором для обновления:
Каждый блок кодируется по-разному, и большая часть из 2000 байтов не используется в качестве программы конфигурации, а содержимое самих микропрограмм SRAM намного меньше. Окончательное определение и проверка того, можно ли применить обновление к процессору, выполняется во время дешифрования через процессор. Каждое обновление микрокода зависит от конкретной версии ЦП и предназначено для отклонения ЦП с другим степпинговым уровнем. Обновления микрокода зашифрованы для предотвращения взлома и для обеспечения возможности проверки.
В Pentium есть два уровня шифрования, и точные детали явно не документируются Intel, а известны только менее чем десяти сотрудникам.
Обновления микрокода для Intel Atom, Nehalem и Sandy Bridge дополнительно содержат дополнительный 520-байтовый заголовок, содержащий 2048-битный RSA модуль с показателем степени 17.
Микроархитектура | Примеры процессоров | Поставляемая длина | Функциональная длина | Предполагаемая кодировка |
---|---|---|---|---|
P6 | Pentium Pro | 2000 | 864; 872; 944; 1968 | 64-битный блочный шифр |
Core | PIII… Core 2 | 4048 | 3096 | |
Netburst | P4, Pentium D, Celeron | 2000–7120 | 2000 + N * 1024 | блочный шифр с цепочкой |
Atom, Nehalem, Sandy Bridge | Core i3 / i5 / i7 | 976–16336 | 976 + 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: