stringtranslate.com

Микрокод

В конструкции процессора микрокод служит промежуточным слоем, расположенным между аппаратным обеспечением центрального процессора (ЦП) и видимой программисту архитектурой набора команд компьютера, также известной как его машинный код . [1] [ нужна страница ] Он состоит из набора инструкций аппаратного уровня, которые реализуют инструкции машинного кода более высокого уровня или управляют внутренней последовательностью конечных автоматов во многих компонентах цифровой обработки . Хотя микрокод используется в процессорах общего назначения в современных настольных компьютерах, он также действует как запасной путь для сценариев, с которыми более быстрый проводной блок управления не может справиться. [2]

Размещенный в специальной высокоскоростной памяти, микрокод преобразует машинные инструкции, данные конечного автомата или другие входные данные в последовательности детальных операций на уровне схемы. Он отделяет машинные инструкции от базовой электроники , тем самым обеспечивая большую гибкость при разработке и изменении инструкций. Более того, это облегчает построение сложных многошаговых инструкций, одновременно снижая сложность компьютерных схем. Процесс написания микрокода часто называют микропрограммированием , а микрокод в конкретной реализации процессора иногда называют микропрограммой .

Благодаря обширному микропрограммированию микроархитектуры меньшего масштаба и простоты могут эмулировать более надежные архитектуры с большей длиной слова , дополнительными исполнительными блоками и т. д. Этот подход обеспечивает относительно простой метод обеспечения совместимости программного обеспечения между различными продуктами внутри семейства процессоров.

Некоторые производители оборудования, особенно IBM / Lenovo , используют термин «микрокод» как синоним «прошивки» . В этом контексте весь код внутри устройства называется микрокодом, будь то микрокод или машинный код. Например, обновления микрокода жесткого диска часто включают обновления как его микрокода, так и встроенного ПО. [3]

Обзор

Наборы инструкций

На аппаратном уровне процессоры содержат ряд отдельных областей схемы или «блоков», выполняющих различные задачи. Обычно встречающиеся блоки включают арифметико-логическое устройство (АЛУ), которое выполняет такие инструкции, как сложение или сравнение двух чисел, схемы для чтения и записи данных во внешнюю память, а также небольшие области встроенной памяти для хранения этих значений во время их обработки. В большинстве проектов дополнительная высокопроизводительная память — файл регистров — используется для хранения временных значений, а не только тех, которые необходимы текущей инструкции. [4]

Чтобы правильно выполнить команду, различные схемы должны быть активированы по порядку. Например, невозможно сложить два числа, если они еще не загружены из памяти. В проектах RISC правильный порядок этих инструкций во многом зависит от программиста или, по крайней мере, от компилятора языка программирования, который они используют. Например, чтобы сложить два числа, компилятор может вывести инструкции по загрузке одного значения в один регистр, второго в другой, вызвать функцию сложения в АЛУ, а затем записать результат обратно в память. [4]

Поскольку последовательность инструкций, необходимая для реализации концепции более высокого уровня «добавить эти два числа в память», может потребовать нескольких инструкций, это может представлять собой узкое место в производительности, если эти инструкции хранятся в основной памяти . Чтение этих инструкций одна за другой отнимает время, которое можно было бы использовать для чтения и записи реальных данных. По этой причине в проектах, не относящихся к RISC, обычно имеется множество различных инструкций, которые сильно различаются в зависимости от того, где они хранят данные. Например, MOS 6502 имеет восемь вариантов инструкции сложения, ADCкоторые отличаются только тем, где они ищут два операнда. [5]

Использование варианта инструкции или « кода операции », который наиболее точно соответствует конечной операции, может уменьшить количество инструкций до одной, экономя память, используемую программным кодом, и повышая производительность, оставляя шину данных открытой для других операций. Однако внутри эти инструкции представляют собой не отдельные операции, а последовательность операций, которые фактически выполняют блоки. Преобразование одной инструкции, считанной из памяти, в последовательность внутренних действий — обязанность блока управления , другого блока внутри процессора. [6]

Микрокод

Основная идея микрокода заключается в замене специальной логики, реализующей последовательность инструкций, серией простых инструкций, выполняемых в «механизме микрокода» процессора. В то время как пользовательская логическая система может иметь ряд диодов и вентилей, которые выводят ряд напряжений на различные линии управления, вместо этого механизм микрокода подключается к этим линиям, и они включаются и выключаются по мере того, как механизм последовательно считывает инструкции микрокода. . Инструкции микрокода часто закодированы в этих строках, например, если бит 8 истинен, это может означать, что АЛУ следует приостановить ожидание данных. В этом отношении микрокод чем-то похож на рулоны бумаги в пианино , где отверстия показывают, какую клавишу следует нажимать.

Различие между пользовательской логикой и микрокодом может показаться небольшим: один использует схему диодов и вентилей для декодирования инструкций и создания последовательности сигналов, тогда как другой кодирует сигналы как микроинструкции, которые считываются последовательно для получения тех же результатов. Критическое отличие состоит в том, что при разработке собственной логики изменения в отдельных шагах требуют перепроектирования логики. При использовании микрокода все, что меняется, — это код, хранящийся в соответствующем постоянном запоминающем устройстве (ПЗУ). Это значительно упрощает устранение проблем в системе микрокода. Это также означает, что не существует эффективного ограничения сложности инструкций, она ограничена только объемом ПЗУ, который вы готовы использовать.

Самый нижний уровень в стеке программного обеспечения компьютера традиционно представляет собой инструкции необработанного машинного кода для процессора. В процессорах с микрокодированием выборка и декодирование этих инструкций, а также их выполнение могут выполняться с помощью микрокода. Во избежание путаницы каждый элемент, относящийся к микропрограмме, дифференцируется префиксом микро : микроинструкция, микроассемблер, микропрограммист и т . д .

Сложные цифровые процессоры также могут использовать более одного блока управления (возможно, на основе микрокода) для делегирования подзадач, которые должны выполняться по существу асинхронно и параллельно. Например, VAX 9000 имеет блок IBox для выборки и декодирования инструкций, которые он передает микрокодированному блоку EBox для выполнения, [7] , а VAX 8800 имеет как микрокодированный IBox, так и микрокодированный EBox. [8]

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

