Пока наши соседи по цеху спорят о конкурентоспособности Эльбруса, я продолжаю идти к своей заветной цели — склепать свой собственный Отечественный Процессор (TM). Ранее я рассказывал про программу, финансируемую Google, которая позволяет энтузиастам бесплатно получить прототип их разработок в кремнии. Если вы хотите увидеть всю подноготную процесса производства современных чипов, то этот туториал точно для вас!


Как разработать микросхему, от идеи до результата. Ссылки на все статьи։

В этой серии статьей мы раскроем всё: от получения документации до layout-а. Но перед этим давайте разберёмся, как вообще разрабатывают микросхемы.

50 микросхем, бесплатно для всех проектов с открытым исходным кодом


Статья выходит очень вовремя, ведь в Декабре будет MPW-4 от SkyWater! У SkyWater было уже три производства микросхем по технологии Sky130, и очень даже успешных! Для желающих БЕСПЛАТНО есть возможность произвести вашу микросхему в количестве 50 штук. Для этого надо перейти на страницу MPW-4 от Efabless и зарегистрироваться, к сожалению, анонса на сайте пока нету, а регистрация на MPW-3 закончилась 15 ноября. Есть ещё несколько требований, например, ваша микросхема, должна быть с открытым исходным кодом, подробнее можно узнать, заглянув в анонс.

Вообще, мне удалось познакомиться с разработчиками и они очень классные люди! Спасибо комьюнити, и спасибо компаниям и странам, которые профинансировали просто отличный софт, с которым нам предстоит познакомиться в этой статье.

Спойлер։ Готовая схема NAND


Но ведь Sky130 не новая, так почему же сейчас вдруг выходит эта статья? Дело в том, что Sky130 имеет полностью открытую PDK, и это первая в мире технология, документация которой доступна для всех. Также примечательно то, что данная технология заставила Open Source комьюнити попотеть, ибо вместе с выходом технологии стали доступны KLayout и Magic VLSI, а команде Efabless удалось на основе OpenRoad сделать OpenLane для синтеза цифровых микросхем. Наряду с уже существующими NGSPICE и XSCHEM это позволяет разрабатывать полностью открытые микросхемы от идеи до готового продукта просто огромные проекты, возможности реально неограниченны (если вы уместите всё в 10 квадратных миллиметров).

Микросхема изнутри


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

Иногда микросхемы делают по технологии Flip-Chip, которая не использует провода, вместо этого используются металлические контакты, которые напрямую подключены к верхним слоям металла внутри микросхемы.


Источник

У sky130 есть возможность использовать корпус WCLSP 6x10:


Если вам захочется использовать другой корпус, для вас доступен ChipIgnite, всего за $9,999 вы можете получить 100 микросхем в корпусе QFN, либо 300 штук в корпусе WCSP. А за 1000 штук вы заплатите всего каких-то жалких двадцать киллобаксов.

Несмотря на корпус, который прямо-таки просится быть Flip-Chip, всё-таки нам доступен только WireBond. Вот оболочка, в которую нам предстоит интегрировать нашу схему։



▍ Подложки


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

Для того чтобы эта компания могла произвести вашу микросхему, эту самую микросхему нужно сначала разработать, а затем только передать её в производство. Для этого используется стандарт файлов GDS-II, либо другие стандарты. GDS-II является многослойной векторной картинкой, которая соответствует требованиям этой самой компании. Но как нам узнать, какие файлы соответствуют этим требованиям или нет? Здесь на помощь приходит так называемый Process Design Kit или PDK.

Пример микросхемы по технологии sky130: ускоритель расчёта SHA3․



Process Design Kit


Process Design Kit содержит следующие компоненты:

  • Технологическая документация. Этот файл содержит на удобно перевариваемом формате описание и требования к конечному файлу, кроме того, эта документация содержит примеры и описания транзисторов. Для sky130 документацию можно найти тут
  • Модели для симуляции элементов схемы в формате SPICE. Эти модели используются для симуляции компонентов интегральной схемы. Перед тем как нарисовать структуру кремния, вам нужно сначала определиться со схемой, которую вы будете рисовать. Эти модели можно найти на гитхабе гугла.
  • Технологические файлы, которые позволяют связать файл GDS-II и слои при производстве. Для Magic/Klayout эти файлы можно найти на гитхабе Open_PDKs
  • Библиотека примитивов — Транзисторов, резисторов, конденсаторов и так далее для схематического представления, которые можно найти на гитхабе
  • Правила Design Rule Check. Эти файлы привязаны к конкретному программному обеспеченью и содержат список правил, на которые в автоматическом режиме будут проверяться ваши интегральные схемы или её отдельные компоненты.
  • Parasitic Extraction rules или правила описывающие паразитические свойства. Эти правила позволяют просчитать паразитные конденсаторы, индукторы и резисторы. После PEX
    сгенерированный netlist содержит паразитные конденсаторы и резисторы, а сам netlist используется чтобы произвести симуляцию компонентов как можно более приближённой к реальной интегральной схеме.
  • Layout versus Schematic check или правила, которые позволяют получить из вашего GDS-II так называемый netlist. После чего его можно сравнить со схемой, которую вы нарисовали и уже просимулировали. DRC/PEX/LVS правила для Magic можно найти на гитхабе Open_PDKs


