記錄此刻:歷時兩月,初步實現基于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 的接口設計思路。

后面有時間可以用一個專欄講解一下實現思路,但是應該不會免費開源,因為該項目完全可以作為一個高端項目供大家深入學習研究,我并不希望它因為過度傳播而失去其獨特性 ,變得過于泛濫(爛大街)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896365.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python編寫liunx服務器登陸自動巡檢腳本

前言: 用戶需要一份用Python編寫的Linux系統巡檢腳本,檢查內存、磁盤、CPU使用率,還有網絡連通性。 首先,我得確定用戶的使用場景。可能用戶是系統管理員,需要定期監控服務器狀態,確保系統正常運行。 或者…

【二分查找】P9698 [GDCPC2023] Path Planning|普及

本文涉及的基礎知識點 本博文代碼打包下載 C二分查找 [GDCPC2023] Path Planning 題面翻譯 【題目描述】 有一個 n n n 行 m m m 列的網格。網格里的每個格子都寫著一個整數,其中第 i i i 行第 j j j 列的格子里寫著整數 a i , j a_{i, j} ai,j?。從 0…

springboot015基于SpringBoot的在線視頻教育平臺的設計與實現(源碼+數據庫+文檔)

源碼地址:基于SpringBoot的在線視頻教育平臺的設計與實現 文章目錄 1.項目簡介2.部分數據庫結構與測試用例3.系統功能結構4.包含的文件列表(含論文)前端運行截圖后端運行截圖 1.項目簡介 ? 隨著科學技術的飛速發展,各行各業都在…

《深度剖析:生成對抗網絡中生成器與判別器的高效協作之道》

在人工智能的前沿領域,生成對抗網絡(GAN)以其獨特的對抗學習機制,為數據生成和處理帶來了革命性的變革。生成器與判別器作為GAN的核心組件,它們之間的協作效率直接決定了GAN在圖像生成、數據增強、風格遷移等眾多應用中…

學習Flask:[特殊字符] Day 3:數據庫集成

學習目標:使用SQLAlchemy操作數據庫 from flask_sqlalchemy import SQLAlchemyapp.config[SQLALCHEMY_DATABASE_URI] sqlite:///site.db db SQLAlchemy(app)class User(db.Model):id db.Column(db.Integer, primary_keyTrue)username db.Column(db.String(20),…

可以免費無限次下載PPT的網站

前言 最近發現了一個超實用的網站,想分享給大家。 在學習和工作的過程中,想必做PPT是一件讓大家都很頭疼的一件事。 想下載一些PPT模板減少做PPT的工作量,但網上大多精美的PPT都是需要付費才能下載使用。 即使免費也有次數限制&#xff0…

什么是 Java 中的線程安全?

回答 Java 中的線程安全(Thread Safety)指的是在多線程環境下,當多個線程同時訪問和操作共享資源(如對象、變量、數據結構等)時,能夠保證程序的正確性,不會出現數據不一致、競爭條件&#xff0…

建筑三維設計軟件如何實現彎道超車?

三個問題 建筑三維設計軟件屬于工業設計軟件的一種,在這個領域一直是國外公司壟斷。前些年,在房地產高歌猛進的時代,很多公司也嘗試投入到建筑三維設計軟件的研發。隨著房地產市場行業的下行,建筑三維設計軟件的發展也受到了影響…

Android OpenGLES2.0開發(十一):渲染YUV

人生如逆旅,我亦是行人 Android OpenGLES開發:EGL環境搭建Android OpenGLES2.0開發(一):艱難的開始Android OpenGLES2.0開發(二):環境搭建Android OpenGLES2.0開發(三&am…

深入miniqmt:創建交易對象的完整指南

深入miniqmt:創建交易對象的完整指南 在量化交易領域,miniqmt作為一個強大的工具,為開發者提供了執行程序化交易的接口。在進行任何交易操作之前,首先需要創建一個交易對象。本文將詳細介紹如何在miniqmt中創建并配置交易對象&am…

日語Learn、英語的再認識

背單詞這件事感覺到了某個瓶頸了,沒有什么新的區域可以發現,變成了一種類似純粹的機械記憶,感覺英語的規范程度很低,很多詞明明可以通過相近的形式變換,達到更好的學習效果,但卻做的很麻煩,同一…

內存泄漏指什么?常見的內存泄漏有哪些?

內存泄漏是指程序在運行過程中,由于某些原因導致程序無法釋放已經不再使用的內存,使得這部分內存持續被占用,最終可能導致系統可用內存逐漸減少,嚴重時會影響系統性能甚至導致程序崩潰。(內存泄漏是指程序中已經分配的…

文心一言AI創意畫

介紹 文心一言是百度推出的新一代知識增強大語言模型,屬于文心大模型家族的新成員。?它能夠與人對話互動、回答問題、協助創作,高效便捷地幫助人們獲取信息、知識和靈感。? 特點 文心一言基于數萬億數據和數千億知識進行融合學習,采用預訓…

洛谷 P8705:[藍橋杯 2020 省 B1] 填空題之“試題 E :矩陣” ← 卡特蘭數

【題目來源】 https://www.luogu.com.cn/problem/P8705 【題目描述】 把 1~2020 放在 21010 的矩陣里。要求同一行中右邊的比左邊大,同一列中下邊的比上邊的大。一共有多少種方案? 答案很大,你只需要給出方案數除以 2020 的余數即可。 【答案提交】 …

我是如何從 0 到 1 找到 Web3 工作的?

作者:Lotus的人生實驗 關于我花了一個月的時間,從 0 到 1 學習 Web3 相關的知識和編程知識。然后找到了一個 Web3 創業公司實習的遠程工作。 👇👇👇 我的背景: 計算機科班,學歷還可以(大廠門檻水平) 畢業工…

量子網絡:構建與應用前景的展望

大家好,我是Echo_Wish,今天我們來探討一個極具前瞻性的領域——量子網絡的構建與應用前景。隨著量子計算的發展,量子網絡作為量子信息科學的重要組成部分,正在引起越來越多的關注。本文將深入解析量子網絡的構建原理,并展望其應用前景。 量子網絡的基本概念 量子網絡是指…

數據庫二三事(8)

高級數據查詢 top詞語法格式:TOP n (percent)(with ties) 查詢前n(%)行數據,(包括最后一行取值并列) 搭配 order by case: CASE (…

linux中conda3安裝

1、下載安裝包 清華源-》https://mirrors.tuna.tsinghua.edu.cn/# 本文使用Anaconda3-2022.10,對應的下載路徑-》https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh 2、將下載到的sh腳本放在Linux中用sh腳本解析器執行 …

2025最新智能優化算法:人工旅鼠算法(Artificial Lemming Algorithm, ALA)求解23個經典函數測試集,MATLAB

一、人工旅鼠優化算法 人工旅鼠算法(Artificial Lemming Algorithm, ALA)是2025年提出的一種新型生物啟發式優化算法,受旅鼠的四種典型行為啟發:長距離遷徙、挖洞、覓食和躲避捕食者。該算法通過模擬這些行為來解決復雜的優化問題…

Python游戲編程之賽車游戲6-2

3.2 move()方法的定義 Player類的move()方法用于玩家控制汽車左右移動,當玩家點擊鍵盤上的左右按鍵時,汽車會相應地進行左右移動。 move()方法的代碼如圖7所示。 圖7 move()方法的代碼 其中,第20行代碼通過pygame.key.get_pressed()函數獲…