Микрокод - Microcode

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

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

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

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

Обзор

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

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

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

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

  • Подключите регистр 1 к стороне A ALU.
  • Подключите регистр 7 к стороне B ALU.
  • Установите АЛУ для выполнения дополнительного кода комплемент дополнения
  • Установите вход переноса ALU на ноль
  • Сохраните значение результата в регистре 8
  • Обновите коды условий из флагов состояния ALU ( отрицательный , ноль , переполнение и перенос )
  • Микропереход на микро- ПК nnn для следующей микрокоманды

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

Обоснование

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

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

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

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

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

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

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

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

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

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

История

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

Если описать иначе, то сигналы, передаваемые хранилищем управления, воспроизводятся во многом как пианино плейера . То есть они управляются последовательностью очень широких слов, состоящих из битов , и они «проигрываются» последовательно. Однако в контрольном хранилище «песня» короткая и непрерывно повторяется.

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

Примеры

  • EMIDEC 1100 по общему мнению , использует жесткий-проводной магазин управления , состоящий из проводов через резьбовые ферритовые сердечник, известные как «шнурки».
  • Большинство моделей серии IBM System / 360 имеют микропрограммное обеспечение:
    • Model 25 является уникальным среди System / 360 моделей при помощи верхних 16 K байт памяти ядра для хранения хранения для управления микропрограммы. В 2025 году используется 16-битная микроархитектура с семью контрольными словами (или микрокомандами). После обслуживания системы или при смене режима работы микрокод загружается с кардридера, ленты или другого устройства. IBM 1410 эмуляции для этой модели загружается таким образом.
    • Модель 30 использует 8-битный микроархитектуры только с несколькими аппаратными регистрами; все, что видел программист, эмулируется микропрограммой. Микрокод для этой модели также хранится на специальных перфокартах, которые хранятся внутри машины в специальном считывающем устройстве для каждой карты, называемом блоками «CROS» (конденсаторное хранилище только для чтения). Дополнительный блок CROS добавлен для машин, заказанных с эмуляцией 1401/1440/1460, и для машин, заказанных с эмуляцией 1620.
    • В Model 40 используются 56-битные управляющие слова. В коробке 2040 реализованы как главный процессор System / 360, так и мультиплексный канал (процессор ввода-вывода). В этой модели используются специальные считыватели TROS, аналогичные устройствам CROS, но с индуктивным датчиком (Transformer Read-only Store).
    • Модель 50 имеет два внутренних datapaths , которые работают параллельно: 32-битное Datapath используемого для арифметических операций, а канал передачи данных 8-битного , используемый в некоторых логических операциях. В хранилище управления используются 90-битные микрокоманды.
    • Модель 85 имеет отдельную выборку команд (I-блок) и исполнение (Е-модуль) , чтобы обеспечить высокую производительность. Блок I управляется аппаратно. Электронный блок является микропрограммным; управляющие слова имеют ширину 108 бит на базовых 360/85 и шире, если установлена ​​функция эмулятора.
  • NCR 315 является микропрограммным с ручным проводным ферритовыми сердечниками (а ПЗУ ) с помощью импульсного секвенсора с условным исполнением. Провода, проложенные через ядра, задействованы для различных данных и логических элементов в процессоре.
  • Процессоры PDP-11 корпорации Digital Equipment Corporation , за исключением PDP-11/20, являются микропрограммными.
  • Большинство миникомпьютеров Data General Eclipse имеют микропрограммы. Задача написания микрокода для Eclipse MV / 8000 подробно описана в удостоенной Пулитцеровской премии книге «Душа новой машины» .
  • Многие системы от Burroughs микропрограммированы:
  • «Микропроцессор» B700 выполняет коды операций прикладного уровня, используя последовательности 16-битных микрокоманд, хранящиеся в основной памяти; каждый из них является либо операцией загрузки регистра, либо отображается в одну 56-битную команду «нанокод», хранящуюся в постоянной памяти. Это позволяет сравнительно простому оборудованию действовать либо как периферийный контроллер мэйнфрейма, либо быть упакованным как автономный компьютер.
  • B1700 реализуется с радикально различными аппаратными средствами , включая основную память битовой адресацию , но имеет подобную организацию многослойной. Операционная система предварительно загружает интерпретатор для любого необходимого языка. Эти интерпретаторы представляют разные виртуальные машины для COBOL , Fortran и т. Д.
  • Векторные блоки VU0 и VU1 в Sony PlayStation 2 являются микропрограммируемыми; Фактически, VU1 доступен только через микрокод для первых нескольких поколений SDK.
  • MicroCore Labs MCL86 , MCL51 и MCL65 являются примерами высококодированных "вертикальных" реализаций микросеквенсоров Intel 8086/8088, 8051 и MOS 6502.
  • Digital Scientific Corp. Series 16 компьютерная система Meta 4 была пользователь microprogammable системы первой доступна в 1970 году микрокод был в основном вертикальный стиль с 32-битными микрокомандами. Инструкции хранились на сменных программных платах с сеткой битовых позиций. Один (1) бит был представлен маленькими металлическими квадратами, которые считывались усилителями, нулевые (0) биты - отсутствием квадратов. Система может быть сконфигурирована для хранения до 4К 16-битных слов. Одним из продуктов Digital Scientific был эмулятор IBM 1130 .
  • Более ранние процессоры x86 полностью микрокодированы; Начиная с Intel 80486 , менее сложные инструкции реализованы непосредственно на оборудовании. x86 процессоры реализованы patchable микрокода (патч от BIOS или операционной системы ) , так как Intel микроархитектуры P6 и AMD K7 микроархитектуры .
  • На некоторых видеокартах , контроллерах беспроводного сетевого интерфейса реализован патчируемый микрокод (патч для операционной системы).