Skywater 130nm


Для этого давайте сначала разберём, что нам предоставил Skywater/Google для разработки микросхемы по технологии SKY130. Гуглим SKY130 и кроме кучки новостей, находим новость от efabless и офицальную документацию SKY130. Практически вся документации находится в виде ту-ду:

analog magic todo.PNG

Тем не менее гуглим sky130 туториал и находим кучу всего, и все они неполные. К счастью, ваш покорный слуга не первый год в разработке интегральных схем, и поэтому я просто нашёл, как можно больше информации и решил всё расписать по частям в этой статье. Огромное количество информации найти нельзя, поскольку было получено лично от разработчиков в Slack канале sky130. Но перед тем как продолжить — немного теории.

Custom Design Flow


Custom Design Flow используется для того, чтобы разрабатывать аналоговые либо смешанные схемы. Custom Design Flow обладает наибольшей гибкостью, ибо позволяет разработать абсолютно любую схему, но её недостатком является долгий цикл разработки.

Custom Design Flow состоит из нескольких фаз, но при этом некоторые фазы повторяются, если результат не удовлетворяет требованиям. Вот эти фазы։



▍ Спецификация


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

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

Пример спецификации к компоненту ввода вывода։



▍ Схемотехническое представление


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

Пример схемотехнического представления։



▍ Testbench


Testbench это схема, в которой вашим компонентам предстоит работать. У вас может быть бесконечное количество testbench, и подкомпонентов, и testbench-ов для этих подкомпонентов. Testbench используется для того, чтобы измерить необходимые характеристики. Про это будет далее.

Пример testbench для NAND:



▍ Симуляция схематического представления.


Для того чтобы просимулировать схематическое представление и testbench конвертируется в netlist в формате SPICE. Для создания схематического представления я использовал XSCHEM и сгенерировал Netlist в формате SPICE на основе testbench, которое в свою очередь содержит определение нашей схемы.

Затем я скормил Netlist симулятору NGSPICE, который посчитал все параметры, которые, мы выставим. Также, NGSPICE сгенерировал результат симуляции, который содержит значения напряжения и тока в зависимости от времени. Затем мы просим NGSPICE нарисовать нам графики зависимости напряжения на выходе и входе в зависимости от времени. А еще мы можем попросить NGSPICE провести любые измерения:



▍ Разработка Layout


Layout это такое представление, в котором, содержатся полигоны, которые будут нанесены на маску. Затем эта маска будет использоваться для того, чтобы создать диффузии, слои металла, и всё остальное! Magic VLSI и Klayout могут использоваться для создания GDS-II файлов, которые содержат полигоны и прочие примитивные объекты по типу текста. Мы будем использовать Klayout, поскольку у него значительно проще интерфейс.

Пример, на картинке видны отдельные слои։ диффузий металла и межслойных соединений, а также всё в сборе:



▍ Design Rule Check (DRC)


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

Для sky130 используется программа Magic VLSI, и правила, написанные именно под эту программу. Если вам захочется использовать что-то другое, то вам придётся написать эти правила уже под вашу программу.

После того как вы установите Open_PDKs по пути $PDK_ROOT/sky130A/libs.tech/magic/sky130A.tech, вы найдёте правила DRC для Magic. Используя именно эти правила Magic VLSI будет проверять ваш Layout.

На картинке видно, слева направо: Layout, правила Magic VLSI для sky130, результат проверки DRC.

Кликабельно

▍ Layout Versus Schematic (LVS)


Layout Versus Schematic используется для того, чтобы удостовериться, что разработанный Layout соответствует схематическому представлению. Это проверка сначала использует Layout и правила Device Extraction для того, чтобы получить схематическое представление, которое получится в результате производства данной микросхемы или компонента.

Мы будем использовать Magic VLSI для того, чтобы сгенерировать Netlist из Layout-а, затем сгенерированный Netlist сравнивается с Netlist-ом соответствующего компонента. Сначала сравниваются компоненты и их параметры: Транзисторы, резисторы, конденсаторы, затем сравниваются все подключения между ними и пинами компонента. Про это будет далее.


