トピックハブ

ソフトプロセッサ

ソフトプロセッサとは何か、MicroBlaze V、Nios V、VexRiscv、NEORV32、PicoRV32、Ibexの比較、LiteXがその周りにSoC全体を組み立てる仕組み、ソフトコアがハードコアに勝つ場面を解説します。

更新 2026年11月13日 · ソフトプロセッサ、MicroBlaze V、Nios V、VexRiscv、NEORV32、Ibex、LiteX、RISC-V

概要

ソフトプロセッサとは、ダイにハード化されたものではなく、FPGA自身の論理セルから構築されるCPUです。数千LUTを消費し、控えめなクロックで動作し、どのベンダーのどのデバイスにも配置できます。このハブは、設計にプロセッサを入れるべきか、どれを入れるか、その周りのバス・メモリ・ペリフェラルをどう構築するかを決めようとしているエンジニアのためのものです。

欲しくなる理由は、制御論理はRTLよりCで書く方が安いからです。設定プロトコル、ブートシーケンス、キャリブレーションルーチン、低速なハウスキーピング処理を扱うステートマシンは、状態のもつれではなく数百行のファームウェアになります。注意すべき理由は、ソフトコアはハードのArmコアに比べて遅く、他で必要になるかもしれないリソースを消費することです。

重要な考え方

ソフトコアは何でできているか

コア本体は3段から7段のパイプラインで、メモリから命令をフェッチし、デコードし、ALUで実行し、結果を書き戻します。その周りには、ブロックRAMで構築された命令メモリとデータメモリ、必要に応じてキャッシュ、そしてペリフェラル(UART、タイマー、GPIO、SPI、設計が必要とするカスタムレジスタ)へつながるバス(Wishbone、AXI、またはベンダー独自のもの)があります。ベンダーのコアには、これらすべてをメニューから組み立てるツールが付属します。オープンソースのコアにも同じことをするジェネレータが付属することが多く、LiteXはその中で最も完成度が高いものです。

RISC-Vコアフェッチ、デコード、実行、メモリ、ライトバック2kから10k LUT命令RAMブロックRAM、ビットストリームで初期化データRAMブロックRAM、またはキャッシュ越しのDDRシステムバス: Wishbone、AXI4-Lite、またはベンダーバスUARTタイマー、GPIOSPIフラッシュ自作論理制御・ステータスレジスタ
最小構成のソフトプロセッサシステム。コア、そのメモリ、ペリフェラルがバスを共有し、カスタム論理はファームウェアからはメモリマップドレジスタとして見えます。

知っておくべきコア

ベンダーのコアはRISC-Vに移行しました。AMDのMicroBlaze Vは、独自のMicroBlaze命令セットをRV32に置き換え、Vivadoブロックデザインとの統合とVitisのデバッグフローは維持しています。AlteraのNios Vは、Platform Designer内でNios IIに対して同じことを行います。どちらも自社デバイス上で無償で使え、ベンダーのデバッガとボードサポートが付属します。他ベンダーへの移植性は皆無であり、それこそがオープンソースの代替品の存在意義です。

SpinalHDLで書かれたVexRiscvは、構成自由度の高いインオーダーコアで、現代的なファブリックで数百MHzに達し、キャッシュ、MMU、Linuxサポート付きで構築できます。LiteXのデフォルトCPUです。NEORV32はVHDLのコアで、完全なSoCと優れたドキュメントを備え、小さく監査可能であることに重点を置いており、すべての行をレビューしなければならないチームに向いています。PicoRV32は意図的に小さく遅く、プロセッサが性能のためではなく利便性のためにある場合に適しており、多くのLattice iCE40プロジェクトで使われているコアです。lowRISCのIbexは2段のRV32コアで、量産品質の検証環境を持ち、OpenTitanの中にあるコアです。RocketとCVA6はより大きなアプリケーションクラスのコアで、FPGAに実装して配備されるより、FPGAで試作されることの方が多いです。

LiteXとSoCジェネレータ

