set_directive_interface - 2023.2 简体中文

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

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

描述

仅支持对顶层函数使用 set_directive_interface,无法将其用于 HLS 组件子函数。INTERFACE 编译指示或指令可指定在接口综合期间如何根据函数实参创建 RTL 端口,如 定义接口 所述。Vitis HLS 工具会自动确定任何子函数使用的 I/O 协议。

RTL 实现中的端口衍生自顶层函数和函数返回的实参的数据类型和方向、HLS 组件的 flow_targetconfig_interface 及该指令所指定的默认接口配置设置。每个函数实参均可指定为包含其自己的 I/O 协议(例如,有效握手或确认握手)。

提示: 接口上必需的全局变量必须显式定义为顶层函数的实参,如 全局变量 中所述。如果访问全局变量,但所有读写操作均为设计的本地操作,则会在该设计中创建此资源。RTL 中无需 I/O 端口。

该接口还定义了 HLS 组件的执行控制协议,如 块级控制协议 中所述。控制协议用于控制 HLS 组件(或块)何时开始执行,当此块完成操作时,控制协议处于空闲状态并准备就绪等待新输入。

语法

set_directive_interface [OPTIONS] <location> <port>
  • <location> 对应位置,用户必须指定该位置中的函数接口或寄存的输出(格式为 function[/label])。
  • <port> 对应参数(函数实参),用户必须对该参数的接口进行综合。如果指定如下块控制模式,则无需指定端口名称:ap_ctrl_chainap_ctrl_hsap_ctrl_none

选项

提示: 以下指定的许多选项都具有 config_interface 命令中定义的全局值。为此处定义的接口设置局部值即可覆盖全局值。
mode=<mode>

受支持的模式以及该工具在 RTL 中实现这些模式的方式均可细分为如下 3 个类别:

  1. 端口级协议
    • ap_none:无端口协议。此接口是简单的数据端口。
    • ap_vld:用于实现含关联 valid 信号的数据端口,以指示何时数据有效且可供读取或写入。
    • ap_ack:用于实现含关联 acknowledge 信号的数据端口,以确认数据已读取或写入。
    • ap_hs:用于实现同时包含 valid 信号和 acknowledge 信号的数据端口,提供两路握手以指示数据有效且可供读取和写入,并确认数据已读取或写入。
    • ap_ovld:用于实现含关联 valid 信号的输出数据端口,以指示何时数据有效且可供读取或写入。
      提示: 对于 ap_ovldVitis HLS 通过 ap_none 模式来实现输入实参或任意读取/写入实参的输入部分。
    • ap_memory:用于实现阵列实参(作为标准 RAM 接口)。如果在 Vivado IP integrator 中使用 RTL 设计,那么该接口将由多个不同端口组成。
    • bram:用于实现阵列实参(作为标准 RAM 接口)。如果在 Vivado IP integrator 中使用 RTL 设计,那么该存储器内存接口将由单个端口组成。
    • ap_fifo:使用含关联低电平有效 FIFO empty 端口和 full 端口的数据输入和输出端口来实现含标准 FIFO 接口的端口。
      注释: 您只能对读取实参或写入实参使用 ap_fifo 接口。ap_fifo 模式不支持双向读写实参。
  2. AXI 接口协议
    • s_axilite:用于将该端口作为 AXI4‑Lite 接口来实现。为 HLS 组件导出生成的 RT 时,该工具会生成一组关联的 C 语言驱动程序文件。
    • m_axi:用于将该端口作为 AXI4 接口来实现。您可使用 config_interface -m_axi_addr64 命令来指定 32 位(默认)地址端口或 64 位地址端口,并控制任何地址偏移。
    • axis:用于将该端口作为 AXI4‑Stream 接口来实现。
  3. 块级控制协议
    • ap_ctrl_chain:实现块级控制端口以启动 (start) 设计操作、continue 操作,以及指示设计何时处于 idledoneready 状态,以便处理新输入数据。
    • ap_ctrl_hs:实现块级控制端口以启动 (start) 设计操作,并指示设计何时处于 idledoneready 状态,以便处理新输入数据。
    • ap_ctrl_none:无块级 I/O 协议。
      注释: 使用 ap_ctrl_none 模式可阻止使用 C/RTL 协同仿真来验证设计。
-bundle <string>

默认情况下,HLS 工具会将兼容的函数实参组合(或捆绑)到 RTL 代码中的单个接口端口内。含兼容选项(例如,modeoffsetbundle)的所有接口端口都组合到单一接口端口内。

提示: 此默认行为可使用 config_interface -m_axi_auto_max_ports 命令来进行更改。

-bundle <string> 选项允许您定义捆绑,用于将端口组合在一起,这会覆盖默认行为。<string> 用于指定捆绑名称。生成的 RTL 代码中使用的端口名称是根据 modebundle 的组合自动衍生而成的,或者是按 name 指定的方式命名的。

