描述
指定在接口综合期间如何根据函数描述创建 RTL 端口。如需了解更多信息,请参阅 定义接口。RTL 实现中的端口衍生自:
- 指定的任意函数级协议。
- 函数实参和返回。
- 全局变量(供顶层函数访问,在其作用域范围外定义)。
函数级握手:
- 控制函数何时开始执行运算。
- 指示函数运算何时:
- 终止
- 空闲
- 准备好处理新输入
函数级协议的实现:
- 由
ap_ctrl_none
、ap_ctrl_hs
或ap_ctrl_chain
模式来控制。 - 只需顶层函数名称。
每个函数实参均可指定为包含其自己的 I/O 协议(例如,有效握手或确认握手)。
如果访问全局变量,但所有读写操作均为设计的本地操作,则会在该设计中创建此资源。RTL 中无需 I/O 端口。但如果预计全局变量为外部源或目标,请以与标准函数实参相似方式来指定其接口。请参阅以下示例。
提示:
Vitis HLS 工具会自动确定任何子函数使用的 I/O 协议。您无法为子函数指定 INTERFACE 编译指示或指令。
语法
set_directive_interface [OPTIONS] <location> <port>
-
<location>
对应位置,用户必须指定该位置中的函数接口或寄存的输出(格式为function[/label
])。 -
<port>
对应参数(函数实参或全局变量),用户必须对该参数的接口进行综合。使用ap_ctrl_none
模式或ap_ctrl_hs
模式时,无需指定此项。
选项
提示: 以下指定的许多选项都具有 config_interface 命令中定义的全局值。为此处定义的接口设置局部值即可覆盖全局值。
-
-bundle <string>
- 默认情况下,HLS 工具会将函数实参与兼容选项组合或捆绑到 RTL 中的接口端口内。所有 AXI4-Lite (
s_axilite
) 接口都会尽可能捆绑到 AXI4-Lite 端口内。同样,默认指定为 AXI4 (m_axi
) 接口的所有函数实参也都会捆绑到单一 AXI4 端口内。 -
-clock <string>
- 默认情况下,AXI4-Lite 接口时钟与系统时钟为相同时钟。该选项用于为 AXI4-Lite 接口指定独立时钟。如果使用
-bundle
选项将多个顶层函数实参组合到单一 AXI4-Lite 接口中,那么只需在其中一个捆绑成员上指定时钟选项即可。 -
-depth <int>
- 指定供测试激励文件处理的最大采样数。此设置用于指示 Vitis HLS 为 RTL 协同仿真所创建的验证适配器中所需 FIFO 的最大大小。对于使用
ap_fifo
模式的指针接口,该选项是必需的。 -
-latency <value>
- 该选项可用于
ap_memory
和 M_AXI 接口。- 在
ap_memory
接口中,接口选项用于指定驱动接口的 RAM 资源的读取时延。默认情况下,使用 1 个时钟周期的读取操作。该选项允许对读取时延超过 1 个时钟周期的外部 RAM 进行建模。 - 在 M_AXI 接口中,该选项用于指定 AXI4 接口的期望时延,允许设计发起总线请求的时间比执行期望的读取或写入操作早 <value> 个周期(时延)。如果该值太低,设计将过早达成就绪状态,可能停滞并等待总线;如果该值太高,总线访问可能处于空闲状态并等待设计发起访问。
- 在
-
-max_read_burst_length <int>
- 该选项适用于 M_AXI 接口,可指定突发传输期间读取的数据值的最大数量。
-
-max_widen_bitwidth <int>
- 自动拓宽接口时,请指定接口可用的最大位宽。此设置将覆盖由
config_interface -m_axi_max_bitwidth
命令指定的全局值。 -
-max_write_burst_length <int>
- 该选项适用于 M_AXI 接口,可指定突发传输期间写入的数据值的最大数量。
-
-mode (ap_none|ap_vld|ap_ack|ap_hs|ap_ovld|ap_fifo|ap_memory|bram|axis|s_axilite|m_axi|ap_ctrl_none|ap_ctrl_hs|ap_ctrl_chain|ap_stable)
- 以下是有关 Vitis HLS 如何实现
-mode
选项的摘要信息。-
ap_none
:无协议。此接口为数据端口。 -
ap_vld
:用于实现含关联valid
端口的数据端口,以指示何时数据有效且可供读取或写入。 -
ap_ack
:用于实现含关联acknowledge
端口的数据端口,以确认数据已读取或写入。 -
ap_hs
:用于实现含关联valid
端口和acknowledge
端口的数据端口,提供两路握手以指示数据有效且可供读取和写入,并确认数据已读取或写入。 -
ap_ovld
:用于实现含关联valid
端口的输出数据端口,以指示何时数据有效且可供读取或写入。注释: Vitis HLS 通过ap_none
模式来实现输入实参或任意读取/写入实参的输入部分。 -
ap_fifo
:使用含关联低电平有效 FIFOempty
端口和full
端口的数据输入和输出端口来实现含标准 FIFO 接口的端口。注释: 仅限对读取实参和写入实参使用该接口。ap_fifo
模式不支持双向读写实参。 -
ap_memory
:用于实现阵列实参(作为标准 RAM 接口)。如果在 Vivado IP integrator 中使用 RTL 设计,存储器接口会显示为离散端口。 -
bram
:用于实现阵列实参(作为标准 RAM 接口)。如果在 Vitis IP integrator 中使用 RTL 设计,存储器接口会显示为单端口。 -
axis
:用于实现所有端口(作为 AXI4-Stream 接口)。 -
s_axilite
:用于实现所有端口(作为 AXI4-Lite 接口)。Vitis HLS 会在“导出 RTL”进程期间生成一组关联的 C 语言驱动程序文件。 -
m_axi
:用于实现所有端口(作为 AXI4 接口)。您可使用config_interface
命令来指定 32 位(默认)地址端口或 64 位地址端口,并控制任何地址偏移。 -
ap_ctrl_none
:无块级 I/O 协议。注释: 使用ap_ctrl_none
模式可阻止使用 C/C++/RTL 协同仿真功能来验证设计。 -
ap_ctrl_hs
:实现块级控制端口以启动 (start
) 设计操作,并指示设计何时处于idle
、done
和ready
状态,以便处理新输入数据。注释:ap_ctrl_hs
模式为默认块级 I/O 协议。 -
ap_ctrl_chain
:实现块级控制端口以启动 (start
) 设计操作、continue
操作,以及指示设计何时处于idle
、done
和ready
状态,以便处理新输入数据。 -
ap_stable
:无协议。此接口为数据端口。Vitis HLS 假定数据端口复位后始终处于稳定状态,这样即可支持内部最优化移除不必要的寄存器。
-
-
-name <string>
- 指定将在生成的 RTL 中使用的端口的名称。
-
-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_read_outstanding*max_read_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
- 寄存信号和任何关联协议信号,并指示信号保持直至至少完成函数执行的最后一个周期为止。该选项适用于顶层函数的以下标量接口:
-
s_axilite
-
ap_fifo
-
ap_none
-
ap_stable
-
ap_hs
-
ap_ack
-
ap_vld
-
ap_ovld
-
-
-register_mode (both|forward|reverse|off)
- 该选项适用于 AXI4-Stream 接口,并用于指定寄存器布局到正向路径(
TDATA
和TVALID
)、反向路径 (TREADY
) 或同时布局到这两条路径(TDATA
、TVALID
和TREADY
)上,或者不寄存任何端口信号 (off
)。默认值为both
。AXI4-Stream 旁路信号被视为数据信号,随TDATA
一起寄存。 -
-storage_impl=<impl>
- 仅限搭配
s_axilite
一起使用。该选项可定义要分配给接口的存储实现。 -
-storage_type=<type>
- 仅限搭配
ap_memory
和bram
接口一起使用。该选项用于定义要分配给变量的存储类型(例如,RAM_T2P)。
示例
为 func
函数关闭函数级握手。
set_directive_interface -mode ap_ctrl_none func
func
函数中的 InData
实参指定为包含 ap_vld
接口,并且输入应进行寄存。
set_directive_interface -mode ap_vld -register func InData
公开 func
函数中使用的 lookup_table
全局函数,该选项在 RTL 设计上用作为端口,并带有 ap_memory
接口。
set_directive_interface -mode ap_memory func look_table