注意(2017年7月29日追記)
この記事は Linux Kernel 4.4 時点に投稿したものであり、古い内容が含まれています。Linux Kernel 4.10 以降、FPGA 関連は大きく進歩しました。詳しくは「Linux Kernel 4.10 でのFPGAのサポート事情」を参照してください。
はじめに
これまでの経過
次の記事で紹介したように、Linux Kernel 4.4.4 からFPGA Manager Framework が追加されました。
実際にどのようになっているのか、どのように使うのかを調べるために、人柱的な感じで試用してみました。これらの実施例は次の記事を参考にしてください。
- 「FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(ブートイメージの提供)」@Qiita
- 「FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(ZYBO-Examples)」@Qiita
- 「FPGA+SoC+Linux+Device Tree Overlay+FPGA Manager(DE0-Nano-SoC-Examples)」@Qiita
この記事では、試用してみた現時点での結論とその理由について説明します。
結論
一言で言うなら、使うには 時期尚早 です。
もし同じような機能(FPGAを動的にプログラミング)を使いたいのであれば、各FPGAベンダーやボードベンダーが提供しているカスタマイズされたLinuxを使う方が良いでしょう。
ただ、この機能自体は大変有用なので、Linux 本家が正式にフルサポートするのを期待しています。
その後の話を「FPGA+SoC+LinuxでFPGA Managerを試してみた(まとめ2)」に投稿しました。あわせて参照してください。
理由
時期尚早と考える理由は次の2点です。
- 必要な全ての機能が揃っていない
- FPGAベンダー間でのアーキテクチャの一貫性に問題がある
いずれの理由も、解決するには今しばらく時間が必要かと思います。
詳細な説明
FPGAのプログラムに必要な機能
「FPGA+SoC+Linuxのブートシーケンス(概要編)」@Qiitaでも説明したように、Linux の上で、FPGA のプログラムを FPGA にロードして動作させるためには次の機能が必要です。
- Programmable Logic(FPGA) のクロック設定
- Programmable Logic(FPGA) にプログラムをロード
- Programmable Logic - Processing System Interface の設定
- Programmable Logic の起動
- Device Tree
- Device Driver
Altera-SoC の場合のアーキテクチャ
前節で紹介した機能がAltera-SoC の場合、現時点でどのように構成されるかを下の図で示します。
図1 Altera-SoC の場合のアーキテクチャ
上の図で、Linux Kernel のうち実線枠で囲まれているものが実装済みのもので、破線枠で囲まれているものが未実装のものです。見ての通り、未実装の機能がまだまだあります。
ユーザー側から各機能を制御するための Higher Level I/F が無いため、各種機能を使うにはカーネルモードで動くプログラム(デバイスドライバ)が必要です。
また、FPGA のプログラムをロードしている最中は、ハードウェアの誤動作を回避するために HPS-FPGA Bridge をオフにしておく必要がありますが、何故か HPS-FPGA Bridge を制御するためのドライバが未実装のため、実はFPGAのプログラムをロードすることさえ出来ません。したがって FPGA Manager Framework や Low Level FPGA Driver が単なるゴミに成り果てています。
ZYNQ の場合のアーキテクチャ
前節で紹介した機能がZYNQ の場合、現時点でどのように構成されるかを下の図で示します。
図2 ZYNQ の場合のアーキテクチャ
上の図で、Linux Kernel のうち実線枠で囲まれているものが実装済みのもので、破線枠で囲まれているものが未実装のものです。見ての通り、未実装の機能がまだまだあります。
ユーザー側から各機能を制御するための Higher Level I/F が無いため、各種機能を使うにはカーネルモードで動くプログラム(デバイスドライバ)が必要です。
Altera-SoC の場合と異なり、ZYNQの場合は PS-PL Bridge の制御は Low Level FPGA Driver が行います。そのため特にBridge制御ドライバが無くても FPGA プログラムのロードが出来ます。
アーキテクチャの一貫性
Altera-SoC場合 のアーキテクチャとZYNQの場合のアーキテクチャのところで少し触れましたが、双方のアーキテクチャで PS-PL Bridge の制御をどこが担当するかで相違があります。どういう経過でこうなってしまったのかは判りませんが、どのモジュールが何を担当するのか何をしないのかが不明瞭なまま、双方が勝手に実装を進めるとアーキテクチャの一貫性という点で問題が起こると思います。
おそらく、現時点ではそこらへんが不明瞭なため、Linuxのメインラインへの導入が遅れているのではないでしょうか。