代明清 邊慶 周嘯 趙謙
摘要:針對(duì)當(dāng)前提高存儲(chǔ)系統(tǒng)容量和訪問(wèn)速度的迫切需求,設(shè)計(jì)了一種高速大容量存儲(chǔ)系統(tǒng),系統(tǒng)以PCI總線為通信接口,以FPGA 為控制核心,通過(guò)對(duì)多片NAND Flash 的邏輯控制實(shí)現(xiàn)數(shù)據(jù)的高速存儲(chǔ)。提出了流水線、壞塊管理、并行硬件ECC校驗(yàn)等關(guān)鍵技術(shù)。驗(yàn)證結(jié)果表明,系統(tǒng)工作性能穩(wěn)定、可靠性高、能夠完成大量原始數(shù)據(jù)的高速記錄,保證了數(shù)據(jù)記錄的實(shí)時(shí)性。
關(guān)鍵詞:大容量存儲(chǔ);NAND Flash;流水線;ECC校驗(yàn)
中圖分類號(hào):TN274.2 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)13-0208-03
Design of High Speed and Mass Storage System Based on NAND Flash
DAI Ming-qing,BIAN Qing,ZHOU Xiao,ZHAO Qian
(Xi'an Aeronautics Computing Technique Research Institute,AVIC,Xi'an 710065,China)
Abstract:For the urgent requirement to improve the capacity and access speed of storage system, a high speed and mass storage system is designed. The system uses PCI bus as the communication interface and FPGA as the core controller to realize the logic control of several NAND Flash slices and complete the high speed storage of data. Key technologies such as pipeline, bad block management and parallel hardware ECC are presented. Experimental results show that the system has the advantages of stable performance, high reliability, can accomplish the high-speed record of original data which ensures the real-time performance of data recording.
Key words: mass storage; NAND Flash; pipeline; ECC verification
隨著數(shù)字信號(hào)處理技術(shù)和微電子技術(shù)的飛速發(fā)展,數(shù)據(jù)采集和數(shù)據(jù)存儲(chǔ)在雷達(dá)、通信、圖像處理、語(yǔ)音識(shí)別、航空電子等領(lǐng)域中得到了廣泛應(yīng)用,隨之對(duì)數(shù)據(jù)存儲(chǔ)系統(tǒng)的容量、存儲(chǔ)速率、抗振動(dòng)能力等也提出了更高的要求。
傳統(tǒng)的磁存儲(chǔ)技術(shù)雖然成本低,但其機(jī)械特性使得存儲(chǔ)設(shè)備體積大、功耗高、易損壞,已不再適用于高速大容量數(shù)據(jù)的存儲(chǔ)。近幾年快速發(fā)展起來(lái)的閃存技術(shù)具有明顯優(yōu)勢(shì),基于閃存形成的固態(tài)存儲(chǔ)器SSD(solid state disk)存儲(chǔ)密度高、可靠性高、體積小、重量輕,且抗震動(dòng)、抗沖擊、溫度適應(yīng)范圍寬,可以滿足苛刻條件下的數(shù)據(jù)存儲(chǔ)要求,成為當(dāng)今數(shù)據(jù)存儲(chǔ)系統(tǒng)的首選。
結(jié)合實(shí)際應(yīng)用,選用FPGA為硬件平臺(tái),以NAND Flash閃存為主要存儲(chǔ)介質(zhì),設(shè)計(jì)實(shí)現(xiàn)了一款高速、大容量數(shù)據(jù)存儲(chǔ)系統(tǒng)。
1 系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
圖1為系統(tǒng)總體結(jié)構(gòu)框圖[1]。系統(tǒng)采用16片NAND Flash芯片組成大容量存儲(chǔ)陣列,以FPGA為控制核心,以標(biāo)準(zhǔn)PCI總線為外部通信接口,實(shí)現(xiàn)與PC7447、PC8270、PC8640等具有標(biāo)準(zhǔn)PCI總線接口的處理器模塊的通信,完成大容量數(shù)據(jù)的存儲(chǔ)。
NAND Flash芯片選用MICRON公司的MT29F64G08AJABAWP芯片,單片存儲(chǔ)容量8G×8bit,含16384個(gè)數(shù)據(jù)塊,每塊128個(gè)頁(yè),每頁(yè)(4096+224)個(gè)字節(jié),4096為每頁(yè)的數(shù)據(jù)存儲(chǔ)區(qū),224為每頁(yè)的空閑存儲(chǔ)區(qū)。系統(tǒng)分為四個(gè)通道,每個(gè)通道4顆芯片,進(jìn)行32bit的位擴(kuò)展,四個(gè)通道共計(jì)16顆芯片,組成128GB的存儲(chǔ)陣列。
FPGA選用Xilinx公司的XQ4VLX60-10FF668M可編程邏輯芯片,完成整個(gè)存儲(chǔ)器系統(tǒng)的內(nèi)部控制。四個(gè)通道分別采用一組寄存器和一個(gè)16KB的數(shù)據(jù)Buffer實(shí)現(xiàn)對(duì)各通道命令、地址、狀態(tài)及數(shù)據(jù)的傳遞和處理,每個(gè)通道內(nèi)的數(shù)據(jù)線和控制線相互獨(dú)立。PCI接口由FPGA內(nèi)部的PCI IP核實(shí)現(xiàn),位寬64bit、帶寬66MHz。
2 FPGA與Flash接口電路
FPGA是整個(gè)硬件系統(tǒng)的核心,完成系統(tǒng)復(fù)雜的時(shí)序控制, 使系統(tǒng)有條不紊地運(yùn)行,F(xiàn)lash存儲(chǔ)陣列實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。圖2為FPGA與NAND Flash芯片的連接關(guān)系[2]。
與NOR Flash不同,NAND Flash芯片沒(méi)有專門的地址線,地址和數(shù)據(jù)共用一組信號(hào)線AD[7:0],芯片通過(guò)CLE#命令鎖存信號(hào)、ALE地址鎖存信號(hào)、WE#寫使能信號(hào)、RE#讀使能信號(hào)、CEx#片選信號(hào)完成讀寫控制,R/B#信號(hào)為Flash芯片的狀態(tài)信號(hào),該信號(hào)為低電平時(shí),表明flash芯片正在進(jìn)行當(dāng)前操作,不響應(yīng)其他任何外部命令。
3 Flash基本功能實(shí)現(xiàn)
NAND Flash在進(jìn)行讀寫操作的時(shí)候,外部控制器不能通過(guò)普通總線的形式對(duì)某一位進(jìn)行操作,而是以頁(yè)為最小單位進(jìn)行讀寫操作,以塊為最小單位進(jìn)行擦除操作的,圖3為NAND Flash操作的基本操作流程[3]。
寫操作時(shí)首先發(fā)送寫命令0x80h、然后發(fā)送5個(gè)周期的地址及存儲(chǔ)數(shù)據(jù),在完成數(shù)據(jù)加載后發(fā)送0x10h命令,此時(shí)NAND Flash芯片的RB#信號(hào)會(huì)自動(dòng)變低,進(jìn)入自編程階段,當(dāng)RB#信號(hào)變高后,表明芯片自編程結(jié)束,進(jìn)入狀態(tài)讀取階段,檢測(cè)編程操作是否成功。
讀操作時(shí)首先發(fā)送讀命令0x00h、然后發(fā)送5個(gè)周期的地址及0x30h命令,當(dāng)RB#信號(hào)由低變高后,即可將指定地址的一頁(yè)數(shù)據(jù)讀出,通過(guò)狀態(tài)讀取,檢測(cè)讀操作是否成功。
擦除操作以塊為單位進(jìn)行,首先發(fā)送擦除命令0x60h啟動(dòng)當(dāng)前塊的擦除操作,然后傳送3個(gè)周期的地址及0xd0h命令,即可執(zhí)行內(nèi)部塊擦除操作,當(dāng)RB#信號(hào)由低變高后,表明芯片擦除結(jié)束,進(jìn)入狀態(tài)讀取階段,檢測(cè)擦除操作是否成功。
4 系統(tǒng)關(guān)鍵技術(shù)
4.1 流水線設(shè)計(jì)
就單個(gè)NAND Flash 芯片而言,數(shù)據(jù)存取速率很慢,遠(yuǎn)遠(yuǎn)不能滿足高速存儲(chǔ)的需求,系統(tǒng)采用空間并行與時(shí)間并行的方法拓寬存儲(chǔ)帶寬??臻g上將4片位寬為8 bit 的Flash芯片并行擴(kuò)展為32bit 的Flash 芯片組,可使存儲(chǔ)帶寬提高為原來(lái)的4 倍。
時(shí)間上主要采用流水線技術(shù)[4]實(shí)現(xiàn)。以NAND Flash 數(shù)據(jù)存儲(chǔ)過(guò)程為例,存儲(chǔ)過(guò)程一般包括2 個(gè)階段:第1 階段進(jìn)行命令和數(shù)據(jù)的加載,第2 階段進(jìn)行頁(yè)編程。加載命令階段的典型時(shí)間大約為130us,自編程時(shí)間最長(zhǎng)為500us,檢測(cè)大約要0.1us,自編程階段的時(shí)間約是加載操作的4倍,在這期間內(nèi)NAND Flash 無(wú)法響應(yīng)外部任何控制命令,也無(wú)法接收數(shù)據(jù)??衫么鎯?chǔ)系統(tǒng)中每個(gè)Flash 芯片組頁(yè)編程的間隙對(duì)其他空閑的芯片組進(jìn)行數(shù)據(jù)寫入操作,達(dá)到流水并行的存儲(chǔ)效果,從而大大提高訪問(wèn)速度。Flash流水線操作示意圖如圖4 所示。
經(jīng)計(jì)算,單片NAND Flash的理論最慢寫入速度約為6.4MB/s,芯片并行設(shè)計(jì)后,速度提高到單片的4倍,約為25.6MB/s。采用4級(jí)流水后的寫速度計(jì)算如下:
[寫入速度=一頁(yè)數(shù)據(jù)量×并行操作芯片數(shù)量×流水級(jí)數(shù)加載時(shí)間×流水級(jí)數(shù)+自編程時(shí)間+檢測(cè)時(shí)間]
可得寫速度約為63.0MB/s。
4.2 Flash壞塊管理
由于NAND Flash生產(chǎn)工藝的限制,芯片出廠時(shí)會(huì)有一定數(shù)量的初始?jí)膲K,廠商會(huì)在每個(gè)物理塊的第0頁(yè)和第1頁(yè)的spare區(qū)第0字節(jié)做標(biāo)記,正常塊標(biāo)記為0xff,壞塊標(biāo)記為非0xff。在工作過(guò)程中,如果某一塊的擦除或編程次數(shù)過(guò)多,也可能導(dǎo)致這一塊變成壞塊。為了保障閃存的正常使用和數(shù)據(jù)的安全性,需要建立壞塊列表,對(duì)壞塊進(jìn)行必要的檢測(cè)和管理[5]。
圖5為壞塊列表建立關(guān)系,將系統(tǒng)所有物理塊劃分為兩部分,前面為有效塊區(qū),后面為保留區(qū),邏輯塊數(shù)量等于有效塊區(qū)的物理塊數(shù)量。由于有效塊區(qū)的壞塊都被保留區(qū)的好塊替換,因此對(duì)于上層來(lái)說(shuō),只訪問(wèn)邏輯塊號(hào)即可避免出現(xiàn)訪問(wèn)到壞塊的情況,其中第0個(gè)物理壞塊用來(lái)存放壞塊映射列表。
4.3 ECC校驗(yàn)
在使用過(guò)程中,NAND Flash存儲(chǔ)數(shù)據(jù)偶爾會(huì)發(fā)生“位”翻轉(zhuǎn)問(wèn)題,因此存儲(chǔ)數(shù)據(jù)需要采取必要的檢錯(cuò)和糾錯(cuò)措施。常用的數(shù)據(jù)檢驗(yàn)方法有奇偶校驗(yàn)和CRC校驗(yàn)等。奇偶校驗(yàn)不具備糾錯(cuò)的能力,CRC校驗(yàn)通常用于通信領(lǐng)域?qū)崿F(xiàn)差錯(cuò)控制。本系統(tǒng)結(jié)合NAND Flash整頁(yè)訪問(wèn)的特點(diǎn),采用FPGA邏輯設(shè)計(jì)了一種并行硬件ECC(Error Checking and Correcting)校驗(yàn)?zāi)P汀?/p>
ECC校驗(yàn)中,每128字節(jié)的數(shù)據(jù)塊將生成2.5個(gè)字節(jié)長(zhǎng)度的ECC校驗(yàn)碼,校驗(yàn)碼的生成過(guò)程如下圖6所示[6],p1由每字節(jié)的第7,5,3,1位相異或所得,p1`由每字節(jié)的6,4,2,0相異或生成。
頁(yè)編程操作時(shí)候,將整頁(yè)數(shù)據(jù)生成的ECC碼存放在每頁(yè)的Spare區(qū),讀操作時(shí),從NAND Flash中讀出的ECC碼和讀出數(shù)據(jù)計(jì)算出的ECC碼相異或,根據(jù)異或結(jié)果檢驗(yàn)數(shù)據(jù)錯(cuò)誤,數(shù)據(jù)及ECC碼的存儲(chǔ)格式[7]如圖7所示。本系統(tǒng)ECC能糾正單比特錯(cuò)誤和檢測(cè)雙比特錯(cuò)誤,而且計(jì)算速度很快,但對(duì)1比特以上的錯(cuò)誤無(wú)法糾正,對(duì)2比特以上的錯(cuò)誤不保證能檢測(cè)。
5 結(jié)論
設(shè)計(jì)了一種基于FPGA和NAND Flash的高速大容量通用數(shù)據(jù)存儲(chǔ)系統(tǒng),介紹了系統(tǒng)總體方案,并引出了大容量存儲(chǔ)的一些關(guān)鍵技術(shù),包括Flash芯片的并行操作、流水線技術(shù)、壞塊列表建立及ECC校驗(yàn)等,大大提高了系統(tǒng)的存儲(chǔ)容量、讀寫速度及數(shù)據(jù)可靠性。該存儲(chǔ)系統(tǒng)已成功應(yīng)用于多項(xiàng)試驗(yàn)系統(tǒng)中,經(jīng)過(guò)實(shí)踐檢驗(yàn),達(dá)到了系統(tǒng)設(shè)計(jì)要求。
參考文獻(xiàn):
[1] 王立峰, 胡善清, 林峰,等. 基于閃存的高速海量存儲(chǔ)模塊設(shè)計(jì)[J]. 計(jì)算機(jī)工程, 2011, 37(7).
[2] 孔令振, 穆建文. 基于NAND Flash 大容量數(shù)據(jù)存儲(chǔ)器的設(shè)計(jì)[J]. 微型機(jī)與應(yīng)用, 2014, 33(9).
[3] 朱知博. 基于NAND FLASH 的高速大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J]. 現(xiàn)代電子技術(shù), 2011, 34(8).
[4] 趙亞慧, 金龍旭, 陶宏江,等. 基于NAND Flash 的高速大容量存儲(chǔ)系統(tǒng)的設(shè)計(jì)[J].電光與控制, 2016, 23(5).
[5] 陸浩, 王振占. 高速大容量固態(tài)存儲(chǔ)器設(shè)計(jì)[J]. 計(jì)算機(jī)工程, 2011, 37(15).
[6] 張欣, 劉朝暉, 劉文,等. 基于閃存的高速大容量存儲(chǔ)系統(tǒng)設(shè)計(jì)[J]. 微電子學(xué)與計(jì)算機(jī), 2010, 27(11).
[7] 鄒晨, 高云. 基于FPGA的硬件ECC 校驗(yàn)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 航空計(jì)算技術(shù), 2014, 44(6).