アトリビュートの付加
Block DesignにSDSoC用のclocking wizardとproc_sys_reset回路を追加したら、アトリビュートを設定します。このアトリビュートによって、SDSoCは既存の回路のどの部分にハードウェアアクセラレータを接続すればよいかを認識できます。
設定するアトリビュートは、
- Block Design全体にPFM_NAMEを設定する
- Clocking WizardにPFM.CLOCKを設定する
- 使用可能なAXIポートをPFM.AXI_PORTで設定する
- 割り込みモジュールをPFM.IRQで設定する
です。
アトリビュートの設定
アトリビュートは、Vivadoの下部にあるTcl Consoleにコマンドを入力して実行することで、設定します。
ここに複数行にわたるTclスクリプトを記述した場合、枠が延びるので問題ありません。
アトリビュートの削除
アトリビュートを修正する際には一度削除する必要があります。アトリビュートを削除するには、文字列ならば""、オブジェクトならば{}を指定します。
下記のTclコマンドを入力します。
set_property PFM_NAME "" [get_files [get_property FILE_NAME [get_bd_designs]]]
set_property PFM.CLOCK {} [get_bd_cells /clk_wiz_0]
set_property PFM.AXI_PORT {} [get_bd_cells /processing_system7_0]
set_property PFM.IRQ "" [get_bd_cells /xlconcat_0]
アトリビュートの設定
プラットフォーム名を設定するため、下記のTclコマンドを入力します。
set_property PFM_NAME "tokudenkairo.co.jp:zsys_nocsi:zsys_nocsi:1.1"\
[get_files [get_property FILE_NAME [get_bd_designs]]]
※最後の\は¥記号です。
クロックの指定は下記のようにします。
set_property PFM.CLOCK { \
clk_out1 {id "2" is_default "true" proc_sys_reset "proc_sys_reset_0" } \
clk_out2 {id "1" is_default "false" proc_sys_reset "proc_sys_reset_1" } \
} [get_bd_cells /clk_wiz_0]
この場合、clk_wiz_0で識別されるモジュールのclk_out1(100MHz)がデフォルトのクロックとなり、proc_sys_reset_0に接続されることを示します。ブロックデザインを確認してください。
次に、使用可能なAXIポートの設定を行います。
set_property PFM.AXI_PORT { \
M_AXI_GP1 {memport "M_AXI_GP"} \
S_AXI_ACP {memport "S_AXI_ACP" sptag "ACP" memory
"processing_system7_0 ACP_DDR_LOWOCM"} \
S_AXI_HP2 {memport "S_AXI_HP" sptag "HP2" memory
"processing_system7_0 HP2_DDR_LOWOCM"} \
S_AXI_HP3 {memport "S_AXI_HP" sptag "HP3" memory
"processing_system7_0 HP3_DDR_LOWOCM"} \
} [get_bd_cells /processing_system7_0]
Zynqberryでは、AXI GP0とAXI HP0、AXI HP1がすでに使用されているので、SDSoC用にはAXI GP1、AXI ACP、AXI HP2、AXI HP3が使用可能です。その旨を指定しています。
最後に割り込みの設定を行います。
set intVar []
for {set i 1} {$i < 16} {incr i} {
lappend intVar In$i {}
}
set_property PFM.IRQ $intVar [get_bd_cells /xlconcat_0]
このスクリプトは、intVarという配列を作り、In1 {} In2 {} In3 {}・・・In15 {}というオブジェクトを格納します。その配列をPFM.IRQに設定します。
ZynqberryのデザインではINT0をシステムで使用していて、SDSoCで使用するのはInt1~Int15であるため、上のような配列にしています。
これでアトリビュートの設定が完了しました。
Clocking Wizardなどをクリックして、プロパティを見て、PFM.CLOCKなどが設定されているかどうかを確認してみてください。



