接口宽度配置为 256 位的情况下,当上一个完成包终止于数据总线上的 Dword 位置 3 或者在此位置前终止时,集成块可在同一拍内在 RC 接口上启动新的完成 (Completion) 包传输。跨接选项只能配合 Dword 对齐模式一起使用。
当启用跨接选项时,在 RC 接口上,完成 TLP 将作为无数据包边界(从 AXI4-Stream 角度而言)的连续数据流进行传输。因此,在判定接口上交付的完成 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_sof_0
:当有至少 1 个完成 TLP 从节拍中开始时,在该节拍中,集成块会将此输出驱动至高电平有效。此完成 TLP 的第 1 个字节的位置判定方式为:- 如果前一个完成 TLP 在此节拍前结束,那么此完成 TLP 的第 1 个字节位于字节通道 0 中。
- 如果前一个 TLP 在此节拍继续,那么此完成 TLP 的第 1 个字节位于字节通道 16 中。仅当前一个 TLP 在当前节拍中结束时(即同时设置
is_eof_0[0]
时),才有可能出现此情况。
-
is_sof_1
:当有至少 2 个完成 TLP 从节拍中开始时,在该节拍中,集成块会断言此输出有效。第 1 个 TLP 始终在字节位置 0 开始,第 2 个 TLP 则在字节位置 16 开始。仅当前一个 TLP 在同一拍内在字节位置 16 之前结束时,集成块才能在字节位置 16 启动第 2 个 TLP;即,仅当is_eof_0[0]
也在同一拍内设置时才会如此。 -
is_eof_0[3:0]
:这些输出用于指示完成 TLP 结束及其最后一个 Dword 在数据总线上的位置。断言位is_eof_0[0]
有效表明至少有 1 个完成 TLP 在此节拍中结束。设置is_eof_0
的位 0 时,位 [3:1] 可提供在此节拍中结束的 TLP 的最后一个 Dword 的偏移。最后一个字节的偏移可根据 TLP 的起始地址和长度来确定,或者根据字节使能信号byte_en[31:0]
来确定。当有 2 个完成 TLP 在一拍内结束时,is_eof_0[3:1]
即设置为第 1 个完成 TLP 的最后一个 Dword 的偏移(在此情况下,其范围为 0 - 3)。 -
is_eof_1[3:0]
:断言is_eof_1[0]
有效表明第 2 个 TLP 在同一拍中结束。设置 is_eof_1 的位 0 时,位 [3:1] 可提供在此节拍中结束的第 2 个 TLP 的最后一个 Dword 的偏移。由于第 2 个 TLP 只能在字节通道 16 上起始,因此只能在 27 - 31 范围内的字节通道上结束。因此,偏移is_eof_1[3:1]
只能采用以下 2 个值中的任一值:6 或 7。如果 is_sof_1[0] 为高电平有效,那么is_eof_0[0]
信号和 is_sof_0 信号在同一拍内始终为高电平有效。如果is_sof_1
为高电平有效,那么is_sof_0
同样为高电平有效。如果is_eof_1
为高电平有效,那么is_eof_0
同样为高电平有效。
下图显示了启用跨接选项的情况下,256 位 RC 接口上 4 个完成 TLP 的传输过程。第 1 个完成 TLP (COMPL 1) 从节拍 1 的 Dword 位置 0 开始,并在节拍 3 的 Dword 位置 0 结束。第 2 个 TLP (COMPL 2) 从同一拍内的 Dword 位置 4 开始。此第 2 个 TLP 仅含 1 个有效载荷(含 1 个 Dword),因此同样在同一拍内结束。第 3 和第 4 个完成 TLP 完全在节拍 4 中传输,因为完成包 3 仅含 1 个有效载荷(含 1 个 Dword),而完成包 4 则不含任何有效载荷。
图 1. 在启用跨接选项的请求器完成接口上执行完成 TLP 的传输