FC2カウンター FPGAの部屋 SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した4(ハードウェア化)

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

FPGAの部屋

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

SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した4(ハードウェア化)

SDSoC 2015.2 でハードウェアとソフトウェアのラプラシアンフィルタの性能を比較した3(ソフトウェアのみでテスト2)”の続き。

前回まで、ソフトウェアで性能の評価を行ったが、今回は、lap_filter_axim() をハードウェアにする。

project.sdsoc を開いて、Hardware Functions で Add Hardware Function の+記号をクリックする。

Select function for hardware acceleration ダイアログが開く。

lap_filter_axim(int *, int *, int, int) をクリックして、ハードウェア化する。
SDSoC_73_150803.png

Hardware Functions に lap_filter_axim が入った。
SDSoC_74_150803.png

左端の Project Explorer タブで、lap_filter2 を右クリックし、右クリックメニューから Clean Project を選択してから、Build Project を選択してビルドを行った。

make がエラーになった。
lap_filter2 -> SDRelease -> _sds -> repots -> sds_laplacian_filter2.log を見るとエラーに理由が分かった。
実は1回はハードウェア化できたのだが、800 x 600 にした時にエラーになるようになったようだ。
SDSoC_89_150806.png

エラーを下に示す。

ERROR: [SDSoC 0-0] Function "lap_filter_axim" argument "cam_fb" is mapped to RAM interface, but it's size is bigger than 16384. Please specify #pragma SDS data zero_copy(cam_fb) or #pragma SDS data access_pattern(cam_fb:SEQUENTIAL)



#pragma SDS data zero_copy の使い方は、”SDSoC 環境ユーザー ガイド UG1027 (v2015.2) 2015 年 7 月 20 日”の 21 ページの”第4章 : システム パフォーマンスの向上”の”コピーおよび共有メモリ セマンティクス”に書いてある。

lap_filter_axim() の前に次に示すようにpragma を付けた。

#pragma SDS data zero_copy(cam_fb[0:ALL_PIXEL_VALUE])
#pragma SDS data zero_copy(lap_fb[0:ALL_PIXEL_VALUE])
int lap_filter_axim(int cam_fb[ALL_PIXEL_VALUE], int lap_fb[ALL_PIXEL_VALUE], int width, int height)
{


もう一度、 Clean Project と Build Project を行った所、エラーになった。今度は、sds がエラーで、sds.log を見るとエラーの内容は次の理由だった。

ERROR: [SDSoC 0-0] Hardware function 'lap_filter_axim' BRAM resource requirement (1024) exceeds platform 'zybo' resource capacity (60)


ということで、ラプラシアンフィルタのワークスペースをBRAM に取るらしい。

次に、#pragma SDS data zero_copy の代わりに、#pragma SDS data access_pattern(cam_fb:SEQUENTIAL) を付けてみた。

#pragma SDS data access_pattern(cam_fb:SEQUENTIAL)
#pragma SDS data access_pattern(lap_fb:SEQUENTIAL)
int lap_filter_axim(int cam_fb[ALL_PIXEL_VALUE], int lap_fb[ALL_PIXEL_VALUE], int width, int height)
{

SDSoC_90_150806.png

これで、クリーンして、ビルドしても、やはり、

ERROR: [SDSoC 0-0] Hardware function 'lap_filter_axim' BRAM resource requirement (1024) exceeds platform 'zybo' resource capacity (60)

で止まっている。

DDR3 SDRAM に転送するにはどうやったら良いのだろうか?

とりあえず、小さいサイズだったらハードウェア化できたので、ピクセル値を元に戻してやってみる。

#define HORIZONTAL_PIXEL_WIDTH 64
#define VERTICAL_PIXEL_WIDTH 48
//#define HORIZONTAL_PIXEL_WIDTH 800
//#define VERTICAL_PIXEL_WIDTH 600

#define ALL_PIXEL_VALUE (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)


ビルドは成功した。
SDSoC_91_150806.png

SDカードに書いてZYBOの実機で試してみたところハードウェアでのラプラシアンフィルタの処理時間は590 us ソフトウェアでのラプラシアンフィルタの処理時間は 300 us 程度で、ハードウェアの方が遅かった。
SDSoC_92_150806.png
  1. 2015年08月06日 05:10 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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