プラットフォーム インターフェイス プロパティのコンフィギュレーション

プラットフォーム インターフェイスは、次に示す 4 つの PFM プロパティを使用して定義されます。これらは、[Tcl Console] ウィンドウから手動で、またはそのデザインの Tcl スクリプトで定義できます。

4 つのプラットフォーム インターフェイスの Tcl API は、次のとおりです。

set_property PFM.AXI_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.AXIS_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.CLOCK { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]
set_property PFM.IRQ { <port_name> {} <port2> {} ...} \
[get_bd_cells <cell_name>]

PFM プロパティの要件は、次のとおりです。

  • PFM インターフェイス プロパティの値は、Tcl ディクショナリ (名前/"値" のペア) として指定する必要があります。
    重要: 値は二重引用符で囲む必要があります。名前と値は大文字と小文字が区別されます。
  • bd_cell には複数の PFM インターフェイス定義を指定できます。ただし、PFM インターフェイスの各タイプごとに、すべてのポートを 1 つの set_property Tcl コマンドで設定する必要があります。
  • 各 PFM インターフェイス プロパティで、ポート オブジェクトに指定した名前が外部ポートまたは bd_cell のインターフェイスの名前と同じである必要があります。各外部ポートまたはインターフェイス オブジェクトに含めることができるのは、1 つの PFM インターフェイス定義だけです。
  • パラメーターは、PFM インターフェイスのタイプごとに異なることがあります。
  • PFM プロパティに NULL ("") 文字列を設定すると、前に定義した PFM インターフェイスが削除されます。

クロックの宣言

クロック ソースはプラットフォームと一緒にエクスポートできますが、各クロックに対してプラットフォームの Processor System Reset IP ブロックを使用して、同期リセット信号もエクスポートする必要があります。PFM.CLOCK プロパティは、BD セル、外部ポート、または外部インターフェイスに設定できます。

PFM.CLOCK プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.CLOCK { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]

引数の説明

Port_name
クロック ポート名。
パラメーター
  • id <value>: クロック ID は、固有の負でない整数にする必要のあるユーザー定義の値です。

  • is_default <value>: デフォルトのクロックの場合は true、それ以外の場合は false を指定します。デフォルトは false です。

  • proc_sys_reset <value>: この名前と値のペアは、クロック ポートに接続された同期リセット信号の proc_sys_reset ブロック インスタンスを指定します。

  • status <value>: 指定できる値は fixed または scalable です。A fixed クロックは、生成されたクロックの基準クロックとして使用できます。エンベデッド プラットフォームの場合は fixed を使用する必要があります。

重要: Vitis 環境で明示的にクロックが指定されていない場合は、すべてのプラットフォームで is_default パラメーターを true に設定したデフォルトのクロックを 1 つ宣言する必要があります。

例:

set_property PFM.CLOCK {
PL_CLK0 {id "0" is_default "true" proc_sys_reset \
"proc_sys_reset_0" status "fixed"} 
PL_CLK1 {id "1" is_default "false" proc_sys_reset \
"proc_sys_reset_1" status "fixed"} 
PL_CLK2 {id "2" is_default "false" proc_sys_reset \
"proc_sys_reset_2" status "fixed"} 
PL_CLK3 {id "3" is_default "false" proc_sys_reset \
"proc_sys_reset_3" status "fixed"} 
} [get_bd_cells /zynq_ultra_ps_e_0]

外部 PORT に CLOCK を設定:

set_property PFM.CLOCK
{ACLK_0 {id "4" is_default "false" proc_sys_reset \
"proc_sys_reset_4"}} [get_bd_ports /ACLK_0]

AXI ポートの宣言

PFM.AXI_PORT プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.AXI_PORT { <port_name> {parameters} \
<port2> {parameters} ...} [get_bd_cells <cell_name>]

引数の説明