Дизайн

Инженеры обычно пишут микрокод на этапе проектирования процессора, сохраняя его в постоянной памяти (ПЗУ) или в структуре программируемой логической матрицы (PLA) [9] , или в их комбинации. [10] Однако также существуют машины, в которых часть или весь микрокод хранится в статической оперативной памяти (SRAM) или флэш-памяти . В контексте компьютеров это традиционно обозначается как записываемое хранилище управления , которое может быть либо памятью только для чтения, либо памятью для чтения и записи . В последнем случае процесс инициализации ЦП загружает микрокод в хранилище управления с другого носителя данных с возможностью изменения микрокода для исправления ошибок в наборе команд или для реализации новых машинных инструкций.

Микропрограммы

Микропрограммы состоят из серии микроинструкций, которые управляют ЦП на самом фундаментальном уровне аппаратных схем. Например, одна типичная горизонтальная микроинструкция может определять следующие операции:

Для одновременного управления всеми функциями процессора за один цикл микроинструкция часто имеет длину более 50 бит; например, 128 бит на 360/85 с функцией эмулятора. Микропрограммы тщательно разрабатываются и оптимизируются для максимально быстрого выполнения, поскольку медленная микропрограмма приведет к медленному выполнению машинных инструкций и снижению производительности связанных прикладных программ, использующих такие инструкции.

Обоснование

Микрокод изначально был разработан как более простой метод разработки логики управления компьютером. Первоначально наборы инструкций ЦП были жестко закреплены . Каждый шаг, необходимый для извлечения, декодирования и выполнения машинных инструкций (включая любые вычисления адресов операндов, чтение и запись), контролировался непосредственно комбинационной логикой и довольно минимальной схемой последовательного конечного автомата. Хотя такие аппаратные процессоры были очень эффективными, необходимость в мощных наборах команд с многошаговой адресацией и сложными операциями ( см. ниже ) затрудняла их проектирование и отладку; Этому также могут способствовать сильно закодированные инструкции различной длины, особенно когда используются очень нерегулярные кодировки.

Микрокод упростил работу, позволяя определять большую часть поведения процессора и модели программирования с помощью подпрограмм микропрограмм, а не с помощью специальных схем. Даже на поздних стадиях процесса проектирования микрокод можно было легко изменить, тогда как вносить изменения в аппаратные конструкции ЦП было очень сложно. Таким образом, это значительно облегчило проектирование ЦП.

С 1940-х до конца 1970-х большая часть программирования выполнялась на языке ассемблера ; Инструкции более высокого уровня означают большую производительность программиста, поэтому важным преимуществом микрокода была относительная простота определения мощных машинных инструкций. Окончательным расширением этого подхода являются конструкции «непосредственно исполняемого языка высокого уровня», в которых каждый оператор языка высокого уровня, такого как PL/I , полностью и напрямую выполняется микрокодом без компиляции. Проект IBM Future Systems и процессор Data General Fountainhead являются примерами этого. В 1970-х годах скорость процессора росла быстрее, чем скорость памяти, и для облегчения этого использовались многочисленные методы, такие как передача блоков памяти , предварительная выборка памяти и многоуровневое кэширование . Машинные инструкции высокого уровня, ставшие возможными благодаря микрокоду, помогли еще больше, поскольку меньшее количество более сложных машинных инструкций требует меньшей пропускной способности памяти. Например, операцию над строкой символов можно выполнить как одну машинную инструкцию, что позволяет избежать многократной выборки команд.

Архитектуры с наборами команд, реализованными с помощью сложных микропрограмм, включали IBM System/360 и Digital Equipment Corporation VAX . Подход к все более сложным наборам команд, реализованным с помощью микрокода, позже был назван компьютером со сложным набором команд (CISC). Альтернативный подход, используемый во многих микропроцессорах , заключается в использовании одной или нескольких программируемых логических матриц (PLA) или постоянного запоминающего устройства (ROM) (вместо комбинационной логики), главным образом, для декодирования инструкций, и позволить простому конечному автомату (без особого или любой другой микрокод) выполняют большую часть секвенирования. Технология MOS 6502 — это пример микропроцессора, использующего PLA для декодирования и упорядочения инструкций. PLA виден на микрофотографиях чипа [11] , а его работу можно увидеть при моделировании уровня транзистора .

Микропрограммирование до сих пор используется в современных процессорах. В некоторых случаях после отладки микрокода в моделировании хранилище управления заменяется логическими функциями. [ нужна цитация ] Логические функции часто быстрее и дешевле, чем эквивалентная память микропрограмм.

Преимущества

Микропрограммы процессора работают на более примитивной, совершенно иной и гораздо более аппаратно-ориентированной архитектуре, чем ассемблерные инструкции, видимые обычным программистам. В координации с аппаратным обеспечением микрокод реализует видимую программисту архитектуру. Базовое оборудование не обязательно должно иметь фиксированную связь с видимой архитектурой. Это упрощает реализацию заданной архитектуры набора команд на широком спектре базовых аппаратных микроархитектур.

IBM System/360 имеет 32-битную архитектуру с 16 регистрами общего назначения, но в большинстве реализаций System/360 используется аппаратное обеспечение, реализующее гораздо более простую базовую микроархитектуру; например, модель System/360 Model 30 имеет 8-битные пути данных к арифметико-логическому устройству (АЛУ) и основной памяти и реализовала регистры общего назначения в специальном блоке высокоскоростной основной памяти , а модель System/360 40 имеет 8-битные пути данных к АЛУ и 16-битные пути данных к основной памяти, а также реализовал регистры общего назначения в специальном блоке высокоскоростной основной памяти. Модель 50 имеет полные 32-битные каналы данных и реализует регистры общего назначения в специальном блоке высокоскоростной основной памяти. [12] Модели с 65 по 195 имеют более длинные пути передачи данных и реализуют регистры общего назначения в более быстрых транзисторных схемах. [ нужна цитация ] Таким образом, микропрограммирование позволило IBM спроектировать множество моделей System/360 с существенно различным аппаратным обеспечением и охватывать широкий диапазон стоимости и производительности, делая их все архитектурно совместимыми. Это значительно сокращает количество уникальных системных программ, которые необходимо написать для каждой модели.

