RC 接口的跨接选项 - 1.3 简体中文

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

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

PCIe® 核的 RC 接口具备在请求器完成接口上在同一拍内启动 4 个完成 (Completion) 包的能力。在 Vivado® IDE 中进行核自定义期间可启用此跨接选项。跨接选项只能配合 Dword 对齐模式一起使用。

当启用跨接选项时,在 AXI4-Stream 接口上,完成 TLP 将作为无数据包边界的连续数据流进行传输。因此,在判定接口上交付的完成 TLP 的边界过程中不使用 m_axis_rc_tkeep 信号和 m_axis_rc_tlast 信号(使用跨接选项时,核会永久性将 m_axis_rc_tkeep 的位全部设置为 1,将 m_axis_rc_tlast 全部设置为 0)。并改为使用 m_axis_rc_tuser 总线中所提供的以下信号来执行 TLP 的界定。

  • is_sop[3:0]:当有至少 1 个完成 TLP 从节拍中开始时,在该节拍中,核就会将此输出设置为非 0 值。禁用跨接时,仅限 is_sop[0] 有效,is_sop[3:1] 则永久设置为 0。启用跨接时,设置如下:
    • 0000:没有新 TLP 在此节拍中起始
    • 0001:有单一新 TLP 在此节拍中起始。其起始位置由 is_sop0_ptr[1:0] 来表示。
    • 0011:有 2 个新 TLP 在此节拍中起始。is_sop0_ptr[1:0] 提供第 1 个 TLP 的起始位置,is_sop1_ptr[1:0] 则提供第 2 个 TLP 的起始位置。
    • 0111:有 3 个新 TLP 在此节拍中起始。is_sop0_ptr[1:0] 提供第 1 个 TLP 的起始位置,is_sop1_ptr[1:0] 提供第 2 个 TLP 的起始位置,is_sop2_ptr[1:0] 则提供第 3 个 TLP 的起始位置。
    • 1111:有 4 个新 TLP 在此节拍中起始。is_sop0_ptr[1:0] 提供第 1 个 TLP 的起始位置,is_sop1_ptr[1:0] 提供第 2 个 TLP 的起始位置,is_sop2_ptr[1:0] 提供第 3 个 TLP 的起始位置,is_sop3_ptr[1:0] 则提供第 4 个 TLP 的起始位置。
    • 所有其它设置均保留。
  • is_sop0_ptr[1:0]:设置 is_sop[0] 时,该字段表示当前节拍中起始的第 1 个完成 TLP 的偏移。有效设置包括 2'b00(TLP 起始位置为 Dword 0)、2'b01(TLP 起始位置为 Dword 4)、2'b10(TLP 起始位置为 Dword 8)和 2'b11(TLP 起始位置为 Dword 12)。
  • is_sop1_ptr[1:0]:设置 is_sop[1] 时,该字段表示当前节拍中起始的第 2 个完成 TLP 的偏移。有效设置包括 2'b01(TLP 起始位置为 Dword 4)、2'b10(TLP 起始位置为 Dword 8)和 2'b11(TLP 起始位置为 Dword 12)。
  • is_sop2_ptr[1:0]:设置 is_sop[2] 时,该字段表示当前节拍中起始的第 3 个完成 TLP 的偏移。有效设置包括 2'b10(TLP 起始位置为 Dword 8)和 2'b11(TLP 起始位置为 Dword 12)。
  • is_sop3_ptr[1:0]:设置 is_sop[3] 时,该字段表示当前节拍中起始的第 4 个完成 TLP 的偏移。其唯一有效设置为 2'b11(TLP 起始位置为 Dword 12)。
  • is_eop[3:0]:这些输出表示有 1 个或多个 TLP 在此节拍中结束。这些输出在 TLP 的最后一个节拍中设置。禁用跨接时,仅限 is_eop[0] 有效,is_eop[3:1] 则永久设置为 0。启用跨接时,设置如下:
    • 0000:没有任何 TLP 在此节拍中结束。
    • 0001:只有 1 个 TLP 在此节拍中结束。is_eop0_ptr[3:0] 的设置可提供此 TLP 的最后一个 Dword 的偏移。
    • 0011:有 2 个 TLP 在此节拍中结束。is_eop0_ptr[3:0] 提供第 1 个 TLP 的最后一个 Dword 的偏移,is_eop1_ptr[3:0] 则提供第 2 个 TLP 的最后一个 Dword 的偏移。
    • 0111:有 3 个 TLP 在此节拍中结束。is_eop0_ptr[3:0] 提供第 1 个 TLP 的最后一个 Dword 的偏移,is_eop1_ptr[3:0] 提供第 2 个 TLP 的最后一个 Dword 的偏移,is_eop2_ptr[3:0] 则提供第 3 个 TLP 的最后一个 Dword 的偏移。
    • 1111:有 4 个 TLP 在此节拍中结束。is_eop0_ptr[3:0] 提供第 1 个 TLP 的最后一个 Dword 的偏移,is_eop1_ptr[3:0] 提供第 2 个 TLP 的最后一个 Dword 的偏移,is_eop2_ptr[3:0] 提供第 3 个 TLP 的最后一个 Dword 的偏移,is_eop3_ptr[3:0] 则提供第 4 个 TLP 的最后一个 Dword 的偏移。
    • 所有其它设置均保留。
  • is_eop0_ptr[3:0]:设置 is_eop[0] 时,该字段提供在此节拍中结束的第 1 个 TLP 的最后一个 Dword 的偏移。有效值为 0 到 15(含)范围内的任意值。最后一个字节的偏移可根据 TLP 的起始地址和长度来确定,或者根据字节使能信号 byte_en[63:0] 来确定。
  • is_eop1_ptr[3:0]:设置 is_eop[1] 时,该字段提供在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。有效值为 6 到 15(含)范围内的任意值。
  • is_eop2_ptr[3:0]:设置is_eop[2] 时,该字段提供在此节拍中结束的第 3 个 TLP 的最后一个 Dword 的偏移。有效值为 10 到 15(含)范围内的任意值。
  • is_eop3_ptr[3:0]:设置is_eop[3] 时,该字段提供在此节拍中结束的第 4 个 TLP 的最后一个 Dword 的偏移。有效值为 14 或 15。

