説明
2 つ以上の M_AXI
ポインター引数が、メモリ内の同じ基盤バッファー (DDR または HBM) をポイントし、ポインター間の距離またはオフセットを設定して、そのポインター間のエイリアスを示すように指定します。
重要: ALIAS プラグマは、
M_AXI
インターフェイスにマップされた最上位の関数引数に適用します。Vitis HLS は、異なるポインターを独立したチャネルと判断し、通常は依存解析を実行しません。ただし、ホストが複数のポインターに単一のバッファーを割り当てる場合は、ALIAS プラグマまたは指示子でこの関係を伝達し、依存解析を維持できます。ALIAS プラグマを使用すると、バッファー内のポインター間の距離を定義することで、Vitis HLS でデータ依存解析が有効になります。
ALIAS の要件:
- 次の例に示すように、ALIAS プラグマに割り当てられたすべてのポートは、
M_AXI
インターフェイスに割り当てられ、異なるバンドルに割り当てられている必要があります。 - 各ポートは、1 つの ALIAS プラグマまたは指示子でのみ使用できます。
- ALIAS プラグマに割り当てられたすべてのポートの
depth
が同じである必要があります。 - オフセットを指定する場合、指定するポート数とオフセット数は同じ (ポートごとに 1 つのオフセット) である必要があります。
- INTERFACE のオフセットは、slave または direct に指定する必要があります。
offset=off
はサポートされていません。
構文
pragma HLS alias ports=<list> [distance=<int> | offset=<list...>]
説明:
-
ports=<list>
- エイリアスを設定するポートを指定します。
-
distance=<integer>
- リスト内のポートに渡されるポインター値の差を指定します。
-
offset=<list>
- 配列の原点を基準にして、
ports
リストで各ポートに渡されるポインターのオフセットを指定します。
注記:
offset
と distance
は一緒に指定できません。例
次の top
関数の場合:
void top(int *arr0, int *arr1, int *arr2, int *arr3, ...) {
#pragma HLS interface mode=m_axi port=arr0 bundle=hbm0 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr1 bundle=hbm1 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr2 bundle=hbm2 depth=0x40000000
#pragma HLS interface mode=m_axi port=arr3 bundle=hbm3 depth=0x40000000
次のプラグマは、指定された配列ポインターのエイリアスを定義し、その間の
distance
を定義します。#pragma HLS ALIAS ports=arr0,arr1,arr2,arr3 distance=10000000
または、次のプラグマでポインター間の
offset
を指定して、同じ設定にします。#pragma HLS ALIAS ports=arr0,arr1,arr2,arr3 offset=00000000,10000000,20000000,30000000