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

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

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文
表 1. 请求器请求接口端口描述(512 位接口)
名称 I/O 宽度 描述
s_axis_rq_tdata 输入 512 从用户应用到 PCIe 核的请求器侧请求数据。
s_axis_rq_tuser 输入 137 这组信号中包含所传输的 TLP 的边带信息。当 s_axis_rq_tvalid 为高电平时,这些信号有效。下表描述了这组信号中的每个信号。
s_axis_rq_tlast 输入 1 用户应用必须在 TLP 的最后一个周期内断言此信号有效以指示包结束。在单一节拍 (beat) 内完成 TLP 传输时,用户逻辑必须在传输的首个周期内设置该位。

仅当禁用“straddle”(跨接)选项时,此输入才可供核使用。启用跨接选项时,该核会忽略此输入的设置,改为使用 s_axis_rq_tuser 总线中的 is_sop/is_eop 信号来判定 TLP 的起始和结束位置。

s_axis_rq_tkeep 输入 16 传输期间断言此总线的位 i 有效对于核而言,表示 s_axis_rq_tdata 总线的 Dword i 包含的数据有效。用户逻辑必须针对从描述符的首个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 Dword 将该位连续设置为 1。因此,在包的所有节拍中,s_axis_rq_tdata 必须全部设置为 1,但在包的总大小并非数据总线宽度的整数倍(在 2 个 Dword 内都是如此)的情况下,最后一个节拍除外。对于有效载荷传输的 Dword 对齐模式和 128b 地址对齐模式都是如此。

仅当在 RQ 接口上未启用跨接选项时,tkeep 位才有效。如启用跨接,那么核在整个接口中接收数据时,会忽略这些位的设置。在此情况下,用户逻辑必须在 s_axis_rq_tuser 总线中设置 is_sop/is_eop 信号,以作为通过该接口传输的 TLP 的起始和结束信号。

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

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

对于此输出端口,每个位均指示相同的值,因此用户逻辑可以使用任何位。

pcie_rq_tag_vld0 输出 1 当该核将标签分配给从请求器请求接口传入的非转发请求,并将此标签置于 pcie_rq_tag0 输出上时,就会断言此输出有效,并保持 1 个周期。此位编码方式如下:
  • 0:在此周期内不提供任何标签。
  • 1:在 pcie_rq_tag0 上存在 1 个标签。
pcie_rq_tag_vld1 输出 1 当该核将标签分配给从请求器请求接口传入的非转发请求,并将此标签置于 pcie_rq_tag1 输出上时,就会断言此输出有效,并保持 1 个周期。此位编码方式如下:
  • 0:在此周期内,在 pcie_rq_tag1 上不提供任何标签。
  • 1:在 pcie_rq_tag1 上存在 1 个标签。
pcie_rq_tag0 输出 8 在 IP customization GUI 中不勾选“Enable Client Tag”(启用客户标签)时,由核执行非转发请求的标签管理操作,在此情况下,此输出供该核用于传达为从客户接收到的每个非转发请求所分配的标签。当 pcie_rq_tag_vld0 为高电平时,pcie_rq_tag0 上的标签值在 1 个周期内有效。客户必须复制此标签并将其用于将完成数据与暂挂请求相关联。

在 s_axis_rq_tdata 总线上传输请求后,可能要经过数个周期的延迟之后,核才会断言 pcie_rq_tag_vld0 有效以便为请求提供已分配的标签。与此同时,客户可以继续发送新请求。在此总线上,请求的标签按 FIFO 顺序来传递。因此,用户应用必须将已分配的标签与请求相关联,且关联的顺序必须与通过接口传输请求的顺序相同。

在同一周期内 pcie_rq_tag0 和 pcie_rq_tag1 均有效时,pcie_rq_tag0 上的值对应于通过接口传输的 2 个请求中优先传输的请求。

pcie_rq_tag1 输出 8 此信号的描述与 pcie_rq_tag0 相同,唯一区别在于当 pcie_rq_tag_vld1 断言有效时,pcie_rq_tag1 上的标签值有效期限为 1 个周期。
pcie_rq_seq_num0 输出 6 用户可以选择使用此输出在核的发射流水线中保留请求的进展情况记录。要使用此功能,用户应用必须为 s_axis_rq_seq_num0[5:0] 总线上每个请求提供 1 个序列号。当流水线中的请求 TLP 进展至特定状态(即,来自客户的完成 TLP 无法继续传递该包)时,该核会在 pcie_rq_seq_num0[5:0] 输出上输出此序列号。此机制支持客户在发送到核的完成器完成接口的完成包与发送到请求器请求接口的转发请求之间保留顺序不变。

