国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于PCIe的NVMe協(xié)議在FPGA中實現(xiàn)方法

這篇具有很好參考價值的文章主要介紹了基于PCIe的NVMe協(xié)議在FPGA中實現(xiàn)方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????NVMe協(xié)議是工作在PCIE的最上層協(xié)議層的,故需要先搞清楚PCIE。本文基于Xilinx的UltraScale+,開發(fā)工具為Vivado2021.2。學(xué)習中以spec為主,其它資料輔助參考(重點介紹學(xué)習方法及資料,有時間再加細節(jié))。請勿轉(zhuǎn)載!

1 PCIe學(xué)習與實踐

1.1 理論

? ? ?主要參考的文章是《老男孩讀PCIe》,同時參考《古貓先生》,重點學(xué)習TLP報文部分,數(shù)據(jù)鏈路層和物理層的內(nèi)容可以先不看。再買一本書《PCI Express 體系結(jié)構(gòu)導(dǎo)讀-王齊》用來查閱做筆記。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme? ??蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme

老男孩讀PCIe介紹系列_Ha-Ha-Interesting的博客-CSDN博客_老男孩讀pcie

PCIe最全科普貼流出!不說了,趕快Mark!_古貓先生的博客-CSDN博客

還有2本MindShare的英文書籍參考,備用即可。

?蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvmehttps://www.mindshare.com/files/ebooks/PCI%20Express%20System%20Architecture.pdf

https://www.mindshare.com/files/ebooks/PCI%20Express%20Technology%203.0.pdf

在NVMe工程中用到的TLP類型為mem讀寫config、中斷

  1. config TLP用戶不用特別關(guān)心,在Xilinx IP GUI配置,由IP維護。它用于上電時host訪問EP設(shè)備的reg,協(xié)商配置;
  2. 中斷TLP用戶也不直接使用,用戶僅通過IO脈沖控制IP發(fā)出完整中斷TLP,再檢查IP給出的完成狀態(tài)IO即可;?
  3. mem TLP是需要用戶真正掌握的,但是IP的AXI\stream口出來的TLP格式可能不是標準的TLP,它是對TLP做了進一步處理的。

1.2 工程

? ? ? ? 在Xilinx的Vivado中關(guān)于PCIe的IP有3個:PCIE4,XDMA,QDMA。后兩個IP都基于前一個,使用難度遞增、速率遞增、資源占用也遞增。

? ? ?下列文章中詳細介紹了7系列PCIE(此IP使用標準TLP格式,不同于UP系列PCIE4)、XDMA IP的基礎(chǔ)配置、官方Demo的生成、仿真分析。Demo中用Verilog代碼設(shè)計了一個RootPort來和EP通信,模擬了上電后Bar掃描、分配地址、速率寬度等協(xié)商配置。Demo中的EP代碼可以用于實際的設(shè)計中。在7系Demo與UP demo中PCIE HEAD擴展reg的偏移地址有個別不同,以實際PG為準。

開發(fā)板可以用黑金、米聯(lián)客的板子。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme

PCIe基礎(chǔ)知識及Xilinx相關(guān)IP核介紹_lu-ming.xyz的博客-CSDN博客_pcie ip核 xilinx

2 NVMe理論學(xué)習

2.1 理論

2.1.1 學(xué)習內(nèi)容

  • ? ? NVMe的學(xué)習主要以Spec為主,官方下載鏈接如下,我使用的是spec1.2版本,此本版應(yīng)該是蛋蛋讀NVMe系列文章所用,圖表序號能對應(yīng)上。選用的功能可以先不看,并在NVMe配置reg、Controller Data Structure(4KB)中配置為關(guān)閉。

NVMe Base Specification – NVM Expresshttps://nvmexpress.org/developers/nvme-specification/

  • 同時參考以下ssdfans blog,一共6篇,第5篇講數(shù)據(jù)保護(可以選擇不用),第6篇講NameSpace(可以只用一個NS,NSID=1)

蛋蛋讀NVMe之一(cmd processing)

蛋蛋讀NVMe之二?(SQ,CQ和DB)

蛋蛋讀NVMe之三?(PRP)

蛋蛋讀NVMe之四(Trace)

蛋蛋讀NVMe之五(Protection Information)

蛋蛋讀NVMe之六(Namespace)

以下的系列4篇文章也可以參考對比:

