実践 ZYNQ 中国国産置換:Xilinx ZYNQ から PBC7Z020G/021G へ移植して何が変わるか
元の設計は Xilinx Zynq-7000(XC7Z020)で ARM ソフト + FPGA リアルロジックの異種方式を組み、今や国産化が必要になった。チップを差し替えればプロジェクト全体を書き直しになるのか、局所修正で済むのか。本稿は XC7Z020 互換の国産 HWD7Z020 を載せた PBC7Z020G/021G への移植を PS ソフト・PL ロジック・ブート/BSP の 3 層に分解し、実際の変更量・流用できる部分・リスク点を整理する。
1. なぜ移行するのか:XC7Z020 から国産 HWD7Z020 へ
ZYNQ の価値は、1 チップにデュアルコア ARM Cortex-A9(PS、システムソフト・ネットワーク・ファイルシステムを実行)とプログラマブルロジック(PL、並列収録・プロトコル加速・リアルタイム IO を担当)を同居させられる点にある。XC7Z020 設計を国産化する目的は、まったく別のアーキテクチャに変えることではなく、命令セット・ペリフェラル・Vivado フローがドロップイン互換の国産品を選ぶことだ。PBC7Z020G は HWD7Z020-1PBGA400、PBC7Z021G は HWD7Z020-1CLG484 を搭載。いずれも国産産業グレード、デュアル A9@800MHz + FPGA 異種構成、Vivado にネイティブ互換で追加パッチ不要、定格 -55~125°C の超ワイド温度。
移行前にプロジェクトを 3 層に分け、それぞれ見積もる:
1. PS ソフト:A9 上で動くベアメタル、FreeRTOS タスク、Linux アプリとドライバ。
2. PL ロジック:Vivado で書く RTL、IP コア、制約、ピン配置。FPGA ファブリック上で動く。
3. ブートと BSP:ブートイメージ、QSPI/eMMC/SD ブート設定、デバイスツリー、ボードサポートパッケージ。
2. PS ソフト移植:BSP の再利用が最も多い
1. ベアメタルと FreeRTOS:プロジェクトはほぼ変わらない
ベアメタルと FreeRTOS のプロジェクトは BSP 経由で A9 のペリフェラル(UART、GPIO、タイマ、割り込みコントローラ)を呼ぶ。HWD7Z020 の PS レジスタレイアウトは XC7Z020 互換なので SDK/BSP ドライバは再利用でき、アプリ層コードの書き直しは不要。変更は国産デバイスライブラリで BSP を再生成し、再コンパイルし、割り込み番号とクロック設定を確認する程度。工数は月ではなく日単位で測れる。
2. Linux:デバイスツリー、U-Boot、カーネルの局所調整
Linux 設計では PS 側の変更がベアメタルより多いが、ゼロからではない:
- デバイスツリー(DTS):PS ペリフェラルノードと PL 接続ノードを XC7Z020 ツリーから国産ボードのコネクタへマップし直す。DDR3 容量/幅、eMMC/QSPI パーティション、イーサネット/USB ノードを新ボード用に埋める。
- U-Boot とカーネル:XC7Z020 互換の config をベースに削り込み、bootargs、コンソールボーレート、rootfs マウントを調整。カスタムドライバを国産デバイス上で再コンパイルし回帰試験。
- アプリ層:ユーザサービス、ネットワークプログラム、業務アルゴリズムはチップ非依存でそのまま移行。
まずボード設定から DDR3 帯域を見積もる:PBC7Z020G/021G は DDR3 1GB、32-bit バス、1066Mbps。バイト帯域 = 4B × 1066MT/s ≈ 4.26 GB/s。通常の組み込み制御と軽い画像転送には十分で、帯域のためにプラットフォームを替える必要はない。
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 Mb | 4.9 Mb | 同クラス |
| 利用可能 PL IO | — | 198(+48 LVDS ペア、100 電圧設定可能 IO) | 新コネクタで再計画 |
元の RTL 挙動記述、純組合せ/順序回路、ほとんどの IP コア(BRAM、FIFO、PLL/MMCM、AXI 相互接続)は互換フローでそのまま合成でき、書き直しは要らない。
制約、IP、ピン再マッピング
パッケージが PBGA400(020G、35×42mm の小型)から 1CLG484(021G、60×60mm)へ変わると、物理ピンと露出 IO が変わるため、XDC 制約ファイルを新ボードのコネクタに合わせて再割り当てする必要がある。電源ツリー、DDR3 配線、クロック水晶(021G は 33.33MHz PS 水晶 + 50MHz PL 水晶)も新ボードに合わせて確認する。IP がベンダー固有のハードブロック(特定トランシーバ、セキュリティモジュール)を使っている場合は、国産デバイスに等価 IP があるか確認し、なければ汎用 RTL へ置き換える。
4. ブートチェーンと着弾チェックリスト
ブートモードとブートイメージ
PBC7Z021G は 6 ピン JTAG を備え、DIP スイッチで JTAG / QSPI / SD カードブートを選択可能。PBC7Z020G は 2×120 ピン Panasonic コネクタと 5V 給電。次のチェックリストで移植を着弾させる:
1. PS ソフト:BSP 再生成、再コンパイル、ベアメタル/FreeRTOS の回帰試験。Linux はデバイスツリー、U-Boot bootargs、カーネル config を更新。
2. PL ロジック:元プロジェクトを合成し、新パッケージ用に XDC 制約を書き直し、IP 互換性とタイミングクロージャを確認。
3. ブート設定:ブートモードを確定(JTAG デバッグ → QSPI/SD 量産)、boot.bin(FSBL、ビットストリーム、デバイスツリー)と rootfs を構築。
4. ワイド温度と信頼性:国産ボードは -55~125°C(020G/021G)。目標環境で熱サイクル試験と長時間通電試験を行い、電源マージンを確認。
選定:サイズと IO で 020G / 021G / ピュア FPGA 拡張を選ぶ
- 超小型置換(PBC7Z020G、¥799):35×42×5.5mm、2×120 ピン。スペースが厳しく中程度ロジックの組み込み小型化・置換ノード向け。
- フル露出量産(PBC7Z021G、¥999):60×60mm、4×80 ピン、198 PL IO と 48 LVDS ペア、PS/PL リソースを完全露出。工学量産や外部 IO を多く必要とする設計向け。
- ピュア FPGA 大リソース拡張(PBC7K325G、¥1,999):PL 側に高速トランシーバや大ロジックが必要なら(16 GTX レーン@12.5Gb/s、2GB DDR3、326K ロジックセル)、国産 Kintex-7 SoM が受け皿となり ZYNQ 方式を補完する。
ZYNQ の国産置換は作り直しではない。PS ソフトとアプリ層が最も再利用でき、実際に触るのは新パッケージ向け PL 制約の再計画と、デバイスツリー・ブートイメージの更新だ。PS・PL・ブートの 3 層に分けて各層を見積もれば、互換フローの中でプロジェクトは局所調整で済み、リスクは IP 互換性とワイド温度回帰に集中する。移植は計画通りに着弾する。
