stringtranslate.com

Микрокод

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

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

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

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

Обзор

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

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

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

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

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

Микрокод

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

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

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

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

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

Дизайн

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

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

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

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

Оправдание

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

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

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

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

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

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

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

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

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

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

История

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

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

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

360

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

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

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

Двигаясь вверх по строке

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

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

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

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

RISC входит

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

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

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

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

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

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

Примеры

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

Выполнение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Записываемое управляющее хранилище

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

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

IBM System/370 включает в себя функцию, называемую начальной загрузкой микропрограммы ( IML или IMPL ) [48] , которую можно вызвать с консоли, как часть сброса при включении питания ( POR ) или с другого процессора в тесно связанном многопроцессорном комплексе.

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

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

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

Некоторые машины предлагают программируемые пользователем записываемые управляющие хранилища в качестве опции, включая HP 2100 , DEC PDP-11/60 , TI-990 /12, [59] [60] и мини-компьютеры серии Varian Data Machines V-70 .

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

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

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

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

Есть и контраргументы:

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

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

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

Современные реализации CISC, такие как семейство x86 , начиная с NexGen Nx586, Intel Pentium Pro и AMD K5 . декодируют инструкции в динамически буферизованные микрооперации с кодировкой инструкций, похожей на 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. ^ ab Fog, Agner (2017-05-02). Микроархитектура процессоров Intel, AMD и VIA (PDF) (Отчет). Технический университет Дании. Архивировано (PDF) из оригинала 2017-03-28 . Получено 2024-08-21 .
  3. ^ "IBM pSeries Servers - Microcode Update for Ultrastar 73LZX (US73) 18/36 GB". IBM . Архивировано из оригинала 19 апреля 2019 г. Получено 22 января 2015 г.
  4. ^ ab Бот, Дэвид (23 июля 2020 г.). «Центральный процессор (ЦП): его компоненты и функциональность». Red Hat .
  5. ^ Пикенс, Джон. "Операционные коды NMOS 6502". 6502.org .
  6. ^ ab Ширрифф, Кен. "Как работает микрокод процессора 8086". Блог Кена Ширриффа .
  7. ^ "ISO/IEC/IEEE 24765:2017(ru) Системная и программная инженерия — Словарь". www.iso.org . Получено 2024-06-23 .
  8. ^ Техническое описание системы VAX 9000 (PDF) . Digital Equipment Corporation . Май 1990. С. 3-5–3-32. EK-KA90S-TD-001.
  9. ^ Техническое описание системы VAX 8800, том 2 (PDF) . Digital Equipment Corporation . Июль 1986 г. EK-KA882-TD-PRE.
  10. ^ Manning, BM; Mitby, JS; Nicholson, JO (ноябрь 1979 г.). «Микропрограммируемый процессор с хранилищем управления PLA». Технический бюллетень раскрытия информации IBM . 22 (6). Архивировано из оригинала 01.10.2012 . Получено 10.07.2011 .
  11. Часто обозначается как управляющее хранилище ROM/PLA в контексте использования в ЦП; Supnik, Bob (24 февраля 2008 г.). "J-11: четвертый и последний дизайн микропроцессора PDP-11 компании DEC ... особенности ... управляющее хранилище ROM/PLA". Архивировано из оригинала 2011-07-09 . Получено 2011-07-10 .
  12. ^ "6502 Images". Архивировано из оригинала 4 марта 2016 г. Получено 22 января 2015 г.
  13. ^ IBM System/360 Model 50 Functional Characteristics (PDF) . IBM . 1967. стр. 7. A22-6898-1 . Получено 29 октября 2021 г. .
  14. ^ Эверетт, Р. Р.; Суэйн, Ф. Э. (1947). Блок-схемы компьютера Whirlwind I (PDF) (технический отчет). Лаборатория сервомеханизмов Массачусетского технологического института. R-127. Архивировано из оригинала (PDF) 17 июня 2012 г. Получено 21 июня 2006 г.
  15. ^
    • Уилкс, Морис (1951). Лучший способ спроектировать автоматическую счетную машину (технический отчет). Манчестерский университет .
    • Wilkes, Maurice (1989). "Лучший способ спроектировать автоматическую вычислительную машину" (PDF) . В Campbell-Kelly, M. (ред.). Первые британские компьютерные конференции . MIT Press. стр. 182–4. ISBN 978-0-262-23136-7.
  16. ^ ab Ширрифф, Кен. «Моделирование мэйнфрейма IBM 360/50 по его микрокоду». Блог Кена Ширриффа .
  17. ^ Супник, Боб (май 1988). Микроархитектура VLSI VAX (PDF) . Цифровое оборудование.
  18. ^ Старнс, Томас (апрель 1983 г.). «Философия дизайна Motorola MC68000». Byte .
  19. ^ abc Cocke, John; Markstein, Victoria (январь 1990 г.). «Эволюция технологии RISC в IBM» (PDF) . IBM Journal of Research and Development . 34 (1): 4–11. doi :10.1147/rd.341.0004.
  20. ^ ab Кларк, Дуглас; Стрекер, Уильям (сентябрь 1980 г.). «Комментарии к «Дело в пользу сокращенного набора команд компьютера»». ACM . 8 (6): 34–38. doi :10.1145/641914.641918. S2CID  14939489.
  21. ^ "Конвейер выполнения процессора Intel i486". Сборник статей Compcon Spring '90. Тридцать пятая международная конференция IEEE Computer Society по интеллектуальному рычагу . Сан-Франциско, Калифорния: IEEE . doi :10.1109/CMPCON.1990.63682. ISBN 0-8186-2028-5.
  22. ^ "Процессор Pentium Pro на частотах 150, 166, 180 и 200 МГц" (PDF) (Техническое описание). Intel . Ноябрь 1995 г.
  23. ^ ab "Часть I / Общая архитектура, Глава 6 Общая архитектура PALcode". Справочное руководство по архитектуре Alpha AXP (PDF) (Второе издание). Digital Press . 1995. ISBN 1-55558-145-5.
  24. Роджерс, Боб (сен–окт 2012 г.). «Что и почему zEnterprise Millicode». Журнал IBM Systems . Архивировано из оригинала 9 октября 2012 г.
  25. ^ "EMIDEC 1100 computer". Emidec.org.uk. Архивировано из оригинала 12 июня 2010 г. Получено 26 апреля 2010 г.
  26. ^ IBM System/360 Model 25 Functional Characteristics (PDF) . IBM. Январь 1968. стр. 22. A24-3510-0 . Получено 29 октября 2021 г.
  27. ^ abc Field Engineering Theory of Operation, 2030 Processing Unit, System/360 Model 30 (PDF) (Первое издание). IBM. Июнь 1967 г. Y24-3360-1. Архивировано (PDF) из оригинала 2020-04-01 . Получено 2019-11-09 .
  28. ^ Эдвард А. Сноу; Дэниел П. Сивирек (1982). «Оценка внедрения и производительности семейства PDP-11». В Дэниеле П. Сивиреке ; К. Гордоне Белле ; Аллене Ньюэлле (ред.). Структуры компьютеров: принципы и примеры . Нью-Йорк, Нью-Йорк : McGraw-Hill Book Company . стр. 671. ISBN 0-07-057302-6.
  29. ^ Солтис, Фрэнк (сентябрь 1981 г.). «Проектирование системы обработки данных для малого бизнеса». IEEE Computer . 14 : 77–93. doi :10.1109/CM.1981.220610. S2CID  398484.
  30. ^ Фрэнк Г. Солтис (1997). Внутри AS/400, второе издание. Duke Press. ISBN 978-1882419661.
  31. ^ "Интервью: Битва с N64 (Набу)". IGN64. 10 ноября 2000 г. Архивировано из оригинала 13 сентября 2007 г. Получено 27 марта 2008 г.
  32. «Индиана Джонс и адская машина». IGN . 12 декабря 2000 г. Архивировано из оригинала 27 сентября 2013 г. Получено 24 сентября 2013 г.
  33. ^ Meynink, Todd (28 июля 2000 г.). "Postmortem: Angel Studios' Resident Evil 2 (N64 Version)". Gamasutra . United Business Media LLC . Архивировано из оригинала 21 октября 2012 г. . Получено 18 октября 2010 г. .
  34. ^ Справочное руководство по компьютерной системе Digital Scientific Meta 4 Series 16 (PDF) . Digital Scientific Corporation. Май 1971 г. 7032MO. Архивировано (PDF) из оригинала 2020-01-14 . Получено 2020-01-14 .
  35. ^ Справочное руководство по постоянному запоминающему устройству (ПЗУ) компьютерной системы Digital Scientific Meta 4 (PDF) . Digital Scientific Corporation. Март 1970 г. 7024MO. Архивировано (PDF) из оригинала 2019-09-23 . Получено 2020-01-14 .
  36. ^ Предварительное системное руководство по компьютерной системе Digital Scientific Meta 4 Series 16 (PDF) . Digital Scientific Corporation. Июнь 1970 г. 7006MO. Архивировано (PDF) из оригинала 2019-09-23 . Получено 2020-01-14 .
  37. ^ Типичный список шаблонов ПЗУ и программа для моделирования набора инструкций IBM 1130 для компьютерной системы Digital Scientific Meta 4 (PDF) . Digital Scientific Corporation. Январь 1970 г. M4/005P-170. Архивировано (PDF) из оригинала 24.03.2020 . Получено 14.01.2020 .
  38. ^ "Western Digital 1600". AntiqueTech. Архивировано из оригинала 3 января 2017 года . Получено 5 января 2017 года .
  39. ^ Хейс, Джон П. (1978). Архитектура и организация компьютера . McGraw-Hill. стр. 300. ISBN 0-07-027363-4.
  40. ^ Нил Харман; Энди Гимблетт (2009-10-12). "CS-323: Высокопроизводительные микропроцессоры – Глава 1. Микропрограммирование". mat.uson.mx . Архивировано из оригинала 2015-04-19 . Получено 2015-08-08 .
  41. ^ Vaupel, Robert (2013). Высокая доступность и масштабируемость сред мэйнфреймов на примере System z и z/OS. KIT Scientific. стр. 26. ISBN 978-3-7315-0022-3.
  42. Роджерс, Боб (сентябрь–октябрь 2012 г.). «Что и почему zEnterprise Millicode». IBM Systems Magazine . Архивировано из оригинала 2013-10-16 . Получено 2013-11-07 .
  43. ^ "PALcode for Alpha Microprocessors System Design Guide" (PDF) . Digital Equipment Corporation . Май 1996. Архивировано (PDF) из оригинала 15 августа 2011 г. . Получено 7 ноября 2013 г. .
  44. ^ Spruth, Wilhelm (декабрь 2012 г.). Конструкция микропроцессора. Springer Science & Business Media. стр. 31. ISBN 978-3-642-74916-2. Архивировано из оригинала 20 ноября 2016 г. . Получено 18 января 2015 г. .
  45. ^ Купман, Филип-младший (1987). «Записываемый набор инструкций, стекоориентированные компьютеры: концепция WISC» (PDF) . Журнал Forth Application and Research : 49–71. Архивировано (PDF) из оригинала 2008-05-11.
  46. ^ Смит, Эрик (3 сентября 2002 г.). "Re: Каков был размер микрокода в различных машинах". Группа новостей : alt.folklore.computers. Usenet:  [email protected]. Архивировано из оригинала 26 января 2009 г. Получено 18 декабря 2008 г.
  47. ^ Smotherman, Mark. "CPSC 3300 / Душа новой машины" . Получено 27.10.2023 . 4096 x 75-битная SRAM-память управления с возможностью записи: 74-битная микроинструкция с 1 битом четности (18 полей)
  48. ^ IBM System/370 Principles of Operation (PDF) . Четвертое издание. IBM. Сентябрь 1974 г. стр. 98, 245. GA22-7000-4. Архивировано (PDF) из оригинала 29-02-2012 . Получено 27-08-2012 .
  49. ^ IBM System/360 Model 85 Functional Characteristics (PDF) . ВТОРОЕ ИЗДАНИЕ. IBM. Июнь 1968. A22-6916-1 . Получено 29 октября 2021 г.
  50. ^ Описание специальной функции IBM System/360 709/7090/7094 Совместимость функции для IBM System/360 Model 85. Первое издание. IBM. Март 1969. GA27-2733-0.
  51. ^ Стиллер, Андреас; Пол, Матиас Р. (12 мая 1996 г.). «Процессоргефлюстер». c't – журнал для компьютерной техники . Тенденции и новости (на немецком языке). Хайзе Верлаг . Архивировано из оригинала 28 августа 2017 г. Проверено 28 августа 2017 г.
  52. ^ "9.11: Средства обновления микрокода". Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 3A: Руководство по системному программированию, часть 1 (PDF) . Intel . Сентябрь 2016 г.
  53. Intel выпускает исправления для всех последних процессоров и обещает аппаратные исправления для будущих чипов 8-го поколения. Автор: Пол Элкорн, 15 марта 2018 г.
  54. ^ "Загрузить файл данных микрокода процессора Linux*". Архивировано из оригинала 2018-03-19 . Получено 2018-03-21 .
  55. ^ "Утилита обновления микрокода Intel для Linux". Архивировано из оригинала 2012-02-26.
  56. ^ "[ports] Index of /head/sysutils/cpupdate". Freebsd.org. Архивировано из оригинала 2020-04-01 . Получено 2020-01-16 .
  57. ^ "Доступно обновление надежности микрокода, повышающее надежность систем, использующих процессоры Intel". Архивировано из оригинала 2008-02-23 . Получено 2008-02-25 .
  58. ^ "Server Products - BIOS Update required when Missing Microcode message missing microcode message during POST". Intel . 24 января 2013 г. Архивировано из оригинала 1 сентября 2014 г.
  59. ^ "Model 990/12 LR Computer Depot Maintenance and Repair Manual" (PDF) . Bitsavers.org . Texas Instruments . Получено 15 февраля 2024 г. .
  60. ^ Texas Instruments Model 990 Computer MDS-990 Microcode Development System Programmer's Guide (ред. 15 августа 1979 г.). Архивы Texas Instruments, инвентарный номер RG-20 94-08, ящик 10, 45C. Библиотека ДеГольера, Южный методистский университет, Даллас, Техас, США.{{cite book}}: CS1 maint: location (link)

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

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