胡世明 康懷祺 滕云龍
(電子科技大學 成都 610054)
隨著中國航空電子技術和雷達成像技術的快速發展,合成孔徑雷達的分辨率和采樣率大幅提升,由此產生的高速大容量數據需要實時快速的保存以方便后續分析處理。同時由于航空平臺的限制,對存儲設備的可靠性和抗振動特性以及體積,重量也有嚴格的要求,因此存儲電路通常采用非易失的電路芯片構成,而傳統的機械硬盤,DOC,E2PROM等存儲技術由于各自的缺點已經不適用對高速大容量數據的存儲[1,2]。近年來,快速發展的閃速存儲器(FLASH MEMORY)以其抗振動、讀寫速度快、存儲密度大、可擦除、非易失、低成本、環境適應能力強以及命令、地址、數據線復用和接口便利等特點,得到了廣泛的應用,成為大容量數據存儲系統首選器件。
然而伴隨著數據存儲系統容量要求越來越大,存儲速度要求越來越高,同時由于NAND FLASH的控制邏輯比較復雜,對時序要求十分嚴格,而且更重要的是閃存芯片中允許存在一定的無效塊,需要對其進行無效塊管理。所以針對上述要求及問題,數據存儲系統需要一個控制器。如今,大規模集成電路和高性能FPGA的飛速發展,可以采用FPGA作為高速大容量存儲系統的核心控制器,在FPGA上實現存儲系統要求的所有控制功能?;谏鲜鲈?,設計了以FPGA Virtex-4系列芯片為核心控制芯片,以三星公司K9HCG08U1M閃存芯片為存儲介質的高速大容量存儲系統。
本存儲系統包含四塊存儲板卡,一塊控制板卡,在結構上均采用了基于CompactPCI總線的6U標準板型。每塊存儲板卡上共載有96片 Nand型FLASH,Nand FLASH存儲芯片采用三星公司的K9HCG08U1M型芯片,從而可以實現單板768GB的存儲容量。四塊存儲板卡可以實現3TB的總存儲容量。這其中,單塊存儲板卡的96片閃存芯片分為4組,由兩塊FPGA Virtex-4芯片控制,每個組中,采用3級流水線操作,每級流水線由8片閃存芯片并行構成基本的存儲模塊??刂瓢蹇ê诵臑橐黄琕irtex-4系列的FPGA芯片,負責對四塊存儲板卡進行數據分路,同時負責存儲系統與主機的通信。圖1為該存儲系統結構圖。

圖1 系統結構圖
由于NAND型FLASH芯片本身存在寫入帶寬低,寫入速度慢,而且存在無效塊的缺點,因此必須設計合理有效的控制邏輯來克服這些缺點。針對寫入帶寬低和寫入速度慢的缺點,可以通過采用并行總線操作和流水線操作的方法來增加帶寬;針對無效塊的問題,可以通過建立無效塊管理表,將無效快地址加入到無效塊管理表中,從而在寫入或讀出數據,以及對NAND FLASH進行擦除操作時,避免對無效快的操作。
并行總線操作的本質是通過拓寬數據總線的帶寬來實現數據宏觀上的并行操作。并行操作可以按照需要將多片閃存芯片的數據線結合起來共同使用,以此來提高系統讀寫帶寬,從而提高讀寫效率。在并行系統中,可以將多片閃存芯片看作一個模塊,把這個模塊作為整個存儲系統中的基本數據存儲單元,所有操作都是面向這些基本模塊來進行的。
本存儲板卡中,8片K9HCG08U1M型閃存芯片構成一個64位帶寬的存儲子模塊,如圖2所示,它們共用相同的控制信號,包括片選信號,讀寫信號,芯片內部地址等,采用一驅八的形式由FPGA提供。由于R/B信號采用集電極開路輸出,可以采用線與。所以將八片閃存芯片的R/B信號連在一起并通過一個電阻上拉至電源。這樣,數據量將是使用單獨一塊芯片時的8倍,理論上速度也是非并行時的8倍。