Похожий подход использовала Digital Equipment Corporation (DEC) в своем семействе компьютеров VAX. В результате разные процессоры VAX используют разные микроархитектуры, но видимая программисту архитектура не меняется.

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

История

Ранние примеры

В 1947 году при разработке MIT Whirlwind была представлена ​​концепция хранилища управления как способ упростить проектирование компьютера и выйти за рамки специальных методов. Хранилище управления представляет собой диодную матрицу : двумерную решетку, одно измерение которой принимает «импульсы времени управления» от внутренних часов ЦП, а другое подключается к управляющим сигналам на вентилях и других схемах. «Распределитель импульсов» принимает импульсы, генерируемые тактовой частотой процессора, и разбивает их на восемь отдельных временных импульсов, каждый из которых активирует отдельный ряд решетки. Когда ряд активирован, он активирует подключенные к нему управляющие сигналы. [13]

В 1951 году Морис Уилкс [14] усовершенствовал эту концепцию, добавив условное выполнение — концепцию, аналогичную условному оператору в компьютерном программном обеспечении. Его первоначальная реализация состояла из пары матриц: первая генерировала сигналы наподобие хранилища управления Whirlwind, а вторая матрица выбирала, какую строку сигналов (так сказать, командное слово микропрограммы) вызывать в следующем цикле. Условные выражения были реализованы путем предоставления возможности, позволяющей одной строке в хранилище элементов управления выбирать одну из альтернатив во второй матрице. Это сделало сигналы управления обусловленными обнаруженным внутренним сигналом. Уилкс ввел термин «микропрограммирование» , чтобы описать эту функцию и отличить ее от простого хранилища элементов управления.

360

Микрокод оставался относительно редким в компьютерном проектировании, поскольку стоимость ПЗУ, необходимого для хранения кода, существенно не отличалась от стоимости использования специального хранилища элементов управления. Ситуация изменилась в начале 1960-х годов с появлением массового производства основной памяти и сердечника , которые были гораздо дешевле, чем специализированная логика, основанная на диодных матрицах или аналогичных решениях. Первой, кто воспользовался этим по-настоящему, была компания IBM, выпустившая в 1964 году серию System/360 . Это позволило машинам иметь очень сложный набор инструкций, включая операции, соответствующие конструкциям языка высокого уровня, такие как форматирование двоичных значений в десятичные строки, хранение сложной серии инструкций, необходимых для этой задачи, в недорогой памяти. [15]

Но реальная ценность линейки 360 заключалась в том, что можно было создать серию машин, совершенно разных внутри, но работающих на одной и той же ISA. Для машины начального уровня можно использовать 8-битное АЛУ, которому требуется несколько циклов для выполнения одного 32-битного сложения, в то время как машина более высокого уровня может иметь полное 32-битное АЛУ, которое выполняет то же самое сложение за один цикл. . Эти различия можно реализовать в логике управления, но стоимость реализации совершенно другого декодера для каждой машины будет непомерно высокой. Использование микрокода означало, что менялся только код в ПЗУ. Например, одна машина может включать в себя модуль с плавающей запятой , и, таким образом, ее микрокод для умножения двух чисел может состоять всего из нескольких строк, тогда как на той же машине без FPU это будет программа, которая делает то же самое, используя несколько сложений, и все изменилось ПЗУ. [15]

Результатом этого проекта стало то, что клиенты могли использовать младшую модель семейства для разработки своего программного обеспечения, зная, что, если когда-либо потребуется большая производительность, они смогут перейти на более быструю версию, и ничего больше не изменится. Это снизило входной барьер, и модель 360 имела ошеломительный успех. К концу десятилетия использование микрокода стало обязательным во всей индустрии мейнфреймов.

Перемещение вверх по линии

Микрокод (и «нанокод») Motorola 68000 хранится в двух больших квадратных блоках в правом верхнем углу и контролируемых схемах справа от него. Он занимает значительную часть общей поверхности чипа.

Ранние миникомпьютеры были слишком простыми, чтобы требовать микрокода, и были больше похожи на более ранние мэйнфреймы с точки зрения набора команд и способа их декодирования. Но вскоре их разработчики начали использовать более мощные интегральные схемы , позволяющие создавать более сложные ISA. К середине 1970-х годов большинство новых миникомпьютеров и суперминикомпьютеров также использовали микрокод, например, большинство моделей PDP -11 и, в первую очередь, большинство моделей VAX , которые включали инструкции высокого уровня, мало чем отличающиеся от тех, что были в 360°. [16 ]

Та же основная эволюция произошла и с микропроцессорами . Ранние конструкции были чрезвычайно простыми, и даже более мощные 8-битные конструкции середины 1970-х годов, такие как Zilog Z80, имели наборы команд, которые были достаточно простыми, чтобы их можно было реализовать в специальной логике. К этому времени логику управления можно было разместить на том же кристалле, что и ЦП, что сделало разницу в стоимости ПЗУ и логики менее серьезной проблемой. Однако вскоре эти компании также столкнулись с проблемой внедрения более производительных разработок, но при этом хотели обеспечить обратную совместимость . Среди первых примеров микрокода в микросхемах был Intel 8086 . [6]

Среди последних реализаций микрокода в микропроцессорах можно назвать Motorola 68000 . Это предлагало высокоортогональный набор команд с широким спектром режимов адресации , все они реализованы в микрокоде. Это не обошлось без затрат: согласно ранним статьям, около 20% площади поверхности чипа (и, следовательно, стоимости) занимает система микрокода. [17] и более поздние оценки показывают, что примерно 23 000 из 68 000 вентилей были частью системы микрокода.

РИСЦ входит

