SDSoCの勉強を始めました(1)
最新の開発方法に追いつかなければならないと思い、私もSDSoCの勉強をはじめました。
ダウンロードしたのはSDx 2018.1。
まずは、UG1028を参考にしながら、Matrix Multiplication and Additionのチュートリアルを行いました。
Matrix Multiplication and Additionというのは、32×32の行列の掛け算と足し算を、ハードウェアで行うサンプルです。
チュートリアルを見ていると、SDSoCの合成結果のパフォーマンスを、クロック数やデータポートの選択の表で説明されています。
こんな感じの表です。
チュートリアルでは、この表を指してpragmaが効いている旨を説明していますが、正直よくわかりません。
![]()
実際にどんな回路が出来上がるのか、回路を見てみないと安心できないので、どこかにVivadoのプロジェクトが出来てないか探してみました。
そうしたら、VivadoのIPインテグレータのブロックデザインのプロジェクトが下記のディレクトリにありました。
\Debug\_sds\p0\_vpl\ipi\syn
これをVivadoで開きます。
デフォルトのMatrix Multiplication and Additionサンプルプロジェクトを合成した回路が、以下のものです。
この中に、Vivado HLSのモジュールが2つほどあるのが見えます。
HLSモジュールの隣にあるdm_というのがデータムーバ。データムーバとは簡単に言えばDMA転送のマスタです。
pragmaの構文やmalloc()かsds_alloc()の選択によって、シンプルDMAになるか、スキャッタギャザーDMAになるかが変わるそうです。
このデータムーバから出ているAXIバスはAXI Interconnectによって束ねられて、PSのACPポートにつながっています。
これを見てSDSoCが何をしているかが、わかりました。
CPUのメモリ空間(DDRメモリ)からDMAによってデータを取り出して、それをハードウェアのモジュール(HLS)にコピーし、演算した結果を、再びDMAによってCPUのメモリ空間(DDRメモリ)にコピーするというわけですね。
![]()
次の図は、mmultをソフトウェアに切り替えた場合です。
maddの回路のみ残って、mmultの回路はIPインテグレータから消えました。
![]()
次はvoid mmultの関数宣言の前に
#pragma SDS data sys_port(A:ACP, B:AFI)
を付けて、AFI(AXI HP0)を使うようにしてみた結果です。確かに、AXI HPポートを使うようになっています。
SDSoCがどのような回路を生成するのか、何となく理解できてきました。
| 固定リンク











コメント
お世話になります。 MTと申します
本記事や 類似の別記事 https://qiita.com/iwatake2222/items/8948def8d0eb699d3811を参考にblock designを作成後にtclを作成しようとしたのですが以下のエラーがでます。下記コードのどこに問題があるのか指摘いただきたくお願いいたします。
set_property PFM_NAME "mt.com:zynq7_board:zynq7_board:1.0" [get_files ./project_1.srcs/sources_1/bd/design_1/design_1.bd]
ERROR: [Common 17-142] Invalid property name 'PFM_NAME'. Please use the 'list_property' command to find properties supported by the target 'file'
object.
投稿: MT | 2019.08.27 08:59
下記のURLをご覧ください。
http://www.tokudenkairo.co.jp/consul.html
スポットプランで対応可能かと思います。
投稿: なひたふ | 2019.08.27 09:27