Как сделать процессор своими руками
Процессор и ПК своими руками: проект BMOW 1
Никому не известный инженер Стив Чемберлин (Steve Chamberlin) решил изменить общепринятое мнение о том, что процессор своими руками создать невозможно. Точнее, процессор достаточно сложного ПК, который смог бы дублировать функции 8-битных вычислительных устройств, получивших распространение в начале 80-х. Вначале это было небольшой проект, который со временем вырос в нечто большее. Сейчас BMOW 1 представляет собой полноценный ПК на основе самодельного процессора, который запускает программы, имеет клавиатуру, VGA-видео, аудио-систему. Программная среда для BMOW 1 — Basic.
Процессор, созданный Стивом Чемберлином, состоит из десятков простейших логических чипов, так что не все в этом ПК — проволока и текстолит. Однако собиралось все это вручную, на что у Стива ушло несколько лет. Как уже говорилось выше, вначале он хотел просто создать процессор, собранный самостоятельно, но в конце-концов было принято решение создать рабочий ПК, который смог бы выполнять определенные задачи.
Стив поставил перед собой несколько целей, все из которых были выполнены:
— создать процессор из простых элементов, были использованы чипы 7400 серии, без компонентов серий 6502, Z-80 и т.д.;
— свести сложность аппаратной части к минимуму;
— компьютер должен был запускать «реальные» программы, не являясь чисто «игрушкой»;
— процессор должен стать элементом системы полноценного ПК;
— система должна быть достаточно быстрой для интерактивного запуска и работы программ.
Сама идея возникла у Стива в ноябре 2007, а к реализации инженер приступил в феврале 2008 года. В апреле 2008 система BMOW 1 запустилась в первый раз, чему наш создатель был несказанно рад. Постепенно были добавлены VGA-видео, аудио-система, BASIC, бутлоадер, который позволял взаимодействовать с подключенным ПК. Через некоторое время BMOW 1 стал достаточно сложным, чтобы обеспечивать работу непростых программ. Основные работы по созданию BMOW 1 были завершены в феврале 2009 года, ПК дорабатывался до настоящего времени.
Вот некоторые подробности о конфигурации устройства:
— текущая частота работы процессора около 2 МГц. Процессор может быть «разогнан» до 3 МГц (теоретически, пока не проверено);
— 512 КБ RAM, 512 КБ ROM;
— потребление энергии 10 Ватт, 2А при 5В;
— картинка на «выходе» имеет разрешение 512*480, два цвета, или же 128*240 — 256 цветов;
— аудио — трехканальный звуковой генератор;
— обычная клавиатура с PS\2-коннектором;
— дополнительный дисплей для вывода текста, 24*2 символа;
— 1250 проволочных проводника, т.е. около 2500 соединений;
Как создать микропроцессор в домашних условиях. Энтузиаст создал интегральную схему с 1200 транзисторами у себя в гараже
Прошлая его ИС имела лишь 6 транзисторов
Современные процессоры опираются на сверхтонкие техпроцессы и включают миллиарды транзисторов, упакованных в крошечных чипах. Можно ли создать подобный CPU дома? Конечно, нет, но всё же создать в домашних условиях примитивный процессор вполне возможно.
Несколько лет назад известный в определённых кругах энтузиаст-самоучка Сэм Зелуф (Sam Zaloof) создал первый в своём роде чип Z1 в домашних условиях. Он состоял всего из 6 транзисторов. Теперь Зелуф решил повторить эксперимент, создав нечто существенно более сложное. И у него получилась интегральная схема Z2 с 1200 транзисторами, выполненными по техпроцессу 10 мкм. Для сравнения, Intel 4004 — первый в мире коммерчески доступный однокристальный микропроцессор — производился по тому же техпроцессу и содержал 2300 транзисторов.
Процесс изготовления достаточно подробно описывается как на сайте Зелуфа, так и в видео. Основное — не было никаких чистых помещений и чистых химикатов.
Для изготовления ИС энтузиасту понадобилась вода, алкоголь, ацетон, фосфорная кислота, фоторезист, 2-процентный раствор гидроксида калия, SOG-плёнка Filmtronics P509, 1-процентная плавиковая кислота и азотная кислота. Последние два вещества можно заменить. Что касается оборудования, нужно иметь электроплиту, трубчатую печь, специальный аппарат для литографии, микроскоп и вакуумную камеру для плавки металла.
Как сделать процессор своими руками
Сегодня на рынке высокопроизводительных процессоров тесно. Если отбросить в сторону мобильные архитектуры, где существует целый ряд перспективных наработок, то только две компании всё ещё способны выпускать настольные и серверные Х86 процессоры. Вообще, в последнее время настольный сегмент атакует Apple. Инженеры яблочной компании создали настоящего монстра, который способен тягаться с самыми быстрыми процессорами конкурентов. Мало того, он выполнен на архитектуре ARM и обладает отличной энергоэффективностью. Возможно, в будущем примеру Apple последуют и другие, но пока компании довольствуются смартфонами и планшетами, предпочитая не выходить из мобильного сектора.
реклама
Всё это говорит о чрезвычайно высокой сложности разработки, предполагающей огромные вложения. Как оказалось, при должном усердии и знании предмета можно даже в домашних условиях создать процессор. На самом деле созданный студентом по имени Сэм Зелооф чип правильнее относить к интегральной схеме, но сам он гордо величает его процессором. Поэтому не будем спорить с автором 10-микронного камня. Весь процесс доступен на видео ниже, не ждите длительных описаний, Сэм не очень разговорчив, предпочитая останавливаться на основных моментах. Это значит, что вы вряд ли сможете повторить успех парня в домашних условиях.
В качестве источника для создания чипа он использовал 12 микросхем Z2, каждая из которых включала 100 транзисторов, произведённых по нормам 10 микрометров (не путать с нанометрами). Это значит, что внутри расположилось 1200 транзисторов. Сэм отмечает, что первый процессор Intel 4004 был построен по аналогичному техпроцессу на 10 микрометров и включал 2000 транзисторов. На видео можно заметить, что энтузиаст использует пусть и устаревшее, но весьма дорогостоящее оборудование, которое точно не встретишь в доме каждого человека.
Во время создания процессора использовались так называемые грязные химикаты, что позволило обойтись без доступа к сверхчистому помещению. Сам разработчик отмечает, что каждый следующий чип будет отличаться от предыдущего, поэтому наладить производство идентичных интегральных схем в домашних условиях нереально. К сожалению, Сэм Зелооф не рассказал о производительности доморощенного процессора. Поэтому мы можем только догадываться на что способно такое чудо инженерной мысли.
Как разработать микросхему. Собственный процессор (почти)
Как же разработать свою микросхему. Задался я этим вопросом, когда я захотел создать собственный процессор. Пошёл я гуглить и ничего годного не нашёл. Ответы в основном два։ «Ты не сделаешь свой процессор, потому что слишком сложно» и «Забей и собери компьютер из комплектующих».
Очевидно что это меня не устаивает, поэтому я решил изучить вопрос серьезнее. Оказалось можно сделать свой процессор описав его с помощью 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. Эти файлы предоставляют описание отдельных компонентов, который разработчик может использовать для разработки цифровых интегральных съем или её частей. К этому чуть позже.
Здесь стоит остановиться и понять, из чего конкретно состоит сам кремний.
Как рисовать транзистор и как он работает
Давайте разберемся как работает транзистор и как он выглядит. Знакомьтесь։ транзистор
Транзистор N-MOS. Понять тип можно по типу двух контактов Source и Drain
А теперь знакомьтесь։ транзистор 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 и провести симуляцию.
После мы разберём как скомпилировать наш Verilog в GDS.
Строим декоративный транзисторный компьютер — шаг 1
Недавно на хабре была статья о проектировании собственного компьютера, где автор хотел сначала строить компьютер из транзисторов, но затем решил продолжить на микросхемах 7400-серии из-за того, что на транзисторах ему это показалось слишком сложным и дорогим занятием.
Похожая задача интересовала и меня последние 3 года — но от изначальной идеи строить на транзисторах я не отказался, и сейчас могу рассказать свои соображения и показать текущие наработки, а также — хочу спросить вашего мнения о том, каким на ваш взгляд должен быть _серийный_ транзисторный декоративный компьютер. Но сразу нужно заметить, что работы впереди еще на пару лет 🙂
Главный вопрос — зачем все это нужно, если есть FPGA и всякие Raspberry Pi?
Ответ простой:
1) Мне интересно этим заниматься в свободное время и
2) Декоративный компьютер (декоративный — это вопрос отношения к компьютеру, а не его внешности) — он как декоративные домашние животные: мопс не отгрызет ногу грабителю, а персидский котик не победит в бою метрокрысу. Но с ними интересно играть и показывать гостям — даже если в области вычислений, охраны и охоты они сильно уступают «боевым» аналогам.
Подстановка задачи и архитектура
Какие будут у нас требования к декоративному компьютеру?
Взаимодействие с пользователем: Классическая реализация — это клавиатура + вывод на телевизор или VGA-монитор. Сделать удобную «свою» клавиатуру слишком сложно — нужно использовать стандартные PS/2 или USB. PS/2 клавиатуры уже редкость — а USB в транзисторном компьютере поддержать — будет затруднительно, без использования грязных хаков (вроде микроконтроллера).
Вероятно, оптимальным и простым решением может быть терминальный интерфейс — когда компьютер общается с внешним миром через последовательный порт (RS232), таким же образом можно загружать программы. Т.е. в простейшем случае транзисторный компьютер подключается к настольному компьютеру (или специализированному терминалу) через USB<>COM адаптер, и в любой программе-терминале (например Putty) можно с ним работать.
Также, нужна и возможность подключать внешние устройства через GPIO-пины.
Последовательный или параллельный ALU? 8 или 16 бит?: Поскольку количество транзисторов очень ограничено (
Схему для симуляции в LTspice IV можно скачать тут.
Принцип работы следующий: т.к. порядок слагаемых не имеет значения, мы их просто аналогово смешиваем, и точно подбирая пороговое напряжение сдвоенного инвертора — сразу получаем перенос. Затем вычитая на транзисторе Q3 из аналоговой суммы перенос — получаем сумму. Конечно, все это требует точного подбора уровней срабатывания, и симуляции с учетом температуры. Диоды Шоттки — для предотвращения входа транзисторов в глубокое насыщение, что резко снижает скорость работы.
Использование полевых транзисторов возможно, и обеспечивает лучшую температурную стабильность, главное чтобы у них было достаточно низкое пороговое напряжение.
Сдвиговой регистр — самая ответственная часть этого транзисторного компьютера. Классическая реализация на синхронных D-триггерах — требует чудовищного количества транзисторов на бит.
У меня получилось уместиться в 2 транзистора на бит, со следующими особенностями:
1) Регистры — основаны на конденсаторах, и если их «не двигать» — то со временем данные пропадут. Но с полевым транзистором время хранения достаточно большое.
2) Передача данных на следующую ступень — биполярным транзистором. В половине случаев он работает в обратном, нестандартном режиме — пробивное напряжение намного меньше (но 3.3В должно держать), и коэффициент усиления намного ниже прямого включения (но я надеюсь будет достаточно).
3) Каждая следующая ступень — инвертирует сигнал, это не проблема когда нужен только последовательный доступ (например в случае регистров процессора). Если же будет нужен не инвертированный параллельный выход — нужно будет добавить 8 инверторов (т.е. 16-и битный сдвиговой регистр потребует 40 транзисторов, а не 32).
4) Остается проблема с насыщением биполярного транзистора.
График работы:
С этими компактными реализациями цифровых схем — уложиться в 1000 транзисторов думаю будет вполне реально.
На этом пока все — меня же ждет впереди чудовищно много работы
А теперь — несколько вопросов к читателям: Какие варианты кажутся вам приемлемыми?