如 链接系统 中所述,有多个 --connectivity.XXX
选项可支持您定义 FPGA 二进制文件的拓扑结构、指定 CU 数量、将其分配给 SLR、将内核端口连接到全局存储器并建立串流端口连接。这些命令是构建进程中不可或缺的一部分,对于应用的定义和构造都至关重要。
--connectivity.nk
--connectivity.nk <arg>
其中 <arg>
按如下方式指定:<kernel_name>:#:<cu_name1>,<cu_name2>,...<cu_name#>
。
它可在链接进程中生成的 FPGA 二进制文件 (.xclbin
) 内,为指定内核 (kernel_name
) 例化指定数量的 CU (#
)。cu_name
为可选。如不指定 cu_name
,则直接对内核实例进行编号:kernel_name_1
、kernel_name_2
以此类推。默认情况下,Vitis 编译器会为每个内核例化 1 个计算单元。
例如:
v++ --link --connectivity.nk vadd:3:vadd_A,vadd_B,vadd_C
[connectivity]
节头下可使用如下格式指定该选项:[connectivity]
nk=vadd:3:vadd_A,vadd_B,vadd_C
--connectivity.sc
--connectivity.sc <arg>
在 2 个计算单元之间通过其 AXI4‑Stream 接口创建串流连接。针对每个串流接口连接单独使用 1 个 --connectivity.sc
选项。连接顺序必须为从首个内核的串流输出端口到第二个内核的串流输入端口。有效值包括:
<cu_name>.<streaming_output_port>:<cu_name>.<streaming_input_port>[:<fifo_depth>]
其中:
-
<cu_name>
是--connectivity.nk
选项中指定的计算单元名称。通常,该值为<kernel_name>_1
,除非指定其他名称。 -
<streaming_output_port>/<streaming_input_port>
是声明为 AXI4‑Stream 的计算单元端口的函数实参。 -
[:<fifo_depth>]
会在 2 个串流端口之间插入指定深度的 FIFO 以防止发生停滞。请指定整数值。
--connectivity.sc
内核驱动本身,那么将发生错误。例如,要将计算单元 mem_read_1
的 AXI4‑Stream 端口 s_out
连接到计算单元 increment_1
的 AXI4‑Stream 端口 s_in
,请使用:
--connectivity.sc mem_read_1.s_out:increment_1.s_in
[connectivity]
节头下可使用如下格式指定该选项:[connectivity]
sc=mem_read_1.s_out:increment_1.s_in
包含可选 <fifo_depth> 值即可支持 v++
连接器在 2 个内核之间添加 FIFO 以帮助防止停滞。它使用来自器件的 BRAM 资源(如果已指定),但无需再更新 HLS 内核以包含 FIFO。如果连接具有不同时钟或不同总线宽度,该工具还会例化 Clock Converter (CDC) 或 Datawidth Converter (DWC) IP。
--connectivity.slr
--connectivity.slr <arg>
该选项可用于将 CU 分配给器件上的特定 SLR。针对分配给 SLR 的每个内核或 CU 都必须重复指定该选项。
--connectivity.slr
来分配内核布局,那么还必须使用 --connectivity.sp
来为内核分配存储器访问。有效值包括:
<cu_name>:<SLR_NUM>
其中:
-
<cu_name>
是--connectivity.nk
选项中指定的计算单元的名称。通常,该值为<kernel_name>_1
,除非指定其他名称。 -
<SLR_NUM>
是 CU 分配到的 SLR 编号。例如,SLR0 和 SLR1。
例如,要将 CU vadd_2
分配给 SLR2,并将 CU fft_1
分配给 SLR1,请使用:
v++ --link --connectivity.slr vadd_2:SLR2 --connectivity.slr fft_1:SLR1
[connectivity]
节头下可使用如下格式指定该选项:[connectivity]
slr=vadd_2:SLR2
slr=fft_1:SLR1
--connectivity.sp
--connectivity.sp <arg>
该选项可用于指定在平台内向系统端口分配内核实参的方式。该选项的主要用例是将内核实参连接到特定存储器资源。要将内核的每个实参映射到特定存储器资源,都需要单独使用 1 个 --connectivity.sp
选项。在构建进程中,未通过 --connectivity.sp
选项显式映射到存储器资源的任一实参都会自动连接到可用的存储器资源。
--connectivity.sp
选项时指定实参名称,因为这样可以提供最大的连接灵活性。但您也可以通过该选项来指定内核接口端口。有效值包括:
<cu_name>.<kernel_argument_name>:<sptag[min:max]>
其中:
-
<cu_name>
是--connectivity.nk
选项中指定的计算单元的名称。通常,该值为<kernel_name>_1
,除非指定其他名称。 -
<kernel_argument_name>
是内核的函数实参的名称,或计算单元接口端口的名称。 -
<sptag>
表示系统端口标签,例如,来自目标平台的存储器控制器接口名称。有效的<sptag>
名称包括 DDR、PLRAM 和 HBM。 -
[min:max]
支持使用存储器范围,例如,DDR[0:2]。也支持单索引:DDR[2]。
以下示例演示的是将 VADD 内核的指定 CU 的输入实参 (A) 映射到 DDR[0:3]、将输入实参 (B) 映射到 HBM[0:31],并将输出实参 (C) 写入 PLRAM[2]:
v++ --link --connectivity.sp vadd_1.A:DDR[0:3] --connectivity.sp vadd_1.B:HBM[0:31] \
--connectivity.sp vadd_1.C:PLRAM[2]
[connectivity]
节头下可使用如下格式指定该选项:[connectivity]
sp=vadd_1.A:DDR[0:3]
sp=vadd_1.B:HBM[0:31]
sp=vadd_1.C:PLRAM[2]
--connectivity.noc.connect
--connectivity.noc.connect <arg>
其中 <arg>
格式为 <compute_unit_name>.<kernel_interface_name>:<noc
interface>
,用于指定 PL 内核接口与 Versal NoC 之间的连接。有效值为内部存储器控制器或 Versal NoC 单元上的主接口。
Vitis 编译器会基于跨整个动态区域的 NoC 连接和 M_AXI 属性(数据宽度 * 时钟频率)来估算内核带宽需求,自动设置 NoC 配置设置用于读取和写入带宽,并按需缩放以避免超出可用带宽。
[connectivity]
noc.read_bw=mm2s.M_AXI:2000.16
noc.write_bw=mm2s.M_AXI:2010.16
noc.connect=mm2s.M_AXI:M00_INI
--connectivity.noc.read_bw
--connectivity.noc.read_bw <arg>
其中 <arg>
格式为 <compute_unit_name>.<kernel_interface_name>:<Bandwidth>.<Avg_burst_length>
,用于指定连接的带宽和突发长度。带宽以 MB/s 为单位来指定。
该选项用于在 M_AXI 接口上指定期望的读取流量特性,以便您覆盖自动 Versal NoC 配置。
--connectivity.noc.write_bw
--connectivity.noc.write_bw <arg>
其中 <arg> 格式为 <compute_unit_name>.<kernel_interface_name>:<Bandwidth>.<Avg_burst_length>
,用于指定连接的带宽和突发长度。带宽以 MB/s 为单位来指定。
该选项用于在 M_AXI 接口上指定期望的写入流量特性,以便您覆盖自动 Versal NoC 配置。
--connectivity.connect
--connectivity.connect <X:Y>
该选项可用于通过 Vivado IP integrator 建立连接,但 v++
不会对指定的连接执行任何错误检查。该选项可用于指定内核与目标平台的非 AXI 元素之间的常规连接,例如,与 GT 端口的连接。
connect_bd_net
或 connect_bd_intf_net
命令兼容的实参。<X:Y>
的具体格式为:src/hierarchy_name/cell_name/pin_name:dst/hierarchy_name/cell_name/pin_name
这些连接不包括 AXI4‑Stream 接口之间的连接(需使用 --conectivity.sc
)或 M_AXI 接口之间的连接(需使用 --connectivity.sp
),如上所述。
[connectivity]
节头下可使用如下格式指定该选项:[connectivity]
connect=<X:Y>