下图显示了启用跨接选项的情况下,在请求器完成接口上传输 11 个完成 TLP 的过程。第 1 个完成 TLP (COMPL 1) 从节拍 1 的 Dword 位置 0 开始,并在节拍 2 的 Dword 位置 2 结束。第 2 个 TLP (COMPL 2) 从同一拍内的 Dword 位置 8 开始,并在 Dword 位置 14 结束。因此,在节拍 1 中,有 1 个 TLP 起始,其起始位置由 is_sop0_ptr 来指示,并有 2 个 TLP 结束,其结束 Dword 位置分别由 is_eop0_ptris_eop1_ptr 来指示。

节拍 3 包含 COMPL 3,起始位置为 Dword 偏移 8 且结束位置为 Dword 偏移 10。在同一拍中还有第 2 个 TLP (CMPL 4),其起始位置为 Dword 偏移 12 并持续直至下一拍。在此节拍中,is_sop0_ptr 指向 COMPL 3 的起始 Dword 偏移位置,is_sop1_ptr 则指向 COMPL 4 的起始 Dword 偏移位置。is_eop0_ptr 指向 COMPL 4 的最后一个 Dword 偏移的位置。

节拍 4 包含 COMPL 4,其结束位置为 Dword 偏移 0,其中还包含 3 个新的完成 TLP(分别为 COMPL 5、6 和 7)。新的完成 5、6 和 7 的起始 Dword 偏移位置分别由 is_sop0_ptris_sop1_ptris_sop2_ptr 提供。完成 4、5、6 和 7 的结束偏移位置则分别由 is_eop0_ptris_eop1_ptris_eop2_ptris_eop3_ptr 来指示。

最后,节拍 5 包含 4 个完成 TLP(COMPL 8 - 11)。其起始 Dword 偏移位置分别由 is_sop0_ptris_sop1_ptris_sop2_ptris_sop3_ptr 来指示。结束偏移位置则分别由 is_eop0_ptris_eop1_ptris_eop2_ptris_eop3_ptr 来指示。因此,全部 4 个 SOP 和 EOP 指针均可在此节拍内提供有效信息。

图 1. 在启用跨接选项的请求器完成接口上执行完成 TLP 的传输