NVMe 協(xié)議詳解(一)_IFappy的博客-CSDN博客_nvme協(xié)議

NVMe詳解(四)_IFappy的博客-CSDN博客_nvme smart-log 詳解

下面文章對spec1.3做了部分翻譯,有個別內(nèi)容不準確,可以參考

【NVMe】NVMe 1.3協(xié)議中文翻譯——第一章簡介_ljyyyyyyyyy的博客-CSDN博客_nvme1.3協(xié)議

2.1.2 抓包工具trace

下面的文章實際抓取了NVMe報文,并做了分析,有助于理解NVMe工作的完整流程。PCIE協(xié)議可以使用分析儀抓取報文,分析儀串在鏈路中,抓取上行、下行報文。目前看到的文章中主要有2家:力科、Saniffer。

從PCIe trace中分析NVMe_Ingram14的博客-CSDN博客_pcie trace

【71】力科PCIe 協(xié)議分析儀常見操作_linjiasen的博客-CSDN博客_pcie協(xié)議分析儀

Saniffer公司的分析儀及軟件,可以聯(lián)系他們獲取軟件及SSD啟動抓取的完整報文、分析儀的使用培訓(xùn)教程等等。

PCIe和NVMe SSD初始化過程簡介_SSD學(xué)院_SSDtime

PCIe和NVMe SSD初始化過程簡介-面包板社區(qū)? ? ? ? ? ?同一篇文章的不同鏈接。

2.1.3 Spec中重點關(guān)注的內(nèi)容(我的調(diào)試)

1、spec1.2中7.6.1 Initialization 介紹了上電后整個通信鏈路建立的過程:host寫NVMe reg、創(chuàng)建Admin Queue,通過Admin創(chuàng)建IO Queue。之后才能進行數(shù)據(jù)的讀寫。

2、spec 7.2.1command processing 介紹了取SQ,執(zhí)行,返回CQ,中斷的詳細過程。注意在步驟4指令執(zhí)行時,可能包含多個純TLP報文完成數(shù)據(jù)讀寫,圖中并未標出;

3、第1章主要是一些名詞解釋,重點1.6節(jié)。

4、第2章是PCIE的寄存器配置,此部分內(nèi)容在使用Xilinx IP時用戶不能直接訪問,而是通過IP GUI設(shè)置參數(shù)即可。在IP中必須注意class code要改為下方協(xié)議中值,否則無法識別為NVMe控制器。電源管理PM、中斷MSI\MSI-X\等都在GUI配置,由IP負責維護reg。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

?5、第3章重點3.1節(jié),是NVMe協(xié)議層reg,需要mem TLP來讀寫,這些reg有專門的地址,即TLP中的地址段。先不展開細說了,重點提示如下:

  • INTMS,INTMC:這兩個reg不是可選,但是也可不用,屬于在協(xié)議層控制中斷屏蔽。需要在本地維護一個中斷屏蔽mask reg,置位mask<=mask | MS ,清除mask<=mask &(~MC),讀取時都返回mask的值,而不是MC or MS 自己的值。
  • AQA中由host寫入的是ASQ、ACQ的隊列深度,ASQ是Admin Submission Queue,其中一條指令縮寫ASQE,占用64B。ACQE占用16B;
  • ASQ中存儲AdminSQ的基地址,要讀取其中ASQE時,地址=baseaddr+head doorbell*64。而IO SQ的基地址不在這些reg中,它是在用Admin指令創(chuàng)建IO隊列時才由host分配的,需要FPGA自己維護保存;
  • SQTail DBL,CQHead DBL是由host維護寫入FPGA中。編號0的是Admin,>=1是IO。Tail總是指向空,表示下一次可以寫入的指針位置。Head≠Tail則表示Queue中還有Entry沒有取走。SQHead DBL由PL自己維護,每讀走一個SQE后+1.CQTail DBL由PL維護,每向host寫一個CQE,Tail+1,注意隊列的滿空,以及從尾部返回到頭部循環(huán)時,報文中的P位要0-1反轉(zhuǎn)一次。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

