1. 指令信息收发模块
该模块主要实现发送提交指令以及接收完成信息的功能。模块端口基于AXI总线,实现SSD控制器作为主设备,而本模块作为从设备的连接关系。同时,为了发挥AXI总线读写通道分离的特性,模块将设计两个控制逻辑来分别控制指令发送操作和信息接收操作,实现两种操作的并行执行,从而提高效率。指令信息收发模块的结构如图1所示。
本NVMe控制器设计中,Endpoint端的SSD控制器与Host端NVMe控制器交互通过指令信息收发模块的AXI Full总线接口Slave端口实现,实现提交指令的发送以及完成信息的接收。提交队列中的待执行提交指令经模块AXI总线接口的读通道读取,而SSD端返回的完成信息则通过AXI总线写通道写入NVMe控制器中。其中,读地址通道的ARADDR指向提交队列中等待读取的指令存储地址,而写地址通道的awaddr信号则指向当前所传入的完成信息存放位置。根据NVMe协议规范可知,一条完整的提交指令格式为64字节,即512位,但由于所设计的模块AXI总线接口读数据通道的数据位宽为128位,所以提交指令的发送将通过AXI总线突发方式实现,将完整的提交指令拆分为4个部分,依次放至AXI读数据通道中完成突发操作。而NVMe协议所规范的完成信息格式则为128位,因此,相比于需要使用突发模式才能实现发送的提交指令,完成信息的接收过程无需进行突发操作便可完成。同时,考虑到AXI总线读写通道的分离特性,实际运行过程中,提交指令的发送和完成信息的接收两个操作可同时进行,所以模块将通过发送和接收两个状态机分别实现指令收发控制流程。
NVMe host IP 效果见 视频demo (B站 搜 NVMe IP):
https://search.bilibili.com/all?keyword=nvme%20ip&from_source=nav_search_new