В то время как компании продолжали конкурировать по сложности своих наборов инструкций, а использование микрокода для их реализации не подвергалось сомнению, в середине 1970-х годов внутренний проект в IBM поднял серьезные вопросы относительно всей концепции. В рамках проекта по разработке высокопроизводительного полностью цифрового телефонного коммутатора группа под руководством Джона Кока начала изучать огромные объемы данных о производительности программ 360 (и System/370 ) своих клиентов . Это заставило их заметить любопытную закономерность: когда ISA представляла несколько версий инструкции, компилятор почти всегда использовал самую простую из них, а не ту, которая наиболее точно представляет код. Они узнали, что это происходит потому, что эти инструкции всегда реализуются аппаратно и поэтому выполняются быстрее всего. Использование другой инструкции могло обеспечить более высокую производительность на некоторых машинах, но не было возможности узнать, на какой машине они работают, и это была основная причина использования микрокода, чтобы скрыть эти различия. [18]

Команда пришла к радикальному выводу: «Навязывание микрокода между компьютером и его пользователями приводит к дорогостоящим накладным расходам при выполнении наиболее часто выполняемых инструкций». [18]

Результатом этого открытия стало то, что сегодня известно как концепция RISC . Сложный механизм микрокода и связанное с ним ПЗУ уменьшены или полностью исключены, а вместо этого эти схемы предназначены для таких вещей, как дополнительные регистры или более широкое АЛУ, что повышает производительность каждой программы. Когда необходимы сложные последовательности инструкций, это оставляется на усмотрение компилятора, что, в первую очередь, и является целью использования компилятора. Основная концепция вскоре была подхвачена исследователями из университета Калифорнии, где моделирование показало, что такие конструкции тривиально превосходят даже самые быстрые традиционные конструкции. Именно в одном из таких проектов Калифорнийского университета в Беркли был введен термин RISC.

Индустрия отреагировала на концепцию RISC как с замешательством, так и с враждебностью, включая знаменитую пренебрежительную статью команды VAX в Digital. [19] Основным предметом разногласий было то, что реализация инструкций вне процессора означала, что на чтение этих инструкций из памяти потребуется гораздо больше времени, тем самым замедляя общую производительность, независимо от того, насколько быстро работал сам процессор. [19] Сторонники отметили, что моделирование ясно показало, что количество инструкций ненамного больше, особенно при рассмотрении скомпилированного кода. [18]

Споры бушевали до тех пор, пока во второй половине 1980-х годов не появились первые коммерческие разработки RISC, которые легко превзошли самые сложные разработки других компаний. К концу 1980-х все закончилось; даже DEC отказалась от микрокода в своих разработках DEC Alpha , а процессоры CISC перешли на использование проводных схем, а не микрокода, для выполнения многих функций. Например, Intel 80486 использует проводную схему для выборки и декодирования инструкций, используя микрокод только для выполнения инструкций; Для перемещения регистра-регистра и арифметических инструкций требовалась только одна микроинструкция, что позволяло выполнять их за один такт. [20] Аппаратное обеспечение выборки и декодирования Pentium Pro извлекает инструкции и декодирует их в серии микроопераций, которые передаются исполнительному блоку, который планирует и выполняет микрооперации, возможно, делая это вне очереди . Сложные инструкции реализуются с помощью микрокода, состоящего из заранее определенных последовательностей микроопераций. [21]

В некоторых конструкциях процессоров используется машинный код, который работает в специальном режиме, со специальными инструкциями, доступными только в этом режиме и имеющими доступ к аппаратному обеспечению, зависящему от процессора, для реализации некоторых низкоуровневых функций набора команд. DEC Alpha, чисто RISC-проект, использовал PALcode для реализации таких функций, как обработка пропусков буфера резервного перевода (TLB) и обработка прерываний, [22] а также предоставление для систем на базе Alpha, работающих под управлением OpenVMS , инструкций, требующих взаимосвязанного доступа к памяти, которые аналогичны инструкциям, предоставляемым архитектурой VAX . [22] Процессоры CMOS IBM System/390 , начиная с процессора G4, и процессоры z/Architecture используют милликод для реализации некоторых инструкций. [23]

Примеры

  • «Микропроцессор» B700 выполняет коды операций прикладного уровня, используя последовательности 16-битных микроинструкций, хранящихся в основной памяти; каждая из них представляет собой либо операцию загрузки регистра, либо отображается в одну 56-битную инструкцию «нанокода», хранящуюся в постоянной памяти. Это позволяет сравнительно простому аппаратному обеспечению действовать либо как периферийный контроллер мэйнфрейма, либо быть упакованным как автономный компьютер.
  • B1700 оснащен совершенно другим аппаратным обеспечением, включая поразрядную основную память , но имеет аналогичную многоуровневую организацию. Операционная система предварительно загружает интерпретатор для любого требуемого языка. Эти интерпретаторы представляют разные виртуальные машины для COBOL , Fortran и т. д.

Выполнение

Каждая микроинструкция в микропрограмме предоставляет биты, которые управляют функциональными элементами, входящими в состав ЦП. Преимущество перед проводным ЦП заключается в том, что внутреннее управление ЦП становится специализированной формой компьютерной программы. Таким образом, микрокод преобразует сложную задачу проектирования электроники (управление процессором) в менее сложную задачу программирования. Чтобы воспользоваться этим, процессор разделен на несколько частей:

Также могут быть регистр адреса памяти и регистр данных памяти , используемые для доступа к основной памяти компьютера . Вместе эти элементы образуют « исполнительную единицу ». Большинство современных процессоров имеют несколько исполнительных блоков. Даже простые компьютеры обычно имеют один блок для чтения и записи памяти, а другой — для выполнения пользовательского кода. Эти элементы часто можно было объединить в один чип. Этот чип имеет фиксированную ширину, которая образует «срез» исполнительного блока. Они известны как чипы « битового среза ». Семейство AMD Am2900 является одним из наиболее известных примеров элементов битового среза. [38] Части исполнительных блоков и целые исполнительные блоки соединены между собой пучком проводов, называемым шиной .

