完成器完成接口 - 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_cc_tdata 输入 512 从用户应用到 PCIe 核的完成数据。
s_axis_cc_tuser 输入 81 这组信号中包含所传输的 TLP 的边带信息。当 s_axis_cc_tvalid 为高电平时,这些信号有效。

下表描述了这组信号中的每个信号。

s_axis_cc_tlast 输入 1 用户应用必须在包的最后一个周期内断言此信号有效以指示包结束。在单一节拍 (beat) 内完成 TLP 传输时,用户应用必须在传输的首个周期内设置该位。

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

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

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

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

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

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

表 2. s_axis_cc_tuser 中的边带信号
位索引 名称 宽度 描述
1:0 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:保留。

仅当启用“straddle”(跨接)选项时,此字段才可供核使用。禁用跨接时,核使用 tlast 来判定传入 TLP 的第一拍。

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

仅当启用“straddle”(跨接)选项时,此字段才可供核使用。禁用跨接时,用户逻辑必须始终在字节通道 0 中启动 TLP。

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

仅当在 CC 接口上启用跨接选项时,才使用此输出。随后,用户将在同一节拍中跨接 2 个 TLP。

7:6 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:保留。

仅当启用“straddle”(跨接)选项时,此字段才可供核使用。禁用跨接时,核使用 tlast 和 tkeep 来判定最后一拍和 EOP 的位置。

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

仅当启用“straddle”(跨接)选项时,此字段才可供核使用。

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

仅当启用“straddle”(跨接)选项时,此字段才可供核使用。

16 discontinue 1 如果传输期间用户应用在所传输的数据中检测到错误(例如,读取来自存储器的有效载荷时检测到不可纠正 ECC 错误)并且需要中止该数据包,即可断言此信号有效。核会将链路上对应 TLP 置空,以避免数据损坏。

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

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

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

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

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

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

如果在核中未启用奇偶校验检查,那么奇偶校验位可永久绑定到 0。