基于DMA的高速數(shù)據(jù)閃存陣列的設(shè)計(jì)方案
1.引言
本文引用地址:http://www.ex-cimer.com/article/201809/388613.htmNAND FLASH由于其存儲(chǔ)的容量大,小體積,同時(shí)讀寫(xiě)速度快,外圍電路簡(jiǎn)單而成為現(xiàn)在存儲(chǔ)應(yīng)用中的主流產(chǎn)品。但NAND FLASH的寫(xiě)操作比較特殊,在存儲(chǔ)數(shù)據(jù)時(shí)要先寫(xiě)入存儲(chǔ)命令和存儲(chǔ)地址,編程時(shí)不能對(duì)其執(zhí)行任何操作。傳統(tǒng)的由單片機(jī)作為核心的采集采用查詢的方式對(duì)NAND FLASH進(jìn)行編程,不僅操作復(fù)雜,而且減慢了存儲(chǔ)速度。
為此設(shè)計(jì)了一種基于DMA傳輸方式的高速存儲(chǔ)陣列。采用DMA方式實(shí)現(xiàn)了對(duì)命令和地址的傳輸,并實(shí)現(xiàn)流水線存儲(chǔ)過(guò)程,加快了存儲(chǔ)速度。而且系統(tǒng)以FPGA為平臺(tái),集成度高,具有靈活的總線寬度,拓寬了存儲(chǔ)陣列的應(yīng)用環(huán)境。
2.系統(tǒng)結(jié)構(gòu)
數(shù)據(jù)存儲(chǔ)系統(tǒng)結(jié)構(gòu)如圖1所示,包括以下3個(gè)部分:
(1)FPGA,數(shù)據(jù)存儲(chǔ)系統(tǒng)的核心,集成度高,功耗低,內(nèi)部嵌有總線結(jié)構(gòu)靈活,并行處理能力強(qiáng)的軟處理器核MICROBLAZE,并有用戶自定義的IP核,可以實(shí)現(xiàn)對(duì)閃存陣列的控制和數(shù)據(jù)的正確存儲(chǔ),而且可以將陣列中存儲(chǔ)的數(shù)據(jù)上傳到電腦,進(jìn)行數(shù)據(jù)的后期處理。
( 2 )存儲(chǔ)陣列:系統(tǒng)采用4×4陣列形式,由SAMSUNG公司的K9NBG08U5A搭建而成。構(gòu)建閃存陣列時(shí),所有FLASH使用相同的控制信號(hào);同一列的FLASH的片選信號(hào)相同,但數(shù)據(jù)通道不同;同一行的FLASH的片選信號(hào)不同,而數(shù)據(jù)通道相同。
(3)USB接口:上位機(jī)和存儲(chǔ)系統(tǒng)的交互通過(guò)USB接口進(jìn)行,上位機(jī)將命令和配置信息通過(guò)USB接口傳入FPGA,使FPGA內(nèi)部的MICROBLAZE執(zhí)行相應(yīng)的操作。數(shù)據(jù)回讀時(shí)通過(guò)USB接口將數(shù)據(jù)傳回上位機(jī)。本設(shè)計(jì)采用FIDI公司的FT245R作為上位機(jī)與FPGA通信的USB接口芯片。使用FIDI公司提供的D2XX驅(qū)動(dòng)程序,最快的傳輸速率高達(dá)1MBps.
3.DMA設(shè)計(jì)實(shí)現(xiàn)
DMA的作用是控制閃存陣列的操作,達(dá)到數(shù)據(jù)的快速存儲(chǔ)。其設(shè)計(jì)主要包括兩部分:DMA方式寫(xiě)命令和地址,流水線操作流程的實(shí)現(xiàn)。DMA方式寫(xiě)命令和地址是用硬件的方法將閃存陣列編程需要的命令碼和地址按時(shí)序釋放到數(shù)據(jù)總線,節(jié)約了單片機(jī)查詢時(shí)所浪費(fèi)的時(shí)間;流水線操作流程是DMA對(duì)閃存陣列編程階段等待的時(shí)間的利用,提高了存儲(chǔ)速度。
3.1 DMA方式寫(xiě)命令和地址
對(duì)FLASH進(jìn)行存儲(chǔ)操作時(shí)應(yīng)先向FLASH寫(xiě)入編程開(kāi)始命令,然后是五個(gè)周期的有效塊存儲(chǔ)地址和2K字節(jié)數(shù)據(jù),最后寫(xiě)入結(jié)束編程命令。用DMA方式傳送命令和地址花費(fèi)的時(shí)間低于單片機(jī)查詢的方式,提高了存儲(chǔ)速度。由于系統(tǒng)閃存陣列規(guī)模小,可以選用全相關(guān)的無(wú)效塊管理方法,其控制簡(jiǎn)單、算法容易實(shí)現(xiàn)。無(wú)效塊的信息事先緩存于地址FIFO,待數(shù)據(jù)存儲(chǔ)時(shí),由DMA讀取。此外每片NAND FLASH的編程命令碼相同,所以對(duì)每一列閃存操作時(shí),每個(gè)FLASH IO口上的數(shù)據(jù)是相同的。DMA方式寫(xiě)命令和地址如圖2所示,相同的地址和命令先并置在一起,然后通過(guò)DMA方式發(fā)送到數(shù)據(jù)總線,最后在每個(gè)FLASH的I/O口將分配。
圖2中的八選一電路的作用是按flash的操作時(shí)序?qū)ù鎯?chǔ)數(shù)據(jù),命令,地址放到FLASH的IO總線上,通道的選擇由DMA控制。與此同時(shí),相應(yīng)的控制信號(hào)ALE、CLE、WE等變?yōu)橛行щ娖?,?shí)現(xiàn)命令、數(shù)據(jù)、地址的寫(xiě)入。
這個(gè)部分時(shí)序仿真如圖3所示。信號(hào)線一是頻率為50MHz的時(shí)鐘信號(hào);信號(hào)線二是FLASH寫(xiě)信號(hào);信號(hào)線三是ALE信號(hào)線,當(dāng)它為高電平時(shí),寫(xiě)入FLASH的地址將鎖存到地址寄存器;信號(hào)線四是CLE信號(hào),當(dāng)它為高電平時(shí),寫(xiě)入FLASH的命令將鎖存到命令寄存器;剩下的信號(hào)是讀數(shù)據(jù)FIFO的信號(hào)。
3.2 DMA實(shí)現(xiàn)流水線操作流程
K9NBG08U5A對(duì)有效數(shù)據(jù)的存儲(chǔ)操作包括加載階段和編程階段,編程階段期間,F(xiàn)PGA不能對(duì)FLASH進(jìn)行操作,因此對(duì)于單片F(xiàn) L A S H存儲(chǔ)器而言,編程階段的時(shí)間被浪費(fèi),不利于達(dá)到快速存儲(chǔ)。為此可采用時(shí)分多路復(fù)用的方法對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),具體實(shí)現(xiàn)方式就是首先對(duì)第一列的Nandflash加載數(shù)據(jù),數(shù)據(jù)加載完后,第一列Nandflash隨后就將進(jìn)入自動(dòng)編程狀態(tài),立即再加載第二列FLASH.如此循環(huán)進(jìn)行數(shù)據(jù)加載,直到最后一片加載完成后,再回到第一片。這樣就充分利用了編程階段的時(shí)間,使存儲(chǔ)速度得到提升,此過(guò)程也稱流水線操作。
為了實(shí)現(xiàn)流水線的存儲(chǔ)方式,本文也用DMA控制器實(shí)現(xiàn)了對(duì)FLASH的片選。如圖4所示,圖中flash_ce_s代表每列flash的片選信號(hào),其中低電平代表對(duì)flash加載有效,從圖中可以看出DMA控制器對(duì)flash依次加載,實(shí)現(xiàn)了流水線的操作流程。
4.系統(tǒng)驗(yàn)證
本設(shè)計(jì)在用戶邏輯里設(shè)計(jì)一個(gè)計(jì)數(shù)時(shí)鐘為16MHZ的計(jì)數(shù)器,計(jì)數(shù)時(shí)鐘每來(lái)一次,就將數(shù)據(jù)分別緩存于四個(gè)FIFO并將數(shù)據(jù)通過(guò)DMA的方式存入閃存陣列系統(tǒng)中。通過(guò)上位機(jī)將數(shù)據(jù)回讀,如圖5所示。
從圖中可以看出連續(xù)的4個(gè)字節(jié)的數(shù)據(jù)都是相同的,它們分別來(lái)自4個(gè)緩存FIFO的同一個(gè)次計(jì)數(shù)的數(shù)據(jù)。同時(shí),數(shù)據(jù)每4個(gè)字節(jié)是按一遞增,即沒(méi)有出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象。由此可知系統(tǒng)的DMA控制器可以實(shí)現(xiàn)閃存陣列對(duì)數(shù)據(jù)的快速,正確存儲(chǔ)。
5.結(jié)論
本文在測(cè)控系統(tǒng)中海量數(shù)據(jù)的快速存儲(chǔ)的基礎(chǔ)上提出了一種基于DMA的數(shù)據(jù)存儲(chǔ)陣列系統(tǒng)的設(shè)計(jì)方案。它是以FPGA為平臺(tái)構(gòu)建的SOPC系統(tǒng),內(nèi)含軟核處理器Microblaze和包含DMA控制器的用戶自定義IP,通過(guò)實(shí)驗(yàn)驗(yàn)證了本方案所設(shè)計(jì)的DMA控制器實(shí)現(xiàn)了對(duì)閃存陣列的編程命令、地址的傳輸,以及存儲(chǔ)陣列的流水線編程,提高了傳統(tǒng)的由CPLD與單片機(jī)組成的存儲(chǔ)測(cè)試系統(tǒng)的速度。
評(píng)論