完成器存储器写入操作 - 1.3 简体中文

UltraScale+ 器件 Integrated Block for PCI Express 产品指南 (PG213)

Document ID
PG213
Release Date
2022-11-16
Version
1.3 简体中文

下图显示了从链路接收到存储器写入 TLP(采用 Dword 对齐模式)后,通过完成器请求接口来进行传输的过程。为便于演示,写入用户存储器的数据块的起始 Dword 地址假定为 (m*16 +3),其中 m > 0 且为整数。其大小假定为 n 个 Dword,其中 n = k*16 - 1k > 1

传输从 16 个描述符字节开始,紧随其后即为有效载荷字节。在数据包持续时间段内,m_axis_cq_tvalid 信号保持断言有效。用户逻辑可以随时通过下拉 m_axis_cq_tready 来延长任一节拍。AXI4-Stream 接口可发出 m_axis_cq_tkeep 信号(每个信号对应 1 个 Dword 位置)以指示数据包中的有效 Dword,包括描述符和描述符与有效载荷之间插入的任意空字节。即,从描述符的第一个 Dword 开始到有效载荷的最后一个 Dword 为止的所有 m_axis_cq_tkeep 位均连续设置为 1。在数据包传输期间,当数据包无法填满接口的完整宽度时,tkeep 位仅限在数据包的最后一拍内才能设为 0。在数据包的最后一拍内,m_axis_cq_tlast 信号始终断言有效。

完成器请求接口在 m_axis_cq_tuser 总线中还包含“First Byte Enable”(首字节使能)位和“Last Byte Enable”(末字节使能)位。这些位在数据包的第一拍内激活,并提供有关有效载荷的第一个和最后一个 Dword 中的有效字节的信息。

m_axi_cq_tuser 总线还可提供多个可选信号,这些可选信号可用于简化与接口的用户侧关联的逻辑,或者用于支持其它功能。在每个数据包的第一拍内,is_sop 信号都断言有效(前提是其描述符位于总线上);当不使用跨接选项时,m_axi_cq_tuser 中的所有其它 sop 和 eop 都与请求信号传输无关。字节使能输出 byte_en[63:0](每个输出对应 1 个字节通道)可指示有效载荷中的有效字节。仅当对应通道内包含的有效载荷字节确实有效时,这些信号才会断言有效,而针对描述符或空字节,则不会断言该信号有效。断言有效的字节使能位从有效载荷开始始终连续,除非有效载荷大小不超过 2 个 Dword。当写入不超过 2 个 Dword 时,byte_en 上值为 1 的位不连续。

图 1. 完成器请求接口上的存储器写入传输事务(Dword 对齐模式)

另一种特殊情况是对于长度为 0 的存储器写入,核会传输含单 Dword 的有效载荷,其中所有 byte_en 位均设为 0。因此,无论在任何情况下,用户逻辑均可直接使用 byte_en 信号来启用将关联字节写入存储器的操作。

在 Dword 对齐模式下,根据有效载荷的第 1 个有效字节的地址,在描述符的结束位置与有效载荷的第 1 个字节之间可能存在 0、1、2 或 3 个字节位置的间隔。有效载荷中第 1 个有效字节的实际位置可通过 m_axis_cq_tuser 总线中的 first_be[3:0]byte_en[63:0] 来判定。

当接收到的 TLP 中存在“Transaction Processing Hint”(传输事务处理提示)时,核所传输的参数均为与 m_axis_cq_tuser 总线内的信号上的提示相关联的参数,提示分为:“TPH Steering Tag”(TPH 导向标签)和“Steering Tag Type”(导向标签类型)。

下图中的时序图显示了从链路接收到存储器写入 TLP(采用 128 位地址对齐模式)后,通过完成器请求接口来进行传输的过程。为便于演示,写入用户存储器的数据块的起始 Dword 地址假定为 (m*16 +3),其中 m > 0 且为整数。其大小假定为 n 个 Dword,其中 n = k*16 - 1 且 k > 1

在地址对齐模式下,有效载荷的交付始终从第一拍的第 2 个四分之一拍(位 255:128)开始,紧随第 1 个四分之一拍的描述符之后。根据有效载荷的第一个有效 Dword 的地址,有效载荷的第一个 Dword 可显示在第 2 个四分之一拍的 4 个 Dword 位置中的任一位置。此 keep 输出的 m_axis_cq_tkeep 在描述符与有效载荷之间的间隙内保持处于高电平状态。有效载荷中的第 1 个有效字节的实际位置可根据描述符中地址的最低有效位或者根据 m_axis_cq_tuser 总线中的字节使能位 byte_en[63:0] 来判定。

如果写入不超过 2 个 Dword,那么从有效载荷开始,byte_en 上值为 1 的位不连续。对于长度为 0 的存储器写入,核会传输含单 Dword 的有效载荷,其中有效载荷字节的所有 byte_en 位均设为 0。

图 2. 完成器请求接口上的存储器写入传输事务(128 位地址对齐模式)