Alibaba Cloud FPGA: 200ドルのKintex UltraScale+
(essenceia.github.io)- Kintex UltraScale+ FPGA ボードを200ドルで購入し、開発プラットフォームとして活用する実験の紹介
- このボードは公式ドキュメントや保証なしで販売されており、JTAGデバッグや初期設定に課題がある
- OpenOCDとSegger JLinkを活用し、独自にFPGA構成およびデバッグ環境を実装できる可能性を探る
- 中古FPGAのPCIe/イーサネットインターフェースの検証、ピン配置の確認、システムモニタリングなどが実験目標
- 初期化とJTAG接続、スキャンチェーンの把握、温度/電圧モニタリングまで、段階ごとの手順と問題解決の経験を整理
はじめに
- 筆者は大規模プロジェクトのプロトタイピングのために高性能なFPGA、特にXilinx Virtex系のUltraScale+を望んでいたが、コスト面とVivadoエンタープライズライセンスの負担から、WebPack対応のKintex UltraScale+チップ(XCKU3P、XCKU5P)へ候補を絞った
- これらのチップもホビー用途を超える規模で、LUTsやGTYトランシーバなど高い仕様を備えている
- 最低でも2つのSFP+または1つのQSFP、JTAG、PCIe x8以上という条件を満たす開発ボードが必要であり、自作設計、Alinx製品の購入、中古市場の探索を進める中で、EbayでAlibaba CloudのアクセラレータFPGAボードを200ドルで購入した
- 購入したボードはドキュメントの支援が皆無で、正常動作するかどうかも不明だったが、安価にKintex UltraScale+ボードをハックできる点に魅力を感じた
デバッガの課題
- XilinxのUG908ドキュメントによれば、推奨JTAGプローブでFPGAを構成・デバッグするのが一般的だが、高価な公式プローブの代わりにオープンソースの代替手段(OpenOCDなど)を試した
- Xilinxの公式ツールチェーン(ILAなど)を諦める代わりに、JTAG USERレジスタベースの独自デバッグロジックを開発できる
- OpenOCDは主にARM/RISC-V向けに使われるが、幅広いプローブへの対応、JTAG操作の細かな制御、SVFフォーマット対応などによりFPGAにも活用可能
- UltraScale+シリーズ対応に関する文書は乏しいものの、JTAGおよびSVF標準とスキャン構造は有効である
全体計画
- Ebayで安く購入した中古FPGAボードを、公式サポートのないオープンソース/非公式プローブ(OpenOCD、JLinkなど)で構成し、開発プラットフォームとして活用するための段階的な実験計画
- 各段階は、ボードのデバイス動作確認 → JTAGデバッガ接続 → ピン配置の特定 → ビットストリーム転送、の順で進む
1段階 - ボードの正常動作確認
- Flashメモリが消去されていなければ、前の所有者のビットストリームを通じてPCIeエンドポイントの識別やSFP PHYイーサネット信号の有無から、まず動作を確認できる
2段階 - JTAGデバッガ接続
- JTAGインターフェースのピン位置、接続されているデバイス数、デイジーチェーンの状況などを把握する必要がある
- FPGAのJTAGシステムレジスタ(特にSYSMON)を通じて温度や電圧をリアルタイム監視でき、openOCDの対応拡張にも期待している
3段階 - ピン配置(ピンアウト)の把握
- 外部クロック源の種類・周波数・接続ピン、SFPおよびPCIeに接続されたトランシーバ情報など、実機回路の解析が必要
4段階 - ビットストリーム書き込み
- JTAG経由の一時構成(Flashをバイパス)、openOCDのvirtex2 + pldドライバ、またはVivadoで生成したSVFの再生方式を使う計画
- Vivado → SVF変換を含む全体フローの自動化も予定している
ボード受領と初期テスト
- Alibaba Cloudアクセラレータ由来のKintex UltraScale+ FPGA(XCKU3P-FFVB676)ボードと、SFP28 25G Huaweiトランシーバ、OS2パッチケーブルなどの同梱品を受け取った
- ボードには多少の使用感があるものの、付属品およびPCIe/SFPの状態は良好だった
スタンドアロン電源確認
- PCIe-USBアダプタで簡単に給電し、LEDやハードウェアの発熱から電源の有無を一次確認
PCIeインターフェース実験
- Raspberry Pi 5のPCIe Gen2.0 x1外部インターフェースを活用してFPGA(Gen3.0、x8対応)をテストすれば、下位互換によって正常認識が期待できる
- Linuxの
dmesgログ上では、PCIe Bridgeおよびendpoint(イーサネット型)としてボードが認識された。独自のvendor/device id指定によりOSとの衝突も防いでいる lspci -vvvコマンドでPCIeデバイス全体の状態を確認すると、このボードにはGen3.0 x8対応属性が明記されている一方、実際にPiへ接続した際のbandwidth/speedはGen2.0 x1へダウングレードされていた(Bridgeの制約と実際の物理接続制限による)- これにより、FPGAボードのPCIeインターフェースが正常に動作していることを確認した
JTAGインターフェース
- Xilinx FPGAはJTAG経由で内部CMOS Configuration Latch(CCL)をSRAM方式で更新・ロードできる
- 実機ボードのJTAGインターフェースは標準4線(TCK/TMS/TDI/TDO)と電源/GND信号で構成される。リセットはXilinx FSM経由で実装できる
- 実際のピン配列は標準と異なるため、別途配線が必要
Segger JLinkの活用
- AMD公式JTAGプログラマを持っていない状態で、Segger JLinkをOpenOCDと組み合わせて使用
- JTAGは4本のGPIOだけで構成できるため、その場しのぎの実験にも向いている
- JLink → FPGAボード間の配線図を提示し、ブレッドボード用ジャンパと長い信号遅延を考慮してTCK(クロック)速度を1〜10MHzに制限して設定
OpenOCD環境
- OpenOCDは多様なプローブ/ボードをサポートするオープンソースのオンチップデバッガ
- 標準SVFフォーマットに対応しており(Vivadoと連携可能)、回路がオープンソース化されているため、問題発生時に自分で解析・パッチを当てやすい
- 最新のOpenOCD(0.12.0+dev)とJLinkライブラリを自前でビルドして使用
JTAG Scan Chain確認とIDCODEチェック
- ボード回路図が不明な状態で、OpenOCDの自動スキャン機能によりJTAGチェーン内のデバイスとIDCODEを探索
- このボードはXilinx KU3PのIDCODE(0x04a63093)と一致することを確認
- IR長(命令レジスタ長6ビット)も手動指定して正常に検出
- 最終的に、ボードのJTAG scan chainを整理できた
SYSMONシステムモニタ
- Xilinxの旧世代はXADC、UltraScale+系はSYSMON4を内蔵し、温度・電圧測定機能を提供する
- openOCDの標準機能ではSYSMONのJTAG連携は未対応であり、自前で追加が必要
- SYSMON(DRP)コマンド送信とstatusレジスタを通じた温度・電圧のリアルタイム確認機能まで、スクリプトでハックできる
以上の過程を通じて、公式サポートのない旧型Alibaba Cloud FPGAアクセラレータボードを安価に入手し、オープンソースツールだけでデバッグおよび活用基盤(PCIe/JTAGインターフェース、システムモニタリング)を整備した経験を記録している
1件のコメント
Hacker Newsのコメント
Raspberry-PI VでLattice Certus-Pro NX "Versa"ボードのPCIeインターフェースを試したことがあり、本当に便利だと感じた Raspberry-PI Vは、最新のデスクトップソフトウェア(Microsoft Teamsまで!)を動かせるほど高速 FPGAデザインをライブでデモし、カンファレンスコール中にデスクトップ画面を共有できた BroadcomのSoCはドキュメント不足なのが惜しい IntelはNDAを通せば全チップのドキュメントを提供してくれるので、Xeon Ivy Bridgeで素晴らしいFPGA PCIe環境を構築できた PCI構成レジスタを保存してからFPGAを再構成し、再度レジスタを書き戻すと、サーバーを再起動したり再スキャン(re-enumerate)したりせずにチップがバス上に現れるのでとても便利だった 秘訣は、再構成中にルートコンプレックスビットを一時的に設定してPCIeエラー検出を無効化すること (当時はAltera Stratix-IIgxを使っていた) 他の方法もあるかもしれないので参考資料を残しておく: Stack Overflowリンク 全体として、ドキュメントがしっかりしていればPCIe起動時のエラーレポートは非常に有用
FT2232Hアダプタを持っているなら(持っていなくても1つ買うのを勧める)、このアダプタはVivadoと簡単に互換するようフラッシュできる 参考: Vivado FTDI Device Programmingガイド
うちの会社ではFT2232Hを常に20~30個在庫している GPIO、I2C、SPI、parallel FIFOなどさまざまなプロトコルに対応していて本当に便利 しかもpyFTDIというPythonライブラリが素晴らしい
このアダプタは別のプロジェクトの余りとして持っているけれど、FPGA作業はやったことがない Vivadoと互換するというのが実際にどういう意味なのか気になる AMD FPGAを構成できるということなのか、それとも別の意味なのか知りたい
Alibabaがデータベース分野で、FPGAクラスタでLSM compactionをカスタムMySQLストレージエンジンとして処理していた革新的な事例を思い出す 参考: 関連論文PDF RocksDBと比べてスループットとレイテンシが大幅に改善し、一部のワークロードでは一段上だった この技術はサービスとして提供もされたが、最終的には撤退した まだ社内活用しているかは分からないが、反復的なデータベース処理にハードウェアアクセラレーションを使っている例がほとんどないのは驚きだった
FPGA PCIeまたはPCIカードに興味があるなら、中古のGidelボードもかなり多く出回っている ProcSpark/ProcStarなどさまざまなシリーズがある 公式ソフトウェアはプロプライエタリで、FPGAも複数載っているため、Quartusでそのまま使うにはピン配置を探す必要がある 自分は巨大なStratix IVが載ったボードを1枚手に入れた Kintel UltraScale+ボードは本当に垂涎ものなので、この投稿はとても印象的だった
中国にいるなら、同じ製品がidlefishで480元(約68ドル)で売られている 信じられないほど安いので、自分でも試してみるつもり
まだ背面のSFPコネクタのピン配置情報を突き止めたのかどうか分からない もしこの部分が文書化されていて、PCI-eラインも確認できるなら、これでカスタム光ネットワーク機器を作るのも面白そうだと思う SFPトランシーバは入力を与えればそのまま出力してくれるので、PCIeバックプレーンでも単体でも、面白いカスタム光信号デバイスが作れそう
FPGAでニューラルネットワークや他のconnectionistアーキテクチャを実装した例をご存じの方はいますか? FPGAの最も面白い点は、「カスタム」チップを大学や個人でも手の届く範囲で扱えること AIがLLM中心に偏っている今、小さなグループや個人がFPGAで動物志向のbottom-upな人工知能アプローチを試せる余地があると思う
FNALでは、LHC/CMS高エネルギー物理実験の結果に対する推論処理にFPGAベースのニューラルネットワークを使っている マイクロ秒単位で動的システムを制御する事例もある 参考資料: HLS4ML CERN IRIS-HEP発表資料PDF Deploying tinyML on FPGAs Whitepaper NeurIPS ML4PhysicalSciences事例PDF
「FPGAでニューラルネットワークを実装する」とは、ハードウェアアクセラレータとして推論用途に使うという意味なのか、それともネットワーク全体(重みまで含めて)を直接FPGAアーキテクチャに合成するという意味なのか気になる いずれにせよ、FPGAは完全に任意の論理を実装できるわけではなく、限られたブロックをソフトウェア合成結果として利用する構造になっている LLMのように大容量・高帯域のメモリが必要な用途には向いていない FPGAに高速メモリを接続することはできるが、今日ではその用途に関してGPUのほうがはるかに優れている
differentiable logic gate networksを見てみると面白い
参考論文: arXiv:2404.10076
なぜこんなにダウンボートされているのか分からない 私の理解では、AIはモデルに大量のRAMと高速なRAMを必要とするので、FPGAには向いていない FPGAには高速RAMを接続できるピンはあるが、ボード設計やレイヤートレースが非常に複雑になる だからグラフィックカードのほうがずっと適している
このAIブームを見ていて、個人的にはこう思う
まだeBayに在庫がたくさんある eBayリンク GPIOがヘッダなどに引き出されていないように見えるけれど、使い道としてよさそうなプロジェクト案があれば教えてほしい
「ボードに旅行用ケースが付いてくる」という点が印象的 なぜなのか気になる。データセンターでこのボードを頻繁に抜いて持ち運ぶのか、それともeBayの出品者が保護用に入れたのか