吳 祥,彭 衛(wèi),蔡德林
基于Zynq的固態(tài)存儲系統(tǒng)設(shè)計和實現(xiàn)
吳 祥1,彭 衛(wèi)2,蔡德林2
(1.安徽大學(xué) 電子信息工程學(xué)院,安徽 合肥 230601;2.中國電子集團(tuán)第38研究所 微波研發(fā)中心,安徽 合肥 230031)
針對傳統(tǒng)的存儲介質(zhì)對高速數(shù)據(jù)流進(jìn)行存儲時可能出現(xiàn)的低速率以及高延時的情況,通過設(shè)計固態(tài)存儲系統(tǒng)以提高系統(tǒng)的存儲性能?;赬ilinx推出的Zynq平臺進(jìn)行設(shè)計,Zynq作為行業(yè)內(nèi)第一個成功地將ARM和FPGA整合到一起的可擴(kuò)展處理平臺,在FPGA部分設(shè)計PCIe接口和數(shù)據(jù)接口分別驅(qū)動固態(tài)硬盤和存儲數(shù)據(jù)流,在ARM部分移植嵌入式Linux操作系統(tǒng)并實現(xiàn)NVMe(非易失性存儲器)驅(qū)動和數(shù)據(jù)接口驅(qū)動。項目設(shè)計使用了PCIe接口方案的IP核簡化了對PCIe鏈路部分的設(shè)計,通過移植嵌入式Linux使系統(tǒng)支持文件系統(tǒng)以及多線程的能力。最后通過驗證系統(tǒng)可將PL端的高速數(shù)據(jù)流存入SSD(固態(tài)硬盤)中,相比于現(xiàn)有關(guān)于存儲系統(tǒng)的設(shè)計,縮短了系統(tǒng)的開發(fā)周期,提高了系統(tǒng)的速度和實用性。
PCIe;固態(tài)存儲;Petalinux;狀態(tài)機(jī);Zynq;DMA控制器
在對高速大量的數(shù)據(jù)流進(jìn)行存儲時,使用傳統(tǒng)的機(jī)械硬盤或片上存儲芯片存儲的速度和存儲的容量都很難達(dá)到要求,然而SSD(固態(tài)硬盤)有著存儲速度快、體積小、使用壽命長、無機(jī)械噪音和抗干擾能力強(qiáng)等特點更加適合在工業(yè)環(huán)境中應(yīng)用,并且隨著NAND Flash成本的進(jìn)一步降低,SSD這一新型存儲器經(jīng)歷了爆發(fā)式發(fā)展和應(yīng)用[1]。通過研究發(fā)現(xiàn)現(xiàn)有的關(guān)于固態(tài)存儲系統(tǒng)的設(shè)計主要是對PCIe接口部分的設(shè)計以及在standalone(裸板)下實現(xiàn)NVMe[2]驅(qū)動,然而對于PCIe接口和驅(qū)動部分的開發(fā)有著難度大和時間周期長等問題,在系統(tǒng)結(jié)構(gòu)方面也沒有預(yù)留對外的數(shù)據(jù)接口無法對外部的數(shù)據(jù)流進(jìn)行存儲,不能體現(xiàn)出系統(tǒng)的完整性缺乏靈活性。本文通過使用Xilinx的PCIe接口方案[3]來簡化PCIe接口的設(shè)計,并增加數(shù)據(jù)接口來接收外部數(shù)據(jù);在軟件方面,通過實現(xiàn)NVMe驅(qū)動和數(shù)據(jù)接口部分驅(qū)動實現(xiàn)對高速數(shù)據(jù)流的存儲。
Zynq平臺是由Xilinx公司推出的行業(yè)內(nèi)第一個可擴(kuò)展處理平臺,可為高端嵌入式應(yīng)用提供性能處理與計算[4]。Zynq在結(jié)構(gòu)上可分為2個部分:PS(processing system)和PL(programmable logic),其PS部分和傳統(tǒng)的ARM處理器內(nèi)部結(jié)構(gòu)一致,PL部分則是傳統(tǒng)的FPGA。但相較于傳統(tǒng)的ARM平臺外設(shè)固定,Zynq最大的特點就是可以利用PL部分來自定義外設(shè),這也是Zynq靈活性的一個具體表現(xiàn)。
本文系統(tǒng)設(shè)計基于Zynq 7035芯片,其PL部分集成了4路的高速GTX收發(fā)器,支持PCIe Gen2×4,可以配置為PCIe Root Complex(根復(fù)合體)模式來驅(qū)動PCIe接口的固態(tài)盤,PS部分的雙核ARM處理器架構(gòu)為V7,主頻可根據(jù)需要進(jìn)行配置最高可達(dá)800 MHz。
PCIe總線使用串行差分信號來傳輸數(shù)據(jù)具有傳輸帶寬高、可靠性高、抗干擾強(qiáng)以及成本低等特點。在PCIe鏈路的拓?fù)浣Y(jié)構(gòu)中可將PCIe設(shè)備分為Root Complex(根復(fù)合體)、Switch(交換開關(guān))和Endpoint(端點設(shè)備)3個部分。
PCIe總線和絕大多數(shù)總線一樣也采用分層來實現(xiàn),PCIe總線協(xié)議定義了三層從上到下依次為:事物層(transaction layer)、數(shù)據(jù)鏈路層(data link layer)、物理層(physical layer)[5],每一層的功能不同但下層總是為上層提供服務(wù)。其中事物層的主要職責(zé)是創(chuàng)建或解析TLP(transaction layer packet)和流量控制等,數(shù)據(jù)鏈路層主要是負(fù)責(zé)創(chuàng)建或解析DLLP(data link layer packet)、檢錯和糾錯等,物理層則是處理所有的Packet數(shù)據(jù)的物理傳輸。
圖1所示為系統(tǒng)結(jié)構(gòu)框圖,對于固態(tài)存儲系統(tǒng)的設(shè)計可分為2個部分來進(jìn)行,在PL部分使用FPGA資源設(shè)計PCIe接口子系統(tǒng)和外部數(shù)據(jù)接口模塊,當(dāng)邏輯部分設(shè)計完成后再在PS部分完成NVMe驅(qū)動和數(shù)據(jù)接口驅(qū)動設(shè)計。系統(tǒng)的PL和PS通過2個高速接口AXI_HP0和AXI_HP1進(jìn)行高速的數(shù)據(jù)傳輸,PS通過AXI_GP接口來對PL中各模塊控制。
圖1 固態(tài)存儲系統(tǒng)結(jié)構(gòu)圖
2.1.1 AXI PCIe橋接器
在Xilinx提供的多個PCIe接口解決方案中都包含一個名為Integrated Block For PCIe的IP核,Integrated Block For PCIe是Zynq芯片集成的PCIe硬核用來實現(xiàn)PCIe協(xié)議的物理層和數(shù)據(jù)鏈路層,其傳輸數(shù)據(jù)流是Unmapped(無地址映射)型的TLP數(shù)據(jù)包,在與PS進(jìn)行數(shù)據(jù)傳輸時要使用AXI Bridge來進(jìn)行地址映射以及對TLP數(shù)據(jù)包的封裝和解析,在Vivado中Integrated Block For PCIe和AXI Bridge組合為AXI Memory Mapped to PCIe,也稱為AXI PCIe橋接器[6]。使用AXI PCIe橋接器可簡化PL部分對PCIe接口子系統(tǒng)的設(shè)計,AXI PCIe橋接器既可配置為EP模式也可配置為RC模式,本文Zynq作為主機(jī)來驅(qū)動SSD,因此AXI PCIe橋接器應(yīng)被配置為RC模式。
AXI PCIe橋接器結(jié)構(gòu)如圖2所示,主要由3個部分組成:Integrated Block For PCIe、Master AXI Bridge和Slave AXI Bridge分別連接AXI地址域空間和PCIe地址域空間,2個不同的地址空間之間進(jìn)行訪問需要地址轉(zhuǎn)換的過程,當(dāng)EP設(shè)備對主機(jī)發(fā)起訪問時,發(fā)出的TLP請求首先被PCIe硬核接收,然后由Master Bridge(主橋)進(jìn)行地址翻譯將PCIe域地址轉(zhuǎn)換成相應(yīng)的AXI域地址,使得EP訪問到正確的AXI域中地址。當(dāng)RC對EP的BAR(基地址寄存器)空間發(fā)起訪問時,首先RC訪問的AXI域地址請求被SlaveBridge(從橋)接收,并且將其翻譯成PCIe域地址,然后由PCIe硬核將訪問請求封裝成TLP數(shù)據(jù)包,最后發(fā)送給PCIe設(shè)備完成對EP設(shè)備的BAR空間訪問。PCIe硬核實現(xiàn)了PCIe總線協(xié)議的物理層,主要完成創(chuàng)建和解析TLP數(shù)據(jù)包。
圖2 AXI PCIe橋接器
2.1.2 DMA控制器
DMA(直接內(nèi)存訪問)控制器的使用可大大減少處理器的工作負(fù)荷,處理器只需要只需指定源地址、目的地址、傳輸字節(jié)數(shù)和傳輸方向,DMA控制器就可以在無CPU控制下進(jìn)行數(shù)據(jù)搬移,在搬移結(jié)束后通過中斷告知CPU結(jié)果即可,這很大程度地提高了系統(tǒng)的性能[7]。
AXI PCIe橋接器完成了數(shù)據(jù)從Unmapped到Mapped的映射,CDMA(AXI Central DMA Controller,AXI中樞控制器)在PL部分使用FPGA邏輯資源實現(xiàn),可將PL端Mapped型數(shù)據(jù)流傳輸?shù)絇S端內(nèi)存中[8],因此選擇CDMA來完成高性能的數(shù)據(jù)搬移是最合適的方法。
設(shè)計數(shù)據(jù)接口來接收外界數(shù)據(jù)流,針對不同的系統(tǒng)應(yīng)用,對數(shù)據(jù)模塊進(jìn)行設(shè)計就可實現(xiàn)對不同接口(光口和以太網(wǎng)等)的數(shù)據(jù)流存儲,這更能體現(xiàn)系統(tǒng)的靈活性。
2.2.1 數(shù)據(jù)模塊
在PL端設(shè)計一個數(shù)據(jù)模塊,該模塊是自定義的具有AXI4接口的IP核,在該模塊中使用一個狀態(tài)機(jī)來控制其產(chǎn)生連續(xù)的32位數(shù)據(jù),狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換如圖3所示。其中Ready、Valid、Tdata和Tlast均是AXI4接口中的信號,Ready為高電平表示從設(shè)備準(zhǔn)備就緒可以接受數(shù)據(jù),Valid為高電平表示此時發(fā)送的數(shù)據(jù)為有效數(shù)據(jù),當(dāng)所發(fā)送的數(shù)據(jù)是最后一個數(shù)據(jù)的時候Tlast會從低電平變成高電平,Tdata為發(fā)送的數(shù)據(jù)且只有當(dāng)Ready和Valid均為高電平時數(shù)據(jù)才會被接收方成功接收。
圖3 數(shù)據(jù)模塊狀態(tài)轉(zhuǎn)換圖
在狀態(tài)機(jī)中,空閑態(tài)時valid為低電平此時輸出數(shù)據(jù)為無效數(shù)據(jù);當(dāng)按鍵被按下后跳轉(zhuǎn)到等待發(fā)送數(shù)據(jù)態(tài),如果此時接收方Ready為高電平,表示準(zhǔn)備好接受數(shù)據(jù),此時跳轉(zhuǎn)到數(shù)據(jù)發(fā)送態(tài);在數(shù)據(jù)發(fā)送態(tài)下,數(shù)據(jù)模塊從Tdata為1開始連續(xù)向從機(jī)發(fā)送數(shù)據(jù),當(dāng)Tdata的值大于786432時,立即跳轉(zhuǎn)到停止發(fā)送態(tài),并且將Tlast拉高表示786432為最后一個數(shù)據(jù);最后狀態(tài)機(jī)重新回到空閑態(tài),等待下一次按鍵被按下。
2.2.2 接口模塊
數(shù)據(jù)接口模塊通過DMA控制器來將PL端的高速數(shù)據(jù)流搬移到PS端的內(nèi)存中,F(xiàn)IFO模塊是一種先進(jìn)先出的數(shù)據(jù)緩存器,在對不同速率的模塊之間的數(shù)據(jù)進(jìn)行傳輸時可以作為緩沖器進(jìn)行調(diào)節(jié)[9]。數(shù)據(jù)模塊產(chǎn)生的數(shù)據(jù)首先放入FIFO中緩存,當(dāng)主機(jī)發(fā)起數(shù)據(jù)搬移命令后,F(xiàn)IFO中的數(shù)據(jù)則通過DMA搬移到PS端內(nèi)存中。
PCIe接口子系統(tǒng)的作為系統(tǒng)中重要的一部分,PCIe鏈路能否成功建立可以通過PCIe設(shè)備枚舉來得到驗證,在裸板環(huán)境下使用Xilinx官方提供的SDK來對AXI PCIe橋接器進(jìn)行配置,并對系統(tǒng)中EP設(shè)備進(jìn)行枚舉。為使系統(tǒng)的性能更穩(wěn)定,PCIe鏈路的參考時鐘由可編程時鐘芯片SI5338P提供,PS端通過IIC接口對時鐘芯片進(jìn)行配置,使其輸出穩(wěn)定的100 MHz PCIe鏈路參考時鐘。
首先通過Export Hardware功能將Vivado設(shè)計中的HDF(硬件描述文件)和編譯完成的bitstream文件導(dǎo)入到SDK中,再基于此設(shè)計裸板下的PCIe設(shè)備枚舉程序,裸板下對PCIe設(shè)備的枚舉流程如圖5所示。在枚舉函數(shù)中首先需定義AXI PCIe橋接器的實例,其類型為:
圖4 PCIe設(shè)備枚舉流程
其中Config是類型為Struct XAxiPcie_Config的變量,其包含了IP的硬件配置信息:
當(dāng)時鐘芯片配置成功后,SI5338P將為PCIe鏈路提供穩(wěn)定的100 MHz的差分時鐘,XAxiPcie_LookupConfig()函數(shù)通過唯一的設(shè)備ID來查找IP核配置信息,根據(jù)得到的配置信息來對Struct XAxiPcie變量進(jìn)行初始化,初始化成功后依據(jù)成員變量IncludeRootComplex的值判斷IP是否配置為RC模式,若未被配置為RC模式則無法進(jìn)行設(shè)備的枚舉串口打印枚舉失敗并且退出函數(shù),若IP被配置為RC模式,則通過XAxiPcie_IsLinkUp()函數(shù)來讀取BAR中鏈路狀態(tài)寄存器判斷鏈路是否建立成功,鏈路建立成功后讀取IP核寄存器的值,包括總線號、設(shè)備號、功能號和端口號,并對IP中可寫寄存器寫入數(shù)據(jù)再讀回比較讀寫數(shù)值是否一致,最后枚舉系統(tǒng)中的PCIe設(shè)備并通過串口將這些設(shè)備的信息打印出來并退出枚舉函數(shù)。
在Linux系統(tǒng)中,驅(qū)動程序作為低層硬件和上層應(yīng)用的橋梁,硬件設(shè)備在Linux下能夠正常工作必須要開發(fā)對應(yīng)的驅(qū)動程序,Zynq平臺采用的是FPGA+ARM的架構(gòu),在FPGA部分設(shè)計的IP核也必須要有驅(qū)動程序的支持才可以在Linux中正常運行[10]。NVMe官方已開放Linux環(huán)境下的NVMe驅(qū)動源碼,因此本節(jié)主要描述對數(shù)據(jù)接口部分驅(qū)動的開發(fā)。為使DMA控制器可正常工作需要設(shè)計嵌入式Linux系統(tǒng)下的DMA驅(qū)動程序,在早期發(fā)布的Linux內(nèi)核中,各種嵌入式處理器對DMA驅(qū)動框架是不統(tǒng)一的,都有自己的DMA編程接口,這給開發(fā)者帶來了很多不便,為了改變這一局面,Linux內(nèi)核開發(fā)了一個統(tǒng)一的DMA子系統(tǒng)—dmaengine[11](DMA引擎)。
在DMA驅(qū)動中定義一個struct dma_channel結(jié)構(gòu)體類型,此結(jié)構(gòu)體包含了一個DMA通道所涉及到的所有數(shù)據(jù)struct dma_channel結(jié)構(gòu)體類型定義如下:
DMA驅(qū)動的工作流程可以分為以下幾個步驟:
(1)使用API函數(shù)dma_request_slave_channel()向DMA引擎申請一個DMA接收通道,指定DMA傳輸?shù)姆较虿⒃趦?nèi)存中為其分配一塊適用于DMA操作的內(nèi)存。
(2)使用API函數(shù)device_prep_slave_sg()創(chuàng)建傳輸描述符chan_desc,對其進(jìn)行初始化并指定回調(diào)函數(shù),當(dāng)DMA操作完成后回調(diào)函數(shù)將被調(diào)用。
(3)使用API函數(shù)dmaengine_submit()將初始化過的傳輸描述符chan_desc提交給DMA引擎。
(4)使用API函數(shù)dma_async_issue_pending()開始對指定的DMA通道傳輸。
(5)等待DMA傳輸完成。
除此之外,驅(qū)動中還包括驅(qū)動的初始化函數(shù),驅(qū)動卸載函數(shù)。
Petalinux由Xilinx公司開發(fā),在Linux環(huán)境下對嵌入式Linux操作系統(tǒng)進(jìn)行開發(fā)的工具,不僅提供了Linux內(nèi)核(Kernel)、啟動文件(U-boot)、文件系統(tǒng)以及嵌入式應(yīng)用程序的配置和編譯方法,還整合了同步Vivado FPGA硬件設(shè)計工程到Petalinux中的方法,方便了軟硬件協(xié)同設(shè)計[12]。
在安裝Petalinux之前需要安裝依賴庫:lia32-libs、ncurses-dev、gcc-multilib、libssl-dev等,安裝成功后使用以下命令配置Petalinux環(huán)境變量腳本,每一次使用Petalinux工具之前都要進(jìn)行環(huán)境變量的配置。
#source
在Petalinux導(dǎo)入HDF文件并解析HDF文件后,使用內(nèi)核配置命令來對Linux內(nèi)核進(jìn)行配置,命令如下:
#petalinux-config -c kernel
在內(nèi)核配置的圖形界面下使能PCI總線支持,Xilinx AXI PCIe host bridge,NVMe塊設(shè)備等驅(qū)動的支持,完成配置保存并退出。
使用文件系統(tǒng)配置命令來配置Linux文件系統(tǒng),在文件系統(tǒng)配置界面下需要配置SSD的功能單元,命令如下:
#petalinux-config -c rootfs
DMA驅(qū)動是用戶開發(fā)的驅(qū)動模塊,需要使用Petalinux來添加到Linux系統(tǒng)中,大體流程如下[13]。
(1)使用Petalinux創(chuàng)建一個驅(qū)動模塊,此驅(qū)動模塊為自定義驅(qū)動基本框架。
(2)將開發(fā)的DMA驅(qū)動dma_driver.c等頭文件復(fù)制到驅(qū)動模塊文件夾下。
(3)編寫驅(qū)動的Makefile文件。
(4)向設(shè)備樹文件中添加DMA驅(qū)動的設(shè)備樹節(jié)點。
(5)用Petalinux編譯生成內(nèi)核鏡像文件image.ub(內(nèi)核鏡像文件)和BOOT.BIN(啟動鏡像文件)。
在使用DMA設(shè)備之前要手動加載驅(qū)動進(jìn)入內(nèi)核,加載進(jìn)內(nèi)核后在/dev目錄下可以看到一個名為dma_rx的字符設(shè)備。通過編寫上層應(yīng)用,在應(yīng)用程序中對dma_rx字符設(shè)備進(jìn)行操作就可通過DMA將PL端數(shù)據(jù)搬移到PS端內(nèi)存中。
本文的實驗使用Zynq 7035開發(fā)板搭建項目平臺,主機(jī)端配置為win 7操作系統(tǒng),8 GB內(nèi)存,I5-5400 CPU,在主機(jī)端虛擬機(jī)中安裝Ubantu14.01操作系統(tǒng)來使用Pealinux來對嵌入式Linux操作系統(tǒng)的裁剪和移植,將使用Petalinux工具生成的啟動文件U-BOOT和鏡像文件IMAGE拷貝到SD卡的FAT分區(qū)中,將文件系統(tǒng)拷貝到SD卡的EXT-4分區(qū)中,最后接通電源開機(jī)運行。
ILA(邏輯分析儀)是Vivado中對系統(tǒng)進(jìn)行調(diào)試時重要的工具,對數(shù)據(jù)模塊插入Vivado邏輯分析IP核來觀察模塊發(fā)送的數(shù)據(jù),圖5為按鍵按下后抓取的數(shù)據(jù)波形,模塊從1開始連續(xù)地發(fā)送數(shù)據(jù)接收方Ready信號一直為高,數(shù)據(jù)可正常被接收。
圖5 開始寫數(shù)據(jù)到FIFO
圖6為數(shù)據(jù)模塊連續(xù)發(fā)送數(shù)據(jù)直到786432,Tlast信號為高表示為最后一個數(shù)據(jù),Ready信號為高接收方可正確接受。數(shù)據(jù)模塊可以連續(xù)向fifo發(fā)送從1到786 432,總共786 432個數(shù)據(jù),每個數(shù)據(jù)位寬為32位,數(shù)據(jù)量為3 MB。
圖6 停止寫數(shù)據(jù)到FIFO
圖7為PCIe枚舉函數(shù)通過串口打印出系統(tǒng)中的PCIe設(shè)備,包括AXI PCIe Bridge IP核以及PCIe接口的固態(tài)盤,并分別讀取它們的總線號、設(shè)備號、功能號和廠家ID。
圖7 PCIe枚舉
在Ubuntu系統(tǒng)中,使用交叉編譯工具GCC將應(yīng)用程序編譯成在嵌入式Linux環(huán)境中運行的二進(jìn)制文件,并通過Tftp服務(wù)器將文件下載到開發(fā)版文件系統(tǒng)中。程序運行結(jié)果如圖8所示,PL端的數(shù)據(jù)存入了固態(tài)盤的data文件中,將其通過Tftp上傳到主機(jī)端,圖9為data文件中頭和尾部分?jǐn)?shù)據(jù),接收到的32位數(shù)據(jù)均以二進(jìn)制格式存入文件中,文件大小為3 MB其中連續(xù)保存了786 432個數(shù)。
圖8 程序運行結(jié)果
圖9 Data文件中二進(jìn)制數(shù)據(jù)
本文基于Zynq平臺,通過軟硬件協(xié)同設(shè)計的方法在PL端分別完成了PCIe接口和數(shù)據(jù)接口的設(shè)計,在PS端使用Petalinux移植嵌入式Linux操作系統(tǒng)并完成Linux下的驅(qū)動開發(fā),最終實現(xiàn)了對外部數(shù)據(jù)的存儲。不同于采用裸板開發(fā)主要針對PCIe接口子系統(tǒng)部分的設(shè)計,本文設(shè)計的存儲系統(tǒng)預(yù)留對外的高速數(shù)據(jù)接口更能體現(xiàn)系統(tǒng)的整體性,在不同的應(yīng)用中只需對數(shù)據(jù)模塊進(jìn)行重新設(shè)計就可以完成系統(tǒng)的整體設(shè)計,在Linux的支持下此系統(tǒng)也可進(jìn)行更為復(fù)雜的任務(wù)處理具有更高的靈活性。
[1]陳思揚. 基于FPGA的NVMe接口設(shè)計[D]. 西安: 西安電子科技大學(xué), 2015.
[2] NVM Express Inc. NVM Express[EB/OL]. http://www. nvmexpress.org/about/,2018.
[3] Xilinx Inc.pcie central dma subsystem[EB/OL]. http:// china.xilinx.com/support/documentation/application_notes/xapp1171-pcie-central-dma-subsystem.pdf,2019.
[4] 陸啟帥, 陸彥婷, 王地. Xilinx Zynq SoC與嵌入式Linux設(shè)計實戰(zhàn)指南[M]. 北京: 清華大學(xué)出版社, 2014.
[5]Revision 3.0,PCI Express Base Specification[S].
[6]LiuYu-feng,Xu De-gang, Cai Hai-ming, et al.System Architecture Design of PCIe Root Complex Based on SOPC[C]. Proccedings of the 36th China Control Conference,USA:IEEE Conference Publi -cation,2017.
[7] 郭志紅,石春, 吳剛.嵌入式以太網(wǎng)通信系統(tǒng)設(shè)計與實現(xiàn)[J].小型微型計算機(jī)系統(tǒng),2015, 36(4):754-758.
[8] Cao Ying-jie, Zhu Yong-xin, Wang Xu,et al. An FPGA based PCI-E Root Complex Architecture for Standalone SOPCs[C]. International Sympo-sium On Field- programmable Custom Computing Machines, USA: IEEE Conference Publication,2013.
[9] 黃萬偉,董永潔.Xilinx FPGA應(yīng)用進(jìn)階[M].北京:電子工業(yè)出版社,2014.
[10] Wang Long-fei, Zhao Xiao-qing, et al. Zynq-based Solid-State Drive Prototyping Platform for Emerging Non-Volatile Memories[C].2016 13th IEEE International Conference on Solid-State and Integrated Circuit Technology (ICSICT)Proceeding,USA:IEEE Conference Publication, 2016.
[11] 姜先剛,劉洪濤.嵌入式Linux驅(qū)動開發(fā)教程[M]. 北京: 電子工業(yè)出版社,2017.
[12] 李朗,張索非,楊浩.基于Zynq-7000的視頻處理系統(tǒng)框架設(shè)計[J].計算機(jī)技術(shù)與發(fā)展,2017, 27(5):192-195.
[13] Xilinx Inc.Xilinx Petalinux SDK user guide:getting started guide[EB/OL].https://www.xilinx.com/support/documentation/sw_manuals/xilinx2018_2/ug1144-petalinux-tools-reference-guide.pdf, 2018.
Design and Implementation of Solid-state Storage System Based on Zynq
WU Xiang1,PENG Wei2, CAI De-lin2
(1.School of Electronics and Information Engineering, Anhui University, Hefei 230601, China;2.Microwave Research and Development Center, The 38th Institute of China Electronic Corporation, Hefei 230031, China)
In the data acquisition and processing system, storing a large number of high-speed data streams is one of the key points of system design. Traditional HDD has some deficiencies, such as low storage rate, high storage delay, poor system stability and so on. Compared with the insufficiency of HDD, NVMe SSD has the characteristics of high storage rate, low storage delay and small size. This paper is based on the Zynq platform of Xilinx. Zynq is the first extensible processing platform to successfully integrate ARM and FPGA. In the PL of Zynq, the PCIe interface and data interface are designed, which are respectively used to connect the PCIe interface SSD and external data stream. The embedded Linux operating system is transplanted in the PS of the Zynq and the NVMe drive and data interface drive are realized. By using the IP core of PCIe interface, the design of the PCIe link part is simplified. By transplanting embedded Linux, file system and multi-threading capability are supported in the system. Finally through verification, the high-speed data stream can be stored in SSD. Compared with the existing design of storage system, the system designed in this paper has the characteristics of high storage performance, strong practicability and high flexibility.
PCIe; solid-state storage; Petalinux; state machine; Zynq; DMA controller
TP368
A
1674-3261(2020)01-0012-06
2019-10-17
安徽省高校自然科學(xué)研究重大項目(KJ2017ZD03);安徽省教育廳自然科學(xué)重點項目(KJ2018A0019)
吳 祥(1994-),男,安徽銅陵人,碩士生。
蔡德林(1965-),男,安徽安慶人,研究員。
優(yōu)先出版地址:http://kns.cnki.net/kcms/detail/21.1567.T.20191227.1019.010.html
責(zé)任編校:孫 林