T27.AI

Блог

FPGA-flow по слоям: сколько стоит переписать его из спеков

2026-10-03 · 5 мин чтения

[один дизайн, один ноутбук при нагрузке 12,6 на 8 ядрах; цифры L1 и L2 — потолки по Амдалу, а не результаты; часы в год опираются на названные допущения] Мы засекли каждый слой одной настоящей сборки XC7A200T через openXC7. Синтез занял 12,7 с, размещение и разводка 70,1 с, FASM в кадры 33,9 с, кадры в битстрим 0,2 с, всего 116,9 с. С двумя слоями, уже пересобранными из t27-спеков, flow занимает 83,5 с, в 1,40 раза быстрее, и битстрим совпадает байт в байт. Размещение и разводка теперь 60% сборки: если бы они не занимали времени, flow был бы в 8,75 раза быстрее, а мгновенный синтез упирается в 1,65 раза. Числа — в записанной терминальной сессии. В релизе tri этих инструментов пока нет.

#FPGA#OpenToolchain#t27

В прошлом посте мы пересобрали заднюю половину openXC7 из t27-спеков. FASM в кадры и кадры в битстрим теперь получаются из спеков, байт в байт. Отсюда следующий вопрос: сколько стоило бы сделать то же самое для каждого слоя flow? Чтобы ответить, мы засекли каждый слой одной настоящей сборки и поставили числа рядом.

Одна сборка, все слои

Дизайн — trinet_node_v2_ax7203 для xc7a200tfbg484-2 на плате AX7203, 121 587 строк FASM. Команда tri devkit flow --build запускает flow openXC7 с замером каждого шага. Затем она трижды запускает t27-замены на том же FASM и сравнивает их вывод с выводом openXC7 байт в байт. Время — секунды по часам на одном ноутбуке при нагрузке 12,6 на 8 ядрах.

СлойИнструмент openXC7СейчасДоляt27Те же байты
L1 Синтезyosys12,69 с10,9 %пока нет–
L2 Размещение и разводкаnextpnr-xilinx70,09 с60,0 %пока нет–
L3 FASM → кадрыfasm2frames.py33,86 с29,0 %bitwalk --fasm 0,42 сда
L4 Кадры → .bitxc7frames2bit0,22 с0,2 %bitwalk --write 0,25 сда
Весь flow116,86 с83,45 с (1,40×)

tri devkit · the FPGA flow, layer by layer

Записанный прогон: tri devkit flow --build и tri devkit impact. Каждый напечатанный байт настоящий и появляется тогда, когда появился; приглашение и набор команд постановочные, паузы длиннее 2 с сокращены, и пока это происходит, в заголовке окна стоит пометка. Сама запись на английском. Открыть запись на отдельной странице.

Переписанное на сегодня экономит 33,4 с на этой сборке, и всё это в L3. L4 — ничья: bitwalk --write занял 0,25 с против 0,22 с у xc7frames2bit. Битстрим в обоих случаях один и тот же файл, так что это более быстрый путь к тому же результату, а не лучший результат.

Куда уходит остальное время

После L3 размещение и разводка — 60,0 % сборки, синтез — 10,9 %. Закон Амдала даёт максимум, который мог бы дать переписанный любой из них: пусть слой занимает 0 с, и посмотрим, что останется.

Если бы это заняло 0 сFlowПротив openXC7 сегодня
L1 Синтез83,5 с → 70,8 с1,65×
L2 Размещение и разводка83,5 с → 13,4 с8,75×

Значит, следующий рычаг — размещение и разводка, с большим отрывом. Синтез из спеков, даже мгновенный, ограничивает весь flow 1,65×. Это потолки, а не планы. nextpnr-xilinx — большая зрелая программа на C++, и реалистичный путь — работа внутри неё (мы уже отправляем туда патчи) плюс проверяемые спеками правила тайминга и разводки, а не переписывание с нуля.

Сколько это в часах

tri devkit impact переводит экономию в часы. При допущении 20 сборок в день у одного человека за 230 рабочих дней 33,4 с на сборку — это 42,7 часа ожидания в год. Число сборок и людей — допущения, поэтому страница t27.ai/#/devkit даёт подставить свои.

Можно ли это запустить у себя?

Пока нет. Прогон выше сделан локальной сборкой tri devkit, а bitwalk собран из открытого pull request, gHashTag/t27#5609. Ни того, ни другого нет в релизе tri, поэтому команды установки здесь нет. Оба должны войти в архивы релиза tri с установкой одной строкой; эта работа ведётся в github.com/gHashTag/trinity/issues/1272, и команда появится в посте, когда она будет в релизе.

Чего это не показывает

Чего это не решает

Пруфы

Поработаем вместе

Нужно довести FPGA/RTL-задачу до замеров на железе?

Работаю по контракту и part-time с hardware-AI, FPGA/RTL и ML-системами — от спецификации и открытого тулчейна до воспроизводимых измерений.