Как разработать микросхему. Собственный процессор (почти)
Как же разработать свою микросхему. Задался я этим вопросом, когда я захотел создать собственный процессор. Пошёл я гуглить и ничего годного не нашёл. Ответы в основном два։ «Ты не сделаешь свой процессор, потому что слишком сложно» и «Забей и собери компьютер из комплектующих».
Очевидно что это меня не устаивает, поэтому я решил изучить вопрос серьезнее. Оказалось можно сделать свой процессор описав его с помощью Verilog и FPGA. Купил плату в китае, 3 года спокойными темпами написал свой процессор, оттестировал, скомпилировал и залил на FPGA. Но мне этого недостаточно.
Так как же разработать микросхему?
Давайте сначала разберёмся из чего состоит микросхема. Все микросхемы состоят из кремния и корпуса.
Корпус это кусок пластика и несколько проводов к выводам корпуса. А есть еще кремний. Корпуса микросхем имеют миллион вариантов корпусировки и к этому мы даже не будем подходить. Существует два варианта расположения кристала. Вверх металлом и вниз металлом. На картинке изображены микросхемы вверх металлом. Вниз металлом имеет преимущество ввиду того, что не надо провода проводить.
А как же кремний
Кремний производиться на заводе. Каждый завод имеет свою технологию производства. Мы будем рассматривать только технологии 130нм ибо про нее я знаю достаточно много.
Для того, чтобы производитель произвёл вашу микросхему вам нужно предоставить им GDS-II файл, который является грубо говоря векторной многослойной картинкой вашей микросхемы.
Первым шагом к разработке является։ связаться с производителем. Если у вас меньше чем 10000 баксов, забудьте. Лучше рассмотреть Multi project wafer service [ https://en.wikipedia.org/wiki/Multi-project_wafer_service ].
Не все GDS-II файлы могут отправиться на производства. Для того, чтобы понять что можно произвести, а что нет вам понадобиться несколько файлов.
GDS-II файл и так называемый Process Development Kit
На картинке вы можете видеть интегральную схему SHA3. Большая область справа это и есть SHA3 схема, а всё остальное так называемый Caravel Harness. Для того чтобы гугл смог произвести вашу микросхему по технологии SKY130 гугл требует чтобы ваша основанная схема справа и подключается к жёлтым точкам. Посмотреть на структуру Caravel Harness можно тут.
Интегральная схема SHA3 на технологии SKY130, https://efabless.com/projects/4
Process Development Kit эта такая кучка файлов которая содержит։
Этот файл содержит на удобно перевариваемом формате описание и требования к конечному файлу, кроме того эта документация содержит примеры и описания транзисторов.
Модели для симуляции элементов схемы в формате SPICE.
Эти модели используются для симуляции компонентов интегральной схемы. Перед тем как нарисовать структуру кремния, вам нужно сначала определиться со схемой, которую вы будете рисовать.
Технологические файлы, которые позволяют связать файл GDS-II и слои при производстве.
Библиотека примитивов — Транзисторов, резисторов, конденсаторов и так далее
Модели для симуляции
Символы для рисования схемы
Правила Design Rule Check
Эти файлы привязаны к конкретному программному обеспеченью и содержат список правил, на которые в автоматическом режиме будут проверяться ваши интегральные схемы или её отдельные компоненты.
Primitive Extraction rules или правила описывающие примитивы. Эти правила позволяют превратить ваш GDS-II представление в список примитивов и их связей (netlist). Сгенерированный netlist также содержит паразитные конденсаторы и резисторы, а сам netlist используется для того чтобы произвести симуляцию компонентов как можно приближённой к реальной интегральной схеме.
Layout versus Schematic check или правила, которые позволяют получить из вашего GDS-II так называемый netlist. После чего его можно сравнить со схемой, которую вы нарисовали и уже про симулировали.
Например, установщик для технологии SKY130 (130нм) можно найти вот тут. Эти скрипты автоматически установят всё необходимое, но не спешите ниже мы найдём скрипт, который сделает все за нас.
Иногда производитель кремния также предоставляет так называемые файлы Standard Cell Library. Эти файлы предоставляют описание отдельных компонентов, который разработчик может использовать для разработки цифровых интегральных съем или её частей. К этому чуть позже.
Здесь стоит остановиться и понять, из чего конкретно состоит сам кремний.
Как рисовать транзистор и как он работает
Перед тем как что-то разработать нам нужно понять основу интегральных схем — транзисторы MOSFET. Существуют два типа которые мы будем использовать — NMOS и PMOS.
Давайте разберемся как работает транзистор и как он выглядит. Знакомьтесь։ транзистор
Транзистор N-MOS. Понять тип можно по типу двух контактов Source и Drain
Как мы здесь видим։ у транзистора есть несколько компонентов. Металл и контакт, а также N+ и P Substrate. Когда напряжение Vgs < Vth тогда NMOS закрыт. Когда Vgs >= Vth, а Vds < Vgs — Vth тогда транзистор находиться в линейном режиме. Когда Vgs >= Vth и Vds > Vgs — Vth тогда транзистор находиться в открытом состоянии. Похожим образом работает PMOS, но в отличии от NMOS он закрывается, а не открывается.
А теперь знакомьтесь։ транзистор PMOS (сверху) и NMOS (снизу)
Схема инвертера в Magic от спидраннера инвертеров на Ютубе
Разработка аналоговых компонентов
Давайте не буду вас томить. Установите в виртуалку Ubuntu и следуйте следующим шагам։ https://github.com/efabless/openlane#quick-start. Я бы установил его в
/openlane_exp/ ибо именно этот путь я использую в примере
Для того чтобы установить программы которыми мы будем пользоваться следуйте следующим шагам։ https://github.com/armleo/sky130_ubuntu_setup/blob/main/install_tools.sh
Нам нужны следующие программы
OpenLANE, который установит модели для симуляции и отдельные компоненты и примитивы в соответствующей папке. Почитайте документацию очень интересно. Бесплатный установщик skywater PDK + скрипты для использования разных программ для того чтобы в автоматическом режиме скомпилировать вашу цифровую схему. Кроме того образ докера с предустановленными ПО для компиляции.
Yosys. Гордость проектов с открытым исходным кодом. Автор։ Claire Wolf. Позволяет скомпилировать ваш Verilog в gate-level представление, которое описывает вашу цифровую схему в виде отдельных компонентов. Замена Design Compiler от Synopsys
Куча других ПО, которые в автоматическом режиме превращают ваш gate-level в GDS-II. Об этом будет в соответствующей главе
skywater-pdk. Открытый PDK skywater 130nm. Содержит также так называемые готовые цифровые компоненты, примитивные компоненты и библиотека ячеек ввода-вывода
ngspice, Открытый симулятор spice. На удивление неплохой, но я конечно же рекомендую коммерческие симуляторы например HSPICE от Synopsys.
xschem, открытая программа для рисования схем. Бесплатная замена CustomCompiler от Synopsys
klayout, для рисования и открытия GDS-II. Бесплатная замена CustomCompiler от Synopsys
Magic, программа которая может производить DRC, и не только. Вообще очень полезная штука. Бесплатная замена IC Validator от Synopsys
Netgen, программа которая может делать LVS проверку. Бесплатная замена IC Validator от Synopsys
OpenRAM. Компилятор элементов памяти. Замена Memory Compiler от Synopsys. К сожалению мы не можем им пользоваться ибо у нас нет файлов технологической настройки, который закрыты из-за NDA. Правда готовые блоки с синхронными входами и выходами можно найти здесь.
Давайте уже к практике. Учтите что вам нужно поменять много параметров, надеюсь разберетесь.
Команды сверху установят пример инвертера и запустит докер с проброской из моей домашней папки и проброской X11 для окон.
После открытия надо подключить технологические файлы.
Откройте Manage Technologies
Правый клик по списку технологий
Найдите файл /home/armleo/openlane_exp/openlane/pdks/sky130A/libs.tech/klayout/sky130A.lyt
Откройте настройки слоев
Хотите увидеть инвертер?
Да выглядит уродливо, зато бесплатно ։D.
Давайте поймём что это за схема, как она работает и из чего состоит. Сверху синий слой это метал по которому подключается SOURCE и BULK ножки PMOS транзистора к VDD или позитивному напряжению. Снизу слой металла по которому идёт VGND или заземление, который подключается к ножке SOURCE и BULK NMOS транзистора.
Ножки GATE подключенные к друг другу и к вводному сигналлу A с использованием слоя полисиликона LI1.
Выход подключен к контакту Y с использованием слоя полисиликона LI1.
Инвертер работает следующим образом։
NMOS открыт, когда на входе высокое напряжение, а PMOS закрыт. Таким образом на выходе получается низкое напряжение. NMOS открыт, поэтому низкое напряжение подаётся на выход, но короткого замыкания не просиходит, посколько PMOS закрыт.
NMOS закрыт, когда на входе низкое напряжение, а PMOS открыт и VDD подключен к сигналу Y. NMOS закрыт, поэтому низкое напряжение не подаётся на выход, и короткого замыкания не происходит. Таким образом на выходе получается высокое напряжение.
Схема в разрезе։
Схема соответствующая инвертеру։
Здесь вы можете видеть, что у транзистора на самом деле 4 ноги։ DRAIN, SOURCE, GATE, BULK.
В следующей частях разберемся։
как нарисовать несколько компонентов (NAND, NOR), сделать LVS, DRC, PEX и провести симуляцию.
Поймем, что такое последовательные компоненты (Sequential components) — Latch, Flip-flop
Хочу создать процессор в домашних условиях. У меня есть паяльник проволка и кусок кремния. Как сделать процессор?
Начать с ПРОСТОГО? Ты идиот, прости? ! о_О Процессор в домашних условиях! ОХРЕНЕТЬ!! ! Эпичнейший /б/ред!! ! Это Н-Е-В-О-З-М-О-Ж-Н-О!! ! Тебе понадобится куча специальных установок, машин, устройств, аппаратов и т. д. Плюс как ты заложишь в него все необходимые функции? Это полный абсурд. Бред сивой кобылы. Ты НИЧЕГО не понимаешь в в электронике и решил начать с простого? Это, по-твоему, просто?! ! Ну да, я процессор за полчаса паяю спокойно, ёпт! Жесть!
Правильно пишут: «Вставь себе паяльник. » Пока у тебя нет собственного завода, ты не сможешь «спаять» себе процессор. U LOL’D. Это все равно, что из кусочка графита получить бриллиант. Или из куска картона сделать искусственный спутник Земли!! ! ХА-ХА-ХА! Там требуется высочайшая точность. Малейшая пылинка приводит к браку изделия. Твой кремниевый кристалл размером не меньше булыжника, а нужен микроскопический. И просто нереальнейший микроскоп. Дело тут даже не в деньгах, поверь мне.
Центральный процессор – дома с нуля
Если в последние лет 40 для выполнения задачи нужен микропроцессор – единственный рассматриваемый вариант это купить готовый. Ну или в крайне редких случаях «накатить» стандартное конфигурируемое FPGA ядро (например Nios II) с парой дополнительных инструкций. Многие сейчас даже не могут представить, что процессоры могут получаться каким-то другим путем 🙂 Это всё равно что считать что продукты беруться в магазине, а вырастить их самому – абсолютно невозможно.
С одной стороны, зачем помнить основы технологии если все производится промышленно? На мой взгляд – чтобы быть уверенным, что технология не будет утеряна, что даже если случиться ядерная война компьютеры можно будет собирать из подручных материалов (так же как и с продуктами в начале 90 — многим пришлось возвращаться к технологии 100-летней давности из-за краха инфраструктуры производства и доставки).
Оказывается есть такие люди, которые до сих пор в качестве хобби делают центральные процессоры из дискретных компонент(транзисторов, реле) и микросхем низкой степени интеграции (счетчики, регистры). Единственные применяемые микросхемы – память (оперативная и перепрограммируемая).
В этой статье я хочу рассказать кратко об архитектуре и о нескольких реально работающих процессорах, сделаных в домашних условиях.
Общие архитектурные заметки:
Большинство самодельных процессоров работают (почти как и большинство современных процессоров )– на микрокоде, считываемого из flash/SRAM-памяти – тут обычно и находится самое медленное место: за последние лет 20 прогресс в латентности работы flash памяти остался почти на месте, и для широко доступных микросхем составляет 70нс, следовательно быстрее 14 МГц на процессоре на микрокоде во флеше не разогнаться. Процессоры обычно имеют шину данных 8 или 16 бит, адресную шину 16-20-24 бита (ограничивать себя 65Кб никому не хочется, особенно с нынешними ценами на память). ALU(вычислительное ядро) делается либо однобитным (т.е. для 16-и битной операции надо 16 тактов), либо используется готовое ALU на 2-4 бита (из которых собирается 8-16-и битное ALU). Процессоры на микрокоде обычно и код и данные хранят в одной и той же памяти (архитектура Фон-Неймана). RISC-подобные процессоры без микрокода обычно работают по Гарвардской архитектуре (данные и код отдельно, зачастую программа не может ничего писать в память кода). В абсолютно всех самодельных процессорах длина всех инструкций одинакова – переменная длина инструкций создает трудности даже при разработке «промышленных» процессоров. В качестве памяти используют обычно SRAM – раньше её использовали только для кэша из-за большой цены. От обычной SDR/DDR памяти отличается крайней простотой и неприхотливостью интерфейса, не нужно следить за «обновлением» памяти (в обычной SDR/DDR памяти данные выживают всего 32-64 миллисекунды).
Маленькие хитрости
Несмотря на то, что обычно используются простые микросхемы, есть некоторые хитрости, которые раньше(30 лет назад) были не доступны: готовые ALU (не совсем простая микросхема), SRAM память(например 1Мб SRAM памяти — это около 48млн транзисторов) и использование EEPROM-памяти как ALU (например, на микросхеме памяти 65кб 8бит можно сделать сумматор или мультипликатор, а на 1Мб микросхеме можно «проводить» 16 разных 8-битных операций — FPGA использует тот же принцип для построения произвольных логических схем). Также, сейчас можно использовать намного больше памяти для хранения микрокода и самого программного кода в памяти.
А теперь несколько самых выдающихся реализаций:
BMOW – Big Mess of Wires
http://www.stevechamberlin.com/cpu/bmow1
Собран из простых микросхем. Тактовая частота – 2 МГц.
MyCPU
http://www.mycpu.eu/
Собран из простых микросхем. Тактовая частота – 8 МГц. Развитая переферия – вплоть до доступа к сети. Кстати, сам Web-сайт http://www.mycpu.eu/ обслуживается именно этим самодельным сервером. Конструкция посторяемая, собрано много экземпляров.
Harry Porter’s Relay Computer
http://web.cecs.pdx.edu/
harry/Relay/index.html
Собран на 415 реле, на взгляд около 7Гц 🙂
Magic-1
http://www.homebrewcpu.com/
Собран на
200 простых микросхемах, рабочая частота до 4МГц. Порт Minux, сам сайт работает на этом самодельном сервере.
Mark-1 Forth computer
http://www.holmea.demon.co.uk/Mk1/Architecture.htm
Собран на простых микросхемах, рабочая частота 1МГц. Как нетрудно понять из названия, оптимизирован для программ на языке Форт. Микрокод хранится в диодной матрице, вместо «неспортивных» микросхем флеш-памяти.
http://www.6502.org/users/dieter/
Самое вкусное на последок: 16-и битный процессор, собранный на самых простых низкочастотных биполярных транзисторах (около 3000 штук). Тактовая частота – 500КГц, из микросхем только память и генерация синхросигнала. Производство таких транзисторов на кухне вполне реально наладить уже через год после ядерной войны