LiteXはPythonフレームワークで、コア、メモリコントローラ、Ethernet、PCIe、SATA、数十のペリフェラルをSoCに組み立て、Verilogを生成し、BIOSとファームウェアヘッダを書き出し、ベンダーまたはオープンソースのツールチェーンを駆動します。プラグインCPUとしてVexRiscv、NEORV32、PicoRV32、Ibex、Rocketなどをサポートしています。安価なボード上でDDRとEthernetを備え、VexRiscvでLinuxをブートするLiteX SoCは、現実的な週末プロジェクトです。代償はPythonの依存関係の連鎖と、ベンダーのGUIで調べにくい設計です。

ソフトがハードに勝つとき

SoC FPGAのハードコアは、より速く、命令あたりのコストが安く、標準のLinuxが動きます。ソフトコアを選ぶのは、デバイスにハードコアがないとき、制御対象の論理の隣に小さなプロセッサを複数置く必要があるとき、ファームウェアをハードウェアと一緒に認証しなければならないとき、設計をベンダー間で移動させたいとき、あるいはベンダーが製品を廃止しても設計が生き残らなければならないときです。Linux、ネットワークスタック、本格的な計算が必要ならハードコアを選んでください。多くの設計は両方を持っています。

どこから始めるか

最初のNEORV32システム、MicroBlaze Vのブロックデザイン、LiteXのビルドに関する中級レッスンは準備中です。

ツールとベンダー

コア ISA 言語 サイズ(概算) ベンダーロック デバッグ
MicroBlaze V RV32Iとオプション ネットリスト(AMD) 2kから6k LUT AMDのみ Vitis、XSDB
Nios V RV32Iとオプション ネットリスト(Altera) 2kから5k ALM Alteraのみ Ashling RiscFree
VexRiscv RV32IMAFCオプション SpinalHDL 1kから5k LUT なし OpenOCD、LiteX BIOS
NEORV32 RV32IMCほか VHDL 2kから6k LUT なし オンチップデバッガ、OpenOCD
PicoRV32 RV32IMC Verilog 2k LUT未満 なし 最小限
Ibex RV32IMC、ビット操作 SystemVerilog 2kから4k LUT なし RISC-Vデバッグモジュール
LiteX フレームワーク Python(Migen) CPUによる なし LiteScope、BIOS

サイズは構成、キャッシュ、乗算器オプションで大きく変わります。ベンダーの注意点は/vendors/amd/、/vendors/altera/、/vendors/opensource/にあります。

よくある間違い

  • 「何か制御が必要だから」とソフトコアを入れ、性能が重要な処理をファームウェアでやってしまう。
  • 命令メモリはビットストリームで初期化されるので、ブートローダを追加しない限りファームウェア変更のたびに再ビルドが必要になることを忘れる。
  • 半分の速度で十分だったのに、ファブリックの最大クロックでコアを動かし、タイミング収束に何日も費やす。
  • 後で別ベンダーに移さなければならない設計にベンダーコアを使う。
  • 面積節約のためにデバッグモジュールを省き、ファームウェアがハングする理由を見る手段がなくなる。
  • 長いパイプラインと遅いバスを持つコアの割り込みレイテンシを無視する。

さらに深く

最近の論文

  • A State Augmented Approach to Paralle Modeling in High-Level Synthesis

    N. Kovacs, H. Zheng · arXiv cs.AR · ダイジェスト

    HLSは入力が合法とする並行性しかスケジュールできず、プロセッサのようなフィードバック結合設計を素朴な逐次C++でモデル化すると、ツールに必要な状態境界が隠れてしまいます。著者らは設計を、同時に開始し完了時に同期する同期式逐次プロセスとしてモデル化し、永続的な状態とフィードバックをC++内で明示したまま、各プロセス内部の演算のスケジューリングをHLSに任せます。この方法で書かれた5段パイプラインのRV32IコアはKintex UltraScale+上で220 MHz、1.221サイクル/命令を達成しました。素朴なHLS版は4.000、手書きのIbexコアは242 MHzで1.575です。面積を重視した派生版はLUTを65%削減する代わりにサイクル数が9.7%増えます。この結果は設計者がアーキテクチャの主導権を取り戻すことに依存しており、HLSのマーケティングが約束するものとは正反対です。