?6、第4章 Memory structure,介紹了NVMe中一些基本的定義。重點4.1SQCQ定義,4.2SQE,4.3PRP,4.6CQE格式。其他的SGL、MR、CMB、Fused Operation都不用,arbitration只用默認的RoundRobin即可。

  • 注意Queue的empty、full

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

  • ASQE,IOSQE都包含64B=16DW,兩者DW0的格式相同。一條SQE中本身包含兩個PRP,一個PRP指向4K空間,超過8K空間需要使用PRP List,一個List的最大空間為4K,一個PRP地址本身占用8B,則一個List中最多512個PRP,若還有更多的PRP則第一個list的最后一個PRP指向下一個List的存放地址。PRP計算方法,考慮4K對齊(所謂4K對齊,是指如果訪問地址不是從4K邊界開始的,那么本次對多只能操作起始地址->4K邊界尾)。

    SSD NVMe核心之PRP算法_Ingram14的博客-CSDN博客

?7、第5章是Admin指令。重點關(guān)注強制cmd中紅圈部分,是初始化使用到的,順序參見spec1.2 的7.6.1 Initialization 章節(jié)。5.11 Identify command中的data structure和namespace structure特別重要,至于figure91 電源可以只要一種即可,不支持切換。先創(chuàng)建CQ,后創(chuàng)建SQ;先刪除SQ,后刪除CQ。刪除cmd就是把創(chuàng)建指令設(shè)置的各項參數(shù)都復(fù)位。

?蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

?8、第6章是NVM=IO 指令,重點是讀寫。flush指令若沒有用緩存,或確定數(shù)據(jù)已全部寫入外部存儲,可以不做操作,直接回復(fù)CQE即可。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

?9、第7章重點關(guān)注7.2指令的處理流程,7.6 控制器初始化過程(整理鏈路建立過程)。

10、第8章大部分都不用看,關(guān)注8.6 Doorbell Stride。在硬件使用時=0,用在doorbell reg 地址分配上,=0則緊湊排布。

2.2 工程實現(xiàn)

三種實現(xiàn)方案NVMe協(xié)議,基于3種不同的IP,QDMA僅支持ultralscale+器件。

2.2.1 PCIE4

PCIE4是ultralscale+器件中的型號,手冊為PG213。與7 Series Integrated Block for PCI Express IP(PG054)略有不同,7系的IP用戶數(shù)據(jù)stream接口分為tx,rx兩個,報文格式基本與標準TLP相同;

PCIE4 IP的用戶接口分為4個:CQ/CC,RQ/RC。XX中前一位是用戶的角色:C代表用戶是完成方被動響應(yīng),R代表用戶請求方主動發(fā)起;后一位表示請求數(shù)據(jù)or完成數(shù)據(jù)。報文格式與標準TLP略有不同。

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme??

Admin,IO指令都用PL純邏輯實現(xiàn),節(jié)約資源。用于和ASMedia USB轉(zhuǎn)NVMe芯片的通信,此轉(zhuǎn)接芯片的協(xié)議嚴格遵守了NVMe spec,不需要PC端有NVMe的驅(qū)動,PC將其識別為USB設(shè)備。

Controller data structure和Namespace data structure各占用4KB的空間,可以把參數(shù)提前配好,用一個ROM+.coe初始化文件的方式,供Admin讀取。

調(diào)試時先確保PCIE層通信正常,可以使用WinDriver來調(diào)試CQ/CC口,即調(diào)試NVMe reg。注意使用金手指上的復(fù)位來復(fù)位PCIE4 IP。根據(jù)SQE中LBA的個數(shù)決定PRP List長度,讀寫數(shù)據(jù)前先讀取PRPList,并壓入FIFO中,用一個出一個。

2.2.2 XDMA

該方案用MicroBlaze核解析Admin指令,IO指令用PL邏輯實現(xiàn),MB核占用資源。該方案需要PC端驅(qū)動的配合,無法與ASMedia芯片配合使用。

Demo由復(fù)旦大學(xué)設(shè)計,并且有配套論文,硬件基于KCU105開發(fā)板。設(shè)計中創(chuàng)建了一個Admin Queue,8個IO Queue。啟用了XDMA的4條stream通道、descriptor bypass通道、AXI-master、AXI-slave。

  • AXI-slave:用戶配置XDMA的內(nèi)部reg,控制中斷,數(shù)據(jù)傳輸啟動、停止等;

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme

  • ?AXI-master:host用來配置NVMe協(xié)議中的reg(維護在PL中),如doorbell head/tail;蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme
  • descriptor bypass通道:用戶寫入地址+長度,告知host要取回,或發(fā)出數(shù)據(jù)的信息。
  • 4條stream通道:傳輸數(shù)據(jù)。數(shù)據(jù)可以是SQE、CQE等指令,也可以是要轉(zhuǎn)移的數(shù)據(jù)。在demo設(shè)計中,2條steam用于讀寫SQE/CQE/PRP,2條steam用于讀寫數(shù)據(jù)。

