Разработка и производство троичных микросхем на обычном техпроцессе CMOS
Многие утверждали, что строят троичный компьютер из дискретных компонентов, однако некоторые разрабатывают и заказывают троичные микросхемы уже прямо сейчас :)
Свою первую троичную микросхему (один и тот же кристалл был упакован в 3 разных размера — DIP40, DIP28 и SOIC16) я разработал и заказал в 2015 году. На сегодняшний день это был мой первый и последний опыт подобного рода, однако есть желание и силы попробовать ещё раз — с учётом накопленного опыта и с прицелом на реальную полезность как например троичная программируемая логика и/или троичный микроконтроллер — что-то, что сразу же можно было бы использовать.
А теперь о том как собственно я это сделал и что из этого получилось. Моя троичная эпопея началась в конце 2004 года, когда на моём форуме любителей ретрокомпьютеров и самодельной электроники nedoPC начались обсуждения сбалансированной троичной системы счисления и возможности постройки новых компьютеров на её основе. Тогда форумчане стали искать материалы на данную тему в сети и многие к своему удивлению узнали, что троичные компьютеры разрабатывались уже очень давно и даже выпускались серийно — в частности троичная ЭВМ «Сетунь», выпускавшаяся с 1959 года, была спроектирована Брусенцовым Николаем Петровичем и группой единомышленников в вычислительном центре МГУ и была достаточно широко распространена по стране.
Важно понимать, что под троичной системой счисления мы в первую очередь подразумеваем «уравновешенную» троичность (balanced ternary), где используются три состояния -1,0,+1 (а вовсе не 0,1,2 как многие могли бы подумать). И вот мы на форуме начали пробовать разнообразные варианты построения троичных элементов из доступных компонентов — мы попробовали компараторы:
биполярные транзисторы:
оптопары:
и наконец аналоговые ключи:
по пути у меня получались некоторые гибриды — например компараторы и КМОП-ключи:
а также биполярные транзисторы, оптопары и КМОП-ключи:
(и в 2011 году я даже выкладывал видео работы полного троичного сумматора, построенного на таких гибридах :)
Но по простоте и скорости работы схемы на DG403 перевесили все варианты — я создал TRIMUX — сдвоенный троичный селектор (мультиплексор/демультиплексор):
Впоследствии haqreu сделал свою версию этой платки на компонентах поверхностного монтажа и начал строить на них троичный компьютер TRIADOR (архитектура которого также родилась в обсуждениях на форуме nedoPC) — подробнее см. тут.
Так вот — к 2015 году у меня сложилось устойчивая убеждённость, что основой троичной схемотехники должен стать троичный селектор, на котором можно построить ВСЁ. Но чтобы получить что-то более менее полезное нужны сотни троичных селекторов. Паять сотни тримуксов не хотелось, а хотелось сделать собственную троичную микросхему —, но как? FPGA не метод — там внутри всё двоичное (представлять троичный сигнал парой двоичных скучно и неинтресно). Если делать реальную микросхему, то из доступного есть только обычный техпроцесс CMOS на котором в последние несколько десятилетий делается практически всё (меняются лишь размеры транзисторов — они становятся всё меньше и меньше):
Покупать коммерческий продукт разработки микросхем было нереально (очень дорого), поэтому я нашёл пакет с открытыми исходными кодами Magic VLSI (есть сборки для Linux и Windows), к которому существуют файлы правил например по техпроцессу CMOS 0.5um, на котором в то время принимала заказы американская фирма MOSIS, работающая на базе Университета Южной Калифорнии, и я сориентировался на них, создав официальный бизнес в США т.к. MOSIS с частными лицами не работает (на самом деле я пробовал ещё выйти на одну европейскую фирму, которая также собирает разные дизайны на одну кремниевую пластинку, но они в конце-концов отказались со мной работать).
Для экспериментов я для начала взял бесплатный симулятор LTspiceIV (это Windows программа, которая замечательно работает в Linux из под Wine). И начал строить там обычные (двоичные) CMOS схемы и проверять их на SPICE-моделях реальных PMOS и NMOS транзисторов (такие модели гуляют по интернету и часто могут быть найдены в методичках по VLSI курсам американских университетов):
Я обратил внимание, что в зависимости от того как подключаются входы логического вентиля, порог его срабатывания сдвигается:
Получается, что если взять 3-входовые NAND блоки (у которых порог срабатывания мог сдвигаться вправо) и 3-входовые NOR блоки (у которых порог срабатывания мог сдвигаться влево) и определённым образом подключить их входы к земле либо питанию, можно получить пороги срабатывания разнесённые так, чтобы детектировать промежуточное напряжение на входе — далее получив обычный логический сигнал мы можем подать его (и его инверсию) на CMOS-ключ, способный включать или выключать идущий через него аналоговый сигнал (причём этот ключ работает в обе стороны):
В итоге у меня получилась вот такая схема, имеющая несколько порогов срабатывания:
Данная схема имеет вход управления S, который будучи подключенным к земле, промежуточному напряжению или питанию подключает общий сигнал C к контактам N (negative), O (intermediate) или P (positive) соответственно — в данном случае мы как бы сигнальным нулём считаем промежуточное напряжение, соответственно земля микросхемы это -2.5В, а питание это +2.5В. По ходу рабочей области есть 2 дырки, делающие невозможным случайное КЗ если соседние ключи вдруг одновременно включаться на границе срабатывания активных зон (ведь входы троичного селектора могут быть подключены к земле либо непосредственно к питанию) т.к. эти границы разведены «дырками»:
Воспользовавшись замечательными видео обучалками Magic (тут и тут) я приступил к рисованию транзисторов — чтобы порог срабатывания был ровно посередине размер верхнего транзистора (PMOS) должен быть примерно в 2 раза больше нижнего транзистора (NMOS):
Magic позволяет сохранять нарисованное в библиотеку и затем разрешает создавать из сохранённых библиотечных компонентов более сложные схемы, соединяя блоки слоями металлизации (которых в этом техпроцессе было 3):
Правила техпроцесса позволяют вытаскивать SPICE-модель всей схемы целиком и далее эту модель можно симулировать в ngspice (SPICE симулятор с открытыми исходными кодами, присутствующий например среди стандартных пакетов Debian Linux).
В процессе работы над своей библиотекой мне удалось найти заинтересованную группу людей, состоящую из граждан разных государств, которая согласилась оплатить половину производства (минимальная партия это 40 кристаллов) в обмен на помощь с некоторыми ternary и quaternary схемами — в результате верхняя половина кристалла была занята некими вещами, о которых я говорить пожалуй не вправе, а нижняя имела в себе модуль для выборочного тестирования 16 базовых схем (слева) и собственно троичный селектор (справа):
Всего в этом дизайне было порядка 1500 транзисторов, расположенных на кристалле 2.2×2.2 мм с 40 контактными площадками (по 10 на каждой из сторон) размером 100×100um, и все транзисторы, площадки и сигналы были нарисованы вручную мною с нуля и я, конечно же, не упустил возможности написать свой псевдоним на кристалле под тем самым троичным селектором с указанием года :)
Ведь всегда приятно увидеть собственное имя под «мелкоскопом», представив себя эдаким Левшой, подковавшим блоху ;)
Сдав дизайн в производство в июне 2015, я получил готовые кремниевые кристаллы и 8 упакованных в DIP40 микросхем только в октябре:
Убедившись, что в целом, микросхема работает, я доупаковал оставшиеся кремниевые кристаллы (послав их обратно) в корпуса DIP28 (чтобы отдать ребятам их часть) и SOIC16 где наружу торчат только сигналы троичного селектора (это стоило ещё несколько тыщ):
Для детального тестирования я заказал платку для этих соиков, припаяв туда одну из микросхем:
и снял осциллограммы цифровым осциллографом-приставкой к компьютеру — селектор подключенный в режиме троичного буфера:
и в режиме троичного инвертора:
Тут питание было -5В…+5В (чуть больше обычного напряжения 5В между землёй и питанием, рекомендованных для CMOS 0.5um) и видно, что пороги слега съехали, но в целом среднее напряжение вполне себе определяется. Единственная проблема с этими микросхемами — они работают только на частотах до 10 кГц:(
Моё предположение по поводу плохих динамических характеристик этих микросхем заключается в том, что я пытался самостоятельно выполнить специальное требование производителя — они требовали, чтобы все свободные места на кристалле были заполнены блоками с металлическими слоями, т.к. их отсутствие может повредить при травлении соседним дизайнам, расположенным на той же самой пластине. В результате мне пришлось изобрести свой собственный блок-наполнитель:
который на кристалле заполнял все свободные места:
И похоже я забыл подсоединить его к земле в результате по кристаллу развесились кучи паразитных ёмкостей, съедающих все высокие частоты. В следующий раз я постараюсь этой ошибки избежать, а может вообще возьму коммерческий продукт для работы и воспользуюсь его библиотеками ведь мой селектор может быть составлен из СТАНДАРТНЫХ двоичных компонентов, работая при этом с троичными сигналами. Может быть удастся снова найти заинтересованную группу людей, которая согласилась бы разделить стоимость очередной партии (ведь например одна микросхема из прошлой партии примерно тянет на три сотни баксов по себестоимости). Жду мнений и комментариев от уважаемых хабровчан :)