NVMe高速传输之摆脱XDMA设计16:队列管理模块设计(上)
注:这是采用PCIe设计NVMe,并非调用XDMA方式,后者在PCIe4.0时不大方便,故团队直接采用PCIe设计,结合UVM验证加快设计速度。
队列管理模块采用队列的存储与控制分离的设计结构,如图1所示为队列管理模块的结构框图。
图1 队列管理模块结构图
对于提交队列,设置一块完整的BRAM存储空间用于存储提交队列条目,一个提交队列管理单元用于实现提交队列存储地址空间的管理和门铃控制。在提交队列管理单元中,构建一个admin提交队列表单和N个I/O提交队列表单,I/O提交队列表单的个数N为参数配置,考虑到仲裁效率和资源占用,N的最大数量为16。每一个提交队列表单包含了队列的ID、队列深度、起始偏移地址、门铃头指针、门铃尾指针、门铃地址,表单中的初始信息在NVMe初始化的创建提交队列过程中获取,起始偏移地址在初始化时按照队列深度依次连续分配,而门铃头指针则由完成队列管理单元更新。
当指令控制模块需要向某一个提交队列写入提交条目时,提交队列管理单元首先读取所选则队列的表单信息,根据起始偏移地址、队列深度和门铃尾指针计算出提交队列存储写地址,再将提交条目写入该地址中,同时发起对应的门铃写请求。当接收到提交队列读请求时,根据请求的地址获取对应表单信息生成提交队列存储读地址。
对相关视频感兴趣的,B站搜用户名: 专注与守望