15.06.27 実録 ソフトウェア開発者が fpgaを独習した最初の3歩@rtlを語る会(9)
TRANSCRIPT
実録 ソフトウェア開発者が FPGAを独習した最初の3歩RTLを語る会(9) 2015/06/27 @muo_jp
自己紹介(@muo_jp)ソフトウェア系
Webな人(Java, ActionScript2/3, JavaScript, PHP, MySQL)→Androidプログラマ(Java)→Android/iOSなひと(Java, Objective-C, C++, C#)
仕事: スクールアイドル系プログラマ
好きな言語: C#
ソフトウェア開発者が FPGAを独習する最初の3歩
第-2歩
第-2歩: 暗黒の時代サーバにFPGA統合を妄想していた-2010ぐらい
2010年にDE0を買った
Hello, world!的なものから先にほぼ進まなかった
学び: VHDL流派の人々とVerilog流派の人々、入り乱れてるので両方読めないと話が始まらなさそう
第-1歩
第-1歩: 文明のきざし2013-2014付近。ZedBoardにすごい未来を感じる
あんまりお金かけたくないな、と思って2014年の夏にMicroZedを購入した
ZedBoardのチュートリアルを軽くやっていけばどうにかなるじゃろ→圧倒的なI/O力差で挫折
学び: 初心者はMicroZedよりも大人しくZedBoard買ったほうがいい。結局JTAGケーブル買ったら大差ない値段
第0歩
第0歩: 型を学ぶ
ARM Cortex-A9×2! ZynqでワンチップLinux on FPGA (Design Wave) – 2014/11/12
出た当初はこの本高いなぁ、Web上にある情報でなんとかならないかなぁ、と思っていた→諦めて買った
ほんと多彩なトピックをカバーしてる。結果は http://www.muo.jp/2015/02/arm-cortex-a92-zynqlinux-on-fpga150.html に書いた(誤植多かったので別途まとめた)
学び: ツール群の扱い方がざっくりと身につかないと、他のことが頭に入ってこない。まずはこういう本に従ってひと通りを体験するの大事(しかしISEベース...!)
学び: Zynq方面の雰囲気「ARM無しのFPGA単体で使いたいんですけど?」→「Artixでも使えば^^」
Linuxを使うか否かは別として、チュートリアル的にARMは普通使うぽい
http://news.mynavi.jp/articles/2012/02/22/zynq-7020/002.html
ARM側の電力削りたければ100MHzでも10MHzでも好きにクロック落とせ
Cortex-R系はひとまずやる気ない(後にMPSoCではCortex-A53ベースとCortex-R5ベースの2ラインに割れたのも面白いところ)
RTOSが必要ならSMPではなくAMP構成にしてARM側の1コアを低クロック動作させて使え
第0.5歩
MicroZedにはGPIOが足りないので自分で補う
パーツ集め
MicroZedの拡張ヘッダは100pinsの高周波回路用
DigiKeyに売っていたので輸入
さすがにいきなり基板起こすのは大変なのでユニバーサル化の変換基板を探した→サンハヤトのがあった
形になった
ハンダが荒い
学び: やっぱりMicroZedよりもZedBoardを買ったほうがいい
今のところテスタを当てて電圧測ってキャッキャしてます
第0.75歩
第0.75歩: Verilogに馴染むVerilog-HDL基礎文法最速マスター を読む
「CPUの創りかた」で紹介されるIC群を作ろうというざっくりした話
わかりやすい。怖がらずにVerilogを読めるようになる
HDL設計入門 - Verilog HDL キーワードを漏らさず知れる
学び: 構文的な話はWebでいいかな、という読みで大体okだった。実践的なVerilogの書き方についての本欲しい
第1歩
第1歩: 公式リソースで学ぶ
http://zedboard.org/sites/default/files/documentations/MicroZed_GettingStarted_v1_1.pdf
QSPIやmicroSDからLinuxを起動し、PS側に生えているGPIOを叩いてLED/スイッチ制御を試した
学び: Railsの「5分でこれ出来るよ!!」という甘いレールに乗ってる感覚。ここと実用物は直結しない
第2歩
第2歩: 続 公式リソースで学ぶ
Avnetのチュートリアル(PDF)に従ってARM側にELFのバイナリを転送して実行する
Xilinx SDKへ出した先は普通のCで嬉しい!となる。hw connect armやると本当にCPU止まるところで感動。なお、まだHDL出てこない
学び: Xilinx SDKへ出力後の叩き方は普通にCなのでとても助かる。名前付けも参考になる。Zynq本も生きてくる
第3歩
第3歩: PS側からLチカする
Linux上だと何かと大変というのが前段で分かっているのでCPUを生で触る
第2歩でXilinxのヘッダやサンプル実装をあちこち眺めた分、MIOの叩き方イメージなどが湧いていた
試行錯誤
MicroZed_HW_UG_v1_6.pdfより
第3歩: サンプルであっさり解決
XilinxのZynq向けBSP、今のところとても素直な動きをするので好み
Xilinx SDKから普通にブレークポイント止まるしメモリダンプも効くので、AndroidのNDKより楽
MIOのバンク(0-15, 16-53)とXGpioPsのバンク配置が違うのは謎
学び: ようやく「試行錯誤すればどうにかゴールへ辿り着ける」感じになってきた。後はXilinxのanswersでどうにかなりそう
目下やっていること
ARMv8機能のバックポート
時代はARMv8
Zynq UltraScale+ MPSoCあたりだとCortex-A53積んでいるの、よいですね
ZedBoardシリーズはCortex-A9系、当然ARMv7
ARMv7でもAESアクセラが欲しい!
C#からの高位合成Vivado HLS側でほどよく他言語利用の枠組みを提供してほしい・・・
LLVM-backend相当の作りになっていてほしい(情報を集め中)
C#をC++に変換するアプローチで良いのかも
自社が出しているOSSの一部にC#→C++変換ツールがたまたまある
このアプローチだと、sourcemapっぽいのは必須
まとめ
素人はMicroZedよりもZedBoardを買うべき
Vivadoベースの入門書整備されるとよさそう
RTLの独習はできるけれど実用面の壁ありそう
VivadoHLSにC#コード食べさせたい