舒文麗,吳云峰 ,孫長勝,吳華君,唐 斌
(電子科技大學(xué)光電信息學(xué)院,成都610051)
數(shù)據(jù)采集存儲系統(tǒng)是現(xiàn)代電子系統(tǒng)的重要組成部分,在通信、雷達(dá)、航天等領(lǐng)域都有著廣泛的應(yīng)用[1]。由于圖像的分辨率和采樣率大幅提升[2],高速海量數(shù)據(jù)的存儲問題成為研究的熱點(diǎn)。隨著半導(dǎo)體技術(shù)的發(fā)展,固態(tài)存儲器以其優(yōu)異的性能逐漸成為數(shù)據(jù)存儲系統(tǒng)的首選存儲介質(zhì)[1],其中以閃速存儲器(Flash Memory)發(fā)展的最快。Flash 根據(jù)芯片內(nèi)部邏輯架構(gòu)設(shè)計(jì)上的差異主要分為NOR Flash 和NAND Flash 兩種[3]。相比于NOR Flash,NAND Flash 具有訪問速度快、成本低、容量大、功耗低等諸多的優(yōu)勢,在大容量存儲系統(tǒng)中得到廣泛應(yīng)用,本文的海量存儲板就是基于NAND Flash 設(shè)計(jì)的。但是NAND Flash的讀寫速度不快,讀帶寬為17 Mbyte/s,寫帶寬為6.8 Mbyte/s[4],考慮到存儲系統(tǒng)對帶寬的要求,本文采用FPGA 同時(shí)控制多片NAND Flash 的讀寫操作以增加帶寬。
本存儲器的設(shè)計(jì)指標(biāo)是:Camera Link 高級模式的數(shù)據(jù)輸入;600 Mbyte/s 數(shù)據(jù)存儲速度;30 min 的連續(xù)存儲時(shí)間;掉電數(shù)據(jù)不丟失;抗震性;容量可擴(kuò)展性。NAND Flash 存儲系統(tǒng)要完成存儲數(shù)據(jù)操作需要實(shí)現(xiàn)兩個(gè)方面的功能:一是實(shí)現(xiàn)具體的存儲器接口與存儲系統(tǒng)的數(shù)據(jù)交換;二是實(shí)現(xiàn)存儲系統(tǒng)的數(shù)據(jù)管理[5]?;谝陨现笜?biāo),本存儲器分為接口板和存儲板。
接口板完成的任務(wù)是將Camera Link 數(shù)據(jù)信號接收進(jìn)來,然后通過FPGA 分配數(shù)據(jù)信號。分配數(shù)據(jù)信號主要是要選擇可用的存儲板,將數(shù)據(jù)信號傳輸進(jìn)去。在讀取數(shù)據(jù)信號時(shí),接收相機(jī)控制信號選擇需要讀取的存儲板,并將里面的數(shù)據(jù)讀出。
輸入部分首先是Camera Link 接口部分三片DS90CR286 接收數(shù)據(jù)信號、一片DS90LV047A 作為相機(jī)控制信號(Camera Control 1 ~4)的發(fā)送端、一個(gè)MDR-26 接頭、一個(gè)MDR-20 接頭。采用I/O 口最多的XC4VLX100-FF1513 型號的Virtex-4 FPGA芯片作為數(shù)據(jù)輸入分配模塊,同時(shí)控制Camera Link接收芯片。
操作過程描述:
首先Camera Link 數(shù)據(jù)接口模塊接收到接口傳輸過來的LVDS 信號,將其轉(zhuǎn)換為64 bit 數(shù)據(jù)信號和相機(jī)控制信號。然后在Virtex-4 FPGA 里面做一個(gè)雙口RAM 將存儲進(jìn)來的數(shù)據(jù)寫入RAM。接下來,按照Virtex-4 FPGA 里面存儲的信息選擇可用的存儲板,將數(shù)據(jù)從RAM 的另一口讀出,存入存儲板。接口板的框圖如圖1 所示。
圖1 接口板框圖
存儲板完成的任務(wù)是接收接口板的數(shù)據(jù)信號和控制信號,將數(shù)據(jù)存入NAND Flash 芯片中。在讀取數(shù)據(jù)時(shí),按照順序讀取板上NAND Flash 里面的數(shù)據(jù)信號,并通過主FPGA 芯片傳入接口板。
接收到存儲板傳來的數(shù)據(jù)和控制信號,每塊存儲板采用4 片F(xiàn)PGA(1 片Virtex-4 和3 片Spartan- 3)的設(shè)計(jì)結(jié)構(gòu)。首先使用型號為XC4VLX25-FF668 速度較快的Virtex-4 FPGA 芯片接收,其指標(biāo)為:448 個(gè)可用IO、1296 kbit 的內(nèi)部Block RAM。然后使用型號為XC3S4000 -FG900 的Spartan-3 芯片直接控制NAND Flash 芯片,其可用管腳數(shù)為633。NAND Flash 芯片是三星公司的K9WBG08U1M,單片大小為4 Gbyte,單片速度為15 Mbyte/s。每片Spartan-3 可以控制48 片4 Gbyte 的NAND Flash,這樣一款存儲板就有4 G×48×3=576 GBytes 的存儲容量,兩塊存儲板就可以完成30 min 的數(shù)據(jù)存儲。48 片NAND Flash 芯片并行存儲,分擔(dān)600 Mbyte/s 的數(shù)據(jù)速度,每片所需的存儲速度為12.5 Mbyte/s,該芯片完全能夠完成這個(gè)指標(biāo),具體連接方式如圖2 所示。
圖2 FPGA 與一組Flash 的連接方式
操作過程描述:
首先接受接口板的選擇傳輸信號后,使能板上NAND Flash 芯片的寫入模式,接收64 bit 數(shù)據(jù)信號,存入接口板主FPGA Virtex-4 芯片,再按順序存入3 片從FPGA Spartan-3 芯片。在接收到接口板的讀取數(shù)據(jù)信號時(shí),使能使能板上NAND Flash 芯片的讀取模式,按順序從3 片從FPGA 芯片中讀取數(shù)據(jù)信號,傳入主FPGA 芯片,再傳入接口板。存儲板的框圖如圖3 所示。
圖3 存儲板框圖
在搭建好硬件平臺以后,需要編寫相應(yīng)的程序代碼實(shí)現(xiàn)系統(tǒng)的邏輯功能,主要包括兩個(gè)部分:一是根據(jù)具體的存儲器接口編寫合適的程序?qū)崿F(xiàn)從存儲器接口讀取當(dāng)前的操作命令和實(shí)現(xiàn)NAND Flash 閃存系統(tǒng)與存儲器接口之間的數(shù)據(jù)交換,二是存儲系統(tǒng)的數(shù)據(jù)管理,主要指NAND Flash 閃存數(shù)據(jù)管理[5]。NAND Flash閃存數(shù)據(jù)管理是閃存存儲系統(tǒng)的關(guān)鍵,主要包括壞塊管理,損耗均衡和ECC 校驗(yàn)[6-8]。
壞塊是指一個(gè)塊內(nèi)含有一位或多位數(shù)據(jù)單元無法進(jìn)行操作的塊單元,分為固有壞塊和使用壞塊。由于生產(chǎn)工藝的限制,NAND Flash 在出廠的時(shí)候允許存在一定量的壞塊,稱為固有壞塊。在芯片的長期使用過程中也會產(chǎn)生新的壞塊,稱為使用壞塊。如果信息存儲在壞塊中,會導(dǎo)致信息的丟失,所以在對NAND Flash 操作過程中要編寫程序?qū)膲K進(jìn)行管理,保證信息的準(zhǔn)確性。壞塊管理包括壞塊識別,壞塊存儲,壞塊跳過和壞塊替換。
2.1.1 壞塊識別和存儲
要對NAND Flash 的壞塊進(jìn)行管理,首先要識別并存儲壞塊的位置。第一次上電的時(shí)候,通過壞塊識別函數(shù),檢測NAND Flash 的固有壞塊,建立壞塊信息表,存儲壞塊的位置。
2.1.2 壞塊跳過
以后每次對NAND Flash 進(jìn)行操作時(shí),先調(diào)用有效塊檢測函數(shù),也就是和壞塊信息表的內(nèi)容做比較。如果檢測到該塊是壞塊就直接加1 跳過,否則就把該塊的地址存儲在建好的RAM 中,用來存儲數(shù)據(jù)。這樣在對NAND Flash 進(jìn)行操作的過程中,RAM 中始終存儲著下一個(gè)待用的有效塊地址。
2.1.3 壞塊替換
當(dāng)對NAND Flash 進(jìn)行寫操作或擦除操作時(shí),可以根據(jù)狀態(tài)寄存器判斷Flash 的運(yùn)行是否成功,當(dāng)狀態(tài)寄存器接收到錯(cuò)誤信息時(shí),這個(gè)塊就會被認(rèn)為是壞塊,寫操作或擦除操作就是無效的,這時(shí)就要用好塊替換壞塊。由于在同一塊中某一頁的操作失敗不會影響其他頁數(shù)據(jù)的正確性,所以可以重新寫入無效頁的正確數(shù)據(jù),通過控制器緩存,連同塊中的其它頁的數(shù)據(jù)一起拷貝到下一個(gè)有效塊中,避免信息丟失。
圖4 壞塊替換
考慮到本設(shè)計(jì)中采用48 片NAND Flash 并行操作,F(xiàn)PGA 同時(shí)控制48 片NAND Flash。如果采用傳統(tǒng)的壞塊跳過方法,將48 塊Flash 的所有有效塊的地址全部存儲在建好的RAM 中,會占用FPGA 大量的資源。本文提到的壞塊跳過方法,通過不斷地調(diào)用有效塊檢測函數(shù),每次只存儲48 個(gè)有效塊地址即每片NAND Flash 只需存儲一個(gè)有效塊地址,這樣避免占用太多的FPGA 資源。
盡管NAND Flash 的每個(gè)單元塊相互獨(dú)立,且每塊一般可擦除次數(shù)高達(dá)100×104次,但是隨著擦寫次數(shù)增加,會有一些單元塊逐漸變得不穩(wěn)定或失效從而形成永久性壞塊。損耗均衡的原理是在數(shù)據(jù)需要更新時(shí),不是在原來的數(shù)據(jù)塊上重寫,而是直接把新數(shù)據(jù)寫入一個(gè)空塊中,再把原來的塊擦除[10],損耗均衡原理如圖5 所示。因此,要避免對某些塊的頻繁操作,盡量做到操作次數(shù)均衡,以達(dá)到NAND Flash 的最長使用壽命。
圖5 損耗均衡原理圖
ECC(Error Checking & Correction)校驗(yàn),又叫錯(cuò)誤檢查校正。對NAND Flash 進(jìn)行操作時(shí),為了保證數(shù)據(jù)的準(zhǔn)確性,本文采用ECC 校驗(yàn)操作。ECC 校驗(yàn)碼存放在NAND Flash 的備用空間內(nèi),通過ECC 校驗(yàn),可以有效地糾正或檢測出誤碼,從而保護(hù)用戶存放的數(shù)據(jù)[9]。
本存儲系統(tǒng)以Xilinx 公司的Virtex-4 FPGA 作為控制核心,NAND Flash 采用48 行3 列的陣列式,每一列的48 片F(xiàn)lash 并行操作以增加位寬,3 列之間采用流水線技術(shù)進(jìn)行操作。每一行的Flash 共用I/O,每一列共用片選信號,每一列的R/B 信號相與后送給FPGA,其他信號共用。
為了便于觀察,圖6 只設(shè)置了第1 列和第2 列Flash 交替操作,并將第1 列的第4 塊假設(shè)為壞塊,valid_addr 為調(diào)用有效塊檢測函數(shù)后得到的有效塊地址,valid_chip 為流水線操作的Falsh 芯片地址,page_addr 為頁地址,m 和n 為中間變量。上電時(shí)先將第4 塊存到壞塊表中,然后對第3 塊進(jìn)行操作的過程中調(diào)用有效塊檢測函數(shù)確定下一有效塊地址。對第3 塊的64 頁操作完成后,第一列Flash 直接從第3 塊跳過第5 塊,跳過壞塊4,而第2 列Flash 繼續(xù)對第4 塊進(jìn)行操作。
圖6 仿真波形
隨著NAND Flash 的存儲密度越來越大,體積、功耗和成本卻越來越小,NAND Flash 在不同的領(lǐng)域都得到了廣泛的應(yīng)用。本文針對單片F(xiàn)lash 存儲速度慢的缺點(diǎn),將多片F(xiàn)lash 并行起來工作,使得存儲速度大大提高。針對壞塊管理問題,本文提出了一種新的壞塊跳過方法,通過不斷調(diào)用有效塊檢測函數(shù),可以跳過壞塊,將有效塊地址存儲在已建好的RAM 中,對NAND Flash 操作時(shí)直接讀取有效塊地址,對壞塊進(jìn)行了管理,保證了存儲器數(shù)據(jù)的可靠性。
[1] 雷磊.NAND 型Flash 海量存儲系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].碩士論文.北京理工大學(xué),2008.
[2] 朱知博.基于NAND Flash 的高速大容量存儲系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011,34(8):170-173.
[3] 陳國,高楊. NAND Flash 在大容量存儲技術(shù)中的應(yīng)用[J]. 航天計(jì)算技術(shù),2009,39(2):113-116.
[4] 雷磊,謝民,李先楚.基于NAND 型Flash 海量存儲系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測控技術(shù),2007,26:196-202.
[5] 晏敏,龍小奇,章兢,等.開放式大容量NAND Flash 數(shù)據(jù)存儲系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2009,26(11):13-16.
[6] Li Seung Ho,Park Lim Kyu Ho. An Efficient NAND Flash Files System for Flash Memory Storage[J]. IEEE Transaction on Computers,2006,55(7):906-912.
[7] 陶翼,晏軻,曹國梁.JFFS2 文件系統(tǒng)的閃存管理策略改進(jìn)[J].計(jì)算機(jī)與數(shù)字工程,2008,36(6):64-66.
[8] 羅曉,劉昊.一種基FAT 文件系統(tǒng)的NAND Flash 壞塊處理方法[J].電子器件,2008,31(2):716-719.
[9] 劉恕. NAND Flash 的ECC 分級及ATE 設(shè)備中的測試方法[C]//第五屆中國測試學(xué)術(shù)會議論文集.2008:401-403.
[10] 林剛.NAND Flash 壞塊管理算法及邏輯層驅(qū)動設(shè)計(jì)[D].碩士論文.西安電子科技大學(xué),2009.