Если вы попробуете сравнить сгенерированный Netlist и Netlist-ом соответствующий компонент, скорее всего у вас будет ошибка, дело в том, что netgen не знает, что у транзисторов симметричный drain и source. Также, netgen не будет знать, о том, что транзисторы, подключённые так, чтобы все ножки были подключены друг к другу, можно объединить, суммировав параметр W.

Аналогично с последовательным подключением drain, source, если gate и bulk подключены аналогичной ножке других транзисторов, то эти транзисторы можно объединить, суммировав параметр L. Не нашёл информации об этом, чтобы правильно всё расписать, тем не менее решил упомянуть.


▍ Parasitics EXtraction (PEX)


Parasitics EXtraction похож на Device Extraction, но кроме компонентов и их подключений так же извлекаются паразитные конденсаторы и резисторы. Таким образом, получается модель для симуляции, максимально приближённая к готовой микросхеме. Для этого мы будем использовать Magic VLSI. Очевидно, чтобы Magic VLSI знал, характеристики металлов и других проводников, нужен технологический файл.

Слева направо, layout, правила паразитных ёмкостей и сопротивлений, и зеленным отмечены компоненты нашей схемы, красным паразитные ёмкости, синим паразитные сопротивления.



Digital Design Flow


В современном мире микросхем, вручную разработать и проверить микросхему практически невозможно из-за количества её компонентов. В этом плане нам помогает «поток разработки цифровых компонентов».

«Поток разработки цифровых компонентов» позволяет разрабатывать цифровые части микросхем, используя высокоуровневый язык, называемый Register Transfer Level, который позволяет разрабатывать по-настоящему огромные микросхемы. Всё — начиная от процессоров, ускорителей, ПЛИС и видеопроцессоров разрабатываются с использованием Register Transfer Level и Digital Design Flow, хотя они содержат очень много аналоговых или смешанных компонентов, цифровые компоненты занимают значительно бОльшую площадь, чем аналоговые.

Следующие шаги используются для разработки цифровых микросхем:



▍ Register Transfer Level (RTL)


Для того чтобы разработать цифровую микросхему используется RTL Verilog, который описывает регистры и изменения в этих самых регистрах. Используя регистры для хранения, ваш конечный продукт может запоминать информацию, например, сетевые пакеты, значение внутри вашего процессора или даже промежуточные результаты расчётов. Если хотите подробнее узнать про RTL Verilog, рекомендую прочитать книгу Харриса и Харриса, либо её перевод на русский, либо её полную версию на русском.

Пример, найти полную версию можно тут:



▍ Design Contraints


Поскольку RTL не предусматривает механизма описания информации:


То для этих целей используется Design Constraints, который обычно сделан в формате Synopsys Design Constraints (.sdc).

Простой пример, в котором объявлен только сигнал тактования и частота.



▍ Синтез


Синтез берёт на вход Design Constraints, RTL код и превращает его в представление из элементов стандартной библиотеки. Для этого стандартная библиотека, должна быть предварительно разработана. Библиотека стандартных ячеек (Standard Cell Library) содержит в себе один ключевой файл: .lib. Этот файл содержит информацию о задержке каждой ячейки, а также другие важные временные параметры, информацию о размере ячейки и потребление ячейки в разных состояниях. Инструмент синтеза выбирает ячейки и генерирует gate level netlist:


Также именно в этом шаге единицы и ноли, подключённые к входам компонентам, заменяются на Tie-Hi и Tie-Lo компоненты, поскольку прямое подключение входов ячеек к соединениям питания запрещено.

Для синтеза используется Yosys, который я использовал много раз, и он мне он очень понравился. Конечно, были небольшие проблемы, но никаких багов, ломающих мои схемы.

▍ Design For Testability


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

Это позволяет выбирать режим “сканирования”, в котором последовательно на все триггеры перемещаются входные данные, затем режим сканирования выключается, и на тактовый сигнал подаётся один такт, затем результаты снова перемещаются, используя цепочку триггеров на выход, и выход сравнивается с эталонным. Если одна из ячеек повреждена, то выходные данные не будут совпадать с эталонными значениями. Входные данные называются Test pattern.

На самом деле я очень упростил всё, и даже не рассказал про Observability, Testability, Stuck-At, At-speed-testing и огромную кучу всего, но нас это не касается, поскольку для sky130 нет готовых инструментов создания паттернов и замены ячеек на сканируемые. У Synopsys есть ПО, которое называется TetraMAX для создания DFT и их паттернов.

UPD: Есть Cloud-V/Fault.

Источник примера.



▍ Floorplan


Floorplan, один из достаточно ручных шагов. На этом этапе, бородатые дяденьки, сидят и анализируют RTL код и Design Constraints для того, чтобы определить идеальное расположение макрокомпонентов. Макрокомпоненты это Mixed/Analog или даже цифровые блоки, которые будут использоваться в вашем конечном компоненте/интегральной схеме.

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

