В 1993 году Intel выпустила мощный процессор Pentium, положив начало долгоживущему бренду. В статье рассмотрим некоторые интересные схемы, связанные с этим процессором. В частности, схема реализована в BiCMOS, процессе, который объединяет биполярные транзисторы со стандартной реализацией КМОП.
На фото ниже показана кремниевая матрица Pentium под микроскопом. На ней обозначены основные функциональные блоки; блок, оптимизированный для операций с плавающей запятой, находится в правом нижнем углу, а постоянное ПЗУ выделено внизу. Различные части блока с плавающей запятой образуют горизонтальные полосы. Шины данных проходят вертикально через блок с плавающей запятой, перемещая значения по блоку.
На картинке ниже показана схема, о которой пойдёт речь в данном посте, в составе Pentium. При увеличении нижней части микросхемы можно увидеть ПЗУ, содержащее 86-битное машинное слово: слева секция экспоненты, содержащая 18 бит, а справа - более широкая секция сигнификата, содержащая 68 бит. Под ними на картинке показан объект данной статьи: одна из 86 одинаковых схем мультиплексора/драйвера, представляющая собой выход ПЗУ. Как видите, эта схема представляет собой микроскопическую точку на чипе.
Слои поликремния и кремния образуют транзисторы Pentium. На этой фотографии показана часть полной схемы. Слои
В этом разделе я покажу, как устроены слои в процессоре Pentium. Нижний слой чипа состоит из транзисторов, расположенных на кремниевой матрице. Области кремния легированы примесями для изменения электрических свойств; эти области выглядят розоватыми на фотографии ниже по сравнению с сероватым нелегированным кремнием. Поверх кремния формируется тонкая поликремниевая проводка. Там, где линия поликремния пересекает легированный кремний, формируется транзистор; поликремний создает затвор транзистора. Большинство этих транзисторов являются транзисторами n-МОП и p-МОП, но около верхнего правого угла есть биполярный транзистор, напоминающий коробку. Темные круги — это контакты, области, где металлический слой сверху совмещён с поликремнием или кремнием для соединения схемы.
Pentium имеет три слоя металлической проводки. На фото ниже показан нижний слой, называемый M1. По большей части этот слой металла соединяет транзисторы в различные схемы, обеспечивая проводку на небольшом расстоянии. На фотографиях в этом разделе изображена одна и та же область микросхемы, поэтому можно сопоставить особенности на каждом из снимков. Например, контакты внизу (черные круги) совпадают с черными кругами вверху, показывая, как этот металлический слой соединяется с кремниевыми и поликремниевыми схемами. На этом изображении можно увидеть фрагменты кремния и поликремния, но большая их часть скрыта металлом.
Металлический слой M2 (внизу) находится над проводкой M1. В этой части чипа провода M2 расположены горизонтально. Более толстые линии — это питание и заземление. (Поскольку они толще, они имеют меньшее сопротивление и могут обеспечить необходимый ток для нижележащей схемы.) Более тонкие линии — это управляющие сигналы. Блок с плавающей запятой выстроен таким образом, что функциональные блоки расположены горизонтально, а данные передаются вертикально. Таким образом, горизонтальный провод может подавать управляющий сигнал на все биты функционального блока.
Слой M3 в Pentium — это верхний металлический слой. Он толще, поэтому лучше подходит под основные линии питания и заземление чипа, а также для проводки шин большой протяжённости. На фотографии ниже широкая линия слева обеспечивает питание, а широкая линия справа - заземление. Питание и заземление распределяются по проводке в слоях M2 и M1, пока они не будут подключены к базовым транзисторам. В верхней части фотографии видны вертикальные линии шины; они тянутся на большие расстояния через блок с плавающей запятой. Обратите внимание на чуть более длинную линию, четвертую справа. По этой линии передается один бит данных из ПЗУ за счёт описанной ниже схемы. Точка внизу — это то, благодаря чему эта линия соединяется с коротким проводом в M2, соединенным с проводом в M1, в свою очередь соединенным с выходными транзисторами.
Схемы вывода ПЗУ
На упрощенной картинке ниже показана схема, реверс-инжениринг которой я делал. Эта схема повторяется 86 раз, по одному разу для каждого бита машинного слова ПЗУ. Можно было бы ожидать, что ПЗУ предоставит одно 86-битное слово. Однако, чтобы схема работала лучше, ПЗУ предоставляет восемь слов параллельно. Таким образом, схема должна выбрать одно из восьми слов с помощью мультиплексора. В частности, каждая из 86 схем имеет мультиплексор 8-к-1 для выбора одного бита из восьми. Затем этот бит сохраняется в триггере. Наконец, драйвер высокого тока усиливает сигнал, чтобы его можно было отправить по шине и по пути он проходил бы через блок с плавающей запятой.
Прежде, чем разбирать подробную схему, будет краткий обзор МОП-транзисторов. В схеме КМОП используются два типа транзисторов — n-канальные или p-канальные, которые похожи, но при этом являются противоположными. p-канальный МОП-транзистор включается при подаче низкого сигнала на затвор, а n-канальный включается при подаче высокого сигнала; p-МОП обозначается на схеме символом с кружочком. p-МОП-транзистор лучше всего работает, когда на выходе у него высокий уровень, а n-МОП-транзистор - когда низкий. В КМОП-схемах эти два типа МОП-транзисторов обычно используются комплементарно для реализации совместно работающих логических затворов. Схемы ниже интересны тем, что они часто используют n-МОП и p-МОП-транзисторы независимо.
Подробная иллюстрация ниже показывает схему на уровне транзистора и инвертора. Далее рассмотрим каждый из компонентов.
ПЗУ построено в виде сетки: в каждой точке сетки ПЗУ может располагаться транзистор для бита 0 или отсутствовать транзистор для бита 1. Таким образом, данные представлены схемой транзисторов. В ПЗУ хранится 304 константы, поэтому с каждым битом выходного слова связано 304 потенциальных транзистора. Эти транзисторы организованы в сетку 38×8. Чтобы выбрать слово из ПЗУ, линия выбора активирует одну группу из восьми потенциальных транзисторов. Каждый транзистор заземлён, поэтому транзистор (если он есть) будет подтягивать соответствующую линию к низкому уровню, что означает 0 бит. Обратите внимание, что само ПЗУ состоит только из n-МОП-транзисторов, что делает его вдвое меньше настоящей реализации КМОП.
Транзистор ПЗУ может подтянуть линию к низкому уровню для бита 0, но как линия подтягивается к высокому уровню для бита 1? Это достигается с помощью транзистора предварительной зарядки на каждой линии. Перед чтением из ПЗУ все транзисторы предварительной зарядки активируются, подтягивая линии к высокому уровню. Если на линии присутствует транзистор ПЗУ, линия подтянется к низкому уровню, но в противном случае она останется высокой из-за емкости на линии.
Затем мультиплексор выбирает одну из 8 линий в зависимости от того, к какому слову выполняется доступ. Мультиплексор состоит из восьми транзисторов. Один транзистор активируется линией выбора, позволяя сигналу ПЗУ проходить через него. Остальные семь транзисторов находятся в выключенном состоянии, блокируя эти сигналы ПЗУ. Таким образом, мультиплексор выбирает один из 8 бит из ПЗУ.
Схема ниже — это «хранитель». Как уже говорилось выше, каждая линия ПЗУ заряжается на высоком уровне перед чтением ПЗУ. Однако этот заряд может исчезнуть. Задача хранителя — поддерживать на выходе мультиплексора высокий уровень, пока он не будет понижен. Это реализуется с помощью инвертора, подключенного к p-МОП-транзистору. Если сигнал на линии высокий, p-МОП-транзистор включится, выводя линию на высокий уровень. (Обратите внимание, что p-МОП-транзистор включается низким сигналом, поэтому и нужен инвертор.) Если ПЗУ переключит линию на низкий уровень, транзистор “выключится” и перестанет подтягивать линию к высокому уровню. Этот транзистор очень слабый, поэтому его легко перегрузить сигналом от ПЗУ. Транзистор слева обеспечивает высокий уровень линии в начале цикла.
На схеме ниже показаны транзисторы для хранителя. Два транзистора слева реализуют стандартный КМОП-инвертор. Обратите внимание на слабый транзистор справа, который удерживает линию на высоком уровне. Вы можете заметить, что слабый транзистор выглядит больше, так почему же он слабый, а не сильный? Дело в том, что транзистор является большим в «неправильном» измерении. Текущая емкость МОП-транзистора пропорциональна отношению ширины к длине его затвора. (Ширина обычно является длинным измерением, а длина — тонким измерением.) Длина слабого транзистора намного больше, чем у других транзисторов, поэтому отношение Ш/Д меньше, и транзистор слабее. Представьте себе затвор транзистора как мост между его двумя сторонами. Широкий мост со многими полосами пропускает много трафика. А длинный однополосный мост замедляет движение.
Далее мы переходим к триггеру, который запоминает значение, считанное из ПЗУ. Этот триггер будет считывать значение со входа, когда сигнал нагрузки будет высоким. Когда сигнал нагрузки станет низким, триггер сохранит свое значение. Концептуально триггер реализуется с помощью приведенной ниже схемы. Когда сигнал нагрузки активен, мультиплексор выбирает нижний вход, пропуская вход триггера через (инвертированный) выход. Но когда сигнал нагрузки становится низким, мультиплексор выбирает верхний вход, который выступает в качестве обратной связи со значением в триггере. Этот сигнал будет циклически проходить через инверторы и мультиплексор, удерживая значение до тех пор, пока не будет загружено новое значение. Инверторы необходимы, поскольку сам мультиплексор не обеспечивает никакого усиления; сигнал быстро затухнет, если его не усилить инверторами.
Мультиплексор реализован с помощью двух КМОП-переключателей, по одному для выбора каждого входа мультиплексора. Каждый переключатель представляет собой пару транзисторов p- и n-МОП, которые включаются вместе, позволяя сигналу проходить через них. (См. два нижних транзистора.) Верхняя схема сложнее. Концептуально она представляет собой инвертор, подающий сигнал на КМОП-переключатель мультиплексора. Однако порядок переключается так, что переключатель подает сигнал на инвертор. В итоге получается не совсем-переключатель и не совсем-инвертор, но результат тот же. Можно также рассматривать это как инвертор с питанием и землей, который отключается, когда не выбран. Скорее всего такая реализация потребляет немного меньше энергии, чем прямая.
Самая необычная схема — драйвер BiCMOS. Добавив несколько дополнительных этапов обработки к обычному процессу производства КМОП, можно создать биполярные (NPN и PNP) транзисторы. Pentium широко использовал схемы BiCMOS, поскольку они уменьшали задержки сигнала до 35%. Intel также использовала BiCMOS для процессоров Pentium Pro, Pentium II, Pentium III и Xeon. Однако с падением напряжения на чипе преимущество биполярных транзисторов также снизилось, и от BiCMOS в конечном итоге отказались.
Драйверы BiCMOS используются в Pentium, когда сигналы должны проходить большое расстояние по чипу. (В этом случае выход ПЗУ проходит примерно половину пути вверх по блоку с плавающей запятой.) Эти длинные провода имеют большую емкость, поэтому необходима схема драйвера с высоким током, а NPN-транзистор обеспечивает дополнительную «силу».
На схеме ниже показано, как реализован драйвер. NPN-транзистор — это большая коробка в правом верхнем углу. Когда у базы (B) высокий уровень, ток течет от коллектора (C), подтягивая эмиттер (E) на высокий уровень и, таким образом, быстро подтягивает выход на высокий уровень. Остальная часть схемы состоит из трех инверторов, каждый из которых состоит из p- и n-МОП транзисторов. Когда линия поликремния пересекает легированный кремний, она создает затвор транзистора, поэтому каждое пересечение соответствует транзистору. Инверторы используют несколько транзисторов параллельно, чтобы обеспечить больший ток; истоки и/или стоки транзисторов перекрываются, что делает схему более компактной.
Интересная особенность этой схемы заключается в том, что каждый инвертор тщательно спроектирован для обеспечения нужного тока, причем для высокого и низкого выхода ток отличается. Первый транзистор (фиолетовые квадраты) имеет два p-МОП-транзистора и два n-МОП-транзистора, поэтому это обычный инвертор, сбалансированный для высокого и низкого выходного сигнала. (Этот инвертор концептуально является частью триггера.) Второй инвертор (желтые квадраты) имеет три больших p-МОП-транзистора и один меньший n-МОП-транзистор, поэтому у него больше возможностей подтянуть выходной сигнал к высокому уровню, чем к низкому. Этот транзистор включает NPN-транзистор, подавая высокий сигнал на базу, поэтому в состоянии высокого уровня ему требуется больший ток. Третий инвертор (зеленые квадраты) имеет один слабый p-МОП-транзистор и семь n-МОП-транзисторов, поэтому он может сильно подтянуть свой выходной сигнал к низкому уровню, но едва ли может подтянуть свой выходной сигнал к высокому уровню. Этот транзистор подтягивает выходную линию ПЗУ к низкому уровню, поэтому ему нужен ток, достаточный для управления всей шиной. Но этому транзистору не нужно тянуть к выходу высокий уровень - это задача NPN-транзистора, поэтому PМОП-транзистор может быть слабым. Конструкция слабого транзистора аналогична конструкции слабого транзистора хранителя; длина его затвора намного больше, чем у других транзисторов, поэтому он обеспечивает меньший ток.
Выводы
На схеме ниже показано, как функциональные блоки расположены в полной схеме, от ПЗУ внизу до выхода наверху. Блок с плавающей запятой построен с постоянной шириной для каждого бита - 38,5 мкм, поэтому схема спроектирована таким образом, чтобы вписаться в эту ширину. Для сравнения, большая часть схем Pentium была организована программно с использованием стандартно-ячеистого подхода, который намного проще в проектировании, но не такой плотный. Поскольку каждый бит в блоке вычислений с плавающей запятой повторяется много раз, ручная оптимизация здесь оправдывает себя.
Эта схема содержит 47 транзисторов. Поскольку она дублируется один раз для каждого бита, в общей сложности она имеет 4042 транзистора, что составляет ничтожную часть от 3,1 миллиона транзисторов Pentium. Для сравнения, процессор MOS 6502 имеет около 3500-4500 транзисторов, в зависимости от того, как считать. Другими словами, схема для выбора слова из ПЗУ Pentium примерно такая же сложная, как весь процессор 6502. Это иллюстрирует резкий рост сложности процессора, описываемый законом Мура.
Спасибо за внимание.