Практическая замена ZYNQ на отечественный: что меняется при переходе с Xilinx ZYNQ на PBC7Z020G/021G
Исходный проект использует Xilinx Zynq-7000 (XC7Z020) для гетерогенной схемы ARM-софт плюс FPGA-реалтайм-логика, и теперь его нужно локализовать. Значит ли смена чипа полный переписывание проекта или только локальные правки? Статья делит миграцию HWD7Z020 (совместим с XC7Z020) на PBC7Z020G/021G на три слоя — софт PS, логика PL, загрузка и BSP — и разбирает реальный объём изменений, переиспользуемые части и точки риска.
1. Зачем мигрировать: от XC7Z020 к отечественному HWD7Z020
Ценность ZYNQ в том, что один чип содержит и двухъядерный ARM Cortex-A9 (PS, системный софт, сеть, файловая система), и программируемую логику (PL, параллельный сбор, ускорение протоколов, реалтайм-IO). Когда проект на XC7Z020 нужно локализовать, цель — не совсем другая архитектура, а совместимый drop-in по системе команд, периферии и потоку Vivado. PBC7Z020G несёт HWD7Z020-1PBGA400, PBC7Z021G несёт HWD7Z020-1CLG484; оба промышленные, двухъядерный A9@800МГц плюс FPGA, нативно совместимы с Vivado без патча, диапазон -55~125°C сверхширокий.
До миграции разбейте проект на три слоя и оцените каждый:
1. Софт PS: bare-metal программы, задачи FreeRTOS, Linux-приложения и драйверы на A9.
2. Логика PL: RTL, IP-ядра, ограничения и назначение выводов из Vivado, работающие в ткани FPGA.
3. Загрузка и BSP: образ загрузки, конфиг запуска QSPI/eMMC/SD, device tree и пакет поддержки платы.
2. Миграция софта PS: наибольшее переиспользование BSP
1. Bare-Metal и FreeRTOS: проект почти не меняется
Проекты bare-metal и FreeRTOS обращаются к периферии A9 (UART, GPIO, таймеры, контроллер прерываний) через BSP. Раскладка регистров PS у HWD7Z020 совместима с XC7Z020, драйверы SDK/BSP переиспользуются, прикладной код переписывать не нужно. Изменения сосредоточены на регенерации BSP под отечественную библиотеку устройств, перекомпиляции и проверке номеров прерываний и конфигурации тактов. Объём измеряется днями, не месяцами.
2. Linux: локальные правки device tree, U-Boot и ядра
В Linux-проектах сторона PS меняется больше, чем в bare-metal, но это не старт с нуля:
- Device Tree (DTS): переназначьте узлы периферии PS и подключения PL из дерева XC7Z020 на разъёмы новой платы; заполните ёмкость/ширину DDR3, разделы eMMC/QSPI, узлы Ethernet/USB под новую плату.
- U-Boot и ядро: обрежьте конфиг, совместимый с XC7Z020; настройте bootargs, скорость консоли и монтирование rootfs; перекомпилируйте собственные драйверы и протестируйте на отечественном устройстве.
- Прикладной слой: сервисы пользователя, сетевые программы и бизнес-алгоритмы не зависят от чипа и переносятся напрямую.
Пропускную способность DDR3 сначала оцените по конфигу платы: обе PBC7Z020G/021G используют DDR3 1ГБ, 32-битная шина, 1066Мбит/с; байтовая полоса = 4Б × 1066МТ/с ≈ 4,26 ГБ/с, достаточно для обычного управления и лёгкой передачи изображений, менять платформу из-за полосы не нужно.
3. Миграция логики PL: перепланируйте ограничения после сверки ресурсов
Сравнение ресурсов PL (класс XC7Z020 vs HWD7Z020 / PBC7Z021G)
| Ресурс | Класс XC7Z020 | PBC7Z021G (HWD7Z020-1CLG484) | Вывод по миграции |
|---|---|---|---|
| Логические ячейки | ~85K | 85K | Тот же класс, помещается |
| LUT | ~53,2K | 53.200 | Тот же класс |
| Триггеры | ~106K | 106.400 | Тот же класс |
| DSP-множители | 220 | 220 | Тот же класс |
| Block RAM | 4,9 Мб | 4,9 Мб | Тот же класс |
| Доступный PL-IO | — | 198 (плюс 48 пар LVDS, 100 настраиваемых по напряжению IO) | Перепланировать под новые разъёмы |
Поведенческий RTL, чисто комбинационная/последовательная логика и большинство IP-ядер (BRAM, FIFO, PLL/MMCM, AXI-interconnect) синтезируются напрямую в совместимом потоке без переписывания.
Ограничения, IP и переназначение выводов
После смены корпуса с PBGA400 (020G, компактный 35×42мм) на 1CLG484 (021G, 60×60мм) физические выводы и выведенные IO различаются, поэтому файл ограничений XDC нужно заново назначить по разъёмам новой платы; дерево питания, трассировка DDR3 и кварцы (021G: кварц PS 33,33МГц плюс кварц PL 50МГц) сверяются с новой платой. Если IP использует закрытый жёсткий блок вендора (определённые трансиверы, модули безопасности), проверьте наличие эквивалентного IP у отечественного устройства; иначе замените общим RTL.
4. Цепочка загрузки и чек-лист внедрения
Режимы загрузки и образ boot
PBC7Z021G резервирует 6-пиновый JTAG и поддерживает режимы JTAG/QSPI/SD-карта переключателем DIP; PBC7Z020G использует 2×120-пиновые разъёмы Panasonic и питание 5В. Внедрите миграцию по чек-листу:
1. Софт PS: регенерируйте BSP, перекомпилируйте и протестируйте bare-metal/FreeRTOS; для Linux обновите device tree, bootargs U-Boot и конфиг ядра.
2. Логика PL: синтезируйте исходный проект, перепишите XDC под новый корпус, проверьте совместимость IP и сходимость тайминга.
3. Конфиг загрузки: подтвердите режим (отладка JTAG → серийный QSPI/SD), соберите boot.bin (FSBL, битстрим, device tree) и rootfs.
4. Широкий диапазон и надёжность: отечественные платы -55~125°C (020G/021G); проведите термоциклы и длительное испытание под нагрузкой для целевого режима, подтвердите запас по питанию.
Выбор: 020G / 021G / чистый FPGA по размеру и IO
- Сверхкомпактная замена (PBC7Z020G, ¥799): 35×42×5,5мм, 2×120-пиновый, для плотных по месту узлов с умеренной логикой.
- Полностью выведенная серия (PBC7Z021G, ¥999): 60×60мм, 4×80-пиновый, 198 PL-IO и 48 пар LVDS, ресурсы PS/PL выведены полностью, для серийного производства и проектов с большим числом внешних IO.
- Чистый FPGA с большими ресурсами (PBC7K325G, ¥1.999): когда стороне PL нужны высокоскоростные трансиверы или большая логика (16 GTX@12,5Гбит/с, 2ГБ DDR3, 326K ячеек), берёт на себя отечественный Kintex-7 SoM, дополняя схему ZYNQ.
Замена ZYNQ на отечественный — не пересборка: софт PS и прикладной слой переиспользуются сильнее всего; реально трогаете перепланирование ограничений PL под новый корпус и обновление device tree с образом загрузки. Оцените отдельно PS, PL и загрузку; в совместимом потоке проект требует лишь локальной правки, риск сосредоточен на совместимости IP и широкотемпературной регрессии, и миграция внедряется по плану.
