[Перевод] Реверс-инжиниринг микропроцессора Intel 8086
В июне 1978 года был представлен один из самых влиятельных чипов в полупроводниковой индустрии — Intel 8086. Он положил начало архитектуре х86, которая до сих пор доминирует сегодня в настольных и серверных вычислениях. Давайте заглянем вглубь чипа и разберём внутреннее строение и архитектурные особенности этого микропроцессора.
На фото ниже изображён кристалл процессора Intel 8086. На фото виден металлический слой чипа, скрывающий кремний под ним. По краям матрицы расположены тонкие провода, обеспечивающие соединение между площадками на чипе и внешними контактами. Силовые и заземляющие площадки имеют по два соединительных провода для поддержания более высокого тока. Микросхема была очень сложной для своего времени и содержала 29 тысяч транзисторов. Обратите внимание на маркировку кристалла в самом низу — на ней указан логотип Intel, модель процессора и год изготовления микросхемы.
Кристалл процессора Intel 8086
Для исследования кристалла необходимо аккуратно препарировать процессор. Большинство интегральных схем упакованы в эпоксидную смолу, поэтому для растворения корпуса необходимы опасные кислоты. Чтобы избежать повреждения кристалла был использован 8086 с керамическим корпусом, крышка которого легко открывается, обнажая бесстыдную красоту всех его внутренностей.
На фотографии видна кремниевая матрица, расположенная в центре. Матрица подключена к металлическим контактами микросхемы с помощью крошечных соединительных проводов. Это 40-контактный DIP-корпус, стандартный форм-фактор для микропроцессоров того времени. Обратите внимание, что сама кремниевая матрица занимает небольшую часть размера корпуса.
С помощью металлургического микроскопа были сделаны десятки фотографий матрицы чипа, сшитые в одно изображение высокого разрешения с помощью программы Hugin.
Ниже показана фотография кристалла, на которой были удалены слои металла и поликремния, обнажая лежащий под ними кремний с его 29 000 транзисторов. На чипе обозначены основные функциональные блоки, основанные на реверс-инжиниринге Кена Ширриффа. Левая сторона чипа содержит 16-битный канал передачи данных: регистры чипа и арифметические схемы. Сумматор и верхние регистры образуют модуль интерфейса шины, который взаимодействует с внешней памятью, в то время как нижние регистры и АЛУ образуют исполнительный блок, который обрабатывает данные. Правая сторона чипа имеет схему управления и декодирования команд, а также микрокод ROM, который управляет каждой инструкцией.
Основные функциональные блоки 8086
Одной из особенностей 8086 была предварительная выборка инструкций, которая улучшает производительность, извлекая инструкции из памяти до того, как они будут использованы. Это было реализовано блоком интерфейса шины в левом верхнем углу, который обращался к внешней памяти. Верхние регистры включают в себя сегментные регистры 8086, которые обеспечивают доступ к бОльшему адресному пространству, чем 64 килобайта, разрешенные 16-битным адресом. Для каждого доступа к памяти были добавлены сегментный регистр и смещение памяти, чтобы сформировать конечный адрес памяти. 8086 вместо АЛУ использовал отдельный сумматор для вычисления адресов памяти, что повышало его производительность. Верхние регистры также включают шесть байт буфера предварительной выборки команд и счётчик команд.
В левом нижнем углу микросхемы находится исполнительный блок, который выполняет операции с данными. Нижние регистры включают в себя регистры общего назначения и индексные регистры, такие как указатель стека. 16-разрядный АЛУ выполняет арифметические операции (сложение и вычитание), булевы логические операции и сдвиги. АЛУ не осуществляет умножение или деление; эти операции выполняются через последовательность сдвигов и сложения/вычитания, поэтому они относительно медленны.
Микрокод
Одной из самых сложных частей компьютерного проектирования является создание управляющей логики, которая диктует каждой части процессора что делать, чтобы выполнить определенную команду. В 1951 году Морису Уилксу пришла в голову идея микрокода: вместо построения управляющей логики из сложных схем логических элементов, управляющая логика может быть заменена специальным кодом — микрокодом. Чтобы выполнить инструкцию, компьютер выполняет несколько простых микроинструкций, которые задаются микрокодом. С помощью микрокода построение управляющей логики процессора становится задачей программирования, а не задачей логического проектирования.
Микрокод бы обычным явлением в мэйнфреймах 60-х годов, но ранние микропроцессоры, такие как 6502 и Z-80, не использовали микрокод, поскольку не имели места для его хранения. Однако в более поздних процессорах, таких как 8086 и 68000, применяли микрокод, используя преимущество увеличения плотности чипов. Это позволило 8086 реализовать сложные инструкции (такие как умножение и копирование строк), без усложнения схемы. Недостатком было то, что микрокод занимал бОльшую часть площади кристалла: схема микрокода показана в правом нижнем углу фотографии матрицы.
На фотографии выше показана часть микрокода ПЗУ. Под микроскопом видно содержимое микрокода; биты могут быть считаны в зависимости от наличия или отсутствия транзисторов в каждой позиции. ПЗУ состоит из 512 микроинструкций, каждая шириной в 21 бит. Каждая микроинструкция определяет перемещение данных между источником и получателем. Она также определяет микрооперацию, которая может быть командой перехода, операцией АЛУ, операцией с памятью, вызовом подпрограммы микрокода или его учётом. Микрокод довольно эффективен; простые инструкции, такие как инкреме́нт или декреме́нт (увеличивающие или уменьшающие переменные соответственно), состоят из двух микроинструкций, в то время как более сложная команда копирования строки реализована при помощи восьми микроинструкций.
История
Путь к 8086-му был не таким прямым и спланированным как можно было ожидать. Его самым ранним предком был Datapoint 2200, настольный компьютер/терминал, выпущенный в июне 1970 года. Он появился до того, как термин «микропроцессор» вошёл в обиход и в его основе лежала 8-битная плата, полная отдельных интегральных ТТЛ-схем. Параллельно Datapoint вёл переговоры с компаниями Intel и Texas Instruments о замене платы едиными чипом, включающим в себя все компоненты. Копируя архитектуру Datapoint 2200, Texas Instruments создала процессор TMX 1795 (в 1971-м), а Intel — процессор 8008 (в 1972-м).
Однако Datapoint отклонила эти процессоры, что стало роковым решением. Хотя TI не смогла найти покупателя на TMX 1795 и отказалась от него, Intel решила вывести 8008 на массовый рынок и следом за 8008 последовали 8080 и 8085.
Datapoint 2200
В 1975 году следующим крупным планом Intel стал процессор 8800, который должен был стать главной архитектурой компании в 80-х годах. Этот процессор был назван «микромейнфреймом» из-за его планируемой высокой производительности. Он должен был иметь совершенно новый набор инструкций, предназначенный для языков программирования высокого уровня, таких как Ада и поддерживать объектно-ориентированное программирование и «сборку мусора» на аппаратном уровне. К сожалению, а может и к счастью, этот чип был слишком амбициозным для того времени и сильно отставал от графика. В конечно итоге он был выпущен в 1981 году как iAPX 432 с разочаровывающими показателями и коммерчески провалился.
Поскольку iAPX 432 отставал от графика, Intel решила в 1975 году, что им нужен простой процессор-затычка для продажи, пока iAPX 432 не будет готов. Intel быстро разработала 16-разрядный 8086-ой, совместимый с 8080-м, выпустив его в 1978 году. У 8086 был большой успех из-за появления IBM PC в 1981-м. К 1983-му году IBM PC был самым продаваемым компьютером и стал стандартом для персональных компьютеров. В IBM PC использовался удешевленный вариант 8086 — 8088 с 8-битной шиной данных. Успех IBM PC сделал архитектуру 8086 стандартом в отрасли, который всё ещё сохраняется 42 года спустя.
IBM PC AT 1984-го года обновился до совместимого, но более мощного процессора 80286. В 1985 году с выходом 80386 линейка х86 перешла на 32-битные вычисления, а затем на 64-битные в 2003 году с выходом AMD64 и первых процессоров Athlon 64. Архитектура х86 до сих пор расширяется множеством дополнительных инструкций, таких как AVX-512, но даже несмотря на все эти изменения, х86 сохраняет совместимость с оригинальным 8086.
Транзисторы
Чип 8086 был построен с использованием транзисторов типа N-МОП. Транзистор можно рассматривать в качестве переключателя, управляющим током между двумя областями, называемыми стоком и истоком. Эти транзисторы построены путём легирования областей кремниевой подложки примесями для создания «диффузионных» областей, обладающих различными электрическими свойствами. Транзистор активируется затвором, изготовленным из особого типа кремния, называемого поликремнием, расположенным над кремниевой подложкой. Транзисторы соединены между собой металлическим слоем сверху, образуя цельную интегральную схему. Современные процессоры могут иметь более десятка металлических слоёв, в то время как 8086 имел всего один.
Структура МОП-транзистора
На фотографии кремния ниже крупным планом показаны некоторые транзисторы из АЛУ. Легированный проводящий кремний имеет тёмно-фиолетовый цвет. Белые полосы — это те места, где поликремниевые линии пересекают кремний, образуя затвор транзистора. Можно насчитать 23 транзистора, образующих 7 вентилей. Транзисторы имеют сложную форму для более эффективного использования. Кроме того, транзисторы имеют разные размеры для обеспечения высокой мощности там, где это необходимо. Обратите внимание, что транзисторы, расположенные рядом друг с другом, могут совместно использовать сток или исток. Круги — это соединения между слоем кремния и металлом, в то время как маленькие квадраты — это соединения между слоем кремния и поликремнием.
Фото некоторых транзисторов 8086. На снимке были удалены слои металла и поликремния
Заключение
8086 был изначально задуман как процессор-затычка во время, пока Intel не выпустит свой флагманский чип iAPX 432, и был потомком процессора, построенного из платы, полной ТТЛ-микросхем. Но с этого скромного начала архитектура х86 неожиданно оказалась доминирующей в настольных и серверных вычислениях до настоящего времени.