当 pcie_rq_seq_num_ vld0 为高电平时,pcie_rq_seq_num0[5:0] 输出上的数据有效。

pcie_rq_seq_num1 输出 6 此输出的功能与 pcie_rq_seq_num0 相同。当在 pcie_rq_seq_num0 上出现第 1 个序列号时,它用于在同一周期内提供第 2 个序列号。

当 pcie_rq_seq_num_ vld1 为高电平时,pcie_rq_seq_num1[5:0] 输出上的数据有效。

pcie_rq_seq_num_vld0 输出 1 当此输出将有效数据置于 pcie_rq_seq_num0[5:0] 上时,核会断言此输出有效,并保持 1 个周期。
pcie_rq_seq_num_vld1 输出 1 当此输出将有效数据置于 pcie_rq_seq_num1[5:0] 上时,核会断言此输出有效,并保持 1 个周期。
表 2. s_axis_rq_tuser 中的边带信号(512 位接口)
位索引 名称 宽度 描述
7:0 first_be[7:0] 8 首个 Dword 的字节使能。该字段必须基于请求 TLP 的传输事务层报头中的 First_BE 位的期望值来设置。first_be[3:0] 对应于此节拍中开始的首个 TLP 的字节使能,而 first_be[7:4] 则对应于此节拍中开始的第 2 个 TLP(如果存在)的字节使能。

对于存储器读取、I/O 读取和配置读取,这 4 个位表示首个 Dword 中将读取的有效字节。对于存储器写入、I/O 写入和配置写入,这些位表示有效载荷的首个 Dword 中的有效字节。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。

15:8 last_be[7:0] 8 最后一个 Dword 的字节使能。

该字段必须基于 TLP 的传输事务层报头中的 Last_BE 位的期望值来设置。last_be[3:0] 对应于此节拍中开始的首个 TLP 的字节使能,而 last_be[7:4] 则对应于此节拍中开始的第 2 个 TLP(如果存在)的字节使能。

对于仅含单次 DW 传输且传输长度为 0 的存储器读取和写入,这些位应为 0。

对于不少于 2 个 Dword 的存储器读取,这 4 个位表示在数据块的最后一个 Dword 中要读取的有效字节。对于不少于 2 个 Dword 的存储器写入,这些位表示有效载荷的最后一个 Dword 中的有效字节。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。

19:16 addr_offset[3:0] 4 当在此接口中使用 128b 地址对齐模式时,用户应用必须提供偏移,其中有效载荷数据在此边带总线的数据总线上开始(按 4 字节的倍数)。这样,核即可判定所传输的数据块的对齐方式。

addr_offset[1:0] 对应于在此节拍中开始的首个 TLP 的偏移,而 addr_offset[3:2] 则保留以供将来使用。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。

当请求器请求接口采用 Dword 对齐模式配置时,这些位必须始终设置为 0。