К сожалению OpenLane, хотя и имеет механизм установки компонентов в конкретных координатах, не обладает теми же инструментами, что Fusion Compiler, ICC II, Innovus и прочие, которые позволяют анализировать связи между макрокомпонентами. OpenLane, может сам выбирать местоположение компонентов, тем не менее этот выбор редко самый оптимальный.

После определения местоположения, также генерируется несколько групп ячейки.

▍ TAP ячейки

Далее в статье мы увидим ошибку о том, что наша стандартная ячейка, не имеет подключения PWELL/NWELL. Эти подключения называются Bulk-ом транзистора. В старых технологиях, подключения BULK были в каждой ячейке, но в новых технологиях длина затвора транзистора была настолько маленькой, что подключения к Bulk, используя контакты начали мешать, поскольку занимали значительную часть в слое контакта, ограничивая уменьшения высоты стандартной ячейки.

Для решения этой проблемы с определённой периодичностью, обычно каждые 30 микрометров, по всей площади вставляются TAP ячейки, который содержат подключения PWELL/NWELL. Каждой TAP ячейки в sky130, хватает, только на 15 микрометров.

Для более развитых технологий, также используются следующие ячейки (необязательно для чтения)
▍ Boundary ячейки

Boundary ячейки используются для того, чтобы разделить макрокомпоненты и места размещения ячейки из стандартной библиотеки. В sky130, судя по всему необходимость в них отсутствует, но в более развитых технологиях, эти ячейки нужны для того, чтобы защитить полисиликоны стандартной ячейки. Если бы Boundary ячейки отсутствовали в этих технологиях во время производства полисиликона по сторонам активного транзистора, то полисиликон транзистора будет разъеден кислотой сильнее, чем соседних транзисторов, вызывая очень неприятные последствия.



▍ Spare ячейки

Иногда после производства микросхемы, бывает необходимость внести изменения в микросхему. Если такая необходимость возникнет, добавление транзисторов является проблемой, поскольку для того, чтобы добавить транзисторы, нужно внести изменения в значительное количество слоёв, например: Полисиликон, N-имплант, P-имплант, Диффузии и другие.

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

▍ Decap ячейки

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

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

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



▍ Filler ячейки

Filler ячейки используются для того, чтобы закрыть ячейки для стандартной ячейки, который остались пустыми. Эта необходимость есть, поскольку многие слои не могут содержать прерываний (дырок), поскольку эти прерывания должны иметь размер в минимум 3 ячейки. Если какая-то стандартная ячейка осталась без соседа, то если расстояния между двумя стандартными ячейками получилась, например, в 2 ячейки, то у вас будет ошибка DRC.

Также Filler ячейки необходимы, поскольку пустые места для стандартной ячейки могут не содержать подключения металлов для линий VDD/VSS. В sky130 необходимость отсутствует, но в более продвинутых технологиях, без Filler ячейки не обойтись.

▍ Placement


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

К сожалению, я не нашёл способа хорошо продемонстрировать это кроме как на примере этой картинки:



▍ Clock Tree Synthesis


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

Рекомендую посмотреть данный плейлист на ютубе, именно на английском, если хотите подробнее узнать о Clock Tree Synthesis.



▍ Routing


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


▍ Signoff


На этом шаге результаты приводятся результаты проверки DRC, LVS, которые полностью соответствуют тем же шагам из Custom Design Flow, но дополнительно добавляется шаг Static Timing Analysis, который проверяет время прибытия данных и синхросигналов для того, чтобы удостовериться, что не нарушаются требования триггера, по времени прибытия данных (Setup Timing) и по времени, когда входные данные меняются (Hold Timing). Для этого в OpenLane используется OpenSTA. Хотя это и важные вещи, которые стоит обсудить, я не буду об этом говорить в текущей статье. Для интересующихся, есть упомянутые видосики, либо огромное количество материала везде, начиная от учебников до статей.

Формальное сравнение используется для того, чтобы сравнить исходный RTL код и выходной netlist, который содержит все компоненты в том числе буферы. Несмотря на это, очень редко выходит ошибка сравнения, ибо один из шагов вносил ошибочные изменения из-за бага в инструменте, или из-за ошибки в файлах библиотеки.

▍ Библиотека Стандартной ячейки


Для того чтобы создать какую-либо схему нам нужны компоненты для этой схемы. Эти компоненты содержатся в Библиотеке Стандартной ячейки. Кроме layout файлов, также содержится lef файлы, .lib файлы и SPICE netlist файлы.

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

Пример LEF файла нашей NAND ячейки:

lef.png


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

SPICE netlist очень редко используется для симуляций Mixed-Signal компонентов, и изредка для более точной симуляции информации о задержках.

