Одна из недооценённых характеристик ранних микропроцессоров – сложность в распределении питания внутри интегральной схемы. У современного процессора может быть 15 слоёв металла с проводниками, но у чипов из 1970-х, например, у 8086, был всего один металлический слой, из-за чего разводка проводников представляла собой проблему. Сигналы тактовой частоты (синхросигналы) тоже нужно доводить до всех частей чипа, чтобы все они работали синхронно.
На фото ниже показан кристалл 8086 под микроскопом. Виден металлический слой сверху чипа, под которым прячутся кремниевая подложка и поликремниевый слой с проводниками. По периметру кристалла снаружи крохотная проволочная разварка соединяет площадки кристалла с внешними ногами. У 8086 площадка питания расположена сверху, а площадки земли – сверху и снизу. У каждой из них есть два проводка проволочной разварки, что удваивает величину поддерживаемого тока. Видны широкие металлические дорожки, идущие от площадок питания и земли. Они распределяют питание по чипу.
Фото кристалла 8086, где видно место подачи питания (вверху) и контакты земли (вверху и внизу). Цепи синхросигнала расположены внизу.
За синхронизацию в 8086 отвечают два внутренних сигнала тактовой частоты. Внешний осциллятор подаёт сигналы тактовой частоты на 8086 через входящую площадку синхросигнала внизу. Внутренний формирователь синхронизирующих импульсов выдаёт два высокотоковых синхросигнала на основе внешних сигналов. Отметьте, что формирователь синхронизирующих импульсов занимает немалую площадь на чипе.
В данной статье я опишу, как 8086 перенаправляет энергию и синхросигналы по всему чипу, и как цепь формирователя синхронизирующих импульсов генерирует необходимые тактовые импульсы.
8086 состоит из трёх слоёв, в каждом из которых можно размещать проводники. Металлический слой сверху лучше всего подходит для этого из-за низкого сопротивления металла. Под металлом находится поликремниевый слой проводников, состоящий из кремния особого типа. Сопротивление у поликремния выше, чем у металла, но его всё равно можно использовать для передачи сигналов по чипу. На кремниевой подложке формируются транзисторы. Сопротивление кремния относительно велико, поэтому он используется только для передачи сигнала на небольшие расстояния – например, внутри затвора.
Распределение энергии в чипе, подобном 8086, представляет собой некую топологическую головоломку. Из-за его низкого сопротивления металлический слой остаётся единственным практически полезным для разводки питания и земли. Питание и землю нужно подавать почти на все затворы чипа. А поскольку металлический слой у чипа один, питание и земля пересекаться не могут.
Питание и землю нужно подавать почти на все затворы чипа, поскольку стандартному затвору К-МОП требуется земля для его подтягивающей вниз сети и питание для подтягивающего вверх резистора. Однако есть и несколько исключений. 8086 использует динамические логические затворы, особенно в АЛУ – для скорости. Эти затворы притягиваются вверх синхросигналом, поэтому прямая подача питания им не нужна. Также 8086 использует несколько XOR-затворов у проходных транзисторов, которые притягиваются вниз входящим сигналом, поэтому им не нужна земля.
ПЗУ с микрокодом формирует большой участок чипа, которому не нужно питание, только земля. Всё потому, что каждый ряд ПЗУ реализован как очень большой NOR затвор, а подтягивающее его вверх питание расположено с правого края. Поэтому у всех затворов ПЗУ есть питание и земля, хотя кажется, что ПЗУ недостаёт связи с питанием.
На диаграмме ниже размечены металлические проводники в 8086. Питание, соединённое с контактом питания сверху, показано красным. Мощная ветка питания идёт вниз и вправо, а потом разделяется на множество ответвлений. Также питание проходит по границе всего чипа, обеспечивая энергией I/O контакты.
У ИС часто бывает так, что питание и земля расположены в противоположных углах или на противоположных сторонах чипа. Такое расположение облегчает разводку дорожек питания и земли, не пересекающихся друг с другом. 8086 немного необычно располагает питание и землю на противоположных по диагонали контактах, а вторую землю – поближе к контакту питания. Сети питания и земли на чипе разветвляются, как деревья. Эти сети ветвятся, и как переплетённые пальцы, достигают всех частей чипа.
Питание (красное) и земля (синяя, зелёная) на металлическом слое чипа
Контактов земли два. Отмеченные синим дорожки соединяются с верхним контактом земли, а зелёные – с нижним. У отмеченных синем дорожек земли видно толстое ответвление, идущее вниз через центр чипа, и разветвляющееся сложным образом по всем направлениям. Зелёные дорожки идут по низу, с левой и правой сторон чипа, поддерживая контакты I/O, а также соединяясь с ПЗУ микрокода справа внизу.
Отходя дальше от источника питания и подбираясь ближе к конечным точкам, проводники питания становятся всё тоньше, и ток уменьшается. Это видно по проводнику питания, идущему к контактам адресов и данных, ниже. Слева под контактами проводник с землёй очень широкий, однако он постепенно сужается, идя направо. Иначе говоря, слева проводник должен проводить ток со всех контактов, а в самой правой части – только с одного.
Соединение контактов адресов и данных с землёй становится всё тоньше (левая сторона чипа, повёрнутая на 90°)
Металлический слой используется для передачи многих сигналов, а не только питания и земли. Из-за его низкого сопротивления это лучший слой для передачи сигналов. Однако широкое использование проводников питания и земли ограничивает возможности металлического слоя. Дабы избежать пересечений, большинство дорожек для передачи сигнала на металлическом слое идут параллельно дорожкам питания. Слой поликремния снизу используется для перпендикулярной передачи сигналов. Но что будет, если металлическому проводнику нужно пересечь дорожку питания или земли? Решение – провести его снизу [crossunder]. Сигнал спускается на уровень поликремния, пересекает дорожку, и затем поднимается обратно наверх, как показано ниже.
Такие пересечения снизу используются во многих случаях, не только с питанием. Однако чаще всего дело именно в питании. Обычно металлические проводники используются для передачи сигналов в одном направлении, а поликремниевые – для передачи сигналов в перпендикулярном. В разных местах чипа эти направления меняются, и зависят от доминирующего направления передачи сигналов. Поэтому по большей части сигналы путешествуют беспрепятственно. И всё равно им часто приходится перескакивать со слоя на слой.
Сигналы на металлическом слое пересекают дорожки питания снизу посредством поликремниевого слоя
Если питание и земля почти целиком разводятся на металлическом слое, в паре мест эта схема нарушается, и проходящие снизу дорожки используются для подачи питания. Чаще это происходит на самых последних участках дорожек, где ток уже мал. Один из примеров показан ниже – там земля дважды проходит снизу металлического слоя при помощи поликремниевых проводников. Для уменьшения сопротивления эти обходные дорожки сделаны гораздо шире, чем дорожки для сигналов, и также используют кремний и поликремний вместе. Небольшие кружочки – это сквозные контакты [via] между металлическим и поликремниевым слоями.
Композитное фото, на котором показаны обходные дорожки земли, идущие через поликремний под сигнальными дорожками.
Кремниевый слой играет незначительную роль в разводке питания. В частности, многие затворы растянуты так, чтобы доставать до питания и земли с другой стороны. На фото ниже показаны затворы 8086. Обратите внимание на большие участки кремния с примесями (белые), которые вытягиваются, чтобы достать до шин земли и питания. Только малая часть кремния используется для транзисторов, а всё остальное кажется пустой тратой места. Однако эти пустые участки кремния соединяют затворы с металлическими проводниками, подающими питание и землю. Поскольку сопротивление у кремния относительно большое, для этого используются широкие участки, а сами соединения простираются на небольшие расстояния.
Затворы, сделанные посредством кремния с примесями, можно удлинить, чтобы они доставали до шин питания и земли. Для этой фотографии металлический слой был удалён.
После того, как 8086 обновили и физически уменьшились, у него появились другие проблемы с разводкой питания. С совершенствованием технологии производства Intel масштабировала кристаллы – оставляла схемы такими же, но пропорциональна уменьшала их. К сожалению, уменьшение размера дорожек питания уменьшает и максимальный ток. Чтобы решить эту проблему, дорожки питания по периметру чипа усилили, а внутренние схемы и проводку уменьшили. Это видно на фото ниже – например, дорожек питания гораздо больше в правом нижнем углу меньшего 8086.
Две версии 8086 в одном масштабе. Кристалл справа – более поздний вариант, уменьшенный в размере.
Почти все компьютеры используют сигналы тактовой частоты для управления синхронизацией процессора. 8086, как и многие микропроцессоры, использует внутри двухфазный формирователь синхронизирующих импульсов. У двухфазного формирователя синхронизирующих импульсов есть два синхросигнала – когда первый сигнал высокий, второй низкий, и наоборот, как показано ниже. Одни схемы включаются первым синхросигналом, а другие – вторым. Схема работы 8086 подразумевает отсутствие наложения двух фаз синхросигналов и их асимметричность – между моментами, когда один синхросигнал становится низким, а второй растёт, имеется промежуток.
Двухфазный формирователь синхронизирующих импульсов состоит из двух синхросигналов противоположной полярности
Хотя почти все компьютеры используют синхросигналы для синхронизации, машинная архитектура IAS (популярная в 1950-х) была асинхронной, и работала без синхросигналов. Вместо этого каждая цепь по окончанию работы посылала импульс следующей, запуская выполнение следующего шага. Многие ранние компьютеры 1950-х были основаны на этой архитектуре, включая CYCLONE, ILLIAC, JOHNNIAC, MANIAC, SEAC и IBM 701. Исследования возможностей асинхронных вычислений продолжаются, но синхронные системы определённо доминируют.
Процессоры, среди прочего, используют синхросигналы для предотвращения нежелательной обратной связи в цепях. К примеру, рассмотрим программный счётчик, цепь которого увеличивает его значение и передаёт его обратно в счётчик. Вам не нужно, чтобы новое значение постоянно увеличивалось.
Один из методов – использовать триггеры, обновляющие значение в тот момент, когда сигнал переходит из низкого состояния в высокое. Тогда счётчик обновится единственный раз, что и требуется. Однако с двухфазным синхросигналом цепь можно сделать на защёлках, чувствительных к уровню сигнала, устройство которых гораздо проще, чем у триггеров, чувствительных к перемене сигнала. Когда первый синхросигнал высокий, первая половина цепи получает входящее значение и проводит логические вычисления. Когда второй синхросигнал высокий, вторая часть цепи получает результат от первой половины и проводит все необходимые вычисления, а первая часть блокируется. Смысл в том, в один момент времени может обновляться только половина цепи, что и предотвращает нежелательную обратную связь.
У 8086 строгие требования к входящему синхросигналу, который должен находиться на высоком уровне треть времени. Обычно генерацией синхросигнала в 8086 занимался чип 8284 и кварцевый кристалл. Чип делил входящий синхросигнал на 3, чтобы выдавать 33% рабочего цикла синхросигнал, требуемый 8086.
В современных процессорах разводка синхросигнала очень сложная, поскольку сигнал должен доходить до всех частей чипа одновременно. Современные процессоры используют иерархию путей синхросигнала, балансируют время прохождения по каждому из путей, и часто обеспечивают отдельную буферизацию для каждого пути. Для сравнения, разводка синхросигнала в 8086 сделана прямолинейно, поскольку его тактовая частота в 5-10 МГц на несколько порядков меньше, чем у современных процессоров. На таких относительно малых частотах длина пути не имеет особого значения, поэтому тактовые импульсы у 8086 могут идти по извилистым путям.
Поскольку 8086 использовал динамическую логику, у него была и минимально допустимая тактовая частота в 2 МГц. Если частота будет меньше, есть риск утечки заряда до момента его обновления, что может приводить к отказам. Минимальная тактовая частота была неудобна с точки зрения отладки, поскольку замедлить или остановить синхросигнал было невозможно.
Разводка путей синхросигналов в 8086. Зелёный – первый синхросигнал, а красный – второй, с противоположной фазой
На диаграмме выше показана разводка путей синхросигналов в 8086. Фаза 1 отмечена зелёным, а фаза 2 – красным. Внизу чипа цепи формирователя синхронизирующих импульсов выглядят как большие пятна. Оттуда синхросигналы разветвляются по всему чипу. По большей части две фазы синхросигналов идут параллельно, в отличие от питания и земли с их противоположными ветвями.
Поскольку синхросигналы доходят до всех частей чипа, им требуется гораздо больше тока, чем обычным сигналам, и поэтому они по большей части разведены на металлическом слое. Когда синхросигналам нужно пересечь дорожки питания, они проходят под ними снизу, как показано далее. Обратите внимание, что обходные пути для синхросигналов имеют неправильную форму — они гораздо больше, чем обходные пути для других сигналов, например, для шины Q.
Обходящие дорожки питания пути синхросигналов довольно крупные. У шины Q (передающей команды из очереди команд в декодер) они гораздо меньше.
Для обеспечения высокотоковых синхросигналов цепь их формирователя построена на крупных транзисторах. На фото ниже дано сравнение одного из таких транзисторов с типичным логическим транзистором. Транзисторы формирователя примерно в 300 раз крупнее, поэтому он способен давать примерно в 300 раз больший ток. Транзистор сделан из размещенных параллельно 10 транзисторов – 10 вертикальных поликремниевых линий формируют 10 затворов. Каждый синхросигнал формируется парой крупных транзисторов, один из которых подтягивает его вверх, а другой – вниз.
Крупный транзистор в формирователе синхронизирующих импульсов по сравнению с соседним логическим транзистором
На фото ниже видна схема формирователя синхронизирующих импульсов. Цепь разделяет внешний синхросигнал на две фазы, обеспечивает, чтобы они не накладывались друг на друга, и усиливает их. Розовый квадрат слева – площадка для внешнего формирователя синхронизирующих импульсов. Сигнал проходит через ряд транзисторов, заканчивающийся на крупных транзисторах формирователя с правой стороны. Коричневые проводники – поликремний, формирующий затворы. У многих транзисторов затворы идут зигзагами, таким образом большой транзистор умещается на небольшом пространстве.
Цепь формирователя синхронизирующих импульсов на кристалле. Металлический слой удалён. Видны крупные транзисторы. Входящий контакт внешнего синхросигнала – розовый квадрат слева.
Далее приведена немного упрощённая принципиальная схема формирователя синхронизирующих импульсов. Треугольники – высокотоковые формирователи, делающиеся из двух-трёх транзисторов. Инвертирующий вход (кружочек) подтягивает выходной сигнал вниз. Слева у контакта входящего синхросигнала есть небольшой резистор и диод, защищающие его (как и у других входящих контактов). Затем синхросигнал разбивается на неинвертированную фазу (вверху) и инвертированную (внизу).
Упрощённая принципиальная схема формирователя синхронизирующих импульсов в 8086
Дополнительные цепи не дают синхросигналам накладываться: когда один сигнал высокий, это посредством инвертированного входа заставляет второй сигнал быть низким. Чтобы понять, как это работает, начнём с момента, когда сигнал на контакте clk in высокий. Сигналы clk in и clock высокие, а ^clk in^ и ^clock^ – низкие. Теперь, допустим, входящий сигнал на clk in становится низким, что заставляет сигнал на clk in понизиться, а на ^clk in^ — повыситься. Однако выход ^clock^ не может повыситься, пока clock не понизится. После этого сигнал ^clk in^ пойдёт через нижние формирователи, подтягивая ^clock^ вверх после двух вентильных задержек. Смысл в том, что clock и ^clock^ не переключаются одновременно. После того, как один становится низким, происходит задержка перед тем, как второй становится высоким. В результате мы получаем не накладывающиеся синхросигналы.
Это довольно приблизительное описание – в частности, я не уверен в том, что происходит, когда один транзистор подтягивает сигнал вверх, а другой подтягивает тот же самый сигнал вниз. Точная симуляция процесса будет зависеть от относительных размеров двух транзисторов.
8086 использует интересную разводку питания, но современные процессоры работают на совершенно другом уровне. Если 8086 требовались 350 мА, то современному процессору может потребоваться более 100 А. 8086 использовал 3 из 40 своих ног для питания и земли. У современных процессоров Intel Core i5 128 контактов питания и 377 – земли (из общего количества в 1151 контакт). Хотя многочисленные металлические слои в современных чипах решают проблемы 8086 с разводкой, у них появляются новые сложности вроде разделения чипа на участки по питанию, что позволяет отключать неиспользуемые участки.
В современных процессорах с их многогигагерцовыми скоростями разводка синхросигналов устроена гораздо сложнее, ведь лишний миллиметр дорожки может отрицательно повлиять на синхросигнал. Для решения этих проблем современные процессоры используют такие вещи, как Н-деревья или сети распределения синхросигналов, а не просто ветвящиеся дорожки, как у 8086. Если у 8086 была простая цепь, генерирующая двухфазный синхросигнал, современные процессоры часто используют фазовую автоподстройку частоты для синтеза синхросигнала, и множество цепей, разбросанных по всему чипу, выдающих и управляющих синхросигналы. Но, хотя 8086 гораздо проще современных процессоров, в нём можно найти множество примеров интересных цепей.
На фото ниже показан кристалл 8086 под микроскопом. Виден металлический слой сверху чипа, под которым прячутся кремниевая подложка и поликремниевый слой с проводниками. По периметру кристалла снаружи крохотная проволочная разварка соединяет площадки кристалла с внешними ногами. У 8086 площадка питания расположена сверху, а площадки земли – сверху и снизу. У каждой из них есть два проводка проволочной разварки, что удваивает величину поддерживаемого тока. Видны широкие металлические дорожки, идущие от площадок питания и земли. Они распределяют питание по чипу.
Фото кристалла 8086, где видно место подачи питания (вверху) и контакты земли (вверху и внизу). Цепи синхросигнала расположены внизу.
За синхронизацию в 8086 отвечают два внутренних сигнала тактовой частоты. Внешний осциллятор подаёт сигналы тактовой частоты на 8086 через входящую площадку синхросигнала внизу. Внутренний формирователь синхронизирующих импульсов выдаёт два высокотоковых синхросигнала на основе внешних сигналов. Отметьте, что формирователь синхронизирующих импульсов занимает немалую площадь на чипе.
В данной статье я опишу, как 8086 перенаправляет энергию и синхросигналы по всему чипу, и как цепь формирователя синхронизирующих импульсов генерирует необходимые тактовые импульсы.
Распределение питания
8086 состоит из трёх слоёв, в каждом из которых можно размещать проводники. Металлический слой сверху лучше всего подходит для этого из-за низкого сопротивления металла. Под металлом находится поликремниевый слой проводников, состоящий из кремния особого типа. Сопротивление у поликремния выше, чем у металла, но его всё равно можно использовать для передачи сигналов по чипу. На кремниевой подложке формируются транзисторы. Сопротивление кремния относительно велико, поэтому он используется только для передачи сигнала на небольшие расстояния – например, внутри затвора.
Распределение энергии в чипе, подобном 8086, представляет собой некую топологическую головоломку. Из-за его низкого сопротивления металлический слой остаётся единственным практически полезным для разводки питания и земли. Питание и землю нужно подавать почти на все затворы чипа. А поскольку металлический слой у чипа один, питание и земля пересекаться не могут.
Питание и землю нужно подавать почти на все затворы чипа, поскольку стандартному затвору К-МОП требуется земля для его подтягивающей вниз сети и питание для подтягивающего вверх резистора. Однако есть и несколько исключений. 8086 использует динамические логические затворы, особенно в АЛУ – для скорости. Эти затворы притягиваются вверх синхросигналом, поэтому прямая подача питания им не нужна. Также 8086 использует несколько XOR-затворов у проходных транзисторов, которые притягиваются вниз входящим сигналом, поэтому им не нужна земля.
ПЗУ с микрокодом формирует большой участок чипа, которому не нужно питание, только земля. Всё потому, что каждый ряд ПЗУ реализован как очень большой NOR затвор, а подтягивающее его вверх питание расположено с правого края. Поэтому у всех затворов ПЗУ есть питание и земля, хотя кажется, что ПЗУ недостаёт связи с питанием.
На диаграмме ниже размечены металлические проводники в 8086. Питание, соединённое с контактом питания сверху, показано красным. Мощная ветка питания идёт вниз и вправо, а потом разделяется на множество ответвлений. Также питание проходит по границе всего чипа, обеспечивая энергией I/O контакты.
У ИС часто бывает так, что питание и земля расположены в противоположных углах или на противоположных сторонах чипа. Такое расположение облегчает разводку дорожек питания и земли, не пересекающихся друг с другом. 8086 немного необычно располагает питание и землю на противоположных по диагонали контактах, а вторую землю – поближе к контакту питания. Сети питания и земли на чипе разветвляются, как деревья. Эти сети ветвятся, и как переплетённые пальцы, достигают всех частей чипа.
Питание (красное) и земля (синяя, зелёная) на металлическом слое чипа
Контактов земли два. Отмеченные синим дорожки соединяются с верхним контактом земли, а зелёные – с нижним. У отмеченных синем дорожек земли видно толстое ответвление, идущее вниз через центр чипа, и разветвляющееся сложным образом по всем направлениям. Зелёные дорожки идут по низу, с левой и правой сторон чипа, поддерживая контакты I/O, а также соединяясь с ПЗУ микрокода справа внизу.
Отходя дальше от источника питания и подбираясь ближе к конечным точкам, проводники питания становятся всё тоньше, и ток уменьшается. Это видно по проводнику питания, идущему к контактам адресов и данных, ниже. Слева под контактами проводник с землёй очень широкий, однако он постепенно сужается, идя направо. Иначе говоря, слева проводник должен проводить ток со всех контактов, а в самой правой части – только с одного.
Соединение контактов адресов и данных с землёй становится всё тоньше (левая сторона чипа, повёрнутая на 90°)
Металлический слой используется для передачи многих сигналов, а не только питания и земли. Из-за его низкого сопротивления это лучший слой для передачи сигналов. Однако широкое использование проводников питания и земли ограничивает возможности металлического слоя. Дабы избежать пересечений, большинство дорожек для передачи сигнала на металлическом слое идут параллельно дорожкам питания. Слой поликремния снизу используется для перпендикулярной передачи сигналов. Но что будет, если металлическому проводнику нужно пересечь дорожку питания или земли? Решение – провести его снизу [crossunder]. Сигнал спускается на уровень поликремния, пересекает дорожку, и затем поднимается обратно наверх, как показано ниже.
Такие пересечения снизу используются во многих случаях, не только с питанием. Однако чаще всего дело именно в питании. Обычно металлические проводники используются для передачи сигналов в одном направлении, а поликремниевые – для передачи сигналов в перпендикулярном. В разных местах чипа эти направления меняются, и зависят от доминирующего направления передачи сигналов. Поэтому по большей части сигналы путешествуют беспрепятственно. И всё равно им часто приходится перескакивать со слоя на слой.
Сигналы на металлическом слое пересекают дорожки питания снизу посредством поликремниевого слоя
Если питание и земля почти целиком разводятся на металлическом слое, в паре мест эта схема нарушается, и проходящие снизу дорожки используются для подачи питания. Чаще это происходит на самых последних участках дорожек, где ток уже мал. Один из примеров показан ниже – там земля дважды проходит снизу металлического слоя при помощи поликремниевых проводников. Для уменьшения сопротивления эти обходные дорожки сделаны гораздо шире, чем дорожки для сигналов, и также используют кремний и поликремний вместе. Небольшие кружочки – это сквозные контакты [via] между металлическим и поликремниевым слоями.
Композитное фото, на котором показаны обходные дорожки земли, идущие через поликремний под сигнальными дорожками.
Кремниевый слой играет незначительную роль в разводке питания. В частности, многие затворы растянуты так, чтобы доставать до питания и земли с другой стороны. На фото ниже показаны затворы 8086. Обратите внимание на большие участки кремния с примесями (белые), которые вытягиваются, чтобы достать до шин земли и питания. Только малая часть кремния используется для транзисторов, а всё остальное кажется пустой тратой места. Однако эти пустые участки кремния соединяют затворы с металлическими проводниками, подающими питание и землю. Поскольку сопротивление у кремния относительно большое, для этого используются широкие участки, а сами соединения простираются на небольшие расстояния.
Затворы, сделанные посредством кремния с примесями, можно удлинить, чтобы они доставали до шин питания и земли. Для этой фотографии металлический слой был удалён.
После того, как 8086 обновили и физически уменьшились, у него появились другие проблемы с разводкой питания. С совершенствованием технологии производства Intel масштабировала кристаллы – оставляла схемы такими же, но пропорциональна уменьшала их. К сожалению, уменьшение размера дорожек питания уменьшает и максимальный ток. Чтобы решить эту проблему, дорожки питания по периметру чипа усилили, а внутренние схемы и проводку уменьшили. Это видно на фото ниже – например, дорожек питания гораздо больше в правом нижнем углу меньшего 8086.
Две версии 8086 в одном масштабе. Кристалл справа – более поздний вариант, уменьшенный в размере.
Тактовые импульсы и процессоры
Почти все компьютеры используют сигналы тактовой частоты для управления синхронизацией процессора. 8086, как и многие микропроцессоры, использует внутри двухфазный формирователь синхронизирующих импульсов. У двухфазного формирователя синхронизирующих импульсов есть два синхросигнала – когда первый сигнал высокий, второй низкий, и наоборот, как показано ниже. Одни схемы включаются первым синхросигналом, а другие – вторым. Схема работы 8086 подразумевает отсутствие наложения двух фаз синхросигналов и их асимметричность – между моментами, когда один синхросигнал становится низким, а второй растёт, имеется промежуток.
Двухфазный формирователь синхронизирующих импульсов состоит из двух синхросигналов противоположной полярности
Хотя почти все компьютеры используют синхросигналы для синхронизации, машинная архитектура IAS (популярная в 1950-х) была асинхронной, и работала без синхросигналов. Вместо этого каждая цепь по окончанию работы посылала импульс следующей, запуская выполнение следующего шага. Многие ранние компьютеры 1950-х были основаны на этой архитектуре, включая CYCLONE, ILLIAC, JOHNNIAC, MANIAC, SEAC и IBM 701. Исследования возможностей асинхронных вычислений продолжаются, но синхронные системы определённо доминируют.
Процессоры, среди прочего, используют синхросигналы для предотвращения нежелательной обратной связи в цепях. К примеру, рассмотрим программный счётчик, цепь которого увеличивает его значение и передаёт его обратно в счётчик. Вам не нужно, чтобы новое значение постоянно увеличивалось.
Один из методов – использовать триггеры, обновляющие значение в тот момент, когда сигнал переходит из низкого состояния в высокое. Тогда счётчик обновится единственный раз, что и требуется. Однако с двухфазным синхросигналом цепь можно сделать на защёлках, чувствительных к уровню сигнала, устройство которых гораздо проще, чем у триггеров, чувствительных к перемене сигнала. Когда первый синхросигнал высокий, первая половина цепи получает входящее значение и проводит логические вычисления. Когда второй синхросигнал высокий, вторая часть цепи получает результат от первой половины и проводит все необходимые вычисления, а первая часть блокируется. Смысл в том, в один момент времени может обновляться только половина цепи, что и предотвращает нежелательную обратную связь.
У 8086 строгие требования к входящему синхросигналу, который должен находиться на высоком уровне треть времени. Обычно генерацией синхросигнала в 8086 занимался чип 8284 и кварцевый кристалл. Чип делил входящий синхросигнал на 3, чтобы выдавать 33% рабочего цикла синхросигнал, требуемый 8086.
В современных процессорах разводка синхросигнала очень сложная, поскольку сигнал должен доходить до всех частей чипа одновременно. Современные процессоры используют иерархию путей синхросигнала, балансируют время прохождения по каждому из путей, и часто обеспечивают отдельную буферизацию для каждого пути. Для сравнения, разводка синхросигнала в 8086 сделана прямолинейно, поскольку его тактовая частота в 5-10 МГц на несколько порядков меньше, чем у современных процессоров. На таких относительно малых частотах длина пути не имеет особого значения, поэтому тактовые импульсы у 8086 могут идти по извилистым путям.
Поскольку 8086 использовал динамическую логику, у него была и минимально допустимая тактовая частота в 2 МГц. Если частота будет меньше, есть риск утечки заряда до момента его обновления, что может приводить к отказам. Минимальная тактовая частота была неудобна с точки зрения отладки, поскольку замедлить или остановить синхросигнал было невозможно.
Разводка путей синхросигналов в 8086. Зелёный – первый синхросигнал, а красный – второй, с противоположной фазой
На диаграмме выше показана разводка путей синхросигналов в 8086. Фаза 1 отмечена зелёным, а фаза 2 – красным. Внизу чипа цепи формирователя синхронизирующих импульсов выглядят как большие пятна. Оттуда синхросигналы разветвляются по всему чипу. По большей части две фазы синхросигналов идут параллельно, в отличие от питания и земли с их противоположными ветвями.
Поскольку синхросигналы доходят до всех частей чипа, им требуется гораздо больше тока, чем обычным сигналам, и поэтому они по большей части разведены на металлическом слое. Когда синхросигналам нужно пересечь дорожки питания, они проходят под ними снизу, как показано далее. Обратите внимание, что обходные пути для синхросигналов имеют неправильную форму — они гораздо больше, чем обходные пути для других сигналов, например, для шины Q.
Обходящие дорожки питания пути синхросигналов довольно крупные. У шины Q (передающей команды из очереди команд в декодер) они гораздо меньше.
Для обеспечения высокотоковых синхросигналов цепь их формирователя построена на крупных транзисторах. На фото ниже дано сравнение одного из таких транзисторов с типичным логическим транзистором. Транзисторы формирователя примерно в 300 раз крупнее, поэтому он способен давать примерно в 300 раз больший ток. Транзистор сделан из размещенных параллельно 10 транзисторов – 10 вертикальных поликремниевых линий формируют 10 затворов. Каждый синхросигнал формируется парой крупных транзисторов, один из которых подтягивает его вверх, а другой – вниз.
Крупный транзистор в формирователе синхронизирующих импульсов по сравнению с соседним логическим транзистором
На фото ниже видна схема формирователя синхронизирующих импульсов. Цепь разделяет внешний синхросигнал на две фазы, обеспечивает, чтобы они не накладывались друг на друга, и усиливает их. Розовый квадрат слева – площадка для внешнего формирователя синхронизирующих импульсов. Сигнал проходит через ряд транзисторов, заканчивающийся на крупных транзисторах формирователя с правой стороны. Коричневые проводники – поликремний, формирующий затворы. У многих транзисторов затворы идут зигзагами, таким образом большой транзистор умещается на небольшом пространстве.
Цепь формирователя синхронизирующих импульсов на кристалле. Металлический слой удалён. Видны крупные транзисторы. Входящий контакт внешнего синхросигнала – розовый квадрат слева.
Далее приведена немного упрощённая принципиальная схема формирователя синхронизирующих импульсов. Треугольники – высокотоковые формирователи, делающиеся из двух-трёх транзисторов. Инвертирующий вход (кружочек) подтягивает выходной сигнал вниз. Слева у контакта входящего синхросигнала есть небольшой резистор и диод, защищающие его (как и у других входящих контактов). Затем синхросигнал разбивается на неинвертированную фазу (вверху) и инвертированную (внизу).
Упрощённая принципиальная схема формирователя синхронизирующих импульсов в 8086
Дополнительные цепи не дают синхросигналам накладываться: когда один сигнал высокий, это посредством инвертированного входа заставляет второй сигнал быть низким. Чтобы понять, как это работает, начнём с момента, когда сигнал на контакте clk in высокий. Сигналы clk in и clock высокие, а ^clk in^ и ^clock^ – низкие. Теперь, допустим, входящий сигнал на clk in становится низким, что заставляет сигнал на clk in понизиться, а на ^clk in^ — повыситься. Однако выход ^clock^ не может повыситься, пока clock не понизится. После этого сигнал ^clk in^ пойдёт через нижние формирователи, подтягивая ^clock^ вверх после двух вентильных задержек. Смысл в том, что clock и ^clock^ не переключаются одновременно. После того, как один становится низким, происходит задержка перед тем, как второй становится высоким. В результате мы получаем не накладывающиеся синхросигналы.
Это довольно приблизительное описание – в частности, я не уверен в том, что происходит, когда один транзистор подтягивает сигнал вверх, а другой подтягивает тот же самый сигнал вниз. Точная симуляция процесса будет зависеть от относительных размеров двух транзисторов.
Заключение
8086 использует интересную разводку питания, но современные процессоры работают на совершенно другом уровне. Если 8086 требовались 350 мА, то современному процессору может потребоваться более 100 А. 8086 использовал 3 из 40 своих ног для питания и земли. У современных процессоров Intel Core i5 128 контактов питания и 377 – земли (из общего количества в 1151 контакт). Хотя многочисленные металлические слои в современных чипах решают проблемы 8086 с разводкой, у них появляются новые сложности вроде разделения чипа на участки по питанию, что позволяет отключать неиспользуемые участки.
В современных процессорах с их многогигагерцовыми скоростями разводка синхросигналов устроена гораздо сложнее, ведь лишний миллиметр дорожки может отрицательно повлиять на синхросигнал. Для решения этих проблем современные процессоры используют такие вещи, как Н-деревья или сети распределения синхросигналов, а не просто ветвящиеся дорожки, как у 8086. Если у 8086 была простая цепь, генерирующая двухфазный синхросигнал, современные процессоры часто используют фазовую автоподстройку частоты для синтеза синхросигнала, и множество цепей, разбросанных по всему чипу, выдающих и управляющих синхросигналы. Но, хотя 8086 гораздо проще современных процессоров, в нём можно найти множество примеров интересных цепей.
ikle
Там уже не просто исследования, там разработка промышленной технологии, спонсируемая DARPA в пределах программы ERI в прошлом году, в том числе и An Open-Source Design Flow for Asynchronous Circuits, уже доступны инструменты.