Программисты разрабатывают микропрограммы, используя базовые программные инструменты. Микроассемблер позволяет программисту символически определять таблицу битов. Из-за своей тесной связи с базовой архитектурой «микрокод имеет несколько свойств, которые затрудняют его создание с помощью компилятора». [1] Программа-симулятор предназначена для выполнения битов так же, как электроника, и дает гораздо больше свободы при отладке микропрограммы. После того как микропрограмма доработана и тщательно протестирована, ее иногда используют в качестве входных данных для компьютерной программы, которая создает логику для получения тех же данных. [ необходима цитация ] Эта программа аналогична тем, которые используются для оптимизации программируемой логической матрицы . Даже без полностью оптимальной логики эвристически оптимизированная логика может значительно сократить количество транзисторов по сравнению с количеством, необходимым для постоянного запоминающего устройства (ПЗУ). Это снижает стоимость производства и потребление электроэнергии процессором.

Микрокод можно охарактеризовать как горизонтальный или вертикальный , имея в виду, прежде всего, то, управляет ли каждая микроинструкция элементами ЦП с небольшим декодированием или без него (горизонтальный микрокод) [a] или требует перед этим обширного декодирования с помощью комбинаторной логики (вертикальный микрокод). Следовательно, каждая горизонтальная микрокоманда шире (содержит больше битов) и занимает больше места для хранения, чем вертикальная микрокоманда.

Горизонтальный микрокод

«Горизонтальный микрокод имеет несколько дискретных микроопераций, которые объединены в одну микроинструкцию для одновременной работы». [1] Горизонтальный микрокод обычно содержится в довольно широком хранилище управления; каждое слово нередко имеет длину 108 бит и более. На каждом такте часов секвенсора слово микрокода считывается, декодируется и используется для управления функциональными элементами, составляющими ЦП.

В типичной реализации горизонтальное слово микропрограммы состоит из довольно четко определенных групп битов. Например, одна простая схема может быть такой:

Чтобы этот тип микромашины реализовал инструкцию JUMP с адресом, следующим за кодом операции, микрокоду может потребоваться два такта часов. Инженер, разрабатывающий его, писал исходный код микроассемблера примерно так:

 # Любая строка, начинающаяся со знака числа, является комментарием # Это просто метка, обычный способ, которым ассемблеры символически представляют # адрес памяти. ИнструкцияJUMP : # Чтобы подготовиться к следующей инструкции, микрокод декодирования инструкций уже # переместил счетчик программы в регистр адреса памяти. Эта инструкция извлекает # целевой адрес инструкции перехода из слова памяти, следующего # за кодом операции перехода, путем копирования из регистра данных памяти в регистр адреса памяти. # Это дает системе памяти два такта для загрузки следующей # инструкции в регистр данных памяти для использования при декодировании инструкций. # Инструкция секвенсора «следующий» означает простое добавление 1 к адресу управляющего слова. MDR , NONE , MAR , COPY , NEXT , NONE # Это помещает адрес следующей инструкции в ПК. # Это дает системе памяти такт для завершения выборки, начатой ​​# предыдущей микроинструкцией. # Инструкция секвенсора предназначена для перехода к началу декодирования инструкции. MAR , 1 , PC , ADD , JMP , InstructionDecode # Декодирование инструкций не показано, потому что обычно это беспорядок, очень специфичный # для конкретного эмулируемого процессора. Даже этот пример упрощен. # Многие процессоры имеют несколько способов вычисления адреса, а не просто получение # его из слова, следующего за кодом операции. Таким образом, вместо одной инструкции перехода # эти процессоры имеют семейство связанных инструкций перехода.                   

Для каждого тика обычно обнаруживается, что используются только некоторые части ЦП, а остальные группы битов в микроинструкции не выполняются. При тщательном проектировании аппаратного обеспечения и микрокода это свойство можно использовать для распараллеливания операций, использующих различные области ЦП; например, в приведенном выше случае АЛУ не требуется во время первого тика, поэтому потенциально его можно использовать для выполнения более ранней арифметической инструкции.

Вертикальный микрокод

В вертикальном микрокоде каждая микроинструкция существенно кодируется, то есть битовые поля обычно проходят через промежуточную комбинаторную логику, которая, в свою очередь, генерирует сигналы управления и упорядочивания для внутренних элементов ЦП (АЛУ, регистров и т. д.). Это контрастирует с горизонтальным микрокодом, в котором битовые поля либо непосредственно создают сигналы управления и последовательности, либо кодируются лишь минимально. Следовательно, вертикальный микрокод требует меньшей длины инструкций и меньшего объема памяти, но требует больше времени для декодирования, что приводит к замедлению тактовой частоты процессора. [39]

Некоторый вертикальный микрокод — это просто язык ассемблера простого обычного компьютера, который эмулирует более сложный компьютер. Некоторые процессоры, такие как процессоры DEC Alpha и микропроцессоры CMOS на более поздних мейнфреймах IBM System/390 и z/Architecture , используют машинный код, работающий в специальном режиме, который дает ему доступ к специальным инструкциям, специальным регистрам и другим аппаратным ресурсам, недоступным для обычный машинный код для реализации некоторых инструкций и других функций, [40] [41] таких как обход таблицы страниц на процессорах Alpha. [42] На процессорах Alpha это называется PALcode , а на мэйнфреймах IBM – милликод .

Другая форма вертикального микрокода имеет два поля:

Поле выбора выбирает, какая часть ЦП будет управляться этим словом хранилища управления. Значение поля управляет этой частью ЦП. При использовании этого типа микрокода разработчик явно выбирает более медленный ЦП, чтобы сэкономить деньги за счет уменьшения количества неиспользуемых битов в хранилище управления; однако снижение сложности может увеличить тактовую частоту ЦП, что уменьшит эффект увеличения количества циклов на инструкцию.

По мере удешевления транзисторов горизонтальный микрокод стал доминировать в конструкции процессоров с использованием микрокода, а вертикальный микрокод использовался реже.

