避免转发请求发生队头阻塞 - 1.3 简体中文

UltraScale+ 器件 Integrated Block for PCI Express 产品指南 (PG213)

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文

核会因缺少发射信用值或者缺少可用标签而将其请求器请求接口上接收到的非转发请求置于保留状态。这可能导致转发传输事务发生队头阻塞 (HOL blocking)。如果用户逻辑能够检查非转发传输事务的发射信用值和标签可用性,则可避免发生此类状况。核为此提供了以下信号:

  • pcie_tfc_nph_av[3:0]:这些输出表示非转发请求的当前可用头信用值(0000 = 无信用值可用、0001 = 可用信用值为 1、0010 = 信用值为 2、…、1111 = 可用信用值为 15 或更高)。
  • pcie_tfc_npd_av[3:0]:这些输出表示非转发请求的当前可用数据信用值(0000 = 无信用值可用、0001 = 可用信用值为 1、0010 = 信用值为 2、…、1111 = 可用信用值为 15 或更高)。
  • pcie_rq_tag_av[3:0]:这些输出表示当前可供分配给非转发请求的可用标签数量(0000 = 无标签可用、0001 = 可用标签数为 1、0010 = 可用标签数为 2、…、1111 = 可用标签数为 15 或更高)。

用户逻辑可选择先检查这些输出,然后再发射非转发请求。由于存在内部流水线延迟,这些输出上的信息相比于请求器请求接口上传输的描述符的最后一个字节所在周期晚 2 个用户时钟周期,因此用户逻辑必须调整这些值,将前 2 个时钟周期内发射的所有非转发请求一并纳入考量。下图演示了这些信号的操作。在此示例中,核最初的非转发头信用值为 7,非转发数据信用值为 3,并且可供分配的可用标签数为 5。来自用户逻辑的请求 1 具有 1 个有效载荷(含 1 个 Dword),因此耗用的头信用值和数据信用值各为 1,使用的标签数同样为 1。下一个时钟周期 3 内的请求 2 和 3(跨接)各自耗用的头信用值均为 1,但不耗用数据信用值。当用户逻辑在时钟周期 4 内提供请求 4 时,它必须调整可用信用值和可用标签计数,将前 2 个周期内的请求 1、2 和 3 一并纳入考量。请求 4 耗用的头信用值和数据信用值各为 1。当用户逻辑在时钟周期 5 内提供请求 5 时,它必须调整可用信用值和可用标签计数,将请求 2、3 和 4 一并纳入考量。如果请求 5 耗用的头信用值和数据信用值各为 1,那么 2 个周期后可用数据信用值为 0,可用标签数量同样如此。因此,请求 6 必须等待有新的信用值可用。

图 1. 请求器请求接口上的信用值和标签可用性信号的操作
注释: 如果用户逻辑选择使用 pcie_tfc_* 接口来监控可用的发射信用值,请确保在 pcie_tfc_npd_av pcie_tfc_nph_av 达到 0 之后,没有任何其它非转发数据包进入 RQ 接口。集成块并不会丢失在此之后发出的非转发数据包;但 pcie_tfc_* 接口将无法再提供准确的信用值审计。

cfg_fc_sel 设置为可用发射信用值模式后,在 cfg_fc_npdcfg_fc_nph 接口中同样可提供类似的发射信用值信息。