• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于BRAM的NVMe控制器原型仿真平臺設計

      2021-04-22 10:06:46馮志華王華卓安東博王紅艷
      計算機工程與設計 2021年4期
      關鍵詞:寄存器隊列命令

      馮志華,王華卓,安東博,羅 重,王紅艷

      (中國航天科工集團第二研究院 七〇六所,北京 100854)

      0 引 言

      近年來,面向PCIe接口的非易失性存儲協(xié)議,簡稱NVMe協(xié)議,為固態(tài)硬盤(solid state disk,SSD)提供了高帶寬、高吞吐量和低延遲的性能提升。在固態(tài)硬盤存儲系統(tǒng)中,存儲設備的容量、帶寬、延遲、每秒進行讀寫操作的次數(shù)(input/output operations per second,IOPS)、可靠性和功耗等指標直接決定了存儲服務質(zhì)量,乃至整個系統(tǒng)的計算性能。其中基于閃存的存儲設備在存儲器技術領域引領了新的技術方向,填補了動態(tài)隨機存儲器與機械硬盤之間的性能差距,同時擁有較好的性價比指標。

      在固態(tài)硬盤開發(fā)過程中,根據(jù)NVMe控制器搭建原型仿真平臺,對各部分功能進行驗證,以確保所開發(fā)固態(tài)硬盤的可用性。通過優(yōu)化工程的結(jié)構復雜程度,可以有效降低功能驗證過程中的時間成本。不但可以快速完成各部分功能的驗證工作,加快開發(fā)迭代周期,還能幫助開發(fā)人員進一步評估設計改動對整體設計的影響,基于驗證得到的結(jié)果改進后續(xù)設計方案。

      為進一步降低工程的結(jié)構復雜程度,加速開發(fā)迭代周期,本文提出通過塊隨機存儲器(block random access memory,BRAM)代替閃存作為存儲介質(zhì),既而從工程中省略閃存控制器模塊,優(yōu)化工程結(jié)構,加速完成各部分功能的驗證工作,能夠適用于NVMe控制器的開發(fā)過程。

      1 NVMe技術簡介

      1.1 NVMe協(xié)議

      NVMe協(xié)議是針對IO到內(nèi)存,特別是到非易失性閃存進行優(yōu)化的一種基于命令的應用層協(xié)議,規(guī)定主機端和存儲設備之間的通信方式,針對固態(tài)硬盤定義了存儲器接口、指令集和功能集。相比于傳統(tǒng)固態(tài)硬盤優(yōu)化了數(shù)據(jù)傳輸路徑和傳輸方式,提高數(shù)據(jù)傳輸效率,降低數(shù)據(jù)訪問延遲,釋放閃存存儲介質(zhì)的性能優(yōu)勢。

      1.2 系統(tǒng)架構

      NVMe協(xié)議驅(qū)動位于NVMe存儲系統(tǒng)的主機端,是通用IO塊層(block IO、BIO層)和NVMe控制器之間的軟件層,負責將來自BIO層的I/O請求合成NVMe命令,通過PCIe Root Complex(以下簡稱RC)下發(fā)到主機端內(nèi)存中的NVMe命令提交隊列中,等待NVMe控制器來獲取命令;RC是高速串行計算機擴展總線標準體系結(jié)構(peri-pheral component interconnect express,PCIe)的一個重要組成部件,RC并非本設計關注重點,而且RC的相關細節(jié)也被包含在操作系統(tǒng)的PCIe基礎驅(qū)動中[1],因此對于RC的形式和分擔的功能不做深入解釋。

      NVMe控制器位于NVMe存儲系統(tǒng)的設備端[2],NVMe控制器通過RC從主機端內(nèi)存中獲得主機下發(fā)的命令后,將獲取的數(shù)據(jù)包進行拆解獲取命令的相關信息,將其發(fā)送到軟核處理器MicroBlaze進行命令處理;當NVMe控制器處理完成命令后,通過中斷響應機制通知主機端命令執(zhí)行已完成[3]。主機端接收到命令處理完成的中斷響應后,會暫停其它任務,優(yōu)先處理保存在主機內(nèi)存中的NVMe命令完成隊列中的完成信息,之后根據(jù)完成信息對設備端下發(fā)的命令完成指令,同時釋放內(nèi)存資源[4]。

      NVMe原型仿真主要是根據(jù)NVMe標準協(xié)議對NVMe控制器進行設計與驗證,因此本設計沒有采用傳統(tǒng)NVMe存儲系統(tǒng)使用NAND閃存(NAND flash memory,NAND Flash)作為存儲介質(zhì)的方案[5],而是使用BRAM替代NAND Flash作為存儲介質(zhì),繼而省略掉Nand控制器模塊,以及軟件部分中閃存轉(zhuǎn)換層部分(flash translation la-yer,F(xiàn)TL),包括磨損均衡、垃圾回收等復雜算法。存取數(shù)據(jù)時通過片內(nèi)總線直接從BRAM中讀取或?qū)懭???朔F(xiàn)有仿真控制器的速度慢、結(jié)構復雜的缺點,能夠?qū)崿F(xiàn)快速、方便的仿真,適用于高性能NVMe控制器的開發(fā)驗證,如圖1所示。

      圖1 存儲系統(tǒng)整體架構

      1.3 初始化與命令處理

      主機在對NVMe設備初始化過程中需要了解NVMe設備的容量、邏輯塊大小等信息,這些信息均由identify命令獲取[6]。對NVMe控制器的初始化流程包括:

      (1)基于系統(tǒng)配置,設置PCIe寄存器。當IO隊列數(shù)量確定之后,配置中斷方式;

      (2)等待控制器RDY信號為‘0’,表明控制器已復位;

      (3)配置管理隊列相關信息,包含AQA (admin queue attributes),ASQ(admin submission queue base address),ACQ(admin completion queue base address)等寄存器;

      (4)配置控制器配置(controller configuration,CC)寄存器,包括在CC.MPS中初始化內(nèi)存頁大小、在CC.AMS中選擇命令仲裁機制以及在CC.CSS對IO Command進行配置;

      (5)配置控制器配置使能,即配置CC.EN為‘1’;

      (6)等待控制器表明已經(jīng)準備好處理命令,不斷向控制器發(fā)送讀控制器狀態(tài)(controller status,CSTS)寄存器的信號,直到控制器CSTS.RDY為‘1’時停止;

      (7)向NVMe控制器發(fā)送Identify命令,獲取Controller data structure和Namespace data structure;

      (8)通過Set Feature命令決定IO提交隊列和IO完成隊列的數(shù)量,然后再配置中斷寄存器;

      (9)根據(jù)系統(tǒng)配置需求和控制器的數(shù)量需求,使用創(chuàng)建IO完成隊列命令分配IO完成隊列;

      (10)根據(jù)系統(tǒng)配置需求和控制器的數(shù)量需求,使用創(chuàng)建IO提交隊列命令分配IO提交隊列;

      (11)如果想要獲取可選項的異步通知,應該發(fā)送Set Feature命令去使能此項功能。

      在執(zhí)行完上述初始化過程后,NVMe設備端可用來執(zhí)行端下發(fā)的IO指令。主機端內(nèi)存中有兩種隊列,提交隊列(submission queue,SQ)和完成隊列(completion queue,CQ),分別用來存放提交命令和完成命令。提交隊列存放下發(fā)給NVMe設備端的命令(64字節(jié)),完成隊列存放NVMe設備端返回的完成命令(16字節(jié))。通過寫提交隊列門鈴信號通知NVMe控制器有新的命令需要處理,NVMe控制器檢測到門鈴信號之后,從提交隊列中讀取命令;完成命令之后,NVMe控制器回傳命令完成報文到完成隊列,命令執(zhí)行的具體流程包括:

      (1)主機端將NVMe協(xié)議命令封裝之后寫到內(nèi)存的提交隊列中,更新提交隊列的尾指針;

      (2)將提交隊列的尾指針寫到NVMe控制器的門鈴寄存器中,通知設備有新的命令需處理,等待設備獲?。?/p>

      (3)設備端通過輪詢門鈴寄存器,得知有新的命令要處理,立即從提交隊列中將命令取到設備固件上;

      (4)設備進行命令執(zhí)行,若是讀命令,則通過DMA將數(shù)據(jù)傳輸?shù)絻?nèi)存相應的位置;若是寫命令,則通過DMA將數(shù)據(jù)從內(nèi)存?zhèn)鬏數(shù)皆O備中,然后寫到對應的介質(zhì)上;

      (5)設備執(zhí)行命令后,將執(zhí)行結(jié)果封裝在完成包中,傳輸?shù)较鄳耐瓿申犃兄小M瓿砂邪嗣畹膱?zhí)行情況,如命令是否正確執(zhí)行,或者是否因為數(shù)據(jù)無法訪問或者執(zhí)行超時產(chǎn)生了錯誤等;

      (6)設備發(fā)送MSI-X中斷通知有新的命令完成包;

      (7)選取新的完成包進行處理,從命令完成包中的內(nèi)容可以得知命令的完成情況,然后進行相應的處理;

      (8)寫相應完成隊列的門鈴寄存器,告訴控制器完成包已經(jīng)處理結(jié)束,設備釋放完成包占用空間。至此,命令處理結(jié)束。

      2 關鍵技術

      2.1 NVMe原型仿真平臺整體架構

      主要由NVMe IP、MICROBLAZE、AXI_BRAM、AXI_INTC、AXI_INTERCONNECT等模塊組成,系統(tǒng)架構如圖2所示。NVMe IP模塊包含了NVMe協(xié)議處理過程的可編程邏輯(programble logic,PL)部分與PCIe模塊共同組成了NVMe原型仿真平臺與主機端交互的底層接口;剩余的MICROBLAZE、AXI_BRAM、AXI_INTC、AXI_INTERCONNECT等模塊均為賽靈思官方提供的功能性模塊。MICROBLAZE包含了NVMe協(xié)議命令處理過程的可編程系統(tǒng)(programble system,PS)部分,二者協(xié)同處理由主機端下發(fā)的NVMe命令。AXI_BRAM作為存儲器,用于存儲Identify數(shù)據(jù)以及主機端寫入的數(shù)據(jù)。AXI_INTC模塊是一個中斷控制器,通過AXI總線掛在MICROBLAZE上,用于處理NVMe命令處理完成時產(chǎn)生的中斷。AXI_INTERCONNECT模塊用于NVMe_IP模塊、MICROBLAZE、AXI_BRAM、AXI_INTC各模塊之間的數(shù)據(jù)傳輸[7,8]。

      圖2 NVMe原型仿真架構

      2.2 PCIe模塊

      該模塊由賽靈思官方提供的PCIe Gen3.0 IP核和PCIe傳輸模塊兩部分組成,如圖3所示。

      圖3 PCIe IP與NVMe IP間的數(shù)據(jù)交互

      PCIe Gen3.0 IP核集成了標準的PCIe協(xié)議以及與外部通信的AXI-S接口,通過AXI-S總線協(xié)議進行數(shù)據(jù)傳輸。PCIe Gen3.0 IP的AXI-S總線為4個,分別是m_axis_cq_*(接收端請求信號)、 m_axis_rc_*(發(fā)送方完成信號)、s_axis_rq_*(發(fā)送方請求信號)、s_axis_cc_*(接收端完成信號),請求端接口和完成端接口完全分開[9]。

      PCIe傳輸模塊則用于PCIe IP核與NVMe IP模塊之間的數(shù)據(jù)交互,在NVMe原型仿真平臺中起承上啟下的作用,它一方面與PCIe IP核進行數(shù)據(jù)通信,另一方面通過AXI總線與NVMe IP模塊中其它子模塊進行交互。它通過m_axis_cq_*、m_axis_rc_*系列信號接收來自PCIe IP的數(shù)據(jù)報文,并對TLP包進行解析;通過s_axis_rq_*、s_axis_cc_*系列信號將組裝好的TLP包發(fā)送到PCIe IP。PCIe傳輸模塊主要通過存儲器讀請求(memory read request,MRd)、存儲器寫請求(memory write request,MWr)、完成包數(shù)據(jù)(completion with data,CPLD)3種格式的TLP包進行主機端和NVMe原型仿真平臺之間的信息交互。

      其中主機端通過MRd數(shù)據(jù)包從設備端中讀取寄存器信息;通過MWr數(shù)據(jù)包來操作設備端的寄存器,也可以向設備端中寫入數(shù)據(jù),最終寫入到BRAM;通過CPLD數(shù)據(jù)包來傳輸完成命令中的數(shù)據(jù)包到主機端;另外MSI數(shù)據(jù)包是設備端向主機傳遞到的中斷信號。NVMe IP模塊從PCIe傳輸模塊中獲得主機的下發(fā)的TLP包之后,按照不同類型的數(shù)據(jù)包,傳遞給不同子模塊進行處理;當處理完成后,通過MSI數(shù)據(jù)包通知主機命令執(zhí)行已完成。

      2.3 NVMe IP模塊

      該模塊由控制器寄存器模塊、內(nèi)部寄存器模塊、命令處理模塊以及中斷模塊組成。

      2.3.1 控制器寄存器模塊

      該模塊用于NVMe IP模塊與主機軟件部分進行通信,主機軟件需要檢測NVMe IP狀態(tài)時,會通過讀取控制器寄存器來判斷當前所處狀態(tài);主機軟件也可通過配置控制器寄存器狀態(tài)來操作NVMe IP模塊。寄存器模塊均通過PCIe以MWr、MRd、CPLD報文形式進行傳輸,由于寄存器最大數(shù)據(jù)位寬為64位,所以對于MWr報文和CPLD報文,負載數(shù)據(jù)長度均不超過2DW。在PCIe模塊中MWr、WRd數(shù)據(jù)包已經(jīng)存儲在FIFO中,因此控制器寄存器模塊對于接收到的TLP報文處理流程為:

      (1)判斷FIFO是否為空,如果FIFO不空,表示有TLP報文寫入,則該模塊需要從FIFO中讀取TLP報文,獲取出TLP報文頭;

      (2)通過TLP報文頭中Req Type字段確定TLP的類型;

      (3)如果TLP為MWr報文,則需要再從FIFO中讀一次數(shù)據(jù),把負載數(shù)據(jù)讀取出來,寫給內(nèi)部寄存器;

      (4)如果TLP為MRd報文,則不用再從FIFO中讀取,需要將主機所讀取地址信息中的數(shù)據(jù)通過CPLD報文發(fā)送給主機。

      2.3.2 內(nèi)部寄存器模塊

      該模塊是NVMe原型仿真平臺內(nèi)部處理器與FPGA通信時使用的寄存器,是CPU與FPGA協(xié)同工作的紐帶,用于PS與PL間的數(shù)據(jù)交互,共同完成NVMe命令處理、數(shù)據(jù)的DMA傳輸、PCIe狀態(tài)處理等任務。在NVMe命令處理過程中,PS從內(nèi)部寄存器模塊中讀取從主機端下發(fā)的NVMe命令,通過OPC字段分析命令類型,按照不同命令類型,給PL下發(fā)相應的指令。PL按照PS下發(fā)的指令,進行后續(xù)處理,直至命令處理完畢,產(chǎn)生完成命令。

      內(nèi)部寄存器包括控制器準備信號、IO完成隊列使能信號、IO提交隊列使能信號、IO完成隊列中斷信號、IO提交隊列基地址、IO完成隊列基地址、IO提交隊列空間大小、IO完成隊列空間大小、IO完成隊列向量、數(shù)據(jù)存放地址等寄存器。另外包含3個NVMe完成命令寄存器和4個DMA命令寄存器。

      該模塊與CPU通信的接口為AXI_Lite接口,傳輸數(shù)據(jù)位寬為32位,在CPU進行寫寄存器操作時,取地址的高位作為使能信號,地址低位作為具體地址。NVMe完成命令分配有3個地址,在寫完第3個地址時,需要給出寫FIFO使能信號,用于存儲NVMe完成命令。即在寫寄存器地址等于0x30c時,給出使寫能信號r_awaddr_hcmd_cq_wr1_en,表示將存儲完成命令數(shù)據(jù)。DMA命令分配有4個地址,在寫完第4個地址時,同樣需要將DMA命令存儲到FIFO中。在寫寄存器地址等于0x31c時,給出使能信號r_awaddr_dma_cmd_wr_en,表示將存儲DMA命令數(shù)據(jù)。當需要數(shù)據(jù)寫入其它寄存器時,用r_s_axi_awaddr[7∶2]表示低八位地址,低兩位默認為0。

      2.3.3 命令處理模塊

      該模塊是NVMe原型仿真平臺中的重要模塊,主要作用是從主機內(nèi)存中獲取提交隊列命令,與PS部分配合對獲取的NVMe命令進行相應的處理,完成后向主機發(fā)送完成隊列命令。

      命令處理模塊分為提交隊列命令處理和完成隊列命令處理兩部分。其中提交隊列命令處理模塊處理主機的門鈴信號,通過與本地維護的提交隊列頭指針r_sq_head_ptr[7∶0]進行比較,如果不一致,則表示主機內(nèi)存中有新命令需要處理,此時向PCIe數(shù)據(jù)傳輸模塊發(fā)起MRd讀請求。讀取到提交命令后,該模塊將從讀取的命令中提取邏輯塊起始地址(starting logical block address,SLBA)、數(shù)據(jù)占用邏輯塊數(shù)量(number of logical blocks,NLB)、頁地址空間(physical region page,PRP)等信息存在對應的FIFO中,并更新本地提交隊列的頭指針。PS檢測到hcmd_sq_fifo中不為空時,則從FIFO中讀取命令進行軟件部分處理。命令完成隊列處理模塊接收從命令完成標志cpl_status[14∶13],向PCIe傳輸模塊發(fā)出MWr請求,發(fā)出命令完成報文。該模塊接收的命令完成標志有兩個來源,第一個是PS下發(fā)的完成標志,PS在處理管理命令后,會通知PL端命令已完成;第二個是IO命令中數(shù)據(jù)傳輸完成后,該模塊會收到數(shù)據(jù)傳輸完成的標志,再向主機發(fā)送完成命令報文。

      2.4 軟件部分

      NVMe控制器的軟件部分通過FPGA上的MICROBLAZE軟核來完成。PS不斷從內(nèi)部寄存器NVME_CMD_FIFO_REG_ADDR中讀取NVMe命令,通過Quene Identify的值判斷是Admin命令還是IO命令,如圖4所示。

      圖4 NVMe命令解析流程

      NVMe Admin命令處理部分可支持NVMe1.3協(xié)議規(guī)定的大部分管理命令,不支持Abort管理命令。從命令處理主函數(shù)輸入為NVMe命令結(jié)構體的nvmeCmd,通過cmdDword第一個Dword得到操作碼OPC,用來區(qū)分不同的Admin命令,從而進入到不同的子函數(shù)中進行命令處理,如圖5所示。

      圖5 Admin命令處理流程

      NVMe IO命令處理部分通過AXI_Lite從NVMe IP的FIFO中讀取命令,從中獲取PRP、SLBA、NLB等信息,通過地址映射確定BRAM中的物理地址。此處通過DMA直接將數(shù)據(jù)從DDR存儲到BRAM中,因此軟件部分也可以省略FTL部分,包括磨損均衡、垃圾回收等復雜算法。

      2.5 可擴展性

      本文設計的NVMe原型仿真驗證方案能夠支持基礎的NVMe管理命令如Set Features、Identify、Get Log Pagede等以及讀寫IO命令。同時支持自定義開發(fā)驗證,可以在NVMe IP的命令處理模塊中添加待驗證功能的邏輯代碼,在控制器內(nèi)部寄存器中添加該命令的OPC、QID等狀態(tài)信息,同時軟件部分更新相應命令的處理流程,最后在仿真文件sample_tests.vh中添加對應的激勵信號用來驗證功能的實現(xiàn)程度。除此之外該設計可以通過改變主機端下發(fā)數(shù)據(jù)文件大小,驗證數(shù)據(jù)大小對NVMe存儲速度的影響,下文仿真過程將實現(xiàn)4 K數(shù)據(jù)文件的寫操作。

      3 仿真驗證

      3.1 仿真環(huán)境

      在Windows10操縱系統(tǒng)下使用VIVADO 2017.4開發(fā)工具進行仿真實驗。根據(jù)NVMe1.3協(xié)議中的指令操作流程,通過TestBench模塊模擬主機端對NVMe設備端下發(fā)指令的過程,包括寄存器配置信號、配置控制器使能信號、等待RDY信號、下發(fā)提交隊列門鈴信號以及下發(fā)提交隊列命令等指令信號。

      3.2 仿真過程

      通過IO寫命令來執(zhí)行寫4 K數(shù)據(jù)的操作,將數(shù)據(jù)通過處理器直接寫到BRAM中。驗證NVMe控制器原型仿真平臺能否正確執(zhí)行初始化以及IO讀/寫命令,實現(xiàn)基本的讀寫功能。通過所占用硬件資源情況對比,體現(xiàn)工程結(jié)構優(yōu)化前后結(jié)構復雜度的變化,同時關注仿真過程耗時情況,體現(xiàn)仿真平臺對于加快NVMe控制器功能驗證的功能。

      首先主機端通過rq接口信號發(fā)送MWr請求寫提交隊列門鈴信號,如圖6所示。s_axis_rq_tdata[15:0]=0x1008表示I/O命令的提交隊列門鈴信號地址,s_axis_rq_tdata[159:128]=0x00000001表示I/O命令的第一條命令。

      圖6 發(fā)送MWr請求寫提交隊列門鈴信號

      NVMe控制器的cq接口信號接收到主機端發(fā)過來的MWr請求信號,如圖7所示。第一包TLP包頭s_axis_cq_tdata[15∶0]=0x1008表示I/O命令的提交隊列門鈴信號地址,第二包TLP數(shù)據(jù)包s_axis_cq_tdata[31∶0]=0x00000001表示I/O命令的第一條命令,和主機端發(fā)送的數(shù)據(jù)一致。

      圖7 接收主機端發(fā)過來的MWr請求信號

      當檢測到提交隊列門鈴信號更新表示有命令送入NVMe控制器,所以NVMe控制器通過rq接口發(fā)送MRd請求信號,如圖8所示。其中m_axis_rq_tdata[78:75]=0x0表示MRd請求,m_axis_rq_tdata[31:0]=0x76543210表示創(chuàng)建IO提交隊列(Creat_IO_SQ)中PRP1地址,即從主機內(nèi)存中讀取數(shù)據(jù)包的地址。

      圖8 NVMe控制器發(fā)送MRd請求信號

      主機端通過cq接口信號接收NVMe控制器發(fā)送過來的MRd請求命令,如圖9所示??梢钥吹絤_axis_cq_tdata[31∶0]=0x76543210為PRP1地址,和NVMe控制器發(fā)出的數(shù)據(jù)包一致。

      圖9 接收NVMe控制器發(fā)送過來的MRd請求信號

      主機端接收到MRd請求信號后,通過cc接口返回CPLD包報文,如圖10所示,此512 bit全部為有效數(shù)據(jù)。

      圖10 主機端接收到MRd請求信號

      NVMe控制器通過rc接口接收到CPLD包數(shù)據(jù)如圖11所示,第一包s_axis_rc_tdata[127∶0]=0x10001a00601a0001000404210,第二包s_axis_rc_tdata[127∶0]=0x01,第3包s_axis_rc_tdata[127∶0]=0x8cb7c00000000000,第4包s_axis_rc_tdata[127∶0]=0x0,第3個數(shù)據(jù)包中s_axis_rc_tdata[63∶32]=0x8cb7c000代表PRP1的地址,s_axis_rc_tdata[127∶96]=0x0代表PRP2的地址,前3包數(shù)據(jù)都是128 bit有效,根據(jù)s_axis_rc_tkeep[3∶0]=0x0111可知最后一包數(shù)據(jù)是低96Bit有效。

      圖11 NVMe控制器接收CPLD命令包信號

      NVMe控制器接收完主機端的CPLD命令包之后,控制器再繼續(xù)發(fā)送MRd數(shù)據(jù)請求包,讀取待寫入NVMe控制器的數(shù)據(jù),以實現(xiàn)I/O寫命令,將主機中的數(shù)據(jù)寫往BRAM中。

      NVMe控制器通過rc接口收到主機端的CPLD數(shù)據(jù)包,如圖12所示第一包數(shù)據(jù)s_axis_rc_tdata[127∶0]=0x443300000001a01001a0002000804000,第二包數(shù)據(jù)s_axis_rc_tdata[127∶0]=0x554433221100987654321099887-76655,第3包數(shù)據(jù)s_axis_rc_tdata[127∶0]=0xeeddccbbaaefcdab,第4、5、6、7、8包數(shù)據(jù)s_axis_rc_tdata[127∶0]=0x0,總共有1024 bit數(shù)據(jù)和主機端下發(fā)的一致。在I/O寫命令中總共寫了4 KB數(shù)據(jù),每次寫128 bit數(shù)據(jù),共寫入32次。初始地址是0x8cb7c000,按照32次寫入每次0x80依次遞增到0xh8cb7cf80,至此整個I/O寫命令完成。

      圖12 收到主機端的CPLD數(shù)據(jù)包信號

      上述仿真過程表明本文設計的基于BRAM的NVMe控制器原型仿真方案能夠正確執(zhí)行主機端下發(fā)的NVMe命令,實現(xiàn)NVMe仿真平臺的基本功能。同時通過該工程仿真過程中的綜合布線報告可以得知,在相同仿真環(huán)境下,在使用BRAM作為存儲介質(zhì)時所使用的FPGA內(nèi)部邏輯資源相比于使用閃存作為存儲介質(zhì)時減少約25%,仿真環(huán)境內(nèi)存占用率峰值下降約16.7%,仿真用時縮短約47%,見表1。

      表1 NVMe原型仿真對比數(shù)據(jù)

      4 結(jié)束語

      本文設計了基于BRAM的NVMe控制器原型仿真驗證方案,具有集成度高、可擴展性強、可運用靈活等特點,適用于適用于NVMe控制器的開發(fā)和驗證。現(xiàn)階段能夠支持主要的NVMe管理命令以及讀寫IO命令,后續(xù)NVMe控制器還可以進一步用于開發(fā)NVMe命令仲裁機制、命令硬件卸載提速[10]、IO命令的分散聚合表(scatter gather list,SGL)尋址、指令亂序優(yōu)化等功能,實現(xiàn)更高性能的NVMe控制器從而應用于存儲技術的飛速發(fā)展中。

      猜你喜歡
      寄存器隊列命令
      只聽主人的命令
      Lite寄存器模型的設計與實現(xiàn)
      計算機應用(2020年5期)2020-06-07 07:06:44
      隊列里的小秘密
      基于多隊列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      在隊列里
      移防命令下達后
      豐田加速駛?cè)胱詣玉{駛隊列
      分簇結(jié)構向量寄存器分配策略研究*
      這是人民的命令
      藍色命令
      嘉黎县| 微山县| 五寨县| 福建省| 本溪市| 五寨县| 迭部县| 航空| 乌拉特前旗| 广德县| 绥棱县| 山东| 敦煌市| 张家界市| 长宁区| 海淀区| 波密县| 布尔津县| 牙克石市| 明水县| 汕尾市| 榆林市| 武义县| 四会市| 新郑市| 栖霞市| 桐乡市| 莱州市| 开封市| 洛宁县| 安阳县| 霞浦县| 牙克石市| 上饶市| 南昌市| 蒙阴县| 林周县| 海南省| 葫芦岛市| 甘德县| 贡觉县|