FC2カウンター FPGAの部屋 SDSoC 2015.2 のチュートリアル2(システム最適化)をやってみた2

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

FPGAの部屋

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

SDSoC 2015.2 のチュートリアル2(システム最適化)をやってみた2

SDSoC 2015.2 のチュートリアル2(システム最適化)をやってみた1”の続き。

SDSoC 環境ユーザー ガイド 入門 UG1028 (v2015.2) 2015 年 7 月 20 日”の 36 ページからの”その他の演習”をやってみた。

LinuxではMMUでメモリ管理され、ページと呼ばれる4Kバイト程度の領域に分けられています。通常はソフトウェアが利用する時は、malloc() などでメモリ領域を確保しますが、例えば64Kバイト確保したとして、その領域が物理的に連続している領域とは限りません。ハードウェアと連帯してアクセラレータとして使用している場合は、ハードウェアは物理メモリとしかやりとりが出来ません。つまり、DMAでデータを転送する場合は、4KバイトごとにDMAを区切って、ソフトウェアで使用しているアドレスに連続的にDMAしていく必要があります。それを最初に設定できるのがスキャッター・ギャザーDMAです。シンプルDMAでもできないわけじゃないですが、4KバイトDMAが終了したごとに転送設定をするのが大変です。SDSoCでは、sds_alloc() を使うと物理的にメモリの連続領域が取得できて、シンプルDMAを使うのに都合が良くなるそうです。

データ ムーバー選択の制御
ここでは、先ほど説明したDMAを pragma で明示的に指定します。
labn -> src -> mmult.h の mult() の宣言の前に下の pragma を挿入します。(”SDSoC 環境ユーザー ガイド 入門 UG1028 (v2015.2) 2015 年 7 月 20 日”の37ページから引用します

#pragma SDS data data_mover(in_A:AXIDMA_SG, in_B:AXIDMA_SIMPLE, out_C:AXIFIFO)


SDSoC_43_150731.png

セーブして、左端の Project Explorer タブで、labn を右クリックし、右クリックメニューから Clean Project を選択し、プロジェクトをクリーンにします。
左端の Project Explorer タブで、labn を右クリックし、右クリックメニューから Build Project を選択して、ビルドを行います。
SDSoC_41_150730.png

ビルド終了後に、左端の Project Explorer タブで、labn -> SDRelease -> reports -> data_motion.html をダブルクリックして開いたところです。
SDSoC_44_150731.png

mmult_0 の in_A の pragma に •data_mover:AXIDMA_SG、in_B に •data_mover:AXIDMA_SIMPLE、out_C に •data_mover:AXIFIFO が追加されていました。

D:\SDSoC\Examples\tut2\labn\SDRelease\_sds\p0\ipi のVivado プロジェクトも datamover_0 のみDMAがスキャッター・ギャザーモードになっていました。Zynq PSでは、AXI_ACPポートが使われていました。
SDSoC_45_150731.png


sds_alloc() を malloc() に変更
先ほどの data_mover の pragma を消しておきます。

labn -> src -> main.cpp を開いて、”sds_alloc()”を”malloc()”に全部置き換えます。
SDSoC_46_150731.png

次に、”sds_free()”も”free()”にすべて置き換えます。
SDSoC_47_150731.png

セーブして、左端の Project Explorer タブで、labn を右クリックし、右クリックメニューから Clean Project を選択し、プロジェクトをクリーンにします。
左端の Project Explorer タブで、labn を右クリックし、右クリックメニューから Build Project を選択使用としたのですが、ハイドされていて選べませんでした。セーブする前にビルドしてしまって、慌ててセーブしたためかもしれません。
仕方がないので、Project メニューから Build All を選択したら、ビルドしていました。

ビルド終了後に、左端の Project Explorer タブで、labn -> SDRelease -> reports -> data_motion.html をダブルクリックして開いたところです。
右端の Connection に表示されているDMAは _SG が付いていてスキャッター・ギャザーDMAになっているようでした。
SDSoC_48_150731.png

D:\SDSoC\Examples\tut2\labn\SDRelease\_sds\p0\ipi のVivado プロジェクトも AXI DMA は date_mover_0, data_mover_1 共にスキャッター・ギャザー・モードに設定されていました。
SDSoC_49_150731.png
  1. 2015年07月31日 05:07 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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