圖2 FPGA與NAND FLASH接口示意圖
以K9HCG08U1M型閃存芯片為例,在進行寫編程操作時,假設寫入時鐘為30MHz,以編程一頁寫操作為例,命令、地址以及數據加載所需時間大約為133μs,而閃存芯片自動編程所需時間典型值為800μs,而在進行擦除操作時,當擦除一個塊時,芯片自動編程所需時間典型值更是達到了1500μs,遠大于命令和地址加載時間。由此得知,自動編程耗費了大量的時間,影響了閃存芯片操作速度。因此,借鑒現今高性能計算機中的流水線操作原理,可在時間片上實現微觀并行。流水線運行起來后,在任意時間片上總有若干小操作在同時進行,即在時間上實現復用。因此從總體上看,操作速度將會提高。圖3為閃存芯片流水操作示意圖[4]。

圖3 流水線操作示意圖
NAND型FLASH存儲器在出廠時就存在一些初始無效塊,并且在使用過程中也會出現存儲單元的損壞。因此有必要在對閃存芯片進行寫、讀以及擦除操作前,對閃存芯片進行讀無效塊操作,記錄閃存芯片的無效塊地址,從而避免對無效塊的操作,保證數據能夠被正確的存儲和讀取。為了避免對無效塊的操作,在FLASH的使用過程中,出現了各種無效塊處理方法。目前主要有:a.建立無效塊屏蔽函數來避免對無效塊的操作。b.基于FAT文件系統處理無效塊。上述方法都有各自的優缺點[5]。
本方法中,直接在FPGA內部開辟了專門的存儲單元用于存儲閃存芯片的無效塊地址,工作時在進行其他操作之前,先進行讀無效塊操作,將閃存芯片的無效塊地址存入FPGA內的存儲單元中,每次在進行寫入、讀取以及擦除操作時,避免對閃存芯片無效塊的操作,達到對無效塊管理的目的。需要指出的是,存儲無效塊地址信息的存儲單元是在FPGA內開辟的,每次掉電之后存儲信息都會丟失,所以每次系統上電之后,在對芯片進行其他操作之前都會先進行檢查無效塊操作,因此本無效塊管理方法是一種動態管理。
總之,本無效塊管理方法實質是將芯片出廠時的無效塊進行屏蔽,從而避免對這些無效塊的操作,達到無效塊管理的目的。
本設計方法中,主要包括4個功能模塊和一個頂層模塊,4個功能模塊包括:寫編程操作模塊,讀操作模塊,擦除操作模塊以及讀無效塊模塊,這些模塊都用Verilog程序語言進行編寫。頂層模塊先調用讀無效塊模塊,將無效塊信息存入FPGA內專門的存儲單元,然后根據輸入的指令來決定具體執行那項操作。

圖4 程序執行框圖
三星公司規定K9HCG08U1M芯片無效塊信息標記在每個塊的最后一頁的空閑區的第一個字節,讀出全為FFh時為有效塊,為非FFh時為無效塊[6]。在本方法中,由于8片芯片并行操作,所以讀出為64位的十六進制信息,當其中有任意一位十六進制數為非F時,則認為為無效塊,將無效塊地址信息存入FPGA內專門開辟的存儲單元中。由于是8片芯片的并行操作,當其中有一片的塊信息為無效塊信息時,則認為其余的7片芯片的相同地址的塊也為無效塊,這必然會造成對存儲空間的浪費。經計算,單板浪費的存儲空間大約為18GB,四塊存儲板總共浪費72GB的存儲空間,對本存儲系統要求的2.5T的存儲空間來說這樣的存儲空間浪費是可以接受的。

圖5 檢測無效塊局部觀測圖

