记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!

embedded/2025/3/10 2:58:59/

背景

为满足实验室横向项目需求,在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为:通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。

实现过程

调研

花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、博客,确认了实现思路和路线,主要明确以下几点:
1、架构角色转换:区别于传统FPGA作为Endpoint设备(如数据采集卡),本项目需将FPGA配置为Root Complex(RC),主动管理作为Endpoint(EP)的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.EN=1,等待CSTS.RDY为1。
6、发送Admin命令,进行SSD的识别、配置I/O队列数,以及对应的I/O完成队列和提交队列的ID、基地址、深度等。命令的实现方式和流程按照协议要求来就行了,基于状态机进行设计。
7、发送I/O命令,进行数据读写,要确认好SSD一次传输的最大数据量是多少,以及一个扇区的大小。
在这里插入图片描述
在这里插入图片描述

总结

碎碎念:说真的,刚开始做的时候,我是没有想到自己能做出来的,而且这个控制器方案也没有太多可借鉴的开源的设计,该方案都是被拿来售卖的。没想到自己能用两个月的时间给初步实现出来。不过,目前这个方案还不够完善,后续还需要进行优化调整,使其更加易用。比如,通过几个简单的控制信号,就能完成大批量的数据读取,这方面我打算参考商业 IP 的接口设计思路。

后面有时间可以用一个专栏讲解一下实现思路,但是应该不会免费开源,因为该项目完全可以作为一个高端项目供大家深入学习研究,我并不希望它因为过度传播而失去其独特性 ,变得过于泛滥(烂大街)。


http://www.ppmy.cn/embedded/171377.html

相关文章

IO多路复用(epoll)/数据库(sqlite)

1.poll: 1. poll使用链表管理文件描述符,对监测的文件描述符没有上限限制。 2. 文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝 3. 需要应用层对集合表进行遍历,寻找到达的事件 4. 只能工作在水…

k8s概念及k8s集群部署(Centos7)

Centos7部署k8s集群 部署之前,先简单说下k8s是个啥: 一、k8s简介: k8s,全称:kubernetes,它可以看作是一个分布式系统支撑平台。k8s的作用: 1、故障自愈: k8s这个玩意可以监控容器…

属于网络安全规划重安全性需求

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 1.网络安全基本内容 安全包括哪些方面 操作系统内部的安全包括:数据存储安全、应用程序安全、操作系统安全。 此外还有网络安全、物理安全、用户安全…

Vue3 模板引用:打破数据驱动的次元壁(附高阶玩法)

在数据驱动的Vue世界中,模板引用(Template Refs)是我们与真实DOM对话的秘密通道。本文将带你深入理解这个"逃生舱"的正确打开方式,并分享实战中的高阶技巧。 一、基础入门:建立DOM连接 1. 创建模板引用 &…

风控模型算法面试题集结

特征处理 1. 特征工程的一般步骤什么?什么是特征迭代 特征工程一般包含: 数据获取,分析数据的可用性(覆盖率,准确率,获取容易程度)数据探索,分析数据业务含义,对特征有一个大致了解,同时进行数据质量校验,包含缺失值、异常值和一致性等;特征处理,包含数据处理和…

ubuntu 22.04附加驱动安装NVIDIA显卡驱动重启后无WiFi蓝牙等问题

参考:ubuntu 22.04 更新NVIDIA显卡驱动,重启后无网络图标等系统奇奇怪怪问题 sudo dpkg --get-selections | grep linux查看哪些要跟着旧版本一起装的就装。 或者还可以去清华源找驱动软件包直接离线安装

WordPress开发到底是开发什么?

WordPress 开发主要涉及基于 WordPress 平台构建、定制和扩展网站功能的过程。它不仅仅是简单的网站搭建,而是通过代码和技术实现个性化需求。 以下是 WordPress 开发的核心内容: 1. 主题开发(Theme Development) 功能&#xff…

【UI自动化框架第五张】AndroidUiAutomation 类功能简介

一、AndroidUiAutomation 类 功能简介 功能: 为 Android 设备提供 UI 自动化操作的工具类,支持连接设备、获取截图、点击、滑动、获取屏幕分辨率和清理资源等功能。 参数: device_id(可选):设备 ID&#x…