Микрокод Intel — это микрокод , работающий внутри процессоров x86 , производимых Intel . Начиная с микроархитектуры P6 , представленной в середине 1990-х годов, программы микрокода могут быть исправлены операционной системой или прошивкой BIOS для обхода ошибок, обнаруженных в процессоре после выпуска. [1] Изначально Intel разрабатывала обновления микрокода для отладки процессора в рамках своей инициативы Design for Testing (DFT). [2]
После ошибки Pentium FDIV функция исправления микрокода приобрела более широкое применение, позволяя проводить обновление на месте без необходимости отзыва продукта . [1]
В микроархитектуре P6 и более поздних версиях инструкции x86 внутренне преобразуются в более простые микрооперации в стиле RISC , специфичные для конкретного процессора и уровня степпинга . [1]
В Intel 80486 и AMD Am486 имеется около 5000 строк микрокода сборки, что в общей сложности составляет около 240 Кбит, хранящихся в ПЗУ микрокода . [3]
Начиная с Pentium Pro, в большинстве процессоров Intel x86 инструкции преобразуются блоком выборки и декодирования инструкций в последовательности микроопераций, специфичных для процессора, которые непосредственно выполняются процессором. Для инструкций, которые реализованы в микрокоде, микрокод состоит из микроопераций, выбранных из памяти на кристалле. [4]
В Pentium Pro каждая микрооперация имеет ширину 72 бита, [5] : 43 или 118 бит. [6] : 2 [7] : 14 Это включает в себя код операции, два исходных поля и одно поле назначения, [8] : 7 с возможностью хранения 32-битного непосредственного значения. [6] [7] : 14 Pentium Pro способен обнаруживать ошибки четности во внутреннем ПЗУ микрокода и сообщать о них через архитектуру проверки машины . [9]
Микрооперации имеют согласованный формат с тремя исходными входами и двумя выходами назначения. [10] Процессор выполняет переименование регистров для сопоставления этих входов с реальным файлом регистров (RRF) до и после их выполнения. [10] Используется неупорядоченное выполнение , поэтому микрооперации и инструкции, которые они представляют, могут появляться в разном порядке.
Во время разработки Pentium Pro было включено несколько исправлений микрокода между степпингами A2 и B0. [11] Для Pentium II (на базе Pentium Pro P6) были добавлены дополнительные микрооперации для поддержки набора инструкций MMX . [12] В нескольких случаях были добавлены «помощники микрокода» для надежной обработки редких особых случаев. [12]
Pentium 4 может одновременно выполнять 126 микроопераций. [13] : 10 Микрооперации декодируются и сохраняются в кэше трассировки выполнения с 12 000 записей, чтобы избежать повторного декодирования одних и тех же инструкций x86. [13] : 5 Группы из шести микроопераций упаковываются в строку трассировки. [13] : 5 Микрооперации могут занимать дополнительное пространство непосредственных данных в пределах одной строки кэша. [14] : 49 Сложные инструкции, такие как обработка исключений, приводят к переходу в ПЗУ микрокода. [13] : 6 Во время разработки Pentium 4 микрокод составлял 14% ошибок процессора по сравнению с 30% ошибок процессора во время разработки Pentium Pro. [15] : 35
Микроархитектура Intel Core, представленная в 2006 году, добавила « слияние макроопераций » для некоторых общих пар инструкций, включая сравнение с последующим переходом. [16] Декодеры инструкций в Core преобразуют инструкции x86 в микрокод тремя различными способами:
Для реализации гиперпоточности Intel с одновременной многопоточностью ПЗУ микрокода, кэш трассировки и декодеры инструкций являются общими, но очередь микроопераций не является общей. [17]
В середине 1990-х годов средство для поставки нового микрокода изначально называлось Pentium Pro BIOS Update Feature . [18] [19] Предполагалось, что приложения пользовательского режима должны будут вызывать прерывание BIOS для поставки нового «блока данных обновления BIOS», который BIOS частично проверит и сохранит в энергонезависимой памяти BIOS ; он может быть предоставлен установленным процессорам при следующей загрузке. [18]
Intel распространяла программу под названием BUP_UTIL.EXE
, переименованную в CHECKUP3.EXE
, которая могла работать под DOS . Коллекции нескольких обновлений микрокода были объединены вместе и пронумерованы с расширением .PDB
, например PEP6.PDB
. [20] : 79
Процессор загружается с использованием набора микрокода, хранящегося внутри процессора и хранящегося во внутреннем ПЗУ . [1] Обновление микрокода заполняет отдельную SRAM и набор «регистров соответствия», которые действуют как точки останова в ПЗУ микрокода, чтобы разрешить переход к обновленному списку микроопераций в SRAM. [1] Соответствие выполняется между указателем инструкций микрокода (UIP) всех регистров соответствия, при этом любое соответствие приводит к переходу к соответствующему адресу назначения микрокода. [2] : 3 В исходной архитектуре P6 в SRAM есть место для 60 микроопераций и нескольких пар регистров соответствия/назначения. [1] [2] : 3 Для перехода от микрокода ПЗУ к исправленному микрокоду, хранящемуся в SRAM, требуется один цикл инструкций процессора. [1] Регистры соответствия состоят из адреса соответствия микрокода и адреса назначения микрокода. [21]
Процессор должен находиться в нулевом кольце защиты (« кольцо 0 »), чтобы инициировать обновление микрокода. [21] : 1 Каждый ЦП в симметричной многопроцессорной схеме должен обновляться индивидуально. [21] : 1
Обновление инициируется путем помещения его адреса в eax
регистр, установки ecx = 0x79
и выполнения wrmsr
(Запись регистра, специфичного для модели ). [22] : 435
Intel распространяет обновления микрокода в виде двоичного блока размером 2048 (2 килобайта) . [1] Обновление содержит информацию о том, для каких процессоров оно предназначено, чтобы ее можно было проверить по результату инструкции CPUID . [1] Структура представляет собой 48-байтовый заголовок, за которым следуют 2000 байт, предназначенных для непосредственного чтения процессором, подлежащим обновлению: [1]
Каждый блок кодируется по-разному, и большинство из 2000 байт не используются в качестве программы конфигурации, а содержимое микроопераций SRAM само по себе намного меньше. [1] Окончательное определение и проверка того, может ли обновление быть применено к процессору, выполняется во время расшифровки через процессор. [18] Каждое обновление микрокода специфично для конкретной версии ЦП и разработано так, чтобы быть отклоненным ЦП с другим уровнем степпинга . Обновления микрокода зашифрованы для предотвращения несанкционированного доступа и для обеспечения проверки. [23]
В Pentium используется два уровня шифрования, а точные детали явно не документируются Intel, а известны лишь менее чем десяти сотрудникам. [24]
Обновления микрокода для Intel Atom , Nehalem и Sandy Bridge дополнительно содержат дополнительный 520-байтовый заголовок, содержащий 2048-битный модуль RSA с показателем 17 после запятой. [21] : 7, 8
Специальный микрокод, предназначенный для отладки, может быть загружен для включения Extended Execution Trace, который затем выводит дополнительную информацию через выводы Breakpoint Monitor. [25] На Pentium 4 загрузка специального микрокода может предоставить доступ к режиму Microcode Extended Execution Trace. [25] При использовании порта JTAG Test Access Port (TAP) пара регистров Breakpoint Control позволяет выполнять остановку по адресам микрокода. [25]
В середине 1980-х годов NEC и Intel вели длительное судебное разбирательство в федеральном суде США по поводу авторских прав на микрокод. [26] NEC выступала в качестве второго источника для процессоров Intel 8086 со своим NEC μPD8086 и имела долгосрочные соглашения о кросс-лицензионных отношениях с Intel. В августе 1982 года Intel подала в суд на NEC за нарушение авторских прав на реализацию микрокода. [27] [28] NEC одержала победу, продемонстрировав с помощью разработки программного обеспечения в чистых помещениях , что сходство в реализации микрокода на ее процессорах V20 и V30 было результатом ограничений, требуемых архитектурой, а не путем копирования. [26]
Intel 386 может выполнять встроенную самопроверку микрокода и программируемых логических массивов , при этом значение самопроверки помещается в EAX
регистр. [29] Во время BIST счетчик микропрограмм повторно используется для прохода по всем ПЗУ, а результаты сопоставляются с помощью сети регистров подписи с несколькими входами (MISR) и регистров сдвига с линейной обратной связью. [30] При запуске Intel 486 аппаратно-управляемый BIST работает в течение 220 тактов для проверки различных массивов, включая ПЗУ микрокода, после чего управление передается микрокоду для дальнейшего самотестирования регистров и вычислительных блоков. [31] ПЗУ микрокода Intel 486 имеет 250 000 транзисторов. [31]
У AMD был долгосрочный контракт на повторное использование микрокодов Intel 286, 386 и 486. [32] В октябре 2004 года суд постановил, что соглашение не распространяется на распространение AMD микрокода внутрисхемной эмуляции (ICE) Intel 486. [32]
Тестирование прямого доступа (DAT) включено в процессоры Intel как часть инициатив проектирования для тестирования (DFT), а проектирование для отладки (DFD) позволяет проводить полное тестирование отдельных процессоров перед продажей. [33]
В мае 2020 года скрипт, считывающий данные напрямую с шины регистра управления (CRBUS) [34] (после эксплуатации «Red Unlock» в JTAG USB-A to USB-A 3.0 с возможностями отладки, без D+, D− и Vcc [35] ), использовался для чтения с порта локального теста прямого доступа (LDAT) процессора Intel Goldmont , и были считаны загруженные массивы микрокода и исправлений. [36] Эти массивы доступны только после того, как процессор переведен в определенный режим, и состоят из пяти массивов, доступ к которым осуществляется через смещение 0x6a0: [37]
Intel реализовала возможность исправления микрокода в своих процессорах P6 , включая Pentium Pro и Pentium II … позволяет изменять микрокод после изготовления процессора, исправляя ошибки, обнаруженные после его проектирования. … изначально предполагалось, что эта функция будет использоваться только для отладки, но после решения проблемы с ошибкой FDIV в Pentium … Intel решила сделать ее пригодной для использования в полевых условиях. … Микросхема P6 содержит полный набор микрокода во внутреннем ПЗУ … BIOS записывает адрес памяти в специальный регистр ЦП, чтобы запустить последовательность загрузки … Процессоры P6 содержат небольшую SRAM , которая содержит до 60 микроинструкций. Код исправления загружается в эту SRAM … также содержит набор регистров «соответствия», которые вызывают ловушку при обнаружении определенного адреса микрокода. (Это похоже на возможность « точки останова инструкции », используемую для отладки ассемблерного кода .) Эта ловушка, обработка которой занимает один цикл, направляет выполнение микрокода в ОЗУ исправления. … загруженный микрокод состоит из двух сегментов. … первый — это процедура инициализации, которая запускается немедленно … также инициализирует регистры соответствия, если необходимо. … второй сегмент содержит один или несколько патчей, которые остаются в ОЗУ исправления во время нормальной работы и доступны через ловушку регистра соответствия. … исходный микрокод хранится в ПЗУ, … регистры соответствия позволяют изменять работу микрокода. Таким образом, инструкция x86 , которая работает неправильно, может быть исправлена, если она реализована в микрокоде. … создается патч для замены раздела исходного микрокода, выполняя правильную операцию, а затем возвращаясь назад. … количество регистров соответствия, … более одного. … одиночная ошибка, … может потребовать нескольких исправлений, а некоторые ошибки слишком сложны для исправления … механизм может позволить исправить несколько ошибок, … функции процессора P6 могут быть отключены с помощью специального регистра … 2048-байтовый блок данных. Блок содержит 48-байтовый заголовок, который включает код даты, идентификатор ЦП (который включает уровень степпинга) целевого процессора и контрольная сумма — и 2000 байт данных, которые должны быть загружены процессором. … контрольная сумма … не используется ЦП. … 2000 байт данных зашифрованы таким образом, что, по утверждению Intel, их будет крайне сложно взломать. Байты делятся на блоки различной длины, каждый из которых кодируется по-разному. … обычно намного меньше 2000 байт, остальные данные представляют собой случайный шум, призванный сбить с толку любого, кто попытается взломать шифрование. … Intel не опубликовала никакой информации о формате своего микрокода, … намеренно разработан таким образом, чтобы его было трудно понять. Только небольшое количество сотрудников Intel знают форматы микрокода P6.
Микропроцессор Pentium Pro ... Функция микропатчинга
DFT
. ... состоит из двух ключевых элементов: ОЗУ микрокода и нескольких пар регистров соответствия и назначения. ... Указатель инструкции микрокода (UIP) совпадает с содержимым регистра соответствия, UIP будет перезагружен новым адресом из регистра назначения. ...
UIP
для подпрограммы сброса можно установить в регистре соответствия ... тем самым полностью обходя подпрограмму сброса.
Двенадцать контактов связаны со схемой «ICE». … AMD 486DXL и DXLV соединяют три контакта, связанных с «
ICE
», для реализации функции «
SMM
». … 250 строк или 12 032 бит микрокода «ICE» в
486.
«
ICE
» составляет около пяти процентов от общего количества микрокода 486. … две строки … (используются для установки режима «
ICE
» «
триггер
») … синие закодированные строки микрокода связаны с производственным тестированием и не используются для целей, связанных с «
ICE
». … Семьдесят пять красных кодированных линий были использованы Intel для выполнения "
SMM
" в 486SL, функции спецификации этой версии чипа. Около 32 желтых кодированных линий выполняют рутинные операции, которые не являются уникальными для "ICE". Около двух линий остаются выделенными исключительно для "ICE".
Сложные инструкции 80x86 выполняются обычной микропрограммой (
8K
x 72 бит), которая выдает длинные последовательности микроопераций
P6 uops имеют фиксированную длину 118 бит, используя обычную структуру для кодирования операции, два источника и назначение. Поля источника и назначения достаточно широки, чтобы содержать 32-битный операнд.
Каждый uop имеет фиксированный формат около 118 бит … – код операции, два источника и назначение … – поля источников и назначения имеют ширину 32 бита для хранения немедленного или операнда
Микрооперации являются атомарной единицей работы в процессоре P6 и состоят из кода операции, двух исходных и одного целевого операнда. Эти микрооперации имеют фиксированную длину и являются более общими, чем микрокод процессора Pentium(R), поскольку их необходимо планировать.
уникальные коды указывают на глобальную информацию об ошибке … Ошибка четности ПЗУ микрокода
{{cite report}}
: CS1 maint: неподходящий URL ( ссылка )«
CISC
»
inst
разбит на один или несколько
uops
… Каноническое представление
src
/
dest
(3
src
, 2
dest
) … например,
становится
…
ID
: Преобразование инструкций в
uops
. Буферы до 6
uops
…
Alloc
&
RAT
… возможность обработки до 3
uops
за такт … Резервирование станции (RS) … Пул всех «еще не выполненных»
uops
(до 20) … По порядку Изъятие: … Изъятие до 3
uops
за такт …
OOO
Cluster … Выбирается
до 5 готовых к ресурсам
uops и отправляется за такт
pop eax
esp1<-esp0+4, eax1<-[esp0]
Степпинг B0 включает несколько ошибок микрокода и исправления путей скорости для проблем, обнаруженных на кремнии A-step
Микроархитектура процессора Pentium II похожа на микропроцессор Pentium Pro … модифицирована для преобразования новых инструкций
MMX
в uops, специфичные для процессора Pentium Pro (для реализации новой функциональности были добавлены новые uops Single Instruction Multiple Data [SIMD]). … Была создана помощь с микрокодом для исправления проблемы и повторного выполнения операции. Помощь — это невидимое для пользователя событие, которое очищает машину и позволяет микрокоду обрабатывать редкие, но сложные для обработки проблемы. Поскольку все инструкции MMX обнуляют TOS
,
помощь должна записать
TOS
в ноль и перезапустить операцию. … Недопустимые коды операций, которые являются дырами в инструкциях в карте кодов операций MMX, определены для генерации вызова помощи с одним uop. Этот вызов помощи инструктирует ROB очистить машину и вызывает поток микрокода помощи, чтобы заставить процессор обрабатывать ошибки недопустимых кодов операций.
Байты инструкций IA-32 затем декодируются в базовые операции, называемые микрооперациями (uops) … расширенная форма кэша инструкций уровня 1 (L1), называемая кэшем трассировки выполнения … между логикой декодирования инструкций и ядром выполнения … для хранения уже декодированных … uops. … инструкции декодируются один раз … затем используются повторно оттуда … имеет емкость для хранения до 12 тыс. uops … аналогичная частота попаданий для обычного кэша инструкций объемом от 8 до 16 тыс. байт. … упаковывает мопы в группы по шесть мопов на линию трассировки … микрокод ROM … для сложных инструкций IA-32, таких как перемещение строки, а также для обработки сбоев и прерываний … Кэш трассировки переходит в микрокод ROM, который затем выдает мопы … После того, как микрокод ROM заканчивает упорядочивание мопов … передняя часть машины возобновляет выборку мопов из кэша трассировки. … глубокая буферизация процессора Pentium 4 (126 мопов и 48 загрузок в процессе)
… Если μop имеет непосредственный 32-битный операнд за пределами интервала ±2
15,
так что он не может быть представлен как 16-битное знаковое целое число, то он будет использовать две записи кэша трассировки, если только он не сможет занять место в памяти у соседнего μop. … μop, которому требуется дополнительное место в памяти, может занять 16 бит дополнительного места в памяти у соседнего μop, которому не нужно собственное пространство данных.
Обсуждение ошибок
ядра оснащена четырьмя декодерами x86, 3 простыми декодерами и 1 сложным декодером … для преобразования инструкций x86 переменной длины длиной от 1 до 15 байт в … инструкции типа RISC фиксированной длины (называемые микрооперациями). … общие инструкции x86 преобразуются в одну микрооперацию … сложный декодер отвечает за инструкции, которые производят до 4 микроопераций. … действительно длинные и сложные инструкции x86 обрабатываются секвенсором микрокода. … слияние макроопераций … инструкция сравнения x86 (
) слита с переходом (
).
CMP
JNE TARG
Кэш трассировки L1: 12 тыс. микроопераций, 8-канальная ассоциативная, 6 микроопераций на строку … Общий: кэш трассировки, … Декодирование инструкций
IA-32
, ПЗУ микрокода, логика прекращения работы
Uop
, … Разделенный: очередь Uop
аутентификации основана на расшифровке, предоставляемой процессором для проверки обновления из потенциально враждебных источников.
Степпинги процессора (ревизии) и версии обновления микрокода, поддерживаемые файлом базы данных обновлений PEP6.PDB … Используя утилиту обновления процессора (CHECKUP3.EXE), … можно легко проверить … правильность обновления микрокода
привилегии супервизора (ноль кольца) требуются для обновления микрокода процессора … С 1970-х годов производители процессоров декодировали x86 … в последовательность … (RISC) микроопераций (uops) … ввели перезаписываемую патч-память, чтобы обеспечить механизм обновления для реализации возможностей динамической отладки и исправления ошибок процессора, особенно после печально известной
ошибки Pentium FDIV
1994 года. … микроархитектура P6 (Pentium Pro) в 1995 году, …
микроархитектура K7
в 1999 году … с
симметричной многопроцессорной обработкой
(SMP) … должны выполняться синхронно на каждом логическом процессоре … патч-ОЗУ в дополнение к
MROM
… до 60 микроинструкций, с патчем, реализованным парами регистров соответствия и назначения. … 520-байтовый блок, содержащий 2048-битный модуль RSA, который, по-видимому, является постоянным в каждом семействе процессоров. За ним следует четырехбайтовая экспонента RSA с фиксированным значением 11h
малоизвестное прозвище «Функция обновления BIOS». … «Каждое обновление BIOS предназначено для определенного степпинга [процессора]», … блок данных напрямую сопоставляется с самим микрокодом — … после расшифровки.
Аджай Малхортра, технический менеджер по маркетингу, работающий в группе микропроцессоров Intel. «Зашифрован не только блок данных, содержащий исправление микрокода, но и после того, как процессор проверит заголовок обновления BIOS, в процессоре должно быть выполнено два уровня шифрования, прежде чем он успешно загрузит обновление». … строго охраняемый секрет. «Нет никакой документации», — сказал Фрэнк Биннс, архитектор в группе микропроцессоров Intel. «Нельзя получить «Красную книгу» Intel с этими записями. На самом деле это в головах менее 10 человек во всей Intel».
выдает пакет через
BPM
при выполнении специальных инструкций … Чтобы включить расширенную трассировку выполнения, необходимо применить специальные исправления микрокода … Только для Pentium 4 существует второй тип … называемый расширенной трассировкой выполнения микрокода … Шина регистра управления, в свою очередь, обеспечивает доступ к внутренним массивам и функциям процессора, таким как доступ к
LLC
и микрокоду/
виртуальному ППЗУ Fuse
. … который находится на корпусе ЦП, но не находится внутри кремниевого кристалла ЦП. Этот ППЗУ также содержит микрокод, который ЦП загружает во время холодной загрузки. … точка останова на 48-битном адресе микрокода … доступ к которому осуществляется с помощью
команд
TAP
BRKPTCTLA
и
BRKPTCTLB
.
Использование компанией NEC своих
процедур "чистой комнаты
" в качестве доказательств в суде…
Судья Грей
определил микрокод… в рамках определения "компьютерной программы" в Законе об авторском праве… Микрокод Intel защищен авторским правом. … Микрокод Intel не содержал требуемого уведомления об авторских правах. … авторские права были утрачены. … У Intel не осталось никаких оснований для иска о копировании
Приложение: Форматы микрокода; Формат
8086/8088
; Формат
V20
/V30
самотестирование проверяет функционирование всего ПЗУ управления … Регистр EAX будет содержать сигнатуру 00000000h, указывающую на то, что Intel386 DX прошел самотестирование микрокода и основного
содержимого
PLA
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )Для ПЗУ шаблоны генерируются счетчиком микропрограмм, который является частью обычной логики.
В решении федерального окружного суда в Сан-Хосе, Калифорния, говорится, что AMD не имеет права использовать код
внутрисхемной эмуляции
(ICE) Intel в микропроцессорах AMD. Этот код присутствует во всех процессорах AMD 486, но используется только в маломощных процессорах 486-DXL и 486-DXLV. … AMD начала перерабатывать всю свою линейку 486, чтобы устранить этот код.
Тестирование прямого доступа (DAT) для доступа к массиву и диагностики и режим тестирования программируемой слабой записи (PWWTM) для тестирования стабильности ячеек памяти с целью сокращения времени тестирования. … Стратегия тестирования
DFT
массива заключается в использовании PBIST (программируемого встроенного самотестирования) для тестирования кэша второго уровня и использования DAT для тестирования оставшихся массивов … PBIST доступен через контроллер JTAG TAP. … Режим DAT в PX, как показано на рисунке 4 … PX имеет больше массивов (>110) … охват тестирования массива PX составляет 99,3% ‒ самый высокий в семействе Pentium 4
PDAT CR: 0x6A0; Array Select: 0‒4
ucode.c
драйвер) . XNU . Получено 24 января 2018 г.#define IA32_BIOS_UPDT_TRIG (0x79) /* microcode update trigger MSR */