複数の AXI インターフェイスの作成 - 2020.2 Japanese

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2021-03-22
Version
2020.2 Japanese

OpenCL カーネル、C/C++ カーネル、および RTL カーネルでは、AXI インターフェイスへの関数パラメーターの割り当て方法はそれぞれ異なります。

  • OpenCL カーネルでは、カーネル引数の各グローバル ポインターに AXI4 インターフェイスを 1 つ生成するのに --max_memory_ports オプションが必要です。AXI4 インターフェイス名は、引数リストのグローバル ポインターの順序に基づいて付けられます。

    次のコード例は、GitHub の Vitis Accel Examplesocl_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 つ目のグローバル ポインター inputAXI4M_AXI_GMEM0 を、2 つ目のグローバル ポインター outputM_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 バンクを割り当てるときに使用する必要があります。詳細は、カーネル ポートのメモリへのマップ を参照してください。