Port_name
AXI ポート名。
パラメーター
  • memport type: メモリ インターフェイスのポート タイプに該当。有効な type 値は、次のとおりです。
    • M_AXI_GP: 汎用 AXI マスター ポート
    • S_AXI_HP: 高パフォーマンスの AXI スレーブ ポート
    • S_AXI_ACP: アクセラレータ コヒーレント スレーブ ポート
    • S_AXI_HPC: 高パフォーマンスのアクセラレータ コヒーレント スレーブ ポート
    • MIG: MIG メモリ コントローラーに接続されている AXI スレーブ。デフォルトは MIG です。
  • sptag ID: (オプション) 最初の文字がアルファベットで始まる必要のあるユーザー定義の ID。ID の大文字/小文字は区別されます。システム ポート タグ (sptag) は、S_AXI_HPS_AXI_ACPM_AXI_GP などのプラットフォーム ポート接続のクラスを示すシンボル識別子です。複数のブロック デザイン プラットフォーム ポートが同じ sptag を共有できます。
  • memory: (オプション) 関連する MIG IP インスタンスと address_segment を指定します。memory タグは、IP インテグレーターの [Address Editor] ウィンドウの Cell 名と Base Name 列を組み合わせた独自の名前になります。このタグは、複数のブロック デザイン プラットフォーム ポートが同じ memory タグを共有可能な Memory Subsystem HIP への接続に関連付けられます。

AXI インターコネクトの例

set_property PFM.AXI_PORT { \
	M_AXI_GP0 {memport "M_AXI_GP"} \
	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_HP0 {memport "S_AXI_HP" sptag "HP0" memory \
"processing_system7_0 HP0_DDR_LOWOCM"} \
	S_AXI_HP1 {memport "S_AXI_HP" sptag "HP1" memory \
"processing_system7_0 HP1_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]

AXI インターコネクトのマスター ポートおよびスレーブ ポートのエクスポートには、次の要件があります。

  • プラットフォームで使用されるインターコネクト上のすべてのポートは、宣言されたプラットフォーム インターフェイスの前にインデックス順で宣言する必要があります。
  • ポートのインデックス番号をスキップすることはできません。
  • S_AXI_ACP ポートのマスター ID の最大数は 8 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {S00_AXI, S01_AXI, ..., S07_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ でカスケード接続された axi_interconnects を回避できます。
  • S_AXI_HP または MIG ポートのマスター ID の最大数は 16 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {S00_AXI, S01_AXI, ..., S15_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ で生成されたユーザー システムでカスケード接続された axi_interconnects を回避できます。
  • M_AXI_GP ポートに接続されるインターコネクト上で宣言されるマスター ポートの最大数は 64 なので、接続された AXI インターコネクト上で宣言する使用可能なポートは {M00_AXI, M01_AXI, ..., M63_AXI} のいずれかである必要があります。プラットフォーム内で使用されるポートは宣言しないでください。できるだけ多くのポートを宣言すると、sds++ で生成されたユーザー システムでカスケード接続された axi_interconnects を回避できます。

その他の例

インターコネクトの AXI_port を定義:

set parVal []
for {set i 2} {$i < 64} {incr i} {
	lappend parVal M[format %02d $i]_AXI \
{memport "M_AXI_GP"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells /axi_interconnect_0]

SmartConnect IP の AXI_port を定義:

set parVal []
for {set i 1} {$i < 16} {incr i} {
	lappend parVal S[format %02d $i]_AXI \
{memport "MIG" sptag "Bank0"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells /smartconnect_0]

MIG IP に接続する AXI_PORT を定義:

set parVal []
for {set i 1} {$i < 16} {incr i} {
	lappend parVal S[format %02d $i]_AXI \
{memport "MIG" sptag "bank0" memory "ddrmem_0 C0_DDR4_ADDRESS_BLOCK"}
}
set_property PFM.AXI_PORT $parVal [get_bd_cells \
/memory_subsystem/interconnect_data/interconnect_aximm_ddrmem0]

AXI4 -Stream ポートを宣言

PFM.AXIS_PORT プロパティを設定する Tcl コマンドは次のとおりです。

set_property PFM.AXIS_PORT { <port_name> {parameters} \
<port_name_2> {parameters} .. } [get_bd_cells <cell_name>] 

引数の説明

Port_name
AXI4-Stream ポート名。
パラメーター
  • type value: ストリーミング インターフェイス ポート タイプ。type の有効な値は、次のとおりです。
    • M_AXIS: 汎用 AXI マスター ポート
    • S_AXIS: 高パフォーマンスの AXI スレーブ ポート

set_property PFM.AXIS_PORT {AXIS_P0 {type "S_AXIS"}} \
[get_bd_cells /zynq_ultra_ps_e_0]