S_AXILITE 捆绑规则 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

S_AXILITE 示例 中,所有函数实参均组合到单一 s_axilite 接口适配器内,该接口适配器由 INTERFACE 编译指示中的 bundle=BUS_A 选项来指定。bundle 选项支持您直接将端口组合到同一个接口内。

Vitis 内核流程中,应仅有单个接口捆绑,通常工具将其命名为 s_axi_control。因此,您在该流程中不应指定 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(软件到硬件映射)部分包含硬件信息,可显示每个端口的控制寄存器偏移和地址范围。

但捆绑与 s_axilite 接口的搭配使用存在一些规则。

  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 名称的所有接口端口都显式组合到同一个 AXI4‑Lite 接口端口中,并以 s_axi_<string> 指定的值来命名 RTL 端口。
    以下示例生成的接口分别名为 s_axi_BUS_As_axi_BUS_Bs_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
    }