オープンソースツールチェーン
本稿執筆時点のオープンソースFPGAフローの現状。Yosysとnextpnrがどのデバイスをどの程度サポートするか、ビットストリームはどう文書化されたか、限界はどこにあるかを解説します。
概要
2015年まで、すべてのFPGAビットストリーム形式は秘密であり、すべてのFPGA設計はベンダーのツールを通っていました。Project IceStormがLattice iCE40のビットストリームを文書化し、Yosysが配置配線の相棒を得たことで、状況は変わりました。今日では、完全にオープンなフロー(合成、配置配線、ビットストリーム生成、書き込み)が複数のファミリーに存在し、Lattice iCE40とECP5、Gowin GW1NとGW2Aは実製品に使えるレベルです。このハブは、オープンフローに何ができて何ができないのか、あるデバイスにとって正しい選択かどうかを知りたいエンジニアのためのページです。
魅力は思想的なものと同じくらい実用的です。ツールは数秒でインストールでき、コマンドラインから動き、Pythonでスクリプト化でき、CIで動き、小さな設計なら数分ではなく数秒でビルドできます。代償は、サポートされるデバイスリストが小さいこと、ベンダーサポートがないこと、そしてタイミング駆動の配線が良好ではあるものの大きなファミリーではまだベンダーレベルに達していないことです。
重要な考え方
3つの段階と、それぞれの担当
Yosysが合成器です。Verilog(プラグインや商用版のTabby CADを通じてSystemVerilogとVHDLも)を読み込み、最適化し、ターゲットのセルにマッピングします。その下でABCが論理最適化を行います。nextpnrはデバイス内部のデータベースを使って配置配線を行い、コンフィギュレーションのテキスト記述を出力します。ファミリーごとのパッカー(icepack、ecppack、gowin_pack、prjoxide)がそれをビットストリームに変換します。openFPGALoader、または古いiceprogなどが、デバイスやそのフラッシュに書き込みます。各段階は独立したプログラムで、その間には文書化されたファイルがあります。これがフローをスクリプト化可能にしているものです。
サポートはファミリー単位で、ばらつきがある
本稿執筆時点での状況はおおよそ次のとおりです。iCE40(UltraPlusを含む全バリアント)は成熟しています。オープンフローが大半のユーザーの選択であり、Latticeも静かにそれを受け入れています。ECP5はSerDesを含めて成熟しており、ULX3SとOrangeCrabのボードはこれがあるから存在します。Apicula経由のGowin GW1NとGW2Aは、ロジック、ブロックRAM、PLLについて良好で、新しいGW5Aのサポートも進みつつあります。Project Oxide経由のLattice Nexus(CrossLink-NX、Certus-NX)は動作しますが、ユーザーは少なめです。Project X-Rayとnextpnr-xilinx経由のAMD 7 Seriesは、Artix-7で実際の設計をビルドできますが、完全なタイミングデータと一部のハードブロックが欠けているため、製品向けというより好奇心のある人向けにとどまっています。Altera Cyclone VにはMistralプロジェクトがありますが、初期段階です。Microchip、Efinix、そしてAMDとAlteraの大型ファミリーにはオープンなビットストリームサポートがなく、Efinixは形式を公開していません。
オープンフローにできないこと
タイミング解析はnextpnrに存在しますが、リバースエンジニアリングの完成度に依存する遅延モデルに頼っています。iCE40とECP5については、nextpnrのタイミングを通った設計が動く程度にモデルは十分です。電力推定器はなく、ベンダーツールに対する形式等価性検査もなく、暗号化ビットストリームの生成もなく、部分再構成やPCIe・DDRコントローラといったベンダーのハードIPのサポートも限定的です(ECP5のDDR3はソフトコントローラのLiteDRAMで動作します)。Yosysの合成品質は、典型的な設計のLUT数ではベンダーツールに近いものの、マッパーの期待どおりにRTLを書かないとキャリーチェーンとDSP推論で劣ることがあります。AMDやAlteraの部品上の大規模商用設計については、ベンダーツールが依然として唯一の現実的な道です。OpenFPGAは別の領域にあります。新しいプログラマブルファブリックを設計する人のために、FPGAそのものを生成するものです。
どこから始めるか
FPGAを端から端まで学ぶ最も安価な方法は、iCEBreakerまたはTang Nano 9KとOSS CAD Suiteのナイトリービルドです。これにはYosys、nextpnr、各パッカー、openFPGALoader、Verilator、Icarus Verilogが1つのアーカイブにまとまっています。どちらもオープンなシミュレータで動く/learn/beginner/05-your-first-hdl-module/と/learn/beginner/06-simulation-and-testbenches/を読み、次にビルド手順として/learn/beginner/10-from-rtl-to-board/を読んでください。同じボードでオープンフローとベンダーフローを比較してください。両方を知っていることが役に立つスキルです。スクリプト化およびCI駆動のフローに関する中級トラックは準備中です。
ツールとベンダー
| ファミリー | ビットストリームプロジェクト | nextpnrターゲット | 本稿執筆時点の状況 |
|---|---|---|---|
| Lattice iCE40 | Project IceStorm | nextpnr-ice40 | 成熟、UltraPlusのPLL、SPRAM、DSPを含めて完全 |
| Lattice ECP5 | Project Trellis | nextpnr-ecp5 | 成熟、SerDesとDDRはソフトコントローラ経由 |
| Lattice Nexus | Project Oxide | nextpnr-nexus | 動作するがユーザーは少なめ |
| Gowin GW1N、GW2A、GW5A | Apicula | nextpnr-himbaechel | GW1NとGW2Aは良好、GW5Aは作業中 |
| AMD 7 Series | Project X-Ray | nextpnr-xilinx(himbaechel) | 実験的、タイミング駆動の保証なし |
| Altera Cyclone V | Mistral | nextpnr-mistral | 初期段階 |
| 任意(シミュレーション) | Verilator、Icarus、GHDL、cocotb | 該当なし | 成熟、産業界で広く使用 |
F4PGA(旧SymbiFlow、CHIPS Alliance配下)は、X-RayとTrellisの成果を代替ルーターのVPRと共にパッケージ化しました。その開発は2022年以降鈍化し、活動の大半はopenXC7とYosysHQのリポジトリに移ったので、nextpnrのreadmeと矛盾する場合はF4PGAの文書を過去のものとして扱ってください。
よくある間違い
- すでに持っているボードならオープンフローがサポートしていると思い込む。まずファミリーを確認してください。
- 配線は通るがタイミング制約のない設計を信頼する。nextpnrにクロック周波数を与え、レポートを読んでください。
- ベンダープリミティブだらけのRTLを書いて、Yosysが同じ構造を推論してくれると期待する。推論しやすいコードを保つか、オープンフローのプリミティブ名でインスタンス化してください。
- ディストリビューションの古いYosysパッケージを使う。フローの進化は速く、OSS CAD Suiteのナイトリーがサポートされる経路です。
- シミュレーションツールと合成ツールを混同する。VerilatorとGHDLはどのベンダーの設計でも動き、オープンツールへの最も簡単な第一歩です。
さらに深く
- YosysマニュアルとYosysリポジトリ。
- nextpnrリポジトリ。アーキテクチャごとの文書と状況があります。
- Project IceStorm、Project Trellis、Apicula、Project Oxide、Project X-Ray。
- openFPGALoader。使われているほぼすべてのボードとケーブルに書き込めます。
- OSS CAD Suiteビルド。1アーカイブでのインストールです。
- OpenFPGA。既存のデバイスを対象にするのではなく、新しいファブリックを生成するためのものです。