https://github.com/yhqiu16/NVMeCHA

2.2.3 QDMA

Xilinx官方提供了Demo,使用QDMA+收費的NVMeTC。其Admin指令由MB核解析,且MB上運行了linux系統(tǒng),占用大量資源。僅用于和PC通信。?

蛋蛋讀nvme之一,PCIE,fpga開發(fā),nvme?

Documentation Portalhttps://docs.xilinx.com/r/en-US/pg329-nvme-target-controller?tocId=R9sEYjIxu5Zmhve4J9K7gg

在手冊中搜索??Download the?reference design files,下載工程。

3 測速軟件

crystal disk mark:測速更準確。

HD_speed:可以長時間連續(xù)測試,由寫+讀+驗證模式。文章來源地址http://www.zghlxwxcb.cn/news/detail-785036.html

到了這里,關(guān)于基于PCIe的NVMe協(xié)議在FPGA中實現(xiàn)方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 你所不知道的NVMe SSD固態(tài)硬盤讀寫速度及國貨的驚喜--基于FPGA的速度測試

    你所不知道的NVMe SSD固態(tài)硬盤讀寫速度及國貨的驚喜--基于FPGA的速度測試

    ??在\\\"FPGA實現(xiàn)高帶寬NVMe SSD讀寫\\\"帖子中介紹了項目背景及系統(tǒng)架構(gòu)、FPGA實現(xiàn)NVMe讀寫的大致實現(xiàn)方法。項目中需要將圖像傳感器產(chǎn)生的高速數(shù)據(jù)流實時穩(wěn)定的持續(xù)存儲,即不僅要求較高的存儲帶寬,還同時需要該存儲帶寬保持始終穩(wěn)定、持續(xù)。 ??在項目做系統(tǒng)設(shè)計的時候

    2024年02月06日
    瀏覽(91)
  • 樹莓派5使用PCIE M.2 NVME SSD固態(tài)硬盤擴展版HAT制作小電腦

    樹莓派5使用PCIE M.2 NVME SSD固態(tài)硬盤擴展版HAT制作小電腦

    上一篇文章《樹莓派5使用USB外接M2接口1TB固態(tài)硬盤作啟動盤》 杭州野芯科技(Mcuzone)生產(chǎn)的樹莓派許多周邊產(chǎn)品是受到愛好者的喜歡,最近樹莓派官方開源了PCIE的應(yīng)用,他們推出了一款PCIE M.2 NVME SSD固態(tài)硬盤擴展版HAT。我選擇了支持2242尺寸的規(guī)格,這款擴展版還配置了制作精

    2024年02月03日
    瀏覽(28)
  • 高性能NVMe Host Controller IP for FPGA

    高性能NVMe Host Controller IP for FPGA

    NVMe Host Controller IP 介紹 NVMe Host Controller IP可以連接高速存儲PCIe SSD,無需CPU和外部存儲器,自動加速處理所有的NVMe協(xié)議命令,具備獨立的數(shù)據(jù)寫入AXI4-Stream/FIFO接口和數(shù)據(jù)讀取AXI4-Stream/FIFO接口,非常適合于超高容量和超高性能的應(yīng)用。此外,NVMe Host Controller IP支持RAID存儲,從

    2024年02月02日
    瀏覽(24)
  • FPGA adrv9002 4收4發(fā)板卡,支持NVME SATA EMMC 光口 FMC

    FPGA adrv9002 4收4發(fā)板卡,支持NVME SATA EMMC 光口 FMC

    板卡采用ADI 射頻直采芯片ADRV9002 ,支持4收4發(fā)支持外部本振 跳頻 同時支持4X 10G光口對外傳輸,F(xiàn)MC擴展 。同時支持4X NVME接口,可以實時流盤,備份一路SAT A接口,板卡同時預(yù)留了EMMC,可以PS PL選通訪問,PS直接可以用來放操作系統(tǒng)的根文件系統(tǒng),PL訪問可以當做一個低速的固態(tài)

    2024年02月16日
    瀏覽(17)
  • 驅(qū)動 | Linux | NVMe | 1. NVMe Driver的前世今生和工作原理概述

    驅(qū)動 | Linux | NVMe | 1. NVMe Driver的前世今生和工作原理概述

    本文主要參考這里 1 ’ 2 的解析和 linux 源碼 3 。 此處推薦一個可以便捷查看 linux 源碼的網(wǎng)站 bootlin 4 。 更新:2022 / 02 / 19 NVMe 離不開 PCIe , NVMe SSD 是 PCIe 的 endpoint 。 PCIe 是 x86 平臺上一種流行的外設(shè)總線,由于其 Plug and Play 的特性,目前很多外設(shè)都通過 PCI Bus 與 Host 通信,

    2024年02月16日
    瀏覽(50)
  • OCP NVME SSD規(guī)范解讀-3.NVMe管理命令-part1

    OCP NVME SSD規(guī)范解讀-3.NVMe管理命令-part1

    4.4 NVMe Admin Command Set章節(jié)詳細介紹了設(shè)備應(yīng)支持的NVMe管理命令集,包括必需的和可選的命令。以下是一些關(guān)鍵要求和描述: NVMe-AD-2:識別命令除了支持所有必需的CNS值和相關(guān)的必需字段外,還應(yīng)支持以下可選字段: 格式進度指示器(FPI),更新粒度為1%。 I/O性能和耐久性提

    2024年02月04日
    瀏覽(38)
  • NVMe-oF 1.1規(guī)范:多路徑、非對稱命名空間和NVMe/TCP

    NVMe-oF 1.1規(guī)范:多路徑、非對稱命名空間和NVMe/TCP

    提到NVMe over Fabric,我就會想到它的幾種應(yīng)用場景: 1、 存儲陣列到主機的網(wǎng)絡(luò)連接(替代FC、iSCSI等); 2、 服務(wù)器、本地NVMe存儲解耦(跨機箱/JBOF),SSD存儲資源池化共享; 3、 分布式存儲/超融合系統(tǒng)內(nèi)部互連? 關(guān)于上面第3點,對技術(shù)專家來說應(yīng)該早有答案,而我會在下

    2024年02月02日
    瀏覽(23)
  • 華碩 P8B75-V 支持 NVME BIOS固件 和 刷 NVME 教程

    華碩 P8B75-V 支持 NVME BIOS固件 和 刷 NVME 教程

    事前警告:刷BIOS有風險風險風險險險險 (變磚后一般可以通過燒錄修復(fù)) 最近看網(wǎng)上的NVME硬盤很便宜 所以就買了一塊 安裝到電腦上。給我的老臺式機升升級,買了一個 PCIE 轉(zhuǎn) NVME 協(xié)議的擴展卡。安裝上以后克隆系統(tǒng),以為全部搞定了。把老硬盤拿下來后發(fā)現(xiàn)無法啟動到系

    2024年02月08日
    瀏覽(116)
  • NVMe驅(qū)動注釋(持續(xù)更新)

    NVMe驅(qū)動注釋(持續(xù)更新)

    個人主頁 :www.jiasun.top 界面比CSDN簡潔一點,閱讀體驗更好,現(xiàn)已將全部博客遷移到個人主頁,歡迎關(guān)注! 往期文章: NVMe驅(qū)動學(xué)習記錄-1 NVMe驅(qū)動學(xué)習記錄-2 NVMe驅(qū)動 請求路徑學(xué)習記錄 整合了之前文章的一些內(nèi)容 源碼地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v4.x/linux-4.19.90.ta

    2024年02月16日
    瀏覽(19)
  • NVME介紹

    NVME介紹

    本篇內(nèi)容使用于介紹NVME 是什么、通信結(jié)構(gòu),接口類型、性能評定、NVME 協(xié)議通信原理,NVME代碼解讀等部分。 (一) 首先NVME是什么呢? NVME是一種被用于host software與非易失性內(nèi)存的子系統(tǒng)通信的寄存器級別的接口。 主要為企業(yè)、數(shù)據(jù)中心以及客戶端系統(tǒng)中應(yīng)用PCIe接口的固態(tài)存儲

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包