当上一个请求已终止于数据总线上的 Dword 位置 7 或者在此位置前终止时, PCIe® 核具备在同一拍内在请求器请求接口上启动传输新请求包的能力。在 Vivado® IDE 中进行核自定义期间可启用此跨接选项。跨接选项只能配合 Dword 对齐模式一起使用。
当启用跨接选项时,在 AXI4-Stream 接口上,请求 TLP 将作为无数据包边界的连续数据流进行传输。因此,在判定接口上交付的 TLP 的边界过程中不使用 m_axis_rq_tkeep
信号和 m_axis_rq_tlast
信号。并改为使用 m_axis_rq_tuser
总线中所提供的以下信号来执行 TLP 的界定。
-
is_sop[0]
:当有至少 1 个请求 TLP 从节拍中开始时,在该节拍中此输入必须设为高电平。此 TLP 的描述符的第 1 个字节的位置判定方式为:- 如果前一个 TLP 在此节拍前结束,那么描述符的第 1 个字节位于字节通道 0 中。
- 如果前一个 TLP 在此节拍继续,那么此描述符的第 1 个字节位于字节通道 32 中。仅当前一个 TLP 在当前节拍中结束时(即同时设置
is_eop[0]
时),才有可能出现此情况。
-
is_sop0_ptr[1:0]
:设置is_sop[0]
时,该字段必须指示当前节拍中起始的第 1 个请求 TLP 的偏移。有效设置包括2'b00
(TLP 起始位置为 Dword 0)和2'b10
(TLP 起始位置为 Dword 8)。 -
is_sop[1]
:当有 2 个请求 TLP 在同一拍内起始时,在该节拍中此输入必须设置为高电平。第 1 个 TLP 必须始终在字节位置 0 开始,第 2 个 TLP 则在字节位置 32 开始。仅当前一个 TLP 在同一拍内在字节位置 32 之前结束时,用户应用才能在字节位置 32 启动第 2 个 TLP;即,仅当is_eop[0]
也在同一拍内设置时才会如此。 -
is_sop1_ptr[1:0]
:设置is_sop[1]
时,该字段必须提供当前节拍中起始的第 2 个请求 TLP 的偏移。其唯一有效设置为2'b10
(TLP 起始位置为 Dword 8)。 -
is_eop[0]
:此输入用于指示请求 TLP 结束。断言此输入有效即表示有至少 1 个 TLP 在此节拍中结束。 -
is_eop0_ptr[3:0]
:断言is_eop[0]
有效时,is_eop0_ptr[3:0]
必须提供在此节拍中结束的对应 TLP 的最后一个 Dword 的偏移。 -
is_eop[1]
:当有 2 个 TLP 在当前节拍中结束时,此输入设置为高电平。仅当is_eop[0]
信号和is_sop[0]
信号在同一拍内同样为高电平时,才能设置is_eop[1]
。 -
is_eop1_ptr[3:0]
:断言is_eop[1]
有效时,is_eop1_ptr[3:0]
必须提供在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。由于第 2 个 TLP 只能在字节通道 32 上起始,因此只能在 43-63 范围内的字节通道上结束。因此,偏移is_eop1_ptr[3:0]
只能取 10-15 范围内的值。
当第 2 个 TLP 在同一拍中起始时,第 2 个 TLP 的“First Byte Enable”(首字节使能)位和“Last Byte Enable”(末字节使能)位分别由 tuser
总线中的位字段 first_be[7:4]
和 last_be[7:4]
来指定。
下图显示了启用跨接选项的情况下,在请求器请求接口上传输 4 个请求 TLP 的过程。对于所有 TLP,有效载荷的第 1个 Dword 始终位于描述符之后,且没有任何间隙。第 1 个请求 TLP (REQ 1) 从节拍 1 的 Dword 位置 0 开始,并在节拍 3 的 Dword 位置 3 结束。第 2 个 TLP (REQ 2) 从同一拍内的 Dword 位置 8 开始。此第 2 个 TLP 仅含 1 个有效载荷(其中含 4 个 Dword),因此同样在同一拍内结束。第 3 和第 4 个完成 TLP 完全在节拍 4 中传输,因为 REQ 3 仅含 1 个有效载荷(含 1 个 Dword),而 REQ 4 则不含任何有效载荷。