描述
仅支持对顶层函数使用 syn.directive.interface
,无法将其用于 HLS 组件子函数。INTERFACE 编译指示或指令可指定在接口综合期间如何根据函数实参创建 RTL 端口,如Vitis 高层次综合用户指南(UG1399) 的“定义接口”章节中所述。Vitis HLS 工具会自动确定任何子函数使用的 I/O 协议。
RTL 实现中的端口衍生自顶层函数和函数返回的实参的数据类型和方向、HLS 组件的 flow_target
、syn.interface.xxx
命令(如 接口配置 中所述)及 syn.directive.interface
所指定的默认接口配置设置。每个函数实参均可指定为包含其自己的 I/O 协议(例如,有效握手或确认握手)。
该接口还定义了 HLS 组件的执行控制协议,如Vitis 高层次综合用户指南(UG1399) 的“块级控制协议”章节中所述。控制协议用于控制 HLS 组件(或块)何时开始执行,当此块完成操作时,控制协议处于空闲状态并准备就绪等待新输入。
语法
syn.directive.interface=[OPTIONS] <location> <port>
-
<location>
对应位置,用户必须指定该位置中的函数接口或寄存的输出(格式为function[/label
])。 -
<port>
对应参数(函数实参),用户必须对该参数的接口进行综合。如果指定如下块控制模式,则无需指定端口名称:ap_ctrl_chain
、ap_ctrl_hs
或ap_ctrl_none
。
选项
syn.interface.xxx
命令定义的默认值。您可为此处定义的接口定义局部值以覆盖默认值。-
mode=<mode>
-
受支持的模式以及该工具在 RTL 中实现这些模式的方式均可细分为如下 3 个类别:
- 端口级协议:
-
ap_none
:无端口协议。此接口是简单的数据端口。 -
ap_stable
:无协议。此接口是简单的数据端口,但 Vitis HLS 工具假定数据端口复位后始终处于稳定状态,这样即可支持优化移除不必要的寄存器。 -
ap_vld
:用于实现含关联valid
信号的数据端口,以指示何时数据有效且可供读取或写入。 -
ap_ack
:用于实现含关联acknowledge
信号的数据端口,以确认数据已读取或写入。 -
ap_hs
:用于实现同时包含valid
信号和acknowledge
信号的数据端口,提供两路握手以指示数据有效且可供读取和写入,并确认数据已读取或写入。 -
ap_ovld
:用于实现含关联valid
信号的输出数据端口,以指示何时数据有效且可供读取或写入。提示: 对于ap_ovld
,Vitis HLS 通过ap_none
模式来实现输入实参或任意读取/写入实参的输入部分。 -
ap_memory
:用于实现阵列实参(作为标准 RAM 接口)。如果在 Vivado IP integrator 中使用 RTL 设计,那么该接口将由多个不同端口组成。 -
ap_fifo
:使用含关联低电平有效 FIFOempty
端口和full
端口的数据输入和输出端口来实现含标准 FIFO 接口的端口。注释: 您只能对读取实参或写入实参使用ap_fifo
接口。ap_fifo
模式不支持双向读写实参。
-
- AXI 接口协议:
-
s_axilite
:用于将该端口作为 AXI4‑Lite 接口来实现。为 HLS 组件导出生成的 RT 时,该工具会生成一组关联的 C 语言驱动程序文件。 -
m_axi
:用于将该端口作为 AXI4 接口来实现。您可使用syn.interface.m_axi_addr64
命令来指定 32 位(默认)地址端口或 64 位地址端口,并控制任何地址偏移。 -
axis
:用于将该端口作为 AXI4‑Stream 接口来实现。
-
- 块级控制协议:
-
ap_ctrl_chain
:实现块级控制端口以启动 (start
) 设计操作、continue
操作,以及指示设计何时处于idle
、done
和ready
状态,以便处理新输入数据。 -
ap_ctrl_hs
:实现块级控制端口以启动 (start
) 设计操作,并指示设计何时处于idle
、done
和ready
状态,以便处理新输入数据。 -
ap_ctrl_none
:无块级 I/O 协议。注释: 使用ap_ctrl_none
模式可阻止使用 C/RTL 协同仿真来验证设计。
-
- 端口级协议:
-
bundle=<string>
-
默认情况下,HLS 工具会将兼容的函数实参组合(或捆绑)到 RTL 代码中的单个接口端口内。含兼容选项(例如,
mode
、offset
和bundle
)的所有接口端口都组合到单一接口端口内。提示: 此默认行为可使用syn.interface.m_axi_auto_max_ports
命令来进行更改。该
bundle=<string>
选项允许您定义捆绑,用于将端口组合在一起,这会覆盖默认行为。<string>
用于指定捆绑名称。生成的 RTL 代码中使用的端口名称是根据mode
与bundle
的组合自动衍生而成的,或者是按name
指定的方式命名的。重要:bundle
名称必须使用小写字符来指定。 -
clock=<string>
- 默认情况下,AXI4‑Lite 接口时钟与系统时钟为相同时钟。该选项用于为 AXI4‑Lite 接口指定独立时钟。如果使用
bundle
选项将多个顶层函数实参组合到单一 AXI4‑Lite 接口中,那么只需在其中一个捆绑成员上指定时钟选项即可。 -
channel=<string>
- 要在
m_axi
接口上启用多个通道,请指定通道 ID。您可使用不同的通道 ID 将多个m_axi
接口组合为单个m_axi
适配器。 -
depth=<int>
- 指定供测试激励文件处理的最大采样数。此设置用于指示 HLS 工具为 RTL 协同仿真所创建的验证适配器中所需 FIFO 的最大大小。提示: 虽然
depth
选项通常为可选,但需要通过该选项来为 RTL 协同仿真指定指针实参大小。 -
interrupt=<int>
- 仅供
ap_vld
/ap_hs
使用。该选项用于启用要在中断中管理的 I/O,方法是在s_axilite
寄存器文件的ISR
和IER
中创建对应的位元。整数值 N=16..31 用于指定这两个寄存器中的位元位置(默认从 16 开始分配连续的值)。 -
latency=<value>
- 该选项可用于
ap_memory
和m_axi
接口。- 在
ap_memory
接口中,该选项用于指定驱动接口的 RAM 资源的读取时延。默认情况下,使用 1 个时钟周期的读取操作。该选项允许对读取时延超过 1 个时钟周期的外部 RAM 进行建模。 - 在
m_axi
接口中,该选项用于指定 AXI4 接口的目标时延,允许设计先发起总线请求,然后在经过指定的周期数(时延)后再执行所期望的读取或写入操作。如果该值太低,设计将过早达成就绪状态,可能停滞并等待总线;如果该值太高,总线访问可能处于空闲状态并等待设计发起访问。
- 在
-
max_read_burst_length=<int>
- 该选项适用于
m_axi
接口,可指定突发传输期间读取的数据值的最大数量。如需了解更多信息,请参阅Vitis 高层次综合用户指南(UG1399) 的“AXI 突发传输”章节。 -
max_write_burst_length=<int>
- 该选项适用于
m_axi
接口,可指定突发传输期间写入的数据值的最大数量。 -
max_widen_bitwidth=<int>
- 自动拓宽接口时,请指定接口可用的最大位宽。此设置将覆盖由
syn.interface.m_axi_max_bitwidth
命令指定的默认值。如需了解更多信息,请参阅Vitis 高层次综合用户指南(UG1399) 的“端口宽度自动调整”章节。 -
name=<string>
- 指定将在生成的 RTL 中使用的端口的名称。除非
name
指定了端口名称,否则默认端口名称是根据mode
与bundle
的组合自动衍生的。 -
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
- 寄存信号和任何关联协议信号,并指示信号保持直至至少完成函数执行的最后一个周期为止。
syn.interface.register_io
命令用于控制顶层函数上的所有接口的默认寄存,该选项则允许您覆盖当前接口的默认设置。该选项适用于以下接口模式:-
s_axilite
-
ap_fifo
-
ap_none
-
ap_stable
-
ap_hs
-
ap_ack
-
ap_vld
-
ap_ovld
提示:register
选项不适用于函数的返回端口 (port=return
)。请改用syn.directive.latency
。 -
-
register_mode=(both|forward|reverse|off)
- 该选项适用于 AXI4‑Stream 接口,并用于指定寄存器布局方式:布局到正向路径(
TDATA
和TVALID
)、布局到反向路径 (TREADY
)、同时布局到正反向路径,或不寄存任何端口信号 (off
)。默认值为register_mode=both
。提示: AXI4‑Stream 旁路信号被视为数据信号,随TDATA
一起寄存。 -
storage_impl=<impl>
- 该选项仅适用于
mode=s_axilite
,用于定义分配给该接口的存储实现。受支持的<impl>
值包括:auto
、bram
和uram
。默认值为auto
。提示:uram
是同步存储器,能为两个端口提供单一时钟(仅限某些器件上可用)。因此不能将uram
指定用于含 2 个时钟的s_axilite
适配器,当指定部件不支持uram
时也不可用。 -
storage_type=<type>
-
该选项仅适用于
mode=ap_memory
或mode=bram
,用于定义要分配给变量的存储类型(例如,RAM_T2P)。受支持的类型包括:
ram_1p
、ram_1wnr
、ram_2p
、ram_s2p
、ram_t2p
、rom_1p
、rom_2p
和rom_np
。提示: 对于顶层函数的接口上未定义的对象,可使用syn.directive.bind_storage
定义此类型。
示例 1
此示例用于演示为 func
函数禁用函数级握手。
syn.directive.interface=mode=ap_ctrl_none func return
示例 2
func
函数中的 InData
实参指定为包含 ap_vld
接口,并且输入应进行寄存。
set_directive_interface=func InData mode=ap_vld register