接口模式 ap_hs
包含与数据端口的双向握手信号。此握手属于业界标准的有效和确认握手。ap_vld
模式同样如此,但仅含有效端口,ap_ack
仅含确认端口。
ap_ovld
模式用于输入输出实参。将输入输出拆分为独立输入端口和输出端口时,ap_none
模式适用于输入端口,ap_vld
适用于输出端口。这是支持读写的指针实参的默认行为。
ap_hs
模式可应用于按顺序读写的阵列。如果 Vitis HLS 可判定读访问或写访问为无序访问,它将停止综合并报错。如果无法判定访问顺序,Vitis HLS 将发出警告。
ap_hs(ap_ack、ap_vld 和 ap_ovld)
ap_hs
端口级 I/O 协议在开发过程中提供了最大的灵活性,允许采用自下而上和自上而下的设计流程。双向握手可安全执行所有块内通信,无需人为干预或假设即可正确执行。ap_hs
端口级 I/O 协议提供以下信号:
- 数据端口
- 用于指示数据信号有效并且可读的有效信号
- 用于指示何时已读取数据的确认信号
下图显示了 ap_hs
接口对应输入和输出端口的行为。在此示例中,输入端口名为 in
,输出端口名为 out
。
注释: 控制信号名称基于原始端口名称。例如,用于数据输入
in
的 valid
端口名为 in_vld
。图 1. ap_hs 接口的行为
对于输入,将执行以下操作:
- 应用 start 后,该块开始正常操作。
- 如果设计已准备好输入数据,但输入
valid
处于低电平状态,则设计将停滞并等待断言输入valid
有效以指示存在新的输入值。注释: 上图显示了此行为。在此示例中,设计已准备好在时钟周期 4 上读取数据输入in
、停滞并等待输入valid
,然后再读取数据。 - 当输入
valid
断言为高电平有效 (High) 时,输出确认将断言为高电平有效 (High),表明已读取数据。
对于输出,将执行以下操作:
- 应用 start 后,该块开始正常操作。
- 写入输出端口时,将同时断言其关联的输出
valid
信号有效,以指示端口上存在有效数据。 - 如果关联的输入确认为低电平有效 (Low),则设计将停滞并等待断言输入确认有效。
- 当断言输入确认有效以表示已读取数据后,将在下一个时钟沿断言输出
valid
无效。
ap_ack
ap_ack
端口级 I/O 协议是 ap_hs
接口类型的子集。ap_ack
端口级 I/O 协议提供以下信号:
- 数据端口
- 用于指示何时使用数据的确认信号
- 对于输入实参,设计会在读取输入的周期中生成高电平有效输出确认。
- 对于输出实参,Vitis HLS 会实现输入确认端口以确认已读取输出。
注释: 写入操作之后,设计将停滞并等待,直到输入确认断言为高电平有效为止,这表明使用者块已读取输出。但是,不存在可用于指示何时可以使用数据的关联输出端口。
警告:
您不能使用 C/RTL 协同仿真来验证在输出端口上使用
ap_ack
的设计。ap_vld
ap_vld
是 ap_hs
接口类型的子集。ap_vld
端口级 I/O 协议提供以下信号:
- 数据端口
- 用于指示数据信号有效并且可读的有效信号
- 对于输入实参,设计在
valid
端口有效后立即读取数据端口。即使设计尚未准备好读取新数据,该设计也会对数据端口进行采样并在内部保留数据,直到需要时为止。 - 对于输出实参,Vitis HLS 会实现输出
valid
端口以指示输出端口上的数据何时有效。
- 对于输入实参,设计在
ap_ovld
ap_ovld
是 ap_hs
接口类型的子集。ap_ovld
端口级 I/O 协议提供以下信号:
- 数据端口
- 用于指示数据信号有效并且可读的有效信号
- 对于输入实参和输入输出参数中的输入部分,设计默认为
ap_none
类型。 - 对于输出实参和输入输出参数中的输出部分,设计实现
ap_vld
类型。
- 对于输入实参和输入输出参数中的输入部分,设计默认为