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

背景

为满足实验室横向项目需求,在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 的接口设计思路。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975889.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Grok 3与GPT-4.5的“智能天花板”争夺战——谁才是大模型时代的算力之王?

2025年2月18日,马斯克旗下 xAI 高调发布新一代大模型Grok 3,号称“地球上最聪明AI”,在数学推理、代码生成等核心能力上碾压 GPT-4o、DeepSeek-V3 等对手。而就在同一天,OpenAI创始人 Sam Altman 暗示 GPT-4.5 即将登场&#xff0…

Window电脑中 Linux 系统配置VMware固定IP【最新详细】

一、为什么需要固定IP 当前我们虚拟机的Linux操作系统,其IP地址是通过DHCP服务获取的,DHCP:动态获取IP地址,即每次重启设备后都会获取一次,可能导致IP地址频繁变更。 原因1:办公电脑IP地址变化无所谓,但是…

网络安全高级软件编程技术

安全软件开发入门 软件安全问题 有趣的《黑客帝国》终极解释: 《黑客帝国》故事里面的人物关系,就像电脑里面的各种程序的关系一样: 电脑里面的系统程序:Matrix; 病毒程序:以Neo为首的人类; …

【AI学习笔记】2月10日李飞飞巴黎AI峰会演讲:探索 AI 的历史、现状与未来

【AIGC学习笔记】2月10日李飞飞巴黎AI峰会演讲:探索 AI 的历史、现状与未来 AI 的历史根基与发展历程 生命起源与智能诞生:5 亿年前视觉概念的出现推动了智能的诞生。最初的感知仅仅是被动的体验,只是但随着神经系统的活跃,视觉…

一文读懂Docker之Docker Compose

目录 一、Docker Compose简介 二、Docker Compose的安装和基本使用 1、Docker Compose的安装 步骤一、下载docker-compose 步骤二、新增可执行权限 步骤三、查看是否安装成功 2、Docker Compose的基本使用 (1)、docker-compose up (2)、docker-compose ps (3)、docke…

算法常见八股问题整理

1.极大似然估计和交叉熵有什么关系 在分类问题中,当我们使用softmax函数作为输出层时,最大化对数似然函数实际上等价于最小化交叉熵损失函数。具体来说,在多分类情况下,最大化该样本的对数似然等价于最小化该样本的交叉熵损失。 交…

自注意力机制和CNN的区别

CNN:一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力:具有可学习感受野的CNN。自注意力是CNN的复杂形态,是更灵活的CNN,经过某些设计就可以变为CNN。 越灵活、越大的模型,需要…

书生大模型实战营14-MindSearch深度解析实践

文章目录 L2——进阶岛MindSearch深度解析实践1 MindSearch 简介2 开发环境配置2.1. 打开codespace主页,选择Blank模板进行创建2.2. 创建conda环境隔离并安装依赖 3. 获取硅基流动API KEY4. 启动MindSearch4.1. 启动后端4.2. 启动前端 5. 部署到自己的 HuggingFace …

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…

luci界面开发中的MVC架构——LuCI介绍(二)

想要给openwrt开发应用,虽然直接可执行程序也可以运行,但是没有UI会很不方便,想要开发UI就要用openwrt的那一套,自然就是LuCI,LuCI又用了一套MVC框架,今天就讲讲这是个什么东西。 OpenWrt LuCI 界面开发中…

zyNo.25

SSRF漏洞 在了解ssrf漏洞前先了解curl命令的使用 1.curl命令的使用 基本格式&#xff1a;curl<参数值>请求地址 get请求&#xff1a;curl http://127.0.0.1 post请求&#xff1a;curl -X POST -d "a1&b2" http://127.0.0.1/(其中&#xff0c;使用-X参…

2.19学习(php文件后缀)

misc buu-后门查杀 下载附件&#xff0c;我们用火绒安全扫一下然后点击详情进入该文件所在文件夹&#xff0c;再用记事本打开该文件&#xff0c;搜索flag无果&#xff0c;再试试pass&#xff08;由题目中的密码联系到pass&#xff0c;password&#xff0c;key等&#xff09;&a…

浅谈 Redis 主从复制原理(二)

大家好&#xff0c;我是此林。 【浅谈 Redis 主从集群原理&#xff08;一&#xff09; 】 上一篇文章中&#xff0c;说到了 Redis 主从复制的全量同步和增量同步&#xff0c;repl_baklog 复制缓冲区&#xff0c;以及 slave 挂掉之后数据同步的措施。 下面介绍的上一篇遗留问…

接雨水的算法

题目 代码 # 接雨水算法 def trap(height):# 1. 特殊情况&#xff1a;数组为空 则返回0if not height:return 0n len(height)# 2. 初始化左右指针&#xff0c;左右最大值&#xff0c;结果left, right 0, n - 1# maxleft代表左边最大值&#xff0c;maxright代表右边最大值max…

【C++】list 链表的使用+模拟实现

目录 文章目录 前言 一、list的简介 二、list的使用方法 三、list的模拟实现 1.基本框架&#xff1a; 2.迭代器实现 3.常用接口实现 四、完整代码 总结 前言 本文主要介绍C【STL】容器中的 list&#xff0c;包括接口说明和模拟实现。其中讲解了迭代器功能上的分类&am…

Python游戏编程之赛车游戏6-2

3.2 move()方法的定义 Player类的move()方法用于玩家控制汽车左右移动&#xff0c;当玩家点击键盘上的左右按键时&#xff0c;汽车会相应地进行左右移动。 move()方法的代码如图7所示。 图7 move()方法的代码 其中&#xff0c;第20行代码通过pygame.key.get_pressed()函数获…

RT-Thread+STM32L475VET6——ADC采集电压

文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行配置1.1 使用外部高速时钟&#xff0c;并修改时钟树1.2 打开ADC1的通道3&#xff0c;并配置为连续采集模式(ADC根据自己需求调整&#xff09;1.3 打开串口1.4 生成工程 2. 配置ADC2.1 打开ADC驱动2.2 声明ADC2.3 剪切stm…

Jupyter Notebook切换虚拟环境(Kernel管理)

我们在使用Jupyter Notebook的时候&#xff0c;打开文件发现只有一个Python3(ipykernel)&#xff0c;我们自己在conda中创建的虚拟环境为什么没有显示出来&#xff0c;今天我就来和大家一起讨论一下&#xff01; 在 Jupyter Notebook 中&#xff0c;kernel 是执行代码的核心。管…

Ubuntu 22.04 Install deepseek

前言 deepseekAI助手。它具有聊天机器人功能&#xff0c;可以与用户进行自然语言交互&#xff0c;回答问题、提供建议和帮助解决问题。DeepSeek 的特点包括&#xff1a; 强大的语言理解能力&#xff1a;能够理解和生成自然语言&#xff0c;与用户进行流畅的对话。多领域知识&…

Transformer LLaMA

一、Transformer Transformer&#xff1a;一种基于自注意力机制的神经网络结构&#xff0c;通过并行计算和多层特征抽取&#xff0c;有效解决了长序列依赖问题&#xff0c;实现了在自然语言处理等领域的突破。 Transformer 架构摆脱了RNNs&#xff0c;完全依靠 Attention的优…