FC2カウンター FPGAの部屋 SDSoC 2015.2 のチュートリアルをやってみた2(ハードウェア・アクセレーション)

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

SDSoC 2015.2 のチュートリアルをやってみた2(ハードウェア・アクセレーション)

SDSoC 2015.2 のチュートリアルをやってみた1(新規プロジェクトの作製)”の続き。

前回は、SDSoC の新規プロジェクトを作製して、テンプレートに Matrix Multiplication and Addition を選択し、SDRelease でビルドした。
今回はその続きから行う。なお、”SDSoC 環境ユーザー ガイド 入門 UG1028 (v2015.2) 2015 年 7 月 20 日”の18ページ”第 2 章 チュートリアル : プロジェクトの作成、ビルド、実行”の21ページ”ハードウェア インプリメンテーション用の関数のマーク”からをやってみる。

labn/project.sdsoc で、Hardware Function の+記号(Add Hardware Function)をクリックする。
SDSoC_12_150727.png

Select function for hardware acceleration ダイアログが立ち上がった。

madd() と mmult() を選択し、OKボタンをクリックする。
SDSoC_13_150727.png

madd() と mmult() が Hardware Functions に入った。
SDSoC_14_150727.png

左端の Project Explorer タブで、labn を右クリックし、右クリックメニューから Build Project を選択して、ビルドを行う。
SDSoC_15_150727.png

ビルドが始まった。
SDSoC_16_150727.png

、”SDSoC 環境ユーザー ガイド 入門 UG1028 (v2015.2) 2015 年 7 月 20 日”の24ページの 1. によると、C++ をVivado HLS でIP にして、Vivado を起動し、そのIPを使ってハードウェアを構築し、ビットストリームを生成する。それを(たぶん、そのハードをドライバを使って使用するソフトウェア自動生成して)コンパイルして、ELFファイルを自動生成するということのようだ。
つまり、いつも自分でやっていた作業を自動的にSDSoC がやってくれるということだろう?
この作業はハードウェアの論理合成、インプリメント、ビットストリームの生成を行うので、時間が掛かる。

ビルドが終了した。
SDSoC_17_150728.png

左端の Project Explorer タブで、labn -> SDRelease -> reports -> data_motion.html をダブルクリックして開いた。
SDSoC_18_150728.png
1024 は、配列の縦32要素 X 横32要素を掛けた数字だと思う。

D:\SDSoC\labn\SDRelease\_sds\swstubs にはハードウェア・アクセレーションされたC++ソースファイルができるようようだ。

元の main.cpp の mmultadd_test() 関数を引用する。
hw_sds_clk_start() と hw_sds_clk_stop() で囲われている部分を見て欲しい。mmult() と madd() が使われている。
SDSoC_19_150728.png

D:\SDSoC\labn\SDRelease\_sds\swstubs の main.cpp の mmultadd_test() 関数を引用する。
hw_sds_clk_start() と hw_sds_clk_stop() で囲われている部分を見ると、_p0_mmult_0() と _p0_madd_0() が使われている。
SDSoC_20_150728.png

D:\SDSoC\labn\SDRelease\_sds\swstubs の madd.cpp の _p0_madd_0() を引用する。
これを見ると、cf_send_i (), cf_receive_i (), cf_wait (), などが使われていて、ハードウェア・アクセラレータにデータを送って、受けていることが伺われる。
SDSoC_21_150728.png


疑問がわいたのだが、SDSoCでは、例えばカメラインターフェースなどのハードウェアはどうやって、使うのだろうか?ビットストリームを生成しているので、SDSoCに取り込むしか無いと思うのだが? HDLのIPを追加するようになるのかな?そのドライバは自分で書くとか?もしかしてIPに接続を許すためにIPはAXIバス専用にするとかなのだろうか?これからマニュアルを読んだりして明らかにしていきたいと思う。
それとも、ソフトウェアのアクセレーションのみにFPGAを使用するのかな?

HDMIを使った例がXilinxのSDSoCデザインサンプルに載っているそうです

ソフトウェアが使うハードウェアは何処に、どうやって実装できるのか?興味は尽きない。一回、セミナに行ったほうが良い気もしてきた。お金がないのだが。。。
  1. 2015年07月27日 05:18 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog19.fc2.com/tb.php/3213-bf249a6c
この記事にトラックバックする(FC2ブログユーザー)