FPGA本ラッシュの最後の本、FPGAキットで始めるハード&ソフト丸ごと設計: CPUと周辺回路を作り込んでCプログラミングを読みました。とても面白かったので紹介します。全体的にソフトウェアの方が説明少なめで、ハードウェア(特にシステムアーキテクチャ)は丁寧に説明してあります。
内容
オープンソースなプロセッサLEONをFPGAに実装し、リアルタイムなJEPGデコードシステムを動かしていく本です。
最初にLEONの簡単な説明と、LEONシステムのコンフィグレーションの説明があります。LEONシステムには設定用のGUIがついているとはいえ、煩雑な設定の説明があるのはうれしいです。FPGA上で動くLinuxを起動させるところまでが第一部です。
第2部からはJPEGフォーマットの詳しい説明と、アルゴリズムのFPGAへの実装方法が詳しく説明されています。まずはPC上のLinuxでmotionJPEGの動作確認をしたあと、FPGA上のLinuxへ移植、最終的にJPEGデコードに必要なDCTの処理やハフマンデコードの機能をハードウェア化していきます。gdbを使ったリモートでバッグの方法、自作のハードウェアブロックをLEONシステムへ組み込む方法(AHB)、色変換のハードウェア化、Linuxデバイスドライバの作成、ネットワーク対応と、多くのトピックが説明されていて、とても面白いです。まさにハード&ソフトの開発です。ソフトウェアのソースからFPGAで動くHDLに変換する方法がわからない人には役に立つと思います。
第3部はAMBA AHBの説明とModelSimによるシミュレーションの説明があります。簡単なバスの仕様から、アービタまで使ったAMBAシステムの設計方法、AHBスレーブ、AHBマスターの作成まで、一通りの説明があります。バースト転送までに対応したAMBAマスターのシミュレーションモデルまで、VHDLソースコードつきで説明されています。この内容が日本語で読めるのはすばらしいです。
ハードウェアにすると何が速くなるのか
この本の素晴らしいところは、JPEGデコードの処理をいきなりハードウェア化するのではなく、その過程を書いてあるところです。当たり前の事ですが、FPGAを使ったらどんなシステムでも速くなるわけではありません。処理のボトルネックがFPGAによって解消されるときのみ速くなります。最近はtwitterでもFPGAの話題がよく出てきて、FPGAが1クロックで並列処理できるから速いなどと言われています。確かに、FPGAを使って並列処理をすることで速くなることもありますが、それが全てではありません。データ量が多くなってくると、実際の処理ではなくメモリへのアクセスがボトルネックになり、それをFPGAで解消するパターンもよくあります。この本ではそういった所にも言及してあり、とても楽しく読めました。
移植性のあるソフトウェアは素晴らしい
この本を読んでいて改めて感じたのが、ソフトウェアの移植性の高さです。PC上のLinuxで動いていたプログラムをFPGAのLEON上に持って行くときに、gdbは使えるは、gprofは使えるはで、当たり前のように思うけれどもこれはこれですごいことです。先人達が異なるアーキテクチャでも動作するように、いろんなレイヤで移植性を保っていった結果です。逆にソフトウェアからハードウェアに持って行くと、ほとんど新規に書いているような物で、デバッグの手法も全く変わってきます。将来的には、高位合成ツールなどで少しでも違いを吸収できるようになるとうれしいですね。
おすすめの人
まずは、SOCのアーキテクチャやAMBAバス(最新のAXIではなくAHBですが)の考え方を知りたい人には間違いなくお勧めできます。またハードウェア、ソフトウェアに関係無くJPEGのデコーダを実装したい人にもお勧めできます。ソフトウェアエンジニアの人で、アルゴリズムをどのようにHDLに落とすのか、あるいは落としたHDLをどのようにシステムとして動かすようにするのかを知りたい人にもお勧めします。HDLで簡単なバスシステムを構築したい人や、LEONのコードリーディングをしたい人の最初に一歩にも使えます。タイトルの通り、ハード&ソフトが丸ごと載っているので、FPGAでどんなことができるんだろうという人にお勧めします。
最後に
実際にCPU込みのシステムを作るとなるとNiosIIなり、MicroBlazeになってしまうのでしょう。でも、このような形でFPGAベンダーに依存しないで、できる限りオープンソースでというスタンスは応援したいし、自分自身も何かやっていきたくなりました。