Больше тысячи человек успели поработать с упражнениями по SystemVerilog и FPGA из репозитория BGM - basics-graphics-music. Они используются в Школе Синтеза Цифровых Схем в России и Беларуси, а также на Verilog Meetup в Silicon Valley, а предыдущие версии использовались на семинарах в Украине, Казахстане, Киргизии, Грузии, Армении и Азербайджане.
Прошлым летом мы перенесли два упражнения из BGM и одно упражнение из systemverilog-homework в инфраструктуру Tiny Tapeout для проектирования ASIC. Tiny Tapeout - это компания, которая работает с eFabless и фабрикой Skywater и позволяет студентам и любителям сделать собственные микросхемы за карманные деньги.
И вот сейчас хотелось бы интегрировать BGM и Tiny Tapeout всерьез, для планируемого семинара в Мексике. Идея простая: группа из 30 студентов упражняется неделю на верилоге на платах Tang Nano 9K с графическими экранчиками и интерфейсными модулями TM1638. А потом их дизайны переносятся в репозитории на основе варианта темплейта от Tiny Tapeout - и мы вместе оформляем заказ на производство чипа на фабрике.
А какое участие я хочу от вас? А вот какое:
Мой вариант темплейта для Tiny Tapeout сейчас не синтезируется. Я скомбинировал его из кода, написанного несколькими людьми (я, Руслан Залата, Александр Кириченко, Alan Garfield), и при этом в коде есть дефекты, которые работают OK в симуляции и на FPGA, но являются нарушениями методологии для ASIC и источниками багов при синтезе с помощью Open Lane (Yosys, ABC, OpenROAD). Это все нужно разгрести и заодно удалить warning-и.
Среди очевидных дефектов:
В коде смесь из синхронных и асинхронных сбросов - см. статьи Клиффа Каммингса на эту тему (1, 2). Все эти сбросы нужно сделать синхронными, как принято у моих трех последних работодателей.
Warning-и от старомодной конструкции `timescale. Ее нужно заменить на более молодежную комбинацию timeunit / timeprecision, но делать это только после изучения вопроса.
Есть также синхронизованный сигнал сброса (нужно заменить на обычный, но вначале понять зачем он был вставлен в код).
Есть (о, ужас) инициализация logic или reg, которая синтезируется в FPGA, но не синтезируется в ASIC.
Основной баг обнаруживается на этапе оптимизации логики программой ABC (кстати мейнтейнер ABC - наш соотечественник Алан Мищенко из Киева, который учился в МФТИ в Москве, а сейчас работает в Беркли). Баг выглядит так:
Что он имел в виду - непонятно. Ну combinational и combinational - а что, нельзя? Это же не греховный level-sensitive D-latch. Там наверняка ошибка в чем-то непрямом - это нужно исследовать.
Что нужно чтобы начать это фиксить? Самое смешное - почти ничего. Это можно фиксить даже с телефона сидя в трамвае, потому что вся инфраструктура Tiny Tapeout является Web-Based. То есть вы делаете fork моего репозитория на гитхабе, потом разрешаете там Actions, и всякий раз когда вы делаете push в ваш репозиторий, github запускает runners, которые синтезируют дизайн.
Вот видео с созвона, в котором я рассказал про инфраструктуру Tiny Tapeout и дал другую вводную информацию, чтобы вы могли выполнить такое упражнение:
На ютюбе:
То же на Рутюбе:
А вот реализация классической игры Понг, которую написал Аллен Бейкер из Synopsys под нашу инфраструктуру BGM. Эту игру можно сразу посадить на Tiny Tapeout ASIC, если почистить темплейт выше от багов:
Теперь несколько скриншотов чтобы сориентировать вас как включать раннеры в Actions на github:
Отладка этого темплейта открывает возможность FPGA+ASIC семинара+хакатона, который я хочу сначала попробовать в Мексике, а потом в других местах - даже в Африке - оказывается в Кении и Нигерии тоже есть интересующиеся FPGA и ASIC-ами.
Комментарии (10)
checkpoint
09.01.2025 18:19Вобщем, нам нужен свой аналог Tiny Tapeout на базе Микроновского PDK. Если требуется что-то покодить для его создания - я готов поучаствовать (но только не на Питоне).
YuriPanchul Автор
09.01.2025 18:19Да уж, они из-за этого питона подтянули докер и мне пришлось изучать как ставится докер под Ubuntu, Lubuntu, Simply Linux, Windows / WSL / Ubuntu и MacOS. Бррр.
checkpoint
09.01.2025 18:19Докер не нужен, я все поставил без докера. В Docker файле есть полная инструкция по установке. :)
checkpoint
Юрий, а что нужно поставить чтобы тестить сборку локально, а не пушить каждый раз на Github ? Хочу попытаться вникнуть в проблему с ABC.
YuriPanchul Автор
Какой-то локальный способ там есть, но я еще не разбирался как его использовать. Похоже главная проблема - операция возведения в степень, для нее вместо умножения ставили black box, мне уже поправили.
checkpoint
Я пытаюсь развернуть инфраструктуру Tiny Tapeout у себя на сервере, пока наткнулся на очередную несовместимость версий питона - нужно ставить python 3.10 с кучей библиотек. Если получится это одолеть, то можно будет поднять где-то сервак и гонять тесты без Github-а. Так отладка пойдет гораздо веселей. Я вообще не представляю как можно отлаживать через запуск Actions на Github-е - это сколько мне нужно будет сделать коммитов и пушей и сколько на это уйдет времени ?
punzik
Можно ограничиться установкой OpenLane. Если использовать Nix, то это вообще можно сделать одной командой (рекомендую, очено удобно).
checkpoint
OpenLane кстати встал без проблем и работает. Там большой пласт скриптов от Tiny Tapeout по привязыванию PDK, верификации и запуску формирования GDS. Вот эти-то скрипты написаны на новом синтаксисе питона и их запустить с наскоку не получилось.
YuriPanchul Автор
Я именно поэтому осваиваю инфраструктуру eFabless Caravel, о чем планирую отдельный пост.