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_ptr
和 is_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_ptr
、is_sop1_ptr
和 is_sop2_ptr
提供。完成 4、5、6 和 7 的结束偏移位置则分别由 is_eop0_ptr
、is_eop1_ptr
、is_eop2_ptr
和 is_eop3_ptr
来指示。
最后,节拍 5 包含 4 个完成 TLP(COMPL 8 - 11)。其起始 Dword 偏移位置分别由 is_sop0_ptr
、is_sop1_ptr
、is_sop2_ptr
和 is_sop3_ptr
来指示。结束偏移位置则分别由 is_eop0_ptr
、is_eop1_ptr
、is_eop2_ptr
和 is_eop3_ptr
来指示。因此,全部 4 个 SOP 和 EOP 指针均可在此节拍内提供有效信息。