胡世明 康懷祺 滕云龍
(電子科技大學(xué) 成都 610054)
隨著中國航空電子技術(shù)和雷達成像技術(shù)的快速發(fā)展,合成孔徑雷達的分辨率和采樣率大幅提升,由此產(chǎn)生的高速大容量數(shù)據(jù)需要實時快速的保存以方便后續(xù)分析處理。同時由于航空平臺的限制,對存儲設(shè)備的可靠性和抗振動特性以及體積,重量也有嚴(yán)格的要求,因此存儲電路通常采用非易失的電路芯片構(gòu)成,而傳統(tǒng)的機械硬盤,DOC,E2PROM等存儲技術(shù)由于各自的缺點已經(jīng)不適用對高速大容量數(shù)據(jù)的存儲[1,2]。近年來,快速發(fā)展的閃速存儲器(FLASH MEMORY)以其抗振動、讀寫速度快、存儲密度大、可擦除、非易失、低成本、環(huán)境適應(yīng)能力強以及命令、地址、數(shù)據(jù)線復(fù)用和接口便利等特點,得到了廣泛的應(yīng)用,成為大容量數(shù)據(jù)存儲系統(tǒng)首選器件。
然而伴隨著數(shù)據(jù)存儲系統(tǒng)容量要求越來越大,存儲速度要求越來越高,同時由于NAND FLASH的控制邏輯比較復(fù)雜,對時序要求十分嚴(yán)格,而且更重要的是閃存芯片中允許存在一定的無效塊,需要對其進行無效塊管理。所以針對上述要求及問題,數(shù)據(jù)存儲系統(tǒng)需要一個控制器。如今,大規(guī)模集成電路和高性能FPGA的飛速發(fā)展,可以采用FPGA作為高速大容量存儲系統(tǒng)的核心控制器,在FPGA上實現(xiàn)存儲系統(tǒng)要求的所有控制功能?;谏鲜鲈?,設(shè)計了以FPGA Virtex-4系列芯片為核心控制芯片,以三星公司K9HCG08U1M閃存芯片為存儲介質(zhì)的高速大容量存儲系統(tǒng)。
本存儲系統(tǒng)包含四塊存儲板卡,一塊控制板卡,在結(jié)構(gòu)上均采用了基于CompactPCI總線的6U標(biāo)準(zhǔn)板型。每塊存儲板卡上共載有96片 Nand型FLASH,Nand FLASH存儲芯片采用三星公司的K9HCG08U1M型芯片,從而可以實現(xiàn)單板768GB的存儲容量。四塊存儲板卡可以實現(xiàn)3TB的總存儲容量。這其中,單塊存儲板卡的96片閃存芯片分為4組,由兩塊FPGA Virtex-4芯片控制,每個組中,采用3級流水線操作,每級流水線由8片閃存芯片并行構(gòu)成基本的存儲模塊??刂瓢蹇ê诵臑橐黄琕irtex-4系列的FPGA芯片,負(fù)責(zé)對四塊存儲板卡進行數(shù)據(jù)分路,同時負(fù)責(zé)存儲系統(tǒng)與主機的通信。圖1為該存儲系統(tǒng)結(jié)構(gòu)圖。
圖1 系統(tǒng)結(jié)構(gòu)圖
由于NAND型FLASH芯片本身存在寫入帶寬低,寫入速度慢,而且存在無效塊的缺點,因此必須設(shè)計合理有效的控制邏輯來克服這些缺點。針對寫入帶寬低和寫入速度慢的缺點,可以通過采用并行總線操作和流水線操作的方法來增加帶寬;針對無效塊的問題,可以通過建立無效塊管理表,將無效快地址加入到無效塊管理表中,從而在寫入或讀出數(shù)據(jù),以及對NAND FLASH進行擦除操作時,避免對無效快的操作。
并行總線操作的本質(zhì)是通過拓寬數(shù)據(jù)總線的帶寬來實現(xiàn)數(shù)據(jù)宏觀上的并行操作。并行操作可以按照需要將多片閃存芯片的數(shù)據(jù)線結(jié)合起來共同使用,以此來提高系統(tǒng)讀寫帶寬,從而提高讀寫效率。在并行系統(tǒng)中,可以將多片閃存芯片看作一個模塊,把這個模塊作為整個存儲系統(tǒng)中的基本數(shù)據(jù)存儲單元,所有操作都是面向這些基本模塊來進行的。
本存儲板卡中,8片K9HCG08U1M型閃存芯片構(gòu)成一個64位帶寬的存儲子模塊,如圖2所示,它們共用相同的控制信號,包括片選信號,讀寫信號,芯片內(nèi)部地址等,采用一驅(qū)八的形式由FPGA提供。由于R/B信號采用集電極開路輸出,可以采用線與。所以將八片閃存芯片的R/B信號連在一起并通過一個電阻上拉至電源。這樣,數(shù)據(jù)量將是使用單獨一塊芯片時的8倍,理論上速度也是非并行時的8倍。
圖2 FPGA與NAND FLASH接口示意圖
以K9HCG08U1M型閃存芯片為例,在進行寫編程操作時,假設(shè)寫入時鐘為30MHz,以編程一頁寫操作為例,命令、地址以及數(shù)據(jù)加載所需時間大約為133μs,而閃存芯片自動編程所需時間典型值為800μs,而在進行擦除操作時,當(dāng)擦除一個塊時,芯片自動編程所需時間典型值更是達到了1500μs,遠(yuǎn)大于命令和地址加載時間。由此得知,自動編程耗費了大量的時間,影響了閃存芯片操作速度。因此,借鑒現(xiàn)今高性能計算機中的流水線操作原理,可在時間片上實現(xiàn)微觀并行。流水線運行起來后,在任意時間片上總有若干小操作在同時進行,即在時間上實現(xiàn)復(fù)用。因此從總體上看,操作速度將會提高。圖3為閃存芯片流水操作示意圖[4]。
圖3 流水線操作示意圖
NAND型FLASH存儲器在出廠時就存在一些初始無效塊,并且在使用過程中也會出現(xiàn)存儲單元的損壞。因此有必要在對閃存芯片進行寫、讀以及擦除操作前,對閃存芯片進行讀無效塊操作,記錄閃存芯片的無效塊地址,從而避免對無效塊的操作,保證數(shù)據(jù)能夠被正確的存儲和讀取。為了避免對無效塊的操作,在FLASH的使用過程中,出現(xiàn)了各種無效塊處理方法。目前主要有:a.建立無效塊屏蔽函數(shù)來避免對無效塊的操作。b.基于FAT文件系統(tǒng)處理無效塊。上述方法都有各自的優(yōu)缺點[5]。
本方法中,直接在FPGA內(nèi)部開辟了專門的存儲單元用于存儲閃存芯片的無效塊地址,工作時在進行其他操作之前,先進行讀無效塊操作,將閃存芯片的無效塊地址存入FPGA內(nèi)的存儲單元中,每次在進行寫入、讀取以及擦除操作時,避免對閃存芯片無效塊的操作,達到對無效塊管理的目的。需要指出的是,存儲無效塊地址信息的存儲單元是在FPGA內(nèi)開辟的,每次掉電之后存儲信息都會丟失,所以每次系統(tǒng)上電之后,在對芯片進行其他操作之前都會先進行檢查無效塊操作,因此本無效塊管理方法是一種動態(tài)管理。
總之,本無效塊管理方法實質(zhì)是將芯片出廠時的無效塊進行屏蔽,從而避免對這些無效塊的操作,達到無效塊管理的目的。
本設(shè)計方法中,主要包括4個功能模塊和一個頂層模塊,4個功能模塊包括:寫編程操作模塊,讀操作模塊,擦除操作模塊以及讀無效塊模塊,這些模塊都用Verilog程序語言進行編寫。頂層模塊先調(diào)用讀無效塊模塊,將無效塊信息存入FPGA內(nèi)專門的存儲單元,然后根據(jù)輸入的指令來決定具體執(zhí)行那項操作。
圖4 程序執(zhí)行框圖
三星公司規(guī)定K9HCG08U1M芯片無效塊信息標(biāo)記在每個塊的最后一頁的空閑區(qū)的第一個字節(jié),讀出全為FFh時為有效塊,為非FFh時為無效塊[6]。在本方法中,由于8片芯片并行操作,所以讀出為64位的十六進制信息,當(dāng)其中有任意一位十六進制數(shù)為非F時,則認(rèn)為為無效塊,將無效塊地址信息存入FPGA內(nèi)專門開辟的存儲單元中。由于是8片芯片的并行操作,當(dāng)其中有一片的塊信息為無效塊信息時,則認(rèn)為其余的7片芯片的相同地址的塊也為無效塊,這必然會造成對存儲空間的浪費。經(jīng)計算,單板浪費的存儲空間大約為18GB,四塊存儲板總共浪費72GB的存儲空間,對本存儲系統(tǒng)要求的2.5T的存儲空間來說這樣的存儲空間浪費是可以接受的。
圖5 檢測無效塊局部觀測圖
圖6 檢測無效塊時序命令圖
圖5 為對存儲板進行無效塊檢測的觀測圖,圖6為無效塊檢測時序放大圖。從圖中可看出,塊標(biāo)志信息在RE信號的上升沿從FLASH芯片中讀出,為FFFFFFFFFFFFFFFFh,表明檢測的8片 FLASH芯片的塊為有效塊。如讀出的塊標(biāo)志信息為非FFFFFFFFFFFFFFFFh,則該塊的地址信息將存入FPGA內(nèi)的無效塊地址存儲單元中。以此順序檢測,從而完成無效塊檢測操作。
由于FLASH芯片的擦除自動編程操作所需的時間較長,則在進行擦除操作的時候同樣采用流水線技術(shù),如在第一組FLASH芯片的第一級8片芯片自動編程時,可對第二級以及第三級芯片甚至第二組的三級FLASH芯片進行加載擦除命令操作,從而可以節(jié)省時間,達到快速擦除的目的。
需要注意的是,在進行擦除操作時,也會將NAND FLASH芯片出廠時的無效塊標(biāo)記信息同時擦除,所以在擦除操作進行之前,也要先進行讀無效塊操作,將無效塊地址記錄,從而在擦除操作的時候避免了對無效塊的擦除操作,只對有效塊進行擦除操作。
在進行寫編程操作時,當(dāng)加載完命令和地址后,F(xiàn)LASH芯片進入自動編程,自動編程時間典型值為800μs,最大值為3ms,即芯片自動編程時間不確定,有的芯片編程時間可能小于800μs,有的芯片編程時間就是典型值,而其他芯片的編程時間可能需要3ms。而且在本存儲系統(tǒng)中,由于采用8片芯片并行結(jié)構(gòu)以及流水線操作,所以寫操作自動編程時間為8片芯片中的最大值,同時在寫編程的流水線操作時,每級的芯片自動編程時間也不一樣。所以在進行流水線操作時,流水級數(shù)應(yīng)盡量大。如果流水級數(shù)太少,就有可能出現(xiàn)命令加載完后所有的流水級都進入自動編程時間,而這時外部還在源源不斷的向存儲系統(tǒng)發(fā)送待存儲的數(shù)據(jù),就會造成存儲數(shù)據(jù)的丟失。圖7所示為寫入存儲板的正弦信號的Bus Plot觀測結(jié)果。
圖7 待寫入的正弦信號
在進行讀操作時,為了使讀出的數(shù)據(jù)與存儲的數(shù)據(jù)保持一致,即保持?jǐn)?shù)據(jù)的連續(xù)性,應(yīng)該按照寫入數(shù)據(jù)的次序依次讀出數(shù)據(jù),達到保持?jǐn)?shù)據(jù)連續(xù)性的目的。
圖8所示為利用ChipScope軟件對FLASH芯片出廠時的數(shù)據(jù)進行讀操作觀察時的部分觀測結(jié)果,由于芯片在出廠時,其內(nèi)的數(shù)據(jù)全被置為1,所以從讀出的芯片數(shù)據(jù)也得以驗證。并且在讀數(shù)的過程中,數(shù)據(jù)正確率達到了100%,這也充分說明無效塊檢測操作已經(jīng)將出廠無效塊全部檢測到并對這些無效塊進行了屏蔽。
圖9所示為對存儲板寫入正弦信號的數(shù)據(jù)進行讀操作的Bus Plot觀測結(jié)果。由于存儲板上的存儲芯片為8片F(xiàn)LASH芯片并行結(jié)構(gòu),所以數(shù)據(jù)位為64bit。對每8bit加載總線,得出8路信號,由圖得知,讀出的信號與寫入的信號完全一致,說明數(shù)據(jù)能夠被正確的寫入,正確的存儲,也能夠被正確的讀出。
本文所介紹的高速大容量存儲系統(tǒng),存儲速度高,存儲速率理論可達320MB/s。存儲容量大,除去無效塊影響,總?cè)萘靠蛇_到2.5TB。在測試過程中各項性能指標(biāo)都達到了合成孔徑雷達成像試驗所需的要求。此外,該存儲系統(tǒng)只需對系統(tǒng)硬件電路稍做改動,就可支持更大容量的閃存芯片以擴充存儲容量。同時,該存儲系統(tǒng)具有一定通用性,可以應(yīng)用于其他需要高速大容量數(shù)據(jù)存儲的場合,具有很高的工程應(yīng)用價值。
[1]朱知博.基于NAND FLASH的高速大容量存儲系統(tǒng)設(shè)計 [J].現(xiàn)代電子技術(shù),2011,34(8):170-173.
[2]高怡禎.基于閃存的星載大容量存儲器的研制[D].中國科學(xué)院研究生院,2004.
[3]雷磊.NAND型FLASH海量存儲系統(tǒng)的設(shè)計與實現(xiàn)[D].北京:北京理工大學(xué),2008.
[4]劉瑞.基于FLASH的高速圖像采集存儲系統(tǒng)[D].中國科學(xué)技術(shù)大學(xué),2009.
[5]張勝勇,高世杰,吳志勇等.基于 FPGA的NAND FLASH壞塊處理方法[J].計算機工程,2010,36(6):239-241.
[6]Samsung.K9XXGG08UXM flash memory datasheet rev.13[EB/OL],http://www.sumsung.com,2011.