チュートリアル

アトリビュートの付加

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などが設定されているかどうかを確認してみてください。