圖6 檢測無效塊時序命令圖
圖5 為對存儲板進行無效塊檢測的觀測圖,圖6為無效塊檢測時序放大圖。從圖中可看出,塊標志信息在RE信號的上升沿從FLASH芯片中讀出,為FFFFFFFFFFFFFFFFh,表明檢測的8片 FLASH芯片的塊為有效塊。如讀出的塊標志信息為非FFFFFFFFFFFFFFFFh,則該塊的地址信息將存入FPGA內的無效塊地址存儲單元中。以此順序檢測,從而完成無效塊檢測操作。
由于FLASH芯片的擦除自動編程操作所需的時間較長,則在進行擦除操作的時候同樣采用流水線技術,如在第一組FLASH芯片的第一級8片芯片自動編程時,可對第二級以及第三級芯片甚至第二組的三級FLASH芯片進行加載擦除命令操作,從而可以節省時間,達到快速擦除的目的。
需要注意的是,在進行擦除操作時,也會將NAND FLASH芯片出廠時的無效塊標記信息同時擦除,所以在擦除操作進行之前,也要先進行讀無效塊操作,將無效塊地址記錄,從而在擦除操作的時候避免了對無效塊的擦除操作,只對有效塊進行擦除操作。
在進行寫編程操作時,當加載完命令和地址后,FLASH芯片進入自動編程,自動編程時間典型值為800μs,最大值為3ms,即芯片自動編程時間不確定,有的芯片編程時間可能小于800μs,有的芯片編程時間就是典型值,而其他芯片的編程時間可能需要3ms。而且在本存儲系統中,由于采用8片芯片并行結構以及流水線操作,所以寫操作自動編程時間為8片芯片中的最大值,同時在寫編程的流水線操作時,每級的芯片自動編程時間也不一樣。所以在進行流水線操作時,流水級數應盡量大。如果流水級數太少,就有可能出現命令加載完后所有的流水級都進入自動編程時間,而這時外部還在源源不斷的向存儲系統發送待存儲的數據,就會造成存儲數據的丟失。圖7所示為寫入存儲板的正弦信號的Bus Plot觀測結果。

圖7 待寫入的正弦信號
在進行讀操作時,為了使讀出的數據與存儲的數據保持一致,即保持數據的連續性,應該按照寫入數據的次序依次讀出數據,達到保持數據連續性的目的。
圖8所示為利用ChipScope軟件對FLASH芯片出廠時的數據進行讀操作觀察時的部分觀測結果,由于芯片在出廠時,其內的數據全被置為1,所以從讀出的芯片數據也得以驗證。并且在讀數的過程中,數據正確率達到了100%,這也充分說明無效塊檢測操作已經將出廠無效塊全部檢測到并對這些無效塊進行了屏蔽。
圖9所示為對存儲板寫入正弦信號的數據進行讀操作的Bus Plot觀測結果。由于存儲板上的存儲芯片為8片FLASH芯片并行結構,所以數據位為64bit。對每8bit加載總線,得出8路信號,由圖得知,讀出的信號與寫入的信號完全一致,說明數據能夠被正確的寫入,正確的存儲,也能夠被正確的讀出。


本文所介紹的高速大容量存儲系統,存儲速度高,存儲速率理論可達320MB/s。存儲容量大,除去無效塊影響,總容量可達到2.5TB。在測試過程中各項性能指標都達到了合成孔徑雷達成像試驗所需的要求。此外,該存儲系統只需對系統硬件電路稍做改動,就可支持更大容量的閃存芯片以擴充存儲容量。同時,該存儲系統具有一定通用性,可以應用于其他需要高速大容量數據存儲的場合,具有很高的工程應用價值。
[1]朱知博.基于NAND FLASH的高速大容量存儲系統設計 [J].現代電子技術,2011,34(8):170-173.
[2]高怡禎.基于閃存的星載大容量存儲器的研制[D].中國科學院研究生院,2004.
[3]雷磊.NAND型FLASH海量存儲系統的設計與實現[D].北京:北京理工大學,2008.
[4]劉瑞.基于FLASH的高速圖像采集存儲系統[D].中國科學技術大學,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.