調べたこと
Zynqデバイス概要
ツール概要
開発手法概要
Zynq
Zynq-7000 All Programmable SoC
CPU(ARM)とFPGAを搭載したXilinx社製SoC
CPUとFPGAの間はバスでつながっている
バスは複数種類ある
キャッシュとDDRの繋がったバスもある
ソフトウェア開発ツールとハードウェア開発ツールが存在する
CPUはLinux、RTOS、スタンドアロン(ベアメタル)、どのように使ってもよい
SDSoC
SDSoC 開発環境
Zynqの統合開発環境
C/C++で開発し、GUIで関数を選んでハードウェアロジック化できる
eclipseベースでデバッグ機能が充実
用語解説
ハード:FPGA上の論理回路のこと
アクセラレート:ハード化することで高速化すること
アクセラレータ:高速化するために使われるハードのこと
AXIバス:マスターとスレーブとで1:1で接続。複数つなぐためにはインターコネクトスイッチで接続。
マクロアーキテクチャ:ソフトもハードもバスも含めたアーキテクチャ
マイクロアーキテクチャ:ハードのアーキテクチャ
SDSoC使う前の前提
組み込みソフト屋さん向け
ペリフェラルはハード屋さんが準備してくれている
ソフトでは間に合わない処理をしたい
SDSoCを使った開発の進め方
概要
ソフトウェア関数を試行錯誤しながら一部、ハード化(高位合成)して高速化する
ハード化はツールがやってくれるが高速化・最適化はツールはやってくれない。
ツールの助けを借りながら、人の手でpragmaを書きまくって、最適化していく。
最適化検討するためのツールが充実。処理時間やリソースを可視化してくれる。
メリット
ドライバ作らなくていい。
普通のソフトっぽく関数呼べばハードに引数わたして処理させて結果が返ってくる。
実装よりのアルゴリズム屋さんが、FPGA使って高速化してみたいってときに、いいのかも。
ソフトとハードを接続するAXIに触れてみるとき、いいのかもしれない。
物理アドレスを指定しなくても、アクセスできる。
ソフト屋さんが実装するときに、ハード屋さんの実装をまたずに、進められるのがいいのかもしれない。
makefileはGUIで設定していい感じに作ってくれる。
ソフト実行時と高位合成実行時で別の#defineがあるので、同じソースコードで動作を切り替えられる。
エミュレータもある
ブロッキング(処理完了まで待つ)アーキテクチャとノンブロッキング(処理完了前に他の処理する)アーキテクチャも選べる。
デメリット
カスタマイズしようとすると、結局Vivadoでハードウェア作らないといけない
最適化しようとすると、結局ハードウェアの知識が必要で、pragma書きまくらないといけない
全体のアーキテクチャ(マクロアーキテクチャ)が決まっていたら、ソフトはSDK、ハードはVivado HLS使えばよい
画像処理とか通信とか、すでに開発プロセスが完成している分野はそんなに魅力的ではないかも。
外部端子に接続したAXIバスは結局、アドレス指定して読み書きしないといけない。
所感
ソフトとハードの境界を簡単に切り替えられるのがすばらしい。
設計の試行錯誤を簡単にできるので、全体の最適化がやりやすくなる。
ただ、チームで開発する際は、ハードとソフトの境界が曖昧になるので、悩ましい。
通信、画像処理、ロボット、機械学習、どの分野に適しているやり方なのか、判断しにくい。
結局のところ最適化は人の手でやるので、ハードウェアの知識が必要。
将来
ハードウェアリソースの最適化もツールがしてくれると思う
やろうと思えば、今でもある程度できちゃう
ハードウェア技術者ピンチ!!