S_AXILITE バンドルの規則 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

S_AXILITE の例 では、INTERFACE プラグマの bundle=BUS_A オプションが指定されたすべての関数引数が 1 つの s_axilite インターフェイス アダプターにグループ化されます。bundle オプションを使用すると、複数のポートを 1 つのインターフェイスにまとめることができます。

Vitis カーネル フローでは通常、ツールにより s_axi_control という名前が付けられた 1 つのインターフェイス バンドルのみを使用する必要があります。そのため、このフローでは bundle オプションは指定しないでください。指定すると、合成中にエラーが発生します。Vivado IP フローでは、s_axilite インターフェイスを使用して複数のバンドルを指定できます。これにより、定義したバンドルごとに個別のインターフェイス アダプターが作成されます。次に、この例を示します。
void example(char *a, char *b, char *c)
{
#pragma HLS INTERFACE mode=s_axilite port=a bundle=BUS_A
#pragma HLS INTERFACE mode=s_axilite port=b bundle=BUS_A
#pragma HLS INTERFACE mode=s_axilite port=c bundle=OUT
#pragma HLS INTERFACE mode=s_axilite port=return bundle=BUS_A
#pragma HLS INTERFACE mode=ap_vld port=b
  *c += *a + *b;
}

合成が完了すると、Synthesis Summary レポートには生成された s_axilite アダプターの数に関するフィードバックが表示されます。レポートの SW-to-HW Mapping セクションには、制御レジスタのオフセットと各ポートのアドレス範囲を示す HW 情報が含まれます。

ただし、s_axilite インターフェイスでのバンドルの使用に関するいくつかの規則があります。

  1. デフォルト バンドル名: バンドル名が指定されていないすべてのインターフェイス ポートは、 1 つの AXI4-Lite インターフェイス ポートにまとめられてツールのデフォルト バンドル名が使用され、RTL ポートの名前は s_axi_<default> (通常 s_axi_control) になります。
    この例では、すべてのポートがデフォルト バンドルにマップされます。
    void top(char *a, char *b, char *c)
    {
    #pragma HLS INTERFACE mode=s_axilite port=a
    #pragma HLS INTERFACE mode=s_axilite port=b
    #pragma HLS INTERFACE mode=s_axilite port=c
         *c += *a + *b;
    }
  2. ユーザー指定バンドル名: 同じ bundle 名が指定されたすべてのインターフェイス ポートが 1 つの AXI4-Lite インターフェイス ポートにまとめられ、RTL ポートの名前が s_axi_<string> になります。
    次の例では、s_axi_BUS_As_axi_BUS_B、および s_axi_OUT という名前のインターフェイスが生成されます。
    void example(char *a, char *b, char *c)
    {
    #pragma HLS INTERFACE mode=s_axilite port=a bundle=BUS_A
    #pragma HLS INTERFACE mode=s_axilite port=b bundle=BUS_B
    #pragma HLS INTERFACE mode=s_axilite port=c bundle=OUT
    #pragma HLS INTERFACE mode=s_axilite port=return bundle=OUT
    #pragma HLS INTERFACE mode=ap_vld port=b
         *c += *a + *b;
    }
  3. 部分的に指定されたバンドル名: 一部の引数に bundle 名を指定し、残りの引数に名前を指定しない場合、引数は次のようにまとめられます。
    • INTERFACE プラグマでバンドル名が指定されたすべてのポートがグループ化されます。
    • バンドル名が指定されていないポートがデフォルト名のバンドルにグループ化されます。デフォルト名は、標準ツール デフォルト名か、またはユーザーがツールのデフォルト名を指定している場合は代替のデフォルト名になります。

    次の例では、ユーザーがツールのデフォルト名である bundle=control を指定しています。この場合、ポート c はユーザーが指定した s_axi_control に割り当てられ、残りのポートは代替のデフォルト名である s_axi_control_r にまとめられます。

    void top(char *a, char *b, char *c) {
    #pragma HLS INTERFACE mode=s_axilite port=a
    #pragma HLS INTERFACE mode=s_axilite port=b
    #pragma HLS INTERFACE mode=s_axilite port=c bundle=control
    }