Когда используются как вертикальный, так и горизонтальный микрокод, горизонтальный микрокод может называться нанокодом или пикокодом . [43]

Доступное для записи хранилище управления

Несколько компьютеров были построены с использованием записываемого микрокода . В этой конструкции микрокод хранится не в ПЗУ или жесткой логике, а в оперативной памяти, называемой записываемым хранилищем управления или WCS . Такой компьютер иногда называют компьютером с записываемым набором команд (WISC). [44]

Многие экспериментальные прототипы компьютеров используют записываемые хранилища управления; существуют также коммерческие машины, использующие записываемый микрокод, такие как Burroughs Small Systems , ранние рабочие станции Xerox , семейство DEC VAX 8800 ( Nautilus ), машины Symbolics L- и G-машины, ряд IBM System/360 и System/370. реализации, некоторые машины DEC PDP-10 , [45] и Data General Eclipse MV/8000 . [46]

Многие другие машины предлагают в качестве опции программируемые пользователем записываемые хранилища управления, включая миникомпьютеры серии HP 2100 , DEC PDP-11/60 и Varian Data Machines V-70 . IBM System/370 включает в себя функцию, называемую начальной загрузкой микропрограммы ( IML или IMPL ) [47] , которую можно вызвать с консоли, как часть сброса при включении питания ( POR ) или с другого процессора в тесно связанном многопроцессорном комплексе.

Некоторые коммерческие машины, например IBM 360/85, [48] [49] имеют как хранилище только для чтения, так и записываемое хранилище управления для микрокода.

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

Начиная с Pentium Pro в 1995 году, некоторые процессоры x86 имеют записываемый микрокод Intel . [50] [51] Это, например, позволило исправить ошибки в микрокодах Intel Core 2 и Intel Xeon путем исправления их микропрограмм, вместо того, чтобы требовать замены целых чипов. Вторым ярким примером является набор исправлений микрокода, которые Intel предложила для некоторых своих процессорных архитектур возрастом до 10 лет в попытке противостоять уязвимостям безопасности, обнаруженным в их разработках ( Spectre и Meltdown ), которые были обнародованы с самого начала. 2018 г. [52] [53] Обновление микрокода можно установить в Linux, [54] FreeBSD , [55] Microsoft Windows, [56] или в BIOS материнской платы. [57]

Сравнение с VLIW и RISC

Тенденция проектирования процессоров с большим количеством микрокодов и сложными инструкциями началась в начале 1960-х годов и продолжалась примерно до середины 1980-х годов. В этот момент философия дизайна RISC стала становиться все более заметной.

Процессору, использующему микрокод, обычно требуется несколько тактовых циклов для выполнения одной инструкции, по одному тактовому циклу на каждый шаг микропрограммы для этой инструкции. Некоторые процессоры CISC содержат инструкции, выполнение которых может занять очень много времени. Такие вариации влияют как на задержку прерываний , так и, что гораздо важнее в современных системах, на конвейерную обработку .

При разработке нового процессора RISC с аппаратным управлением имеет следующие преимущества перед CISC с микрокодированием:

Есть и контрапункты:

Многие процессоры RISC и VLIW предназначены для выполнения каждой инструкции (пока она находится в кеше) за один цикл. Это очень похоже на то, как процессоры с микрокодом выполняют одну микроинструкцию за цикл. Процессоры VLIW имеют инструкции, которые ведут себя аналогично очень широкому горизонтальному микрокоду, хотя обычно без такого детального контроля над оборудованием, который обеспечивается микрокодом. Инструкции RISC иногда похожи на узкий вертикальный микрокод.

Микрокод был популярен в процессорах специального назначения, таких как сетевые процессоры , процессоры цифровых сигналов , контроллеры каналов , контроллеры дисков , контроллеры сетевых интерфейсов , контроллеры флэш-памяти , графические процессоры и другое оборудование.

Микрооперации

Современные реализации CISC, такие как семейство x86 , декодируют инструкции в микрооперации с динамической буферизацией с кодировкой инструкций, аналогичной RISC или традиционному микрокоду. Устройство декодирования проводных инструкций напрямую генерирует микрооперации для обычных инструкций x86, но возвращается к более традиционному ПЗУ микрокода, содержащему микрооперации для более сложных или редко используемых инструкций. [2]

Например, x86 может искать микрооперации из микрокода для обработки сложных многошаговых операций, таких как инструкции цикла или строки, трансцендентные функции с плавающей запятой или необычные значения, такие как денормальные числа , а также инструкции специального назначения, такие как CPUID .

Смотрите также

Примечания

  1. ^ Процессоры IBM с горизонтальным микрокодированием имели несколько микропорядков и поля выбора регистров, которые требовали декодирования.

