« Trenzページのリニューアルが完了 | トップページ | SDSoCの勉強を始めました(2) »

2018.06.09

SDSoCの勉強を始めました(1)

最新の開発方法に追いつかなければならないと思い、私もSDSoCの勉強をはじめました。

ダウンロードしたのはSDx 2018.1。

Sdx

まずは、UG1028を参考にしながら、Matrix Multiplication and Additionのチュートリアルを行いました。

Tutorial

Sdsoc_2

Matrix Multiplication and Additionというのは、32×32の行列の掛け算と足し算を、ハードウェアで行うサンプルです。

チュートリアルを見ていると、SDSoCの合成結果のパフォーマンスを、クロック数やデータポートの選択の表で説明されています。

こんな感じの表です。

Table1Acp_acp

チュートリアルでは、この表を指してpragmaが効いている旨を説明していますが、正直よくわかりません。

sun

実際にどんな回路が出来上がるのか、回路を見てみないと安心できないので、どこかにVivadoのプロジェクトが出来てないか探してみました。

そうしたら、VivadoのIPインテグレータのブロックデザインのプロジェクトが下記のディレクトリにありました。

\Debug\_sds\p0\_vpl\ipi\syn

これをVivadoで開きます。

デフォルトのMatrix Multiplication and Additionサンプルプロジェクトを合成した回路が、以下のものです。

Default

この中に、Vivado HLSのモジュールが2つほどあるのが見えます。

Mmult_madd

HLSモジュールの隣にあるdm_というのがデータムーバ。データムーバとは簡単に言えばDMA転送のマスタです。

pragmaの構文やmalloc()かsds_alloc()の選択によって、シンプルDMAになるか、スキャッタギャザーDMAになるかが変わるそうです。

このデータムーバから出ているAXIバスはAXI Interconnectによって束ねられて、PSのACPポートにつながっています。

Acp

これを見てSDSoCが何をしているかが、わかりました。

CPUのメモリ空間(DDRメモリ)からDMAによってデータを取り出して、それをハードウェアのモジュール(HLS)にコピーし、演算した結果を、再びDMAによってCPUのメモリ空間(DDRメモリ)にコピーするというわけですね。

sun

次の図は、mmultをソフトウェアに切り替えた場合です。

Madd_only

maddの回路のみ残って、mmultの回路はIPインテグレータから消えました。

sun

次はvoid mmultの関数宣言の前に

#pragma SDS data sys_port(A:ACP, B:AFI)

を付けて、AFI(AXI HP0)を使うようにしてみた結果です。確かに、AXI HPポートを使うようになっています。

Hp

SDSoCがどのような回路を生成するのか、何となく理解できてきました。

|

« Trenzページのリニューアルが完了 | トップページ | SDSoCの勉強を始めました(2) »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Trenzページのリニューアルが完了 | トップページ | SDSoCの勉強を始めました(2) »