在 Dword 对齐模式下,传输从 3 个描述符 Dword 开始,紧随其后即为有效载荷 Dword。包括描述符和有效载荷在内的完整 TLP 作为单一 AXI4-Stream 数据包进行传输。当有效载荷长度超过 2 个 Dword 时,有效载荷内的数据始终为连续字节数据流。这样即可根据请求完成描述符的“Lower Address”(下位地址)字段和“Byte Count”(字节计数)字段来判定有效载荷的第一个 Dword 内的第 1 个有效字节的位置以及最后一个 Dword 的最后 1 个有效字节的位置。当有效载荷大小不超过 2 个 Dword 时,有效载荷中的有效字节不得连续。在此类情况下,用户逻辑必须存储与通过请求器请求接口向外发送的每个请求关联的“First Byte Enable”(首字节使能)字段和“Last Byte Enable”(末字节使能)字段,并将其用于判定完成有效载荷内的有效字节。用户逻辑可选择使用 m_axi_rc_tuser
总线中的字节使能输出 byte_en[63:0]
来判定有效载荷中的有效字节,在连续有效载荷和非连续有效载荷情况下都是如此。
核会在数据包的整个持续时间段内保持 m_axis_rc_tvalid
信号处于断言有效状态。用户逻辑可以随时通过下拉 m_axis_rc_tready 来延长任一节拍。AXI4-Stream 接口可发出 m_axis_rc_tkeep
信号(每个信号对应 1 个 Dword 位置)以指示数据包中的有效 Dword,包括描述符和描述符与有效载荷之间插入的任意空字节。即,从描述符的第一个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 tkeep
位均连续设置为 1。在数据包传输期间,当数据包无法填满接口的完整宽度时,m_axis_rc_tkeep
位仅限在数据包的最后一拍内才能设为 0。在数据包的最后一拍内,m_axis_rc_tlast
信号始终断言有效。
m_axi_rc_tuser
总线可提供多个可选信号,这些可选信号可用于简化与接口的用户侧关联的逻辑,或者用于支持其它功能。在每个数据包的第一拍内,is_sop[0]
信号都断言有效(前提是其描述符位于总线上);当不使用跨接选项时,m_axi_rc_tuser
中的所有其它 sop 和 eop 都与完成包传输无关。字节使能输出 byte_en[63:0]
(每个输出对应 1 个字节通道)可指示有效载荷中的有效字节。仅当对应通道内包含的有效载荷字节确实有效时,这些信号才会断言有效,而针对描述符或空字节,则不会断言该信号有效。断言有效的字节使能位从有效载荷开始始终连续,除非有效载荷大小不超过 2 个 Dword。当完成包的有效载荷不超过 2 个 Dword 时,byte_en
上值为 1 的位不连续。另一种特殊情况是对于长度为 0 的存储器读取,核会传输含单 Dword 的有效载荷,其中所有 byte_en
位均设为 0。因此,无论在任何情况下,用户逻辑均可直接使用 byte_en
信号来启用将关联字节写入存储器的操作。
下图显示了从含关联有效载荷的链路接收到完成 TLP(采用 Dword 对齐模式)后,通过请求器完成接口来进行传输的过程。为便于演示,写入用户存储器的数据块的大小假定为 n 个 Dword,其中,n = k*16 + 4 且 k > 1。本章节中的时序图假定在接口上,完成 (Completion) 包不存在跨接。在 RC 接口的跨接选项 中对跨接功能进行了描述。
下图显示了从含关联有效载荷的链路接收到完成 TLP(采用地址对齐模式)后,通过请求器完成接口来进行传输的过程。在时序图示例中,要传输的数据块的起始 Dword 地址(如描述符中的下位地址字段中所述)假定为 (m*16 +1),其中 m 为整数。数据块的大小假定为 n 个 Dword,其中 n = k * 16 +4 且 k > 0。针对 128 位地址对齐传输,跨接选项无效,因此时序图假定接口上完成包不存在跨接。
在 128 位对齐模式下,有效载荷的交付始终从描述符的最后一个字节后的节拍中开始。根据有效载荷的第 1 个有效字节的地址,有效载荷的第 1 个字节可显示在字节通道 16 - 32 范围内的任意通道上。从描述符的第一个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 m_axis_rc_tkeep
位均连续设置为 1。数据总线上 128 位字段范围内的第一个 Dword 的对齐方式是根据当用户应用向核发送请求时,请求器请求接口的 addr_offset[1:0]
输入的设置来确定的。用户应用可选择使用字节使能输出 byte_en[63:0]
来判定有效载荷中的有效字节。