Рекомендации

  1. ^ abc Кент, Аллен; Уильямс, Джеймс Г. (5 апреля 1993 г.). Энциклопедия компьютерных наук и технологий: Том 28 - Приложение 13. Нью-Йорк: Marcel Dekker, Inc. ISBN. 0-8247-2281-7. Архивировано из оригинала 20 ноября 2016 года . Проверено 17 января 2016 г.
  2. ^ аб Туман, Агнер (2 мая 2017 г.). Микроархитектура процессоров Intel, AMD и VIA (PDF) (Отчет). Технический университет Дании. Архивировано (PDF) из оригинала 28 марта 2017 г. Проверено 8 апреля 2018 г.
  3. ^ «Серверы IBM pSeries — обновление микрокода для Ultrastar 73LZX (US73) 18/36 ГБ» . ИБМ . Архивировано из оригинала 19 апреля 2019 года . Проверено 22 января 2015 г.
  4. ↑ ab Оба, Дэвид (23 июля 2020 г.). «Центральный процессор (ЦП): его компоненты и функциональные возможности». Красная Шапка .
  5. ^ Пикенс, Джон. «Операционные коды NMOS 6502». 6502.org .
  6. ^ аб Ширрифф, Кен. «Как работает механизм микрокода процессора 8086». Блог Кена Ширриффа .
  7. ^ Техническое описание системы VAX 9000 (PDF) . Корпорация цифрового оборудования . Май 1990 г., стр. 3-5–3-32. ЕК-КА90С-ТД-001.
  8. ^ Техническое описание системы VAX 8800, том 2 (PDF) . Корпорация цифрового оборудования . Июль 1986 г. EK-KA882-TD-PRE.
  9. ^ Мэннинг, Б.М.; Митби, Дж.С.; Николсон, Дж. О. (ноябрь 1979 г.). «Микропрограммный процессор, имеющий хранилище управления PLA». Бюллетень технической информации IBM . 22 (6). Архивировано из оригинала 1 октября 2012 г. Проверено 10 июля 2011 г.
  10. ^ Часто обозначается хранилище управления ROM/PLA в контексте использования в ЦП; Супник, Боб (24 февраля 2008 г.). «J-11: четвертый и последний микропроцессор DEC PDP-11 ... имеет ... хранилище управления ROM / PLA». Архивировано из оригинала 9 июля 2011 г. Проверено 10 июля 2011 г.
  11. ^ "6502 изображения" . Архивировано из оригинала 4 марта 2016 года . Проверено 22 января 2015 г.
  12. ^ Функциональные характеристики IBM System/360 Model 50 (PDF) . ИБМ . 1967. с. 7. А22-6898-1 . Проверено 29 октября 2021 г.
  13. ^ Эверетт, Р.Р.; Суэйн, Ф.Е. (1947). Блок-схемы компьютера Whirlwind I (PDF) (Технический отчет). Лаборатория сервомеханизмов Массачусетского технологического института. Р-127. Архивировано из оригинала (PDF) 17 июня 2012 года . Проверено 21 июня 2006 г.
  14. ^
    • Уилкс, Морис (1951). Лучший способ спроектировать автоматическую счетную машину (Технический отчет). Университет Манчестера .
    • Уилкс, Морис (1989). «Лучший способ спроектировать автоматическую вычислительную машину» (PDF) . В Кэмпбелл-Келли, М. (ред.). Первые британские компьютерные конференции . МТИ Пресс. стр. 182–4. ISBN 978-0-262-23136-7.
  15. ^ аб Ширрифф, Кен. «Моделирование мэйнфрейма IBM 360/50 на основе его микрокода». Блог Кена Ширриффа .
  16. ^ Супник, Боб (май 1988 г.). Микроархитектура СБИС VAX (PDF) . Цифровое оборудование.
  17. ^ Старнс, Томас (апрель 1983 г.). «Философия дизайна Motorola MC68000». Байт .
  18. ^ abc Кок, Джон; Маркштейн, Виктория (январь 1990 г.). «Эволюция технологии RISC в IBM» (PDF) . Журнал исследований и разработок IBM . 34 (1): 4–11. дои : 10.1147/rd.341.0004.
  19. ^ аб Кларк, Дуглас; Стрекер, Уильям (сентябрь 1980 г.). «Комментарии к статье «Обоснование необходимости использования компьютера с сокращенными командами»». АКМ .
  20. ^ «Конвейер выполнения процессора Intel i486» . Дайджест статей Compcon Spring '90. Тридцать пятая международная конференция IEEE Computer Society по интеллектуальному использованию . Сан-Франциско, Калифорния: IEEE . doi : 10.1109/CMPCON.1990.63682. ISBN 0-8186-2028-5.
  21. ^ «Процессор Pentium Pro на частотах 150, 166, 180 и 200 МГц» (PDF) (техническое описание). Интел . Ноябрь 1995 года.
  22. ^ ab «Часть I / Общая архитектура, Глава 6 Общая архитектура PALcode». Справочное руководство по архитектуре Alpha AXP (PDF) (второе изд.). Цифровая пресса . 1995. ISBN 1-55558-145-5.
  23. ^ Роджерс, Боб (сентябрь – октябрь 2012 г.). «Что и почему zEnterprise Millicode». Журнал IBM Systems . Архивировано из оригинала 9 октября 2012 года.
  24. ^ "Компьютер EMIDEC 1100" . Emidec.org.uk. Архивировано из оригинала 12 июня 2010 года . Проверено 26 апреля 2010 г.
  25. ^ Функциональные характеристики IBM System/360 Model 25 (PDF) . ИБМ. Январь 1968 г. с. 22. А24-3510-0 . Проверено 29 октября 2021 г.
  26. ^ abc Field Engineering Theory of Operation, Processing Unit 2030, System/360 Model 30 (PDF) (Первое издание). ИБМ. Июнь 1967 года. Y24-3360-1. Архивировано (PDF) из оригинала 1 апреля 2020 г. Проверено 9 ноября 2019 г.
  27. ^ Эдвард А. Сноу; Дэниел П. Севиорек (1982). «Внедрение и оценка производительности семейства PDP-11». У Дэниела П. Севёрека ; К. Гордон Белл ; Аллен Ньюэлл (ред.). Компьютерные структуры: принципы и примеры . Нью-Йорк, штат Нью-Йорк : Книжная компания McGraw-Hill . п. 671. ИСБН 0-07-057302-6.
  28. ^ Солтис, Фрэнк (сентябрь 1981 г.). «Проектирование системы обработки данных для малого бизнеса». IEEE-компьютер . 14 : 77–93. дои : 10.1109/CM.1981.220610. S2CID  398484.
  29. ^ Фрэнк Г. Солтис (1997). Внутри AS/400, второе издание. Дьюк Пресс. ISBN 978-1882419661.
  30. ^ «Интервью: Битва с N64 (Набу)» . ИГН64. 10 ноября 2000 года. Архивировано из оригинала 13 сентября 2007 года . Проверено 27 марта 2008 г.
  31. ^ «Индиана Джонс и адская машина». ИГН . 12 декабря 2000 года. Архивировано из оригинала 27 сентября 2013 года . Проверено 24 сентября 2013 г.
  32. Мейнинк, Тодд (28 июля 2000 г.). «Вскрытие: Resident Evil 2 от Angel Studios (версия N64)». Гамасутра . ООО «Юнайтед Бизнес Медиа» . Архивировано из оригинала 21 октября 2012 года . Проверено 18 октября 2010 г.
  33. ^ Справочное руководство по компьютерной системе Digital Scientific Meta 4 Series 16 (PDF) . Цифровая научная корпорация. Май 1971 года. 7032МО. Архивировано (PDF) из оригинала 14 января 2020 г. Проверено 14 января 2020 г.
  34. ^ Справочное руководство по постоянному запоминающему устройству (ПЗУ) компьютерной системы Digital Scientific Meta 4 (PDF) . Цифровая научная корпорация. Март 1970 года. 7024МО. Архивировано (PDF) из оригинала 23 сентября 2019 г. Проверено 14 января 2020 г.
  35. ^ Предварительное руководство по компьютерной системе Digital Scientific Meta 4 Series 16 (PDF) . Цифровая научная корпорация. Июнь 1970 г. 7006МО. Архивировано (PDF) из оригинала 23 сентября 2019 г. Проверено 14 января 2020 г.
  36. ^ Типичный список шаблонов ПЗУ компьютерной системы Digital Scientific Meta 4 и программа для моделирования набора инструкций IBM 1130 (PDF) . Цифровая научная корпорация. Январь 1970 г. М4/005П-170. Архивировано (PDF) из оригинала 24 марта 2020 г. Проверено 14 января 2020 г.
  37. ^ "Вестерн Диджитал 1600". Антикварные технологии. Архивировано из оригинала 3 января 2017 года . Проверено 5 января 2017 г.
  38. ^ Хейс, Джон П. (1978). Компьютерная архитектура и организация . п. 300. ИСБН 0-07-027363-4.
  39. ^ Нил Харман; Энди Гимблетт (12 октября 2009 г.). «CS-323: Высокопроизводительные микропроцессоры. Глава 1. Микропрограммирование». mat.uson.mx. _ Архивировано из оригинала 19 апреля 2015 г. Проверено 8 августа 2015 г.
  40. ^ Ваупель, Роберт (2013). Высокая доступность и масштабируемость сред мэйнфреймов на примере System z и z/OS. КИТ Научный. п. 26. ISBN 978-3-7315-0022-3.
  41. ^ Роджерс, Боб (сентябрь – октябрь 2012 г.). «Что и почему zEnterprise Millicode». Журнал IBM Systems . Архивировано из оригинала 16 октября 2013 г. Проверено 7 ноября 2013 г.
  42. ^ «Руководство по проектированию системы PALcode для микропроцессоров Alpha» (PDF) . Корпорация цифрового оборудования . Май 1996 г. Архивировано (PDF) из оригинала 15 августа 2011 г. Проверено 7 ноября 2013 г.
  43. ^ Спрут, Вильгельм (декабрь 2012 г.). Конструкция микропроцессора. Springer Science & Business Media. п. 31. ISBN 978-3-642-74916-2. Архивировано из оригинала 20 ноября 2016 года . Проверено 18 января 2015 г.
  44. ^ Купман, Филип младший (1987). «Набор записываемых команд, стек-ориентированные компьютеры: концепция WISC» (PDF) . Журнал четвертого применения и исследований : 49–71. Архивировано (PDF) из оригинала 11 мая 2008 г.
  45. Смит, Эрик (3 сентября 2002 г.). «Re: Каков был размер микрокода на разных машинах». Группа новостей : alt.folklore.computers. Usenet:  [email protected]. Архивировано из оригинала 26 января 2009 года . Проверено 18 декабря 2008 г.
  46. ^ Смотерман, Марк. «CPSC 3300 / Душа новой машины» . Проверено 27 октября 2023 г. 4096 x 75-битная записываемая управляющая память SRAM: 74-битная микроинструкция с 1 битом четности (18 полей)
  47. ^ Принципы работы IBM System/370 (PDF) . Четвертое издание. ИБМ. Сентябрь 1974 г., стр. 98, 245. GA22-7000-4. Архивировано (PDF) из оригинала 29 февраля 2012 г. Проверено 27 августа 2012 г.
  48. ^ Функциональные характеристики IBM System/360 Model 85 (PDF) . ВТОРОЕ ИЗДАНИЕ. ИБМ. Июнь 1968 года. А22-6916-1 . Проверено 29 октября 2021 г.
  49. ^ Описание специальной функции IBM System/360 709/7090/7094 Функция совместимости для IBM System/360 Model 85 . Первое издание. ИБМ. Март 1969 г. GA27-2733-0.
  50. ^ Стиллер, Андреас; Пол, Матиас Р. (12 мая 1996 г.). «Процессоргефлюстер». c't – магазин компьютерной техники . Тенденции и новости (на немецком языке). Хайзе Верлаг . Архивировано из оригинала 28 августа 2017 г. Проверено 28 августа 2017 г.
  51. ^ «9.11: Средства обновления микрокода» . Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3A: Руководство по системному программированию, часть 1 (PDF) . Интел . Сентябрь 2016.
  52. ^ Intel исправляет все последние процессоры и обещает аппаратные исправления для будущих чипов 8-го поколения, Пол Алкорн, 15 марта 2018 г.
  53. ^ «Загрузить файл данных микрокода процессора Linux *» . Архивировано из оригинала 19 марта 2018 г. Проверено 21 марта 2018 г.
  54. ^ «Утилита обновления микрокода Intel для Linux» . Архивировано из оригинала 26 февраля 2012 г.
  55. ^ «[порты] Индекс /head/sysutils/cpupdate». Freebsd.org. Архивировано из оригинала 01 апреля 2020 г. Проверено 16 января 2020 г.
  56. ^ «Доступно обновление надежности микрокода, которое повышает надежность систем, использующих процессоры Intel». Архивировано из оригинала 23 февраля 2008 г. Проверено 25 февраля 2008 г.
  57. ^ «Серверные продукты — требуется обновление BIOS, если во время POST появляется сообщение об отсутствующем микрокоде» . Интел . 24 января 2013 г. Архивировано из оригинала 1 сентября 2014 г.

дальнейшее чтение

Внешние ссылки