OpenCL カーネル、C/C++ カーネル、および RTL カーネルでは、AXI インターフェイスへの関数パラメーターの割り当て方法はそれぞれ異なります。
-
OpenCL カーネルでは、カーネル引数の各グローバル ポインターに AXI4 インターフェイスを 1 つ生成するのに
--max_memory_ports
オプションが必要です。AXI4 インターフェイス名は、引数リストのグローバル ポインターの順序に基づいて付けられます。次のコード例は、GitHub の Vitis Accel Examples の ocl_kernels カテゴリにある gmem_2banks_ocl 例からのものです。
__kernel __attribute__ ((reqd_work_group_size(1, 1, 1))) void apply_watermark(__global const TYPE * __restrict input, __global TYPE * __restrict output, int width, int height) { ... }
この例では、1 つ目のグローバル ポインター
input
が AXI4 名M_AXI_GMEM0
を、2 つ目のグローバル ポインターoutput
がM_AXI_GMEM1
を割り当てています。 -
C/C++ カーネルでは、異なるグローバル ポインターの HLS INTERFACE プラグマに異なる bundle 名を指定することで、複数の AXI4 インターフェイスが生成されます。詳細は、カーネル インターフェイス を参照してください。
次の gmem_2banks からのコード例では、input
ポインターをバンドルgmem0
に、output
ポインターをバンドルgmem1
に割り当てています。バンドル名には任意の有効な C 文字列を使用でき、生成される AXI4 インターフェイス名はM_AXI_<bundle_name>
になります。この例の場合、入力ポインターの AXI4 インターフェイス名はM_AXI_gmem0
、出力ポインター名はM_AXI_gmem1
になります。詳細は、 pragma HLS interface を参照してください。#pragma HLS INTERFACE m_axi port=input offset=slave bundle=gmem0 #pragma HLS INTERFACE m_axi port=output offset=slave bundle=gmem1
- RTL カーネルでは、RTL Kernel ウィザードでのインポート プロセスでポート名が生成されます。RTL Kernel ウィザードで付けられるデフォルト名は
m00_axi
およびm01_axi
です。変更しない場合は、これらの名前をコンフィギュレーション ファイルのconnectivity.sp
オプションで DDR バンクを割り当てるときに使用する必要があります。詳細は、カーネル ポートのメモリへのマップ を参照してください。