В этой части мы разберём разработку элементарной ячейки на примере элемента NAND.

Требование заказчика к нашей NAND


Требование заказчика, это такой кусок информации, который содержит список требований к характеристикам и функционалу нашего компонента. Вот, давайте разберём на примере:

Напряжение VPWR

1.65-1.95V

Длительность Rise/fall (10%-90%)

<5ns

Задержка

<5ns

Нагрузка

20ff

Температурный диапазон

от -40 до +125 градусов Цельсия

Мощность

<20mWatt

Функция

NAND

Совместимость с Place-and-Route инструментами и библиотеками Standard Cell

В соответствии с sky130_fd_sc_hd


▍ Нагрузочный конденсатор


Особенность CMOS логики в том, что входы имеют ёмкость, поэтому для того чтобы провести симуляцию нашей модели, нам нужно подключить конденсаторную ёмкость на выходе нашего компонента. Для этого мы взяли 20 фемтоФарад, поскольку именно такая указана ёмкость, которую наш компонент должен поддерживать.

Обычно в библиотеке у нас есть много вариантов одной логической ячейки. Например, у нас могут быть инверторы, которые могут нести 20 фемтоФарад, 40 фемтоФарад и так до, например, 320 фемтоФарад.

Чтобы не указывать конкретное значение, поскольку само значение ничего не значит, без информации о входной ёмкости каждой ячейки, был придуман параметр «размер» ячейки. Все стандартные ячейки используют стандарт де-факто, в котором размером 1 берут ёмкость четырёх инверторов размера 1.

А размер 1 инвертора берётся так, чтобы идеально иметь два транзистора PMOS/NMOS с конкретным размером диффузий. Если вы попробуйте увеличить размер транзистора, то у вас ничего не получится, поскольку ваша стандартная библиотека имеет заранее продуманные размеры NWELL/PWELL и диффузий, в которые просто физически невозможно поместить больше транзисторов.

Вот, например, инвертор 1 и инвертор 4 рядом, как видим, точки соприкосновения идеально совпадают:



▍ Corner cases, напряжение и температура


После производства чипа, транзисторы могут получиться как слабыми, так и более сильными чем типичный случай. Для того, чтобы произвести симуляцию PDK имеет три варианта моделей։ FF, TT и SS, они расшифровываются вот так։ Fast-Fast, Typical-Typical и Slow-Slow. Первый знак определяет характеристики NMOS, а второй PMOS. Бывают и другие вариации.

Также на характеристики транзистора влияет важный параметр температуры. Выше температура — больше сопротивление, транзисторы медленнее и имеют меньший ток в открытом состоянии.

Я не нашёл информацию о поддерживаемых значениях температуры, поэтому возьмём её от балды -40 до +125. Из документации мы узнаём, что модели некоторых ячеек работают между -50 до +150 градусов, но про остальные ячейки информации ноль. Предположим, что все ячейки будут адекватно работать под наши значения от балды.

В свою очередь, напряжение питания, так же влияет на время перехода выхода из одного состояния в другое. Выше напряжение — переход происходит быстрее, ниже напряжение — медленнее. Для этого проекта, мы возьмём центральное значение 1.8В, поскольку используем транзисторы, типичное рабочее напряжение которого 1.8В. Из документации мы увидим, что модели транзисторов, которые мы будем использовать, поддерживают напряжение до 1.95В. Давайте возьмём границу сверху 1.95В (1.8 + 0.15) и соответственно границу снизу 1.65В (1.8-0.15).

Зачем нам это знать? Чтобы измерить максимальную частоту, время Rise/Fall time и задержку нам нужно использовать самый медленный вариант нашей схемы։ SS, минимальное напряжение и высокую температуру. А чтобы измерить потребляемую мощность нужно использовать низкую температуру, высокое напряжение и вариант FF, поскольку быстрые транзисторы потребляют бОльшую мощность. В этой части мы не будем измерять потребляемую мощность.

▍ Rise time и Fall time


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

Чтобы подсказать инструменту, насколько быстро происходит переход из одного состояния в другое, используются эти два параметра. Rise time измеряется с момента пересечения выходного сигнала 10% от напряжения питания до момента пересечения 90%. Аналогично Fall Time измеряет обратный процесс.

Зелёным отмечен Fall Time и синим Rise time:



▍ Задержка


Кроме времени перехода, также у ячейки, есть очень важная характеристика: Задержка. Задержка описывает время, необходимое, чтобы изменение на входе вызвали изменения на выходе. Для её измерения мы берём момент, когда вход пересекает 50% от напряжения источника и момент, когда выход преодолевает те же 50%. 50% взято неспроста, это нужно для того, чтобы минимизировать влияние Rise/Fall Time. Для максимальной точности измеряются задержки всех комбинаций переходов.