Реализация

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

  • I-блок может декодировать инструкции в аппаратных средств и определение адреса микрокода для обработки команды параллельно с E-блоком .
  • Микросеквенатора выбирает следующее слово из магазина управления. Секвенсор в основном представляет собой счетчик, но обычно также имеет способ перейти к другой части хранилища элементов управления в зависимости от некоторых данных, обычно данных из регистра команд и всегда некоторой части хранилища элементов управления. Простейший секвенсор - это просто регистр, загруженный из нескольких битов управляющего хранилища.
  • Набор регистров - это быстрая память, содержащая данные центрального процессора. Он может включать в себя счетчик программ и указатель стека , а также может включать другие регистры, которые не могут быть легко доступны для прикладного программиста. Часто набор регистров представляет собой файл регистров с тремя портами ; то есть два регистра могут быть прочитаны, а третий записан одновременно.
  • An арифметические и логические блок выполняет вычисления, как правило , сложение, логическое отрицание, правый сдвиг, и логическое И. Часто он выполняет и другие функции.

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

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

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

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

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

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

Зарегистрируйте источник A Зарегистрируйте источник B Регистр назначения Работа арифметико-логического устройства Тип прыжка Адрес перехода

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

  # Any line starting with a number-sign is a comment
  # This is just a label, the ordinary way assemblers symbolically represent a 
  # memory address.
InstructionJUMP:
      # To prepare for the next instruction, the instruction-decode microcode has already
      # moved the program counter to the memory address register. This instruction fetches
      # the target address of the jump instruction from the memory word following the
      # jump opcode, by copying from the memory data register to the memory address register.
      # This gives the memory system two clock ticks to fetch the next 
      # instruction to the memory data register for use by the instruction decode.
      # The sequencer instruction "next" means just add 1 to the control word address.
   MDR, NONE, MAR, COPY, NEXT, NONE
      # This places the address of the next instruction into the PC.
      # This gives the memory system a clock tick to finish the fetch started on the
      # previous microinstruction.
      # The sequencer instruction is to jump to the start of the instruction decode.
   MAR, 1, PC, ADD, JMP, InstructionDecode
      # The instruction decode is not shown, because it is usually a mess, very particular
      # to the exact processor being emulated. Even this example is simplified.
      # Many CPUs have several ways to calculate the address, rather than just fetching
      # it from the word following the op-code. Therefore, rather than just one
      # jump instruction, those CPUs have a family of related jump instructions.

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

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

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

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

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

Выбор поля Значение поля

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

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

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

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

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

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

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

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

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

Начиная с Pentium Pro в 1995 году, несколько процессоров x86 имеют возможность записи микрокода Intel . Это, например, позволило исправить ошибки в микрокодах Intel Core 2 и Intel Xeon путем исправления их микропрограмм, вместо того, чтобы требовать замены всего чипа. Вторым ярким примером является набор исправлений микрокода, которые Intel предложила для некоторых из своих процессорных архитектур возрастом до 10 лет в попытке противостоять уязвимостям безопасности, обнаруженным в их проектах - Spectre и Meltdown, - которые с самого начала стали общедоступными. 2018 г. Обновление микрокода можно установить в Linux, FreeBSD , Microsoft Windows или BIOS материнской платы.

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

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

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

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

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

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

  • Сложные инструкции в реализациях с сильным микрокодированием могут не требовать много дополнительных машинных ресурсов, за исключением пространства микрокода. Например, один и тот же ALU часто используется для вычисления эффективного адреса, а также для вычисления результата на основе фактических операндов (например, исходных Z80 , 8086 и других).
  • Современные компиляторы часто используют более простые инструкции, не относящиеся к RISC (т. Е. С использованием операндов прямой памяти ). Обычно используются арифметические операции, даже непосредственно помещаемые в стек (т. Е. Результат в памяти). Хотя такие операции с памятью, часто с кодировками различной длины, сложнее конвейеризовать, это все еще вполне выполнимо, что наглядно демонстрируют i486 , AMD K5 , Cyrix 6x86 , Motorola 68040 и т. Д.
  • Инструкции, не относящиеся к RISC, по своей сути выполняют больше работы на инструкцию (в среднем), а также обычно сильно закодированы, поэтому они позволяют уменьшить общий размер одной и той же программы и, таким образом, лучше использовать ограниченную кэш-память.

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

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

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

Современные реализации CISC, такие как семейство x86 , декодируют инструкции в микрооперации с динамической буферизацией («μops») с кодированием инструкций, аналогичным RISC или традиционному микрокоду. Аппаратный блок декодирования инструкций напрямую выдает микропрограммы для общих инструкций x86, но возвращается к более традиционному ПЗУ с микрокодом для более сложных или редко используемых инструкций.

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

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

Примечания

использованная литература

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

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