PCIe 应答模块设计
应答模块的具体任务是接收来自 PCIe 链路上的设备的 TLP 请求, 并响应请求。由于基于 PCIe 协议的 NVMe 数据传输只使用 PCIe 协议的存储器读请求 TLP 和存储器写请求 TLP, 应答模块分别针对两种 TLP 设置处理引擎来提高并行性和处理速度。对于存储器写请求 TLP, 该类型的 TLP 使用 Posted 方式传输, 即不需要返回完成报文, 因此只需要接收并做处理, 这一过程由写处理模块来执行, 写处理模块的结构如图 1 所示。
当 axis_cq 总线中出现数据流传输时, 应答模块首先对传输的 TLP 报头的类型字
段进行解析, 如果为存储器写请求则由写处理模块进一步解析。 写处理模块提取出
TLP 报头的地址字段、 长度字段等, 然后将数据字段写入数据缓存中。 提取出的地址
字段用于进行地址映射, 在 NVMe 协议中, 设备端的请求写分为两种, 分别是写完
成队列和写数据, 因此地址映射的定向对应为队列管理模块的完成条目处理单元和数
据传输 AXI 总线的写通道。 完成条目的字段长度为 128 比特, 因此无需进行数据缓
存, 跟随地址映射发送到队列管理模块。 AXI Master 驱动负责将解析的字段与缓存的
数据组成 AXI 写传输事务发送到 AXI 写通道, 实现数据的写传输。