重要: bundle 名称必须使用小写字符来指定。
-channel <string>
要在 m_axi 接口上启用多个通道,请指定通道 ID。您可使用不同的通道 ID 将多个 m_axi 接口组合为单个 m_axi 适配器。
-clock <string>
默认情况下,AXI4‑Lite 接口时钟与系统时钟为相同时钟。该选项用于为 AXI4‑Lite 接口指定独立时钟。如果使用 -bundle 选项将多个顶层函数实参组合到单一 AXI4‑Lite 接口中,那么只需在其中一个捆绑成员上指定时钟选项即可。
-depth <int>
指定供测试激励文件处理的最大采样数。此设置用于指示 HLS 工具为 RTL 协同仿真所创建的验证适配器中所需 FIFO 的最大大小。
提示: 虽然 depth 选项通常为可选,但需要通过该选项来为 RTL 协同仿真指定指针实参大小。
-interrupt <int>
仅供 ap_vld/ap_hs 使用。该选项用于启用要在中断中管理的 I/O,方法是在 s_axilite 寄存器文件的 ISRIER 中创建对应的位元。整数值 N=16..31 用于指定这两个寄存器中的位元位置(默认从 16 开始分配连续的值)。
-latency <value>
该选项可用于 ap_memory 和 M_AXI 接口。
  • ap_memory 接口中,接口选项用于指定驱动接口的 RAM 资源的读取时延。默认情况下,使用 1 个时钟周期的读取操作。该选项允许对读取时延超过 1 个时钟周期的外部 RAM 进行建模。
  • 在 M_AXI 接口中,该选项用于指定 AXI4 接口的期望时延,允许设计发起总线请求的时间比执行期望的读取或写入操作早 <value> 个周期(时延)。如果该值太低,设计将过早达成就绪状态,可能停滞并等待总线;如果该值太高,总线访问可能处于空闲状态并等待设计发起访问。
-max_read_burst_length <int>
该选项适用于 M_AXI 接口,可指定突发传输期间读取的数据值的最大数量。如需了解更多信息,请参阅 AXI 突发传输
-max_write_burst_length <int>
该选项适用于 M_AXI 接口,可指定突发传输期间写入的数据值的最大数量。
-max_widen_bitwidth <int>
自动拓宽接口时,请指定接口可用的最大位宽。此设置将覆盖由 config_interface -m_axi_max_bitwidth 命令指定的全局值。
-name <string>
指定将在生成的 RTL 中使用的端口的名称。除非 name 指定了端口名称,否则默认端口名称是根据 modebundle 的组合自动衍生的。
-num_read_outstanding <int>
该选项适用于 M_AXI 接口,用于指定在设计停滞前可对 AXI4 总线发起的读取请求数量(无响应)。此操作暗示设计中的内部存储空间,且 FIFO 大小为:
num_read_outstanding*max_read_burst_length*word_size
-num_write_outstanding <int>
该选项适用于 M_AXI 接口,用于指定在设计停滞前可对 AXI4 总线发起的写入请求数量(无响应)。此操作暗示设计中的内部存储空间,且 FIFO 大小为:
num_write_outstanding*max_write_burst_length*word_size
-offset <string>
为指定端口控制 AXI4‑Lite (s_axilite) 和 AXI4 存储器映射 (m_axi) 接口中的地址偏移。
  • s_axilite 接口中,<string> 用于指定寄存器映射中的地址。
  • m_axi 接口中,该选项会覆盖 config_interface -m_axi_offset 选项所指定的全局选项,并且 <string> 指定为:
    • off:不生成偏移端口。
    • direct:生成标量输入偏移端口。
    • slave:生成偏移端口并自动将其映射到 AXI4‑Lite 从接口。这是默认偏移。
-register
寄存信号和任何关联协议信号,并指示信号保持直至至少完成函数执行的最后一个周期为止。config_interface 命令的 -register_io 选项用于全局控制在顶层函数上寄存所有输入/输出的操作。该选项适用于顶层函数的以下标量接口:
  • s_axilite
  • ap_fifo
  • ap_none
  • ap_hs
  • ap_ack
  • ap_vld
  • ap_ovld
提示: 不支持在函数的返回端口 (port=return) 上使用寄存器选项。请改为使用 LATENCY 编译指示或指令:
#pragma HLS LATENCY min=1 max=1
-register_mode (both|forward|reverse|off)
该选项适用于 AXI4‑Stream 接口,并用于指定寄存器布局到正向路径(TDATATVALID)、反向路径 (TREADY) 或同时布局到这两条路径(TDATATVALIDTREADY)上,或者不寄存任何端口信号 (off)。默认值为 bothAXI4‑Stream 旁路信号被视为数据信号,随 TDATA 一起寄存。
-storage_impl=<impl>
仅限搭配 s_axilite 一起使用。该选项可定义要分配给接口的存储实现。
受支持的实现值包括 autobramuram。默认值为 auto
提示: uram 是同步存储器,对于两个端口仅含单个时钟。因此,针对含第二个时钟的 s_axilite 适配器不能指定 uram
-storage_type=<type>
仅限搭配 ap_memorybram 接口一起使用。该选项用于定义要分配给变量的存储类型(例如,RAM_T2P)。
受支持的类型包括:ram_1pram_1wnrram_2pram_s2pram_t2prom_1prom_2prom_np
提示: 对于接口上未定义的对象,也可以使用 BIND_STORAGE 编译指示或指令来指定变量的类型。

示例

func 函数关闭函数级握手。

set_directive_interface -mode ap_ctrl_none func

func 函数中的 InData 实参指定为包含 ap_vld 接口,并且输入应进行寄存。

set_directive_interface -mode ap_vld -register func InData