dede英文网站,网站目录结构图,海外网站如何做用户实名认证,网站集约化建设解读背景
为满足实验室横向项目需求#xff0c;在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为#xff1a;通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。
实现过程
调研
花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…背景
为满足实验室横向项目需求在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。
实现过程
调研
花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、博客确认了实现思路和路线主要明确以下几点 1、架构角色转换区别于传统FPGA作为Endpoint设备如数据采集卡本项目需将FPGA配置为Root ComplexRC主动管理作为EndpointEP的NVMe SSD设备 2、协议栈解析建立NVMe协议与PCIe协议的层级关系认知确认需基于Xilinx AXI PCIe IP核构建Root Port架构 3、PCIe配置空间重点研究BAR寄存器组的地址映射机制在实现过程中FPGA需要对SSD的PCIE 配置空间进行配置。 4、学习NVMe协议队列机制实现参考《蛋蛋读NVMe》技术博客构建基于门铃寄存器的SQ/CQ队列管理系统。NVMe寄存器组深入学习CAP控制器能力、CC控制器配置、CSTS控制器状态等核心寄存器
硬件选择
自己想了两个方案第一种是通过PCIE金手指转M.2接口。类似于下图这种该图来源于一篇硕士论文 我当时买的那个转接板不知道哪里有问题PCIE链路建立不起来。
第二种方案是使用FMC转M.2接口此方案可以正常建立起PCIE链路连接。
FPGA逻辑设计
由于课题组并没有相关的设计参考所以不得不从零开始在AXI PCIE IP官方给的example design的基础上进行“魔改”。
1、学习AXI PCIE IP使用知道IP核的接口是干嘛用的主要是以下接口S_AXI、S_AXI_CTRL、M_AXI。 2、学习IP核的配置AXI BAR选项卡比较重要涉及到AXI地址到PCIE地址的转换。 3、配置SSD PCIE 配置空间的相关寄存器比如BAR0、BAR1寄存器、Command寄存器等。设置IP核使能。 4、读取SSD中和NVME协议寄存器寄存器的偏移量是相对于PCIE BAR寄存器的地址偏移的。比较关键的是CAP寄存器。 5、进行NVME SSD的初始化设置管理和完成队列的深度、基地址等并设置CC.EN1等待CSTS.RDY为1。 6、发送Admin命令进行SSD的识别、配置I/O队列数以及对应的I/O完成队列和提交队列的ID、基地址、深度等。命令的实现方式和流程按照协议要求来就行了基于状态机进行设计。 7、发送I/O命令进行数据读写要确认好SSD一次传输的最大数据量是多少以及一个扇区的大小。
总结
碎碎念说真的刚开始做的时候我是没有想到自己能做出来的而且这个控制器方案也没有太多可借鉴的开源的设计该方案都是被拿来售卖的。没想到自己能用两个月的时间给初步实现出来。不过目前这个方案还不够完善后续还需要进行优化调整使其更加易用。比如通过几个简单的控制信号就能完成大批量的数据读取这方面我打算参考商业 IP 的接口设计思路。
后面有时间可以用一个专栏讲解一下实现思路但是应该不会免费开源因为该项目完全可以作为一个高端项目供大家深入学习研究我并不希望它因为过度传播而失去其独特性 变得过于泛滥烂大街。