Не буду вдаваться в подробности, если вас интересует: standard cell delay.


Также стоит отметить, что ячейки имеющие состояния, например, триггеры имеют другие временные параметры: Setup Time, Hold Time, Removal Time, Revoery Timer и другие. Я решил их не освещать в этой статье, хотя это очень часто и остается нераскрытой темой.

▍ Площадь компонента


Это важный параметр, поскольку иногда размер подложки имеет критическое значение. Чтобы измерить этот параметр просто берём рулетку, меряем высоту, меряем длину, умножаем.

Например, 2.72мкм на 1.77 мкм = 4.8144 мкм^2.



▍ Как измерять мощность


У наших компонентов два важных параметра мощности. Активная и мощность утечки (Leakage Power). Но важно учесть, что наши компоненты потребляют наибольшую мощность в FF corner, с максимальным напряжением: 1.95В и при минимальной температуре.

Если наша потребляемая мощность соответствует спецификации при данных условиях, то в других состояниях, потребляемая мощность очевидно будет меньше, а значит тем более будет удовлетворять нашим требованиям.

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

Вот, например график тока. Умножив его на наше напряжение, которое мы взяли 1.95В мы получаем мощность утечки:


Для измерения активной мощности компонента, на вход подают тестовый паттерн, который постоянно повторяется. Затем считают среднее значение мощности по длине всего паттерна.


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

▍ Функция ячейки


Функция ячейки, это информация о том, как эта ячейка будет себя вести при определённых обстоятельствах. Например, при подаче на оба входа NAND сигнала 0, у нас на выходе будет единица. Обычно она даётся в форме таблицы, либо в виде типа ячейки.



Вот наш результат, сравним с таблицей и видим, что они полностью соответствуют друг другу:


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

Об авторе


Меня зовут Арман и я окончил институт Synopsys по профилю VLSI разработки микросхем. В основном я занимаюсь разработкой цифровых компонентов для микросхем и IP для ПЛИС. В прошлом я был программистом, писал бэкенд на Node.js и разрабатывал под микроконтроллеры, но решил пересесть на что-то сложнее, попробовать себя, так сказать.

Я открыт к найму, поэтому, если вас интересует найм разработчика цифровых микросхем с тремя годами опыта и очень интересными проектами (Радио-модемы, преобразователи интерфейсов, процессоры и очень многое) напишите мне в личку.

Как разработать микросхему, от идеи до результата. Ссылки на все статьи։

