针对非转发请求的选择性流量控制 - 1.3 简体中文

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

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

PCI Express® 规范要求完成器请求接口持续不断交付转发传输事务,即使用户逻辑无法在接口上接受非转发传输事务也是如此。为启用此功能,核会在完成器接口上实现基于信用值的流量控制机制,用户逻辑可通过此机制来控制通过此接口的非转发请求的流量,而不会影响转发请求。用户逻辑可使用 pcie_cq_np_req[1:0] 信号来向核标示用于接收非转发请求的缓冲器的可用情况。仅当可用信用值为非 0 值时,核才会向用户逻辑交付非转发请求。当非转发请求交付因缺少信用值而暂停时,核仍会持续交付转发请求。当信用值机制对非转发请求的交付不施加任何反压时,核会按从链路接收到转发请求和非转发请求的顺序来交付这些请求。

核会保留内部信用值计数器,以跟踪完成器请求接口上可用于非转发请求的信用值。以下算法用于保持记录可用信用值:

  • 在复位时,计数器设为 0。
  • 当接口解复位后,在每个时钟周期内:
    • 如果 pcie_cq_np_req 为非 0 值并且在此周期内未交付任何非转发请求,那么信用值会递增 1,除非它已达到其饱和限值 12。当 pcie_cq_np_req = 2'b01 时,递增量为 1,当 pcie_cq_np_req = 2'b102'b11 时,递增量为 2。
    • 如果 pcie_cq_np_req = 2'b00 且在此周期内仅交付单个非转发请求,那么信用值递减 1,除非它已为 0。
    • 如果 pcie_cq_np_req = 2'b00 且在此周期内交付 2 个非转发请求,那么信用值递减 2,除非它已达到 0。
    • 在所有其它情况下,信用值均保持不变。
  • 仅当信用值大于 0 时,核才会开始向用户逻辑交付非转发 TLP。

用户应用每次准备好接收非转发请求时,均可在 pcie_cq_np_req 上提供 1 或 2 个信用值,或者如果不需要对非转发请求应用选择性反压,那么也可以将其保留永久设置为 2'b11。如果信用值始终为非 0 值,那么核会按从链路接收到转发请求和非转发请求的顺序来交付这些请求。如果有时信用值保持为 0,那么非转发请求可在该核的 FIFO 中累积。当信用值后续变为非 0 值时,核会首先交付先于已交付到用户应用的转发请求到达并累积的非转发请求,然后核才会还原为按从链路接收到请求的顺序来交付这些请求。

pcie_cq_np_req 的设置无需与完成器请求接口上的包传输对齐。

用户应用可以监控 pcie_cq_np_req_ count[5:0] 输出上的当前信用值。计数器饱和上限为 32。由于存在内部流水线延迟,当核在 pcie_cq_np_req 输入上接收到脉冲之后,可能需要经过多个延迟周期后,核才会在响应中更新 pcie_cq_np_req_count 输出。因此,当用户逻辑具有足够的缓冲器空间可用时,它应提前提供信用值,以便避免核应缺少信用值而延误交付非转发请求。