21:20 is_sop[1:0] 2 用作为此节拍中新 TLP 的起始信号。这些输出在 TLP 的第一拍中设置。禁用跨接时,仅限 is_sop[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 断言有效后的节拍中开始。

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

仅当在接口上启用跨接选项时,才使用此输出。

27:26 is_eop[1:0] 2 用作为 TLP 在此节拍中结束的信号。这些输出在 TLP 的最后一个节拍中设置。禁用跨接时,仅限 is_eop[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 有效。

31:28 is_eop0_ptr[3:0] 4 用于指示在此节拍中结束的第 1 个 TLP 的最后一个 Dword 的偏移。当 is_eop[0] 断言有效时,此输出有效。
35:32 is_eop1_ptr[3:0] 4 用于指示在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。当 is_eop[1] 断言有效时,此输出有效。
36 discontinue 1 如果传输期间用户应用在所传输的数据中检测到错误并且需要中止该数据包,即可断言此信号有效。核会将链路上对应 TLP 置空,以避免数据损坏。

在传输期间,用户逻辑可在除第一拍以外的任一 TLP 节拍内断言此信号有效。它可以选择在周期内发出错误信号处提前终止该数据包,或者也可以继续处理,直至将有效载荷的所有字节都交付到核为止。针对后者,该核会针对数据包的后续节拍将此错误作为粘滞错误来处理,即使用户逻辑在包结束前断言 discontinue 信号无效也是如此。

仅当 s_axis_rq_tvalid 为高电平时,才能断言 discontinue 信号有效。仅当 s_axis_rq_tready 为高电平时,核才会对此信号进行采样。因此,一旦断言有效后,在 s_axis_rq_tready 变为高电平之前不应将其断言无效。

在 RQ 接口上启用跨接选项时,如果 TLP 结束时已断言 discontinue 信号有效,那么在同一节拍内,用户不应启动新 TLP。

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

38:37 tph_present[1:0] 2 此位表示在通过接口交付的请求 TLP 中存在“Transaction Processing Hint (TPH)”(传输事务处理提示)。当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。
  • tph_present[0] 对应于此节拍中开始的第 1 个 TLP。
  • tph_present[1] 对应于此节拍中开始的第 2 个 TLP(如果存在)。

如果不使用 TPH 功能,那么这些输入必须永久绑定到 0。

42:39 tph_type[3:0] 4 当请求 TLP 中存在 TPH 时,这 2 个位可提供与提示关联的 PH[1:0] 字段的值。当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。
  • tph_type[1:0] 对应于此节拍中开始的第 1 个 TLP。
  • tph_type[3:2] 对应于此节拍中开始的第 2 个 TLP(如果存在)。

如果对应 tph_present 位设置为 0,那么这些位可设置为任意值。

44:43 tph_indirect_tag_en[1:0] 2 设置该位后,核会使用 tph_st_tag 上存在的标签的较低的位,作为其“Steering Tag Table”(导向标签表)中的索引,并将来自该位置的标签插入发射的请求 TLP 中。当该位设置为 0 时,核直接使用 tph_st_tag 上的值作为导向标签。
  • tph_ indirect_tag_en[0] 对应于此节拍中开始的第 1 个 TLP。
  • tph_ indirect_tag_en[1] 对应于此节拍中开始的第 2 个 TLP(如果存在)。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该位进行采样。

如果对应 tph_present 位设置为 0,那么这些输入可设置为任意值。

60:45 tph_st_tag[15:0] 16 当请求 TLP 中存在 TPH 时,此输出可提供与提示关联的 8 位导向标签。当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。
  • tph_st_tag[7:0] 对应于此节拍中开始的第 1 个 TLP。
  • tph_ st_tag[15:8] 对应于此节拍中开始的第 2 个 TLP(如果存在)。

如果对应 tph_present 位设置为 0,那么这些输入可设置为任意值。

66:61 seq_num0[5:0] 6 用户逻辑可以选择在此字段中提供 6 位序列号,以便在核的发射流水线中保留请求的进展情况记录。当流水线中的请求 TLP 进展至特定状态(即,来自用户逻辑的完成 TLP 无法继续传递该包)时,该核会在其 pcie_rq_seq_num0 或 pcie_rq_seq_num1 输出上输出此序列号。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。

当用户逻辑未监控核的 pcie_rq_seq_num* 输出时,此输入可硬连线到 0。

72:67 seq_num1[5:0] 6 如果有第 2 个 TLP 在同一个节拍中开始,那么用户逻辑可以选择在此输入上为此 TLP 提供 6 位序列号。此序列号使用方式与 seq_num0 相同。

当 s_axis_rq_tvalid 和 s_axis_rq_tready 均为高电平时,核会在包的第一拍中对该字段进行采样。

当用户逻辑未监控核的 pcie_rq_seq_num* 输出时,此输入可硬连线到 0。

136:73 parity 64 512 位数据的奇校验。在核上启用奇偶校验检查时,用户逻辑必须将该逻辑的位 i 设置为针对 s_axis_rq_tdata 的字节 i 计算所得的奇校验。

检测到奇偶校验错误时,核会将链路上的对应 TLP 置空,并将其报告为“Uncorrectable Internal Error”(不可纠正的内部错误)。

如果在核中禁用奇偶校验检查,那么这些位可设置为 0。