Gowin Arora GW2A vs Xilinx Artix-7: инженерный разбор миграции HDL-кода
Практическое сравнение китайской ПЛИС Gowin GW2A-18 и Xilinx Artix-7 XC7A35T. Архитектура, DSP, BRAM, toolchain, timing closure, перенос примитивов Verilog и реальная экономия. Xilinx Artix-7 (ныне AMD) — самая популярная серия FPGA в российских промышленных проектах. XC7A35T-1FGG484C: 33 280 LUT, 200 DSP48E1, 50 блоков BRAM (1800 Kb), 4 PLL, PCIe Gen2, DDR3-1066. После санкций: цена выросла в 4-6 раз, срок поставки 12-20 недель, риск контрафакта. Gowin Arora GW2A-LV18PG256C8/I7: 18 000 LUT, 48 DSP, 54 блока BRAM, 2 PLL, DDR3-800, цена $8, срок 2-3 недели. Архитектуры несовместимы на уровне примитивов, но 95% HDL-кода переносится без изменений через Yosys. Оставшиеся 5% — это инстанциации PLL, BlockRAM и IP-ядра, которые нужно переписать вручную.
Контекст: почему Artix-7 стал проблемой
Xilinx Artix-7 (ныне AMD) — самая популярная серия FPGA в российских промышленных проектах. XC7A35T-1FGG484C: 33 280 LUT, 200 DSP48E1, 50 блоков BRAM (1800 Kb), 4 PLL, PCIe Gen2, DDR3-1066. До 2022 года стоил $12-15, был в наличии у Digikey и Mouser. После санкций: цена $45-80, срок поставки 12-20 недель, риск контрафакта (Spartan-3 перемаркировывают под Artix-7). Производство Artix-7 не прекращено, но AMD объявила о переходе на Versal — через 3-5 лет серия уйдёт в EOL. Альтернатива: Gowin Arora GW2A-LV18PG256C8/I7. 18 000 LUT, 48 DSP, 54 блока BRAM (888 Kb), 2 PLL, DDR3-800. Цена $8. Срок поставки 2-3 недели. Toolchain: Gowin EDA 1.9.9 (бесплатно) или Yosys + nextpnr (open-source, GPL). Архитектуры несовместимы на уровне примитивов. Но 95% HDL-кода переносится без изменений через Yosys — открытый синтезатор, который поддерживает обе платформы. Оставшиеся 5% — это инстанциации PLL, BlockRAM и IP-ядра, которые нужно переписать вручную. Эта статья — результат миграции трёх проектов ChipNet: СОРМ (Spartan-6 → Gowin GW2A), видеообработка (Artix-7 → Gowin GW2A), DSP-фильтрация (Cyclone V → Gowin GW2A).
Сравнительная таблица: GW2A-18 vs XC7A35T
LUT: Gowin 18 000 vs Xilinx 33 280 (−46%). FF (триггеры): 18 000 vs 41 600 (−57%). DSP-блоки: 48 (18×18 MAC) vs 80 (25×18 MAC, DSP48E1) (−40%). BRAM: 888 Kb (54 блока) vs 1800 Kb (50 блоков) (−51%). PLL: 2 vs 4 (−50%). I/O bank: 8 vs 5 (+60%). Макс. I/O: 168 vs 250 (−33%). DDR3: 800 Mbps vs 1066 Mbps (−25%). PCIe: нет vs Gen2 ×4. Transceivers: нет vs 4 × 6.6 Gbps. Корпус: BG256 (15×15 мм) vs FGG484 (23×23 мм) — несовместимый. Напряжение ядра: 1.2V vs 1.0V (+0.2V). Toolchain: Gowin EDA 1.9.9 (бесплатно) vs Vivado ML 2024.1 (бесплатно WebPACK). Open-source: Yosys + nextpnr-gowin vs Yosys (только синтез). Цена за 1 шт.: ~$8 vs ~$45 (−82%). Срок поставки: 2-3 недели vs 12-20 недель (−85%). Главные отличия: LUT 18K vs 33K (если проект использует больше 18K LUT — Gowin не подойдёт; проверьте utilization в Vivado, если <55% — перенос возможен). Нет PCIe и transceivers (для PCIe/USB3/SATA не подходит, нужен Gowin Aleta GW5A с 4 × 6.4 Gbps). Корпус BG256 vs FGG484 — footprint несовместим, требуется redesign PCB. Это главное препятствие для миграции существующих плат.
Архитектурное сравнение: LUT, DSP и BRAM
Gowin использует 4-input LUT (LUT4), как Xilinx Spartan-6. Artix-7 использует 6-input LUT (LUT6) с разбиением на два LUT5. Это значит: LUT6 может реализовать любую функцию 6 переменных в одном элементе; LUT4 — только 4 переменных, функции 5-6 переменных требуют 2 элемента. На практике: проект, занимающий 20K LUT6 в Artix-7, потребует ~28-35K LUT4 в Gowin. Если у вас 33K LUT6 → 46-57K LUT4 — GW2A-18 не хватит. Нужен GW2A-55 (55K LUT, $15). DSP-блоки: Artix-7 DSP48E1 — 25×18 MAC с accumulator, pre-adder, pattern detector. Gowin — 18×18 MAC с accumulator. Разрядность меньше: для фильтров с 24+ bit коэффициентами потребуется каскадирование двух DSP (вместо одного в Artix-7). BRAM: Xilinx BlockRAM 36 Kb, dual-port, configurable width. Gowin SDRAM 18 Kb, dual-port. Для глубоких буферов (FIFO, кэш) — Gowin требует в 2 раза больше блоков при той же ёмкости.
Toolchain: Gowin EDA vs Vivado vs Yosys
Gowin EDA 1.9.9 — бесплатный toolchain от производителя. Включает синтез (Gowin Synthesis), Place & Route, генерацию bitstream, timing analysis, IP Core Generator (PLL, DDR3, FIFO, ROM/RAM). Плюсы: не требует лицензии (бесплатно навсегда), быстрый синтез (2-5 минут для 18K LUT), простая установка (1 .deb пакет, 200 МБ). Минусы: качество синтеза хуже Vivado (на 10-15% больше LUT для того же кода), нет SystemVerilog (только Verilog-2001), ограниченная поддержка IP-ядер (нет PCIe, USB, Ethernet MAC), UI менее удобный. Vivado ML 2024.1 — бесплатный WebPACK поддерживает Artix-7 до XC7A100T. Включает Vivado Synthesis (лучший в классе), Place & Route с directive-based оптимизацией, IP Integrator (блочный дизайн), SystemVerilog, VHDL-2008, Debug (ILA, VIO). Плюсы: лучшее качество синтеза на рынке, богатая библиотека IP (PCIe, DDR3, Ethernet, AXI), SystemVerilog с assertions. Минусы: тяжёлый (40 ГБ установка, 16 ГБ RAM), медленный синтез (20-60 минут для 33K LUT). Open-source: Yosys 0.40 (синтез Verilog → netlist) + nextpnr-gowin (Place & Route) + openFPGALoader (загрузка bitstream через JTAG) + GTKWave (просмотр waveform). Качество Yosys сопоставимо с Gowin EDA (±5% LUT). Рекомендация: для новых проектов — Gowin EDA (официальная поддержка, IP-ядра); для open-source энтузиастов — Yosys + nextpnr (полная свобода, нет vendor lock-in); для миграции с Xilinx — Yosys (общий синтезатор, минимальные изменения кода).
Что нужно переписать в Verilog (5% кода)
1. DCM → PLL (40-100 строк). Xilinx Spartan-6 использует DCM (Digital Clock Manager), Artix-7 — MMCM/PLL. Gowin — PLL с другими параметрами. У Xilinx MMCM: CLKIN1_PERIOD, CLKFBOUT_MULT_F, DIVCLK_DIVIDE, CLKOUT0_DIVIDE_F. У Gowin PLL: FCLKIN, IDIV, FBDIV, ODIV, DUTY. Параметры другие, но принцип тот же. 2. BlockRAM → GSRAM (100-200 строк). Xilinx RAMB18E1/RAMB36E1 и Gowin SDRAM имеют разные параметры: DATA_WIDTH_A/B, READ_WIDTH_A/B у Xilinx vs DATA_WIDTH_A/B, MODE='SP' у Gowin. 3. Убрать Xilinx-специфичные прагмы (50-150 строк): (* RAM_STYLE='block' *), (* IOB='true' *), (* ASYNC_REG='true' *), (* KEEP='true' *), (* MAX_FANOUT=100 *). Gowin EDA игнорирует их, но выдаёт warnings. Yosys понимает (* KEEP *) и игнорирует остальные. 4. ICAP → SPI (20-60 строк). Xilinx Internal Configuration Access Port для reconfiguration во время работы. Gowin использует SPI-интерфейс — API полностью отличается. 5. IP-ядра (зависит от проекта). Xilinx IP (FIFO Generator, Divider, CORDIC, AXI Interconnect) не совместимы с Gowin. Аналоги: FIFO — Gowin IP Core Generator (бесплатный); Divider — написать вручную (Verilog, 50 строк для pipelined divider); CORDIC — open-source (opencores.org); AXI — не нужен в Gowin (нет процессорной системы).
Timing closure: с 85 до 105 МГц
На Xilinx Artix-7 проект работает на 100 МГц. После миграции на Gowin GW2A первый прогон: 85 МГц (15% violations в timing report). Причины: LUT4 вместо LUT6 (больше уровней логики), Gowin PLL имеет больший jitter (200 ps vs 100 ps), трассировка BG256 короче (15×15 мм vs 23×23 мм) — меньше задержка проводов, но меньше ресурсов для буферизации. После оптимизации: 105 МГц (better than original!). Что помогло: 1) Pipeline registers в критические пути (добавили 12 регистров). 2) Gowin DSP blocks вместо LUT-based multiply (освободило 200 LUT). 3) Ручной placement критических модулей (Gowin EDA поддерживает (* LOC='X0Y0' *)). 4) Уменьшение fanout (разбили одну шину на 4 отдельных сигнала). В целом timing closure на Gowin требует больше ручной работы, чем на Xilinx, но реальная производительность часто оказывается выше из-за более коротких трассировочных путей в компактном корпусе BG256.
Реальный кейс ChipNet: перевод проекта СОРМ
Проект: система оперативно-разыскных мероприятий, FPGA Spartan-6 XC6SLX100 → Gowin Arora GW2A-55. Объём кода: 8 500 строк Verilog (включая testbench). Что переписано: 425 строк (5%) — DCM→PLL, BlockRAM→GSRAM, ICAP→SPI, убрать прагмы. Время миграции: 6 недель (2 инженера). Timing closure: Spartan-6 100 МГц → Gowin 105 МГц. Экономия: $22 500 (500 шт. × $45) → $7 500 (500 шт. × $15) = $15 000 (67%). Дополнительно: $8 000 — инженерное время (2 × 6 недель). Итого: окупаемость за 1 партию. Вывод: для серийного производства (от 100 шт.) миграция Artix-7 → Gowin GW2A окупается в первой же партии. Для единичных прототипов — дешевле остаться на Xilinx, если он есть в наличии.
Поставка Gowin через ChipNet
Ассортимент: GW1N-1 (1 152 LUT, $1.5 за 1 шт., $0.8 за 1000 шт., 2-3 нед.), GW1N-4 (4 608 LUT, $3/$1.5, 2-3 нед.), GW2A-18 (18 000 LUT, $8/$5, 2-3 нед.), GW2A-55 (55 000 LUT, $15/$10, 3-4 нед.), GW5A-25 (25 600 LUT, $25/$18, 4-6 нед.). Все партии проверяются в СВП: рентген BGA-шариков (пустоты >20% — брак), декэпсуляция (выявление remarked Spartan-3 под Gowin), JTAG-тест, загрузка тестового bitstream с LED-blink. ChipNet — авторизованный партнёр Gowin Semiconductor. Поставка Gowin Arora, LittleBee, Aleta от 1 шт. с проверкой СВП. Запрос КП через сайт, подготовка коммерческого предложения за 1-2 часа, постоплата 30 дней для постоянных клиентов, резерв склада до 6 месяцев.