完成器请求接口 - 1.3 简体中文

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

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文
表 1. 完成器请求接口端口描述(512 位接口)
名称 I/O 宽度 描述
m_axis_cq_tdata 输出 512 PCIe 完成器请求接口向用户应用发射数据。
m_axis_cq_tuser 输出 183 这组信号中包含所传输的 TLP 的边带信息。当 m_axis_cq_tvalid 为高电平时,这些信号有效。下表描述了这组信号中的每个信号。
m_axis_cq_tlast 输出 1 核在包的最后一个节拍内断言此信号有效以指示包结束。在单一节拍内完成 TLP 传输时,核会在传输的首个节拍内设置该位。仅当禁用跨接选项时,才使用此输出。启用跨接选项时,核会将该输出永久设置为 0。
m_axis_cq_tkeep 输出 16 传输期间断言此总线的位 i 有效对于用户逻辑而言,表示 m_axis_cq_tdata 总线的 Dword i 包含的数据有效。核会针对从描述符的首个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 Dword 将该位连续设置为 1。因此,在包的所有节拍中 m_axis_cq_tdata 必须全部设置为 1,但在包的总大小并非数据总线宽度的整数倍(在 2 个 Dword 内都是如此)的情况下,最后一个节拍除外。对于有效载荷传输的 Dword 对齐模式和 128b 地址对齐模式都是如此。

仅当在 CQ 接口上未启用跨接选项时,tkeep 位才有效。启用跨接时,在所有节拍中,tkeep 位全部永久设置为 1。在此情况下,用户逻辑必须在 m_axis_cq_tuser 总线中使用 is_sop/is_eop 信号,以判定通过该接口传输的 TLP 的起始和结束。

m_axis_cq_tvalid 输出 1 核在 m_axis_cq_tdata 总线上驱动有效数据时始终断言此输出有效。核会在包传输期间使有效信号保持处于断言有效状态。核会使用 m_axis_cq_tready 信号来调整数据传输节奏。
m_axis_cq_tready 输入 1 用户逻辑激活此信号对于 PCIe 核而言,表明用户逻辑已准备好接受数据。在同一周期内 m_axis_cq_tvalid 和 m_axis_cq_tready 均断言有效时,就会通过该接口传输数据。

当 m_axis_cq_tvalid 为高电平时,如果用户逻辑断言就绪信号无效,那么核会在总线上保留数据,并使有效信号保持断言有效状态,直至用户逻辑断言就绪信号有效为止。

pcie_cq_np_req 输入 2 此输入供用户应用用于请求交付非转发请求。核通过实现基于信用值的流量控制机制来控制通过该接口交付非转发请求的过程,并避免阻塞转发 TLP。

此核输入可控制内部信用值。在每个时钟周期内基于如下 pcie_cq_np_req[1:0] 设置来更新信用值:

  • 00:无更改
  • 01:递增 1
  • 10 或 11:递增 2

在通过接口交付每个非转发请求后,信用值会递减。当信用值达到 0 时,核会暂时停止向用户逻辑交付非转发请求。即使已暂停交付非转发请求,核仍会继续交付从链路接收到的任何转发 TLP。

用户应用可以在每个周期内根据其非转发请求接收缓冲器的状态来设置 pcie_cq_np_req[1:0],或者如果不需要对非转发请求运用选择性反压,则可将其永久设置为 11。

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

pcie_cq_np_req_count 输出 6 此输出所提供的值是核为了向用户逻辑交付非转发请求而保留的信用值的当前值。仅当此信用值为非 0 值时,核才能通过完成器请求接口交付非转发请求。该信用值饱和上限为 32。

由于存在内部流水线延迟,当用户应用在 pcie_cq_np_req[1:0] 输入上提供信用值后,可能需要经过多个延迟周期后,PCIe 核才会更新 pcie_cq_np_req_count 输出响应。

此计数将于执行 user_reset 以及断言 user_lnk_up 无效时复位。

