当上一个请求已终止于数据总线上的 Dword 位置 7 或者在此位置前终止时,核具备在同一拍内在请求器完成接口上传输新请求的功能。在 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[0]
:当有至少 1 个请求 TLP 从节拍中开始时,在该节拍中,核就会将此输出设置为高电平有效。此 TLP 的描述符的第 1 个字节的位置判定方式为:- 如果前一个 TLP 在此节拍前结束,那么描述符的第 1 个字节位于字节通道 0 中。
- 如果前一个 TLP 在此节拍继续,那么此描述符的第 1 个字节位于字节通道 32 中。仅当前一个 TLP 在当前节拍中结束时(即同时设置
is_eop[0]
时),才有可能出现此情况。
-
is_sop[1]
:当有至少 2 个请求 TLP 从同一拍中开始时,在该节拍中,核会断言此输出有效。第 1 个 TLP 始终在字节位置 0 开始,第 2 个 TLP 则在字节位置 32 开始。仅当前一个 TLP 在同一拍内在字节位置 32 之前结束时,核才能在字节位置 32 启动第 2 个 TLP;即,仅当is_eop[0]
也在同一拍内设置时才会如此。 -
is_eop[0]
:此输出用于指示请求 TLP 结束。断言此输入有效即表示有至少 1 个 TLP 在此节拍中结束。 -
is_eop0_ptr[3:0]
:断言is_eop[0]
有效时,is_eop0_ptr[3:0]
提供在此节拍中结束的对应 TLP 的最后一个 Dword 的偏移。对于含有效载荷的 TLP,最后一个字节的偏移同样可根据 TLP 的起始地址和长度来确定,或者根据字节使能信号byte_en[63:0]
来确定。 -
is_eop[1]
:此输出用于指示有至少 2 个 TLP 在同一拍内结束。断言此输出有效即表示有至少 1 个 TLP 在此节拍中结束。仅当已设置is_eop[0]
时,才能同时设置is_eop[1]
。 -
is_eop1_ptr[3:0]
:断言is_eop[1]
有效时,is_eop1_ptr[3:0]
提供在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。对于含有效载荷的 TLP,最后一个字节的偏移同样可根据 TLP 的起始地址和长度来确定,或者根据字节使能信号byte_en[63:0]
来确定。由于第 2 个 TLP 只能在字节通道 32 上起始,因此只能在 47-63 范围内的字节通道上结束。因此,偏移is_eop1_ptr[3:0]
只能取 11-15 范围内的值。
图 1. 在启用跨接选项的完成器请求接口上执行请求 TLP 的传输
上图显示了启用跨接选项的情况下,在完成器请求接口上传输 4 个请求 TLP 的过程。对于所有 TLP,有效载荷的第 1个 Dword 始终位于描述符之后,且没有任何间隙。第 1 个请求 TLP (REQ 1) 从节拍 1 的 Dword 位置 0 开始,并在节拍 3 的 Dword 位置 5 结束。第 2 个 TLP (REQ 2) 从同一拍内的 Dword 位置 8 开始。此第 2 个 TLP 仅含 1 个有效载荷(其中含 4 个 Dword),因此同样在同一拍内结束。第 3 和第 4 个请求 TLP 完全在节拍 4 中传输,因为 REQ 3 仅含 1 个有效载荷(含 1 个 Dword),而 REQ 4 则不含任何有效载荷。