端口级 I/O:有线握手 - 2023.2 简体中文

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

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

接口模式 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

注释: 控制信号名称基于原始端口名称。例如,用于数据输入 invalid 端口名为 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_vldap_hs 接口类型的子集。ap_vld 端口级 I/O 协议提供以下信号:

  • 数据端口
  • 用于指示数据信号有效并且可读的有效信号
    • 对于输入实参,设计在 valid 端口有效后立即读取数据端口。即使设计尚未准备好读取新数据,该设计也会对数据端口进行采样并在内部保留数据,直到需要时为止。
    • 对于输出实参,Vitis HLS 会实现输出 valid 端口以指示输出端口上的数据何时有效。

ap_ovld

ap_ovldap_hs 接口类型的子集。ap_ovld 端口级 I/O 协议提供以下信号:

  • 数据端口
  • 用于指示数据信号有效并且可读的有效信号
    • 对于输入实参和输入输出参数中的输入部分,设计默认为 ap_none 类型。
    • 对于输出实参和输入输出参数中的输出部分,设计实现 ap_vld 类型。