表 2. m_axis_cq_tuser 中的边带信号(512 位接口)
位索引 名称 宽度 描述
7:0 first_be[7:0] 8 针对有效载荷的第一个 Dword 的字节使能。first_be[3:0] 可反映此节拍中第 1 个 TLP 中的传输事务层报头中的“First Byte Enable”(首字节使能)位的设置,而 first_be[7:4] 则可反映此节拍中第 2 个 TLP 中的传输事务层报头中的 First Byte Enable 位的设置。对于存储器读取和 I/O 读取,这 4 个位用于表示首个 Dword 中将读取的有效字节。对于存储器写入和 I/O 写入,这些位表示有效载荷的首个 Dword 中的有效字节。对于原子操作和含有效载荷的报文,这些位全部设置为 1。

仅当在 CQ 接口上启用跨接时,first_be 的位 [7:4] 才有效。禁用跨接时,这些位将永久设置为 0。

该字段在包的第一拍中有效。当 m_axis_cq_tvalid 和 is_sop[0] 都断言为高电平有效时,first_be[3:0] 有效。当 m_axis_cq_tvalid 和 is_sop[1] 都断言为高电平有效时,first_be[7:4] 有效。

15:8 last_be[7:0] 8 针对有效载荷的最后一个 Dword 的字节使能。last_be[3:0] 可反映此节拍中第 1 个 TLP 中的传输事务层报头中的“Last Byte Enable”(末字节使能)位的设置,而 last_be[7:4] 则可反映此节拍中第 2 个 TLP 中的传输事务层报头中的 Last Byte Enable 位的设置。对于存储器读取,这 4 个位表示在数据块的最后一个 Dword 中要读取的有效字节。对于存储器写入,这些位表示有效载荷的最后一个 Dword 中的有效字节。对于仅含单次 DW 传输且传输长度为 0 的存储器读取和写入,这些位应为 0。对于原子操作和含有效载荷的报文,这些位全部设置为 1。

仅当在 CQ 接口上启用跨接时,last_be 的位 [7:4] 才有效。禁用跨接时,这些位将永久设置为 0。

该字段在包的第一拍中有效。当 m_axis_cq_tvalid 和 is_eop[0] 都断言为高电平有效时,last_be[3:0] 有效。当 m_axis_cq_tvalid 和 is_eop[1] 都断言为高电平有效时,last_be[7:4] 有效。

79:16 byte_en[63:0] 64 用户逻辑可以选择使用这些字节使能位来判定所传输的包的有效载荷中的有效字节。传输期间断言该总线的位 i 有效对于用户逻辑而言,表明 m_axis_cq_tdata 总线的字节 i 包含的有效载荷字节是有效的。针对描述符字节,不会断言该位有效。

虽然字节使能可由用户逻辑根据请求描述符中的信息(地址和长度)来生成,也可以根据 first_be 信号和 last_be 信号的设置来生成,但用户逻辑还可以选择直接使用这些信号,而不必从其它接口信号生成这些信号。

当有效载荷的大小超过 2 个 Dword(8 字节)时,该总线上对应有效载荷的 first 位始终保持连续。当有效载荷大小不超过 2 个 Dword 时,first 位可能不连续。

对于 PCI Express 规范所定义的存储器写入传输事务长度为 0 的特殊情况,传输关联的单 Dword 有效载荷时,byte_en 位全部为 0。

81:80 is_sop[1:0] 2 用作为此节拍中新 TLP 的起始信号。这些输出在 TLP 的第一拍中设置。禁用跨接时,仅限 is_sop[0] 有效,is_sop[1] 则永久设置为 0。启用跨接时,设置如下:
  • 00:没有新 TLP 在此节拍中起始。
  • 01:有单一新 TLP 在此节拍中起始。其起始位置由 is_sop0_ptr[1:0] 来表示。
  • 11:有 2 个新 TLP 在此节拍中起始。is_sop0_ptr[1:0] 提供第 1 个 TLP 的起始位置,is_sop1_ptr[1:0] 则提供第 2 个 TLP 的起始位置。
  • 10:保留。

当禁用跨接选项时,是否使用该信号由用户逻辑来判断,因为新 TLP 始终在 tlast 断言有效后的节拍中开始。

83:82 is_sop0_ptr[1:0] 2 用于指示在此节拍中开始的第 1 个 TLP 的第 1 个字节的位置:
  • 00:字节通道 0
  • 10:字节通道 32
  • 01 和 11:保留

仅当在 CQ 接口上启用跨接选项时,此字段才有效。否则,它永久设置为 0,因为 TLP 只能从字节通道 0 开始。

