EdigE
← ЛЕНТА

Tang Nano 20K выпускает битстрим без IDE Gowin

Битстрим FPGA долго оставался последней закрытой дверью в привычном HDL-потоке. Verilog можно хранить в Git, симулировать, проверять линтером и синтезировать свободными инструментами, но финальный файл, который при старте задаёт состояние миллионов конфигурационных ячеек, часто рождался только в IDE производителя. Для Tang Nano 20K эта дверь приоткрыта до самой платы.

От Verilog до конфигурационных ячеек

Поддерживаемый кристалл GW2AR-LV18QN88C8/I7 проходит путь через Yosys с командой synth_gowin, затем через nextpnr-Himbaechel. Здесь логические ячейки получают координаты на кремнии, а соединения прокладываются по реальной сетке маршрутизации. Утилита gowin_pack из Apicula превращает результат в файл .fs, после чего openFPGALoader отправляет его в SRAM либо во flash платы по target имени tangnano20k. Это уже не конвертер абстрактного netlist в учебный файл: на выходе получается конфигурация, которую читает настоящая FPGA.

APIO занимает в этой истории полезное, но более скромное место. Это оркестратор, а не новый синтезатор или place-and-route: board definition sipeed-tang-nano-20k выбирает нужный кристалл, а команды проекта могут запускать внешние Yosys, nextpnr и загрузчик. В одном репозитории рядом оказываются исходники, constraints, testbench, форматирование, lint и рецепт прошивки. Такая структура особенно удобна для стенда, где после каждого изменения HDL требуется получить одинаковый бинарник и проверить его на той же плате.

Где кончается открытая карта кристалла

Слово «открытая» здесь требует точного смысла. Пользовательская сборка и загрузка выполняются свободными программами, однако ChipDB для семейства Gowin не возникла из воздуха. Разработчики Apicula восстанавливали устройство кристалла fuzzing-методами и разбирали vendor data files; документация для генерации этой базы также требует инструменты Gowin. Получается открытый исполняемый маршрут, но его карта кремния пока исторически связана с данными вендора.

Битстрим может собраться и не попасть в тайминг

Именно на этой границе обычно всплывают самые неприятные детали проекта. Внешние порты и LUT укладываются в открытый flow сравнительно естественно, а PLL и другие hard macro требуют специфических обвязок. В стороннем GPU-проекте для той же Tang Nano 20K PLL заведён как gowin_pll/rPLL macro. Его открытый скрипт показывает и более опасный компромисс: сборка для 81 MHz допускает расчётный Fmax около 80 MHz, продолжает упаковку битстрима и опирается на проверку платы при комнатной температуре. Файл .fs в такой ситуации существует, однако это ещё не доказательство закрытого timing.

Поэтому ценность цепочки не сводится к возможности обойти IDE. Она делает видимыми команды синтеза, constraints, отчёты размещения и временного анализа — то есть артефакты, без которых аппаратурную сборку нельзя честно повторить. Для CI этого достаточно лишь наполовину: нужны зафиксированные версии oss-cad-suite и ChipDB, сохранённые STA-логи, заданный запас по таймингу, физическая плата для прошивки и функциональный тест. Но Tang Nano 20K уже позволяет строить такой контур вокруг доступной FPGA, где битстрим перестаёт быть непрозрачным финалом чужой IDE.