在 Dword 对齐模式和 128 位地址对齐模式下,传输均从 16 个描述符字节开始,后接有效载荷字节。用户应用必须在数据包的整个持续时间段保持 s_axis_rq_tvalid
信号处于断言有效状态。核会将数据包传输期间断言无效的 s_axis_rq_tvalid
作为错误来处理,并将链路上发射的对应请求 TLP 置空,以避免数据损坏。
用户应用还必须在数据包的最后一拍中断言 s_axis_rq_tlast
信号有效。如果核未准备好接受数据,可下拉 s_axis_rq_tready
。传输期间,当核已断言 s_axis_rq_tready
无效时,用户应用不得更改 s_axis_rq_tdata
和 s_axis_rq_tlast
上的值。必须设置 AXI4-Stream 接口信号 m_axis_rq_tkeep
(每个信号对应 1 个 Dword 位置)以指示数据包中的有效 Dword,包括描述符和描述符与有效载荷之间插入的任意空字节。即,从描述符的第一个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 m_axis_rq_tkeep
位都必须连续设置为 1。在数据包传输期间,当数据包无法填满接口的完整宽度时,m_axis_rq_tkeep
位仅限在数据包的最后一拍内才能设为 0。
请求器请求接口在 s_axis_rq_tuser
总线中还包含“First Byte Enable”(首字节使能)位和“Last Byte Enable”(末字节使能)位。在数据包的第一拍内必须设置这些位,并提供有关有效载荷的第一个和最后一个 Dword 中的有效字节的信息。
用户应用必须根据核中配置的最大有效载荷大小来限制单一请求内传输的有效载荷大小,并且必须确保有效载荷不超过 4 KB 的界限。当存储器写入不超过 2 个 Dword 时,first_be[7:0]
和 last_be[7:0]
上值为 1 的位不连续。另一种特殊情况是对于长度为 0 的存储器写入请求,用户应用必须提供虚拟 one_dword
有效载荷,其中 first_be[7:0]
和 last_be[7:0]
都全部设置为 0。在所有其它情况下,first_be[7:0]
和 last_be[7:0]
中值为 1 的位必须连续。在已启用跨接的情况下,addr_offset[3:2]
、first_be[7:4]
和 last_be[7:4]
用于指示第 2 个 TLP 的信息,而 addr_offset[1:0]
、 first_be[3:0]
和 last_be[3:0]
则用于指示该数据节拍上第 1 个 TLP 的信息。
下图显示了通过请求器请求接口来传输源于用户逻辑的存储器写入请求(采用 Dword 对齐模式)的过程。为便于演示,写入用户存储器的数据块的大小假定为 n 个 Dword,其中,n = k*16 - 1 且 k > 1 。
下图显示了通过请求器请求接口来传输源于用户应用的存储器写入请求(采用 128 位对齐模式)的过程。为便于演示,数据块的起始 Dword 偏移假定为 (m*16 +3),其中 m > 0 且为整数。其大小假定为 n 个 Dword,其中 n = k*16 -1 且 k > 1。在 128 位地址对齐模式下,有效载荷的交付必须始终从 512 位字的第 2 个 128 位四分之一拍开始,紧随第 1 个四分之一拍的描述符之后。用户应用还必须在 s_axis_rq_tuser
总线的 addr_offset[3:0]
字段中告知有效载荷的第一个 Dword 的偏移。用户应用还必须在 first_be[7:0]
中设置相应的位以指示第一个 Dword 中的有效字节,并在 last_be[7:0]
中设置相应的位以指示有效载荷的最后一个 Dword 中的有效字节。