ソフトウェア開発者のFPGA入門 補足ノート1

2015年8月1日土曜日


の資料を補足するシリーズです。
途中でやったことや、参考情報を書いていきます。割と個人的メモです。

作りたいものがあるのは大事

まず、心構え的なアレですが、すぐに具体的なものが浮かばないにしても、「こういうジャンルのものを作りたい」ぐらいはあったほうが情報収集についても何にしても良さそうです。
私の場合はWebサービスやゲーム系のサーバサイドでFPGAを利用して何かできないかなーという興味が軸です。

FPGAを勉強し始める前段階


ハードウェアとソフトウェアの真ん中あたりへ攻めていくにあたり、ソフトウェア方面から来た人間には明らかにハードウェア方面の常識が不足しています。まずはこれを補っておいたほうが後がきっと楽です。
そういう場面で読むべき本として、「CPUの創りかた」は完全なる名著です。発刊から12年近くが経った現在でも売れ続けていることから分かるように、とても良い本です。私の場合は、元々ハードウェア系にとても弱いので、この本を何度か読んでからFPGAの領域へ来ました。

第0歩の直前: XilinxかAlteraか

そこそこの評価ボードを入手しやすく、開発キットをしっかり提供しているベンダーはXilinxとAlteraの2強です。FPGA自体の実装アーキテクチャは異なりますが、VerilogやVHDLで記述した定義をFPGAへ落として実行し、デバッグなどもできるという面ではあまり変わりません。
私の場合は、うっかりと両方のボードが手元にあります(当初購入したAlteraのチップを搭載したDE0というボード、そしてARMコアとFPGAのハイブリッド構成という楽しさに釣られて購入したXilinx系のMicroZed)。
評価ボードがない状態でもひとまず開発ソフトをダウンロードして試すことはできるので、ひとまず両方触ってみましょう。といいたいところですが、FPGAの開発用IDEはとにかくメニュー構造もワークフローもソフトウェア系と違ってなかなかに複雑です。しかも、XilinxのIDEは割と最近(といっても2-3年前ですが)にフルリニューアルし、過去版(ISE)に基づいたblogの入門記事類がごっそりとdeprecatedになっています。「どうせEclipseベースだから、触ればなんとかなるだろ」と思ってむやみに触り始めると心折れます。私は折れました。
まあ、AMD派?Intel派?という感じのふわっとした感じで適当に決めれば良いと思います。個人的印象では、Xilinxのほうがオンラインドキュメントが膨大にあってIntel風味なので好みです*1。x86 CPUベンダーと違って、「どちらのほうが比較的安い」みたいなのは無い気がします。
AlteraとXilinxどちらにするか決めたら、まずは安めのボードを物色します。雑誌付録にFPGAがついていたこともありましたが、最近は見かけないので えいやっと買ってしまうのが手っ取り早いです。
面白そうなボードや、入門の道を誰かが切り拓いてくれているボードがあれば、それに乗っかるのも良いと思います。今なら、$30で始めるFPGA(竹村さんの資料)に従って進める想定でBeMicro Max10 FPGA EvaKitあたりを買うのが楽なのではないでしょうか。ちなみに、これを買うとAltera閥へ入ることになります。おめでとうございます。
[*1] あっ、Intelが最近Alteraを買収したので、AlteraのほうがIntelっぽいというかIntelですね(紛らわしい表現)。

第0歩: 型を学ぶ