Комментарии (33)


  1. orion24
    07.12.2021 20:00
    +12

    Всё что мне остается это встать и по аплодировать стоя умным людям. Мой мозг нагрелся на первых трёх абзацах и автоматически отключился.


  1. Myclass
    08.12.2021 00:40
    -5

    спасибо та информацию. Очень кстати. Но. Простите, я не понимаю Вас.
    Ваша цель — склепать свой собственный Отечественный Процессор.

    А можно по-меньше пафоса? Вы используете разработки современных иностранных фирм, в каждом названии процесса или шага — английское слово. Но вы всё равно что-то отечественное из иностранных деталей, компонентов и наработок хотите сделать. Просто процессор — это мало? Он должен быть именно отечественным?


    1. ciuafm
      08.12.2021 02:15
      +8

      Видимо вы не дочитали статью. Напишу как понял:

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

      Вопрос автору - насколько это много 10 мм^2 на 130 нм. Приведите пример что туда влезет, например z80 или 80386? Или хотя бы количество транзисторов...


      1. Myclass
        08.12.2021 02:40
        -3

        свой выстраданный процессор

        Согласен. Но обязательно он при этом должен быть ещё каким-то отечественным? Ударение на это слово?

        Ну Intel Pentium 3 имел 128 мм² и был разработан с технологией от 250 до 130 нм. В нём было 9 миллионов транзосторов. Это был 1999 год. В том-же году AMD выпустила свой процессор K7 под 184 мм² и такой-же технологией. Но у них там было 22 миллиона транзисторов. Делим и округляем — получаем около 700 тысяч / 1 миллион. В этом размере были Intel 486DX в году так этак 1989-м. Хотя шутка с Z80 удачная. Там количество транзисторов всего 8500 было.


      1. uis246
        08.12.2021 02:58
        +1

        80386 влезет, но лучше не заниматься извращениями и тянуть архитектуру с кучей костылей


      1. Z2K
        08.12.2021 07:42
        +1

        "не будет никаких закладок, кроме утвержденных компетентными органами." - так неправильно, надо "будут только закладки утвержденные компетентными органами". Они же будут.


      1. amartology
        08.12.2021 12:30
        +4

        Вся фишка в том что весь техпроцесс и ПО полностью опенсорс.
        Техпроцесс не опенсорс, опенсорс — только документация по тому, как производить чипы на этом конкретном процессе на этой конкретной фабрике. Так что Зимбабве может просто так только прийти на Skywater.
        А Skywater, к слову, плотно сидит на американских оборонных контрактах.

        Вопрос автору — насколько это много 10 мм^2 на 130 нм.
        Примерно 200 тысяч вентилей на квадратный миллиметр. 80386 влезет раз двадцать.


    1. Armleo Автор
      08.12.2021 08:32
      +16

      Ваша цель — склепать свой собственный Отечественный Процессор.

      Или не отечественный. Или не процессор.

      А можно по-меньше пафоса? Вы используете разработки современных иностранных фирм, в каждом названии процесса или шага — английское слово. Но вы всё равно что-то отечественное из иностранных деталей, компонентов и наработок хотите сделать. Просто процессор — это мало? Он должен быть именно отечественным?

      Нельзя меньше пафоса. Это неимоверно круто.

      Мой RTL код - отечественный. То где я его произведу, в России по технологии 90нм, в TSMC16 или в Америке роли не играет.

      Вы когда компилируете программу, не ставите же плашку "Американский", если у вас компилятор Clang?

      Перестаньте быть такими пессимистами. Хотите производства микросхем в России - делайте. Только не забывайте, что для этого вам нужно импорта замещение и огромные бабки.


      1. Myclass
        09.12.2021 00:12
        -1

        Вы когда компилируете программу, не ставите же плашку "Американский", если у вас компилятор Clang?

        Сами подтверждаете в большинстве своём неуместность в названии продукта или темы таких слов как отечественный или национальный итд.

        В Германии придумали формат mp3. В названии ноль от страны, языка и создавался этот формат не как национальныое достояние.

        Так можно и Google российским назвать, тк. Сергей Брин из СССР родом.

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

        Ещё раз - спасибо за огромный материал в статье!


        1. Armleo Автор
          09.12.2021 00:40
          +5

          И меньше в рамках понятий, которые придумывают для распила бюджета.

          Вы не правы. Распил бюджета это вторичное. Цель для России - полная автономность. В идеале конечно.

          России не дадут строить свою оборонку, на американском тех процессе. НУЖНО своё делать. Это не хотелка, а необходимость.

          Хотите 10GHz полосы DAC/ADC - надо уже делать самому, ибо готовое американское вам не продадут.

          Хотите рад стойкость для ракет? Снова нужно делать своё. И тд и тп.

          Как все это сделать, если не развивать эту сферу и не создавать искусственные рынки, на которых российский продукт будет в приоритете.


  1. uis246
    08.12.2021 03:36
    +2

    Аплодирую автору. Сам интересовался темой, не осилил. Надеюсь в будущем смогу)


  1. Jahak
    08.12.2021 07:48
    +3

    Очень интересная статья. Прочитал на одном дыхании. Жду продолжения. :)


  1. vipassa
    08.12.2021 07:49
    +2

    Неистово плюсую автору за его цель по созданию собственного отечественного процессора. Мне было бы интересно принять участие в реализации проектов на базе такого процессора)


  1. Vlan2012
    08.12.2021 07:50

    Можно ссылку на «институт Synopsys»? Что за учебное заведение


    1. Armleo Автор
      08.12.2021 07:52
      +2

      1. Myclass
        09.12.2021 00:24

        Армения как я понял. Вы учились там, за границей? Даже если недалёкой, но всё равно в филиале иностранного уч. заведения. И там проживаете? Или нет? Последнее наверное нет. Мне вот что интересно. Даже после того как отучились за границей, у зарубежной фирмы всё равно думаете в рамках только одной отдельно взятой страны? Не чувствуете себя человеком для дела, т.е. для всего мира? Без политических границ и рамок? Можете не отвечать просто подумайте об этом.


        1. Armleo Автор
          09.12.2021 00:33
          +4

          Я родом из Армении, я почти не был в России или других странах СНГ, а тем более загранице.

          Я политических границ вижу, ибо без них никак. Произвести микросхему без политики нельзя.

          Имею ли я возможность поехать заграницу? Да. Пока не хочу, хотя такие планы есть.


  1. neerps
    08.12.2021 23:00
    +5

    Рад увидеть статью по SkyWater 130 и OpenLane!

    Несколько фраз, которые я хочу прокомментировать.

    У SkyWater было уже три производства микросхем по технологии Sky130, и очень даже успешных!

    Всё же, MPW-1 оказался не совсем успешным. Временной анализ показывал успех, когда по факту это было не так. Поэтому проекты MPW-1 потенциально страдают от нарушений времени установки (aka 'hold violations'). См., например, эту публикацию в их Google группе:

    https://groups.google.com/g/skywater-pdk-announce/c/TTJ28FF9qCA

    Также примечательно то, что данная технология заставила Open Source комьюнити попотеть, ибо вместе с выходом технологии стали доступны KLayout и Magic VLSI

    Я думал, что Magic был доступен ранее. Например, был и есть такой набор как Qflow, где Magic также используется на определённом этапе. Несомненно, OpenLane примечателен набором скриптов и иным составом софта в маршруте. Но изначальная формулировка, на мой взгляд, не совсем точна. Я бы сказал, что KLayout и Magic VLSI стали доступнее.

    Для того чтобы разработать цифровую микросхему используется RTL Verilog

    Мне казалось, что RTL - это всё-таки способ описывать аппаратуру. RTL можно писать на VHDL, Verilog, System Verilog. Возможно, что даже генераторы типа SpinalHDL/Chisel всё-таки тоже позволяют писать на уровне RTL? В общем и целом, под синтез можно писать на разных языках. Проблема лишь в том, что Yosys пока поддерживает только Verilog, поэтому конкретно в случае OpenLane остаётся один вариант. В то же время, есть разные проекты, которые пытаются сделать транслятор SystemVerilog в Verilog. Например,

    https://github.com/zachjs/sv2v

    https://github.com/chipsalliance/Surelog

    Также у меня появился один вопрос. В случае PCB разработчик сталкивается с такой проблемой, когда на определённой частоте конденсаторы-компоненты перестают быть эффективными. Есть ли порог частоты, на которой с on-chip decap случается та же ситуация?

    Спасибо за статью! Информацию действительно приходится собирать по разным источникам, и порой не хватает каких-то частей. Мне, как человеку далёкому от бэк-энда, понравилась секция про физический дизайн.


    1. topo66
      09.12.2021 00:33
      +1

      Коротко - а по-другому бывает? Это либо обратно-смещенный диод, либо ёмкость затвора сквозь канал (нельзя напрямую затвор на шину питания). "Аналоговые" конденсаторы делаются на межслойной ёмкости металлов с уменьшенной толщиной диалектика, и поэтому имеют кучу ограничений.


      1. neerps
        09.12.2021 22:27

        Не совсем понял, что именно бывает по-другому?


        1. topo66
          10.12.2021 06:19

          Ну тут уже ответили. DCAP скорее мало помогает, хорошо ещё что течёт не сильно. Методика анализа Timing+V-Drop пока далека от рабочей. А на спайсе много не посчитаешь


    1. Armleo Автор
      09.12.2021 00:35
      +1

      Часто бывает так, что компонент потребляет слишком много и без Decapов не обойтись. Просто добавляют их больше, что бы ёмкость была больше


      1. neerps
        09.12.2021 22:28

        Но есть ведь некоторые условия, при которых "больше" не добавляет практически ничего? Или нет?


        1. topo66
          10.12.2021 06:24

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


    1. amartology
      09.12.2021 01:29
      +2

      Есть ли порог частоты, на которой с on-chip decap случается та же ситуация?
      у интегральных конденсаторов, разумеется, есть частотные пороги. Но конкретно декапы фильтруют довольно низкие частоты (не имеющие прямой корреляции с тактовой частотой схемы), и для них эта проблема не существенна.


      1. neerps
        09.12.2021 22:31

        Если не ошибаюсь, эти частоты связаны с переходными токами?


    1. topo66
      10.12.2021 06:50

      Да, ещё про hold violation. Это, вообще-то showstopper. По setup можно частоту снизить, или напряжение приподнять. А вот холд уже ничем не лечится.


  1. Myclass
    09.12.2021 00:30

    Еще раз спасибо за подборку. Вопрос по делу. Как происходит синхронизация, если на предыдущей операции принимаются изменения, а для 'старого' например кода уже сделали layout. Как определяется, какая часть изменений в предыдущем шаге какую часть уже сделанных работ в следующем отбрасывает назад. Ведь, что всё не с нуля делается - понятно. Но охват? Сорри за мой французский - уже много лет живу за границей.


    1. Armleo Автор
      09.12.2021 00:42
      +3

      Делается engineering change order, и ячейки которые поменялись (только те, что поменялись) проходят по всему циклу заново.


      1. topo66
        10.12.2021 06:37

        У вас 15М ячеек от рук отбились! Срочно поставьте их на место! Лео!

        ;)


  1. Myclass
    09.12.2021 02:04
    -1

    интерессная новость появилась на cnews.ru — в продаже появились бракованые процессоры «Эльбрус»


    1. Myclass
      10.12.2021 02:21

      Я новость не создавал, я её поделился. За это минус?! Спасибо.


    1. topo66
      10.12.2021 06:42

      Кто не понял новость - не успел купить очень красивый сувенир. Такая шифровка в отделе происшествий. Остап Бендер попал под лошадь.