85:84 is_sop1_ptr[1:0] 2 用于指示在此节拍中开始的第 2 个 TLP 的第 1 个字节的位置:
  • 10:字节通道 32
  • 00、01 和 11:保留。

仅当在 CQ 接口上启用跨接选项时,才使用此输出。随后,核将在同一节拍中跨接 2 个 TLP。禁用跨接时,输出永久设置为 0。

87:86 is_eop[1:0] 2 表示 TLP 在此节拍中结束。这些输出在 TLP 的最后一个节拍中设置。禁用跨接时,仅限 is_eop[0] 有效,is_eop[1] 则永久设置为 0。启用跨接时,设置如下:
  • 00:没有任何 TLP 在此节拍中结束。
  • 01:有单一 TLP 在此节拍中结束。is_eop0_ptr[3:0] 提供此 TLP 的最后一个 Dword 的偏移。
  • 11:有 2 个 TLP 在此节拍中结束。is_eop0_ptr[3:0] 提供第 1 个 TLP 的最后一个 Dword 的偏移,is_eop1_ptr[3:0] 则提供第 2 个 TLP 的最后一个 Dword 的偏移。
  • 10:保留。

当不启用跨接选项时,是否使用该信号由用户逻辑来判断,因为在 TLP 的最后一个节拍中断言 tlast 有效。

91:88 is_eop0_ptr[3:0] 4 用于指示在此节拍中结束的第 1 个 TLP 的最后一个 Dword 的偏移。当 is_eop[0] 断言有效时,此输出有效。
95:92 is_eop1_ptr[3:0] 4 用于指示在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。当 is_eop[1] 断言有效时,此输出有效。

禁用跨接时,输出永久设置为 0。

96 discontinue 1 如果核在从其内部 FIFO 存储器读取 TLP 有效载荷时检测到不可纠正的错误,那么它会在 TLP 的最后一个节拍中断言此信号有效。当核发出此类错误信号时,用户应用必须丢弃整个 TLP。

当 TLP 不含有效载荷时,永远不会断言此信号有效。仅在有效载荷传输的最后一个节拍内(即 is_eop[0] 为高电平时)才会断言此信号有效。

启用跨接选项时,核如果在节拍中已断言 discontinue 信号,则不会启动第 2 个 TLP。

当核配置为端点时,核也会使用高级错误报告 (AER) 向所连接到的根联合体报告此错误。

98:97 tph_present[1:0] 2 这些位表示在通过接口交付的请求 TLP 中存在传输事务处理提示 (TPH)。
  • tph_present[0] 表示在此节拍的第 1 个 TLP 中存在提示。当 m_axis_cq_tvalid 和 is_sop[0] 均为高电平时,tph_present[0] 有效。
  • tph_present[1] 表示在此节拍的第 2 个 TLP 中存在提示。当 m_axis_cq_tvalid 和 is_sop[1] 均为高电平时,tph_present[1] 有效。
102:99 tph_type[3:0] 4 当请求 TLP 中存在 TPH 时,这 2 个位可提供与提示关联的 PH[1:0] 字段的值。
  • tph_type[1:0] 可提供与此节拍的第 1 个 TLP 关联的 TPH 类型。当 m_axis_cq_tvalid 和 is_sop[0] 均为高电平时,tph_type[1:0] 有效。
  • tph_type[3:2] 可提供与此节拍的第 2 个 TLP 关联的 TPH 类型。当 m_axis_cq_tvalid 和 is_sop[1] 均为高电平时, tph_type[3:2] 有效。
118:103 tph_st_tag[15:0] 8 当请求 TLP 中存在 TPH 时,此输出可提供与提示关联的 8 位导向标签。
  • tph_st_tag[7:0] 可提供与此节拍的第 1 个 TLP 关联的导向标签 (Steering Tag)。当 m_axis_cq_tvalid 和 is_sop[0] 均为高电平时,tph_st_tag[7:0] 有效。
  • tph_st_tag[15:8] 可提供与此节拍关联的第 2 个 TLP 的 Steering Tag,当 m_axis_cq_tvalid 和 is_sop[1] 均为高电平时,tph_st_atg[15:8] 有效。
182:119 parity 64 512 位发射数据的奇校验。位 i 可提供针对 m_axis_cq_tdata 的字节 i 计算所得奇校验。