「ARM Cortex-A9×2! ZynqでワンチップLinux on FPGA」という本で学んでいったという話です。
これは、XilinxのZynqというアーキテクチャのZedBoardという評価ボードの利用を前提にした本です。
出た当初はこの本高いなぁ、Web上にある情報でなんとかならないかなぁ、と思っていました。
しかし、途中でIDEの扱い方に心が折れ、諦めて買いました。
本の範囲としては、旧世代のIDEの利用が多いのですが、一応新世代のIDEをカバーした章もあり、グラフィックス出力から自前のコア構築、チューニング可能なポイントの洗い出しから実際にチューニングしてみるまでの本当に多彩なトピックをカバーしています。
とても良い本です。ただ、誤植がものすごく多いのが難点です。見つけた誤植は「ARM Cortex-A9×2! ZynqでワンチップLinux on FPGA」の誤植一覧(150箇所)にまとめました。
ここでの学び: ツール群の扱い方がざっくりと身につかないと、他のことが頭に入ってこない。まずはこういう本に従ってひと通りを体験するの大事(しかしISEベース...!)
この本、ひとつひとつしっかりやっていくと各小項目で1冊ずつ本が書けそうな幅広さです。
特に、さわりが載っていたことが個人的に嬉しかった項目を挙げておきます。
  • ISEとVivadoの両方を使っての話展開
    • ちょっと古い記事やチュートリアルを眺めると、結構ISEベースの話がある。こういう時に怖がらず読めるようになった
      • まあ、PlanAheadとかXPS?とかいくつかのツールが、どういうふうに再編してVivadoになってるかという雰囲気が掴めるのが大きい
  • Linuxのデバイスツリーに関する話と実際に自分で書く話
  • PSとPLの間のデータ転送
    • AXI系
      • AXI4-Lite
      • AXI4
      • AXI4-Stream
結果、この本はだいぶ読み込みました。軽く遠出するときに電車の中で読んだり、家でも何度か読んだり。
2-3ヶ月FPGA方面から離れて、頭のなかから色んなものが抜けた状態で再度スタートしようというときに、頭をFPGAへ引き戻すためにも有効でした。
惜しいのは前述の通り、誤植が多いことです。やはり、頭が乗ってきて読み進めている時に、技術用語が誤った領域を踏むと脳が例外を吐いて止まってしまうので悲しいところです。売れに売れて重版で誤植が直ったら、多分もう一冊買うと思います。

Zynqの雰囲気

本やオンラインのドキュメントを読んでいて感じた、ARM+FPGAというZynqアーキテクチャにまつわる雰囲気を書いてみます。

"7"シリーズは断絶の壁

前述のように、XilinxはISEシリーズから新しいIDE(Vivado)へと移行しました。この移行期にぴったりぶつかったのが、いわゆる"7"シリーズです。ZedBoard/MicroZed/ZYBOに使われているZynq-7000シリーズもこのひとつです。
ISEにはZynq-7000シリーズの開発用定義ファイルがありません。古いチュートリアル(書籍も!)は割とISE前提で書かれています。

「ARM無しのFPGA単体で使いたいんですけど?」→「Artixでも使えば^^」

  • Zynqなシステムの利用にあたっては、Linuxを使うか否かは別として、チュートリアル的にARMは普通使うぽい
    • なので、Zynqのチュートリアルを探していくと、「単純な論理回路をまずは組んで動かしてみよう!」という感じの伝統的なFPGAチュートリアルっぽいのがあまり出てこない
  • Xilinxの人の、Zynqをシステム要素として使う際の設計スタンス http://news.mynavi.jp/articles/2012/02/22/zynq-7020/002.html
    • ARM側の電力削りたければ100MHzでも10MHzでも好きにクロック落とせ
    • RTOSが必要なら、ARM側をSMPではなくAMP構成にして1コアを低クロック動作させて使え
    • Cortex-R系はひとまずやる気ない
      • ※そう言いつつ、3年後にはMPSoCという新世代のアーキテクチャはCortex-A53ベースとCortex-R5ベースの2ラインに割れたので大変趣深い

MicroZed/ZedBoardの起動手段は使い分けたほうが便利

  • JTAGは初期の開発へ利用
    • デバッガをアタッチしたい場合などに大変便利
  • FPGA部分が固まってソフト開発へと段階が移ってきたらSDカードに書き込んで起動
    • いくつかのバージョンを別カードへ保持して差し替えやすい
    • 数十MB〜数GBのファイルも置ける
  • ファームがしっかり固まってきたらQSPIへ焼く
    • 起動がSDカードより速い
    • 16MBまでしかアクセスできないので、起動用ファイル以外のデータ群はどのみちSDカードになるはず

0 件のコメント:

コメントを投稿