彭卓文,楊新民,王勝紅(.南京理工大學 江蘇 南京0094;.淮海工業(yè)集團 山西 長治046000)
基于FPGA控制的高速大容量NAND FLASH存儲模塊設計
彭卓文1,楊新民1,王勝紅2
(1.南京理工大學 江蘇 南京210094;2.淮海工業(yè)集團 山西 長治046000)
為了實現(xiàn)對于炮彈彈道測試系統(tǒng)采集數(shù)據(jù)實時存儲,本文設計了一種存儲模塊。該模塊由XILINX公司的XC3S1600E和意法半導體公司的NAND512W3A構成,通過對FPGA進行硬件編程實現(xiàn)對NANDFLASH的讀寫控制[1]。針對NANDFLASH存在壞塊的缺點,提出了相應的管理方法,保證了數(shù)據(jù)的可靠性。通過實時更新并存儲NAND FLASH操作地址來保證存儲模塊重新上電之后可以繼續(xù)存儲。
FPGA;NANDFLASH;大容量存儲;壞塊管理
目前最新型的彈載黑匣子在實時性、大容量、高可靠性、高速率等方面又有了新的要求,炮彈彈道實驗中姿態(tài)、軌跡、旋轉速率等參數(shù)在被采集后需要及時存入存儲模塊中。傳統(tǒng)的數(shù)據(jù)存儲模塊多用ARM作為其控制核心,但是由于ARM的時鐘頻率較低且需用軟件實現(xiàn)數(shù)據(jù)存儲,這使得存儲的速度和效率較低,在整個存儲周期中大多為軟件的運行時間。而FPGA有ARM無法比擬的優(yōu)勢,F(xiàn)PGA時鐘頻率高、內部延時小,全部控制邏輯由硬件完成,速度快、效率高。在此技術基礎上,為了滿足數(shù)據(jù)存儲對速度的要求,本文將介紹一種基于FPGA,采用VerilogHDL硬件描述語言設計實現(xiàn)的高速數(shù)據(jù)存儲模塊[2]。存儲芯片采用意法半導體公司的NAND512W3A,利用FPGA構建讀寫FIFO緩存、硬件擦除和讀寫以及壞塊屏蔽NANDFLASH,從而加快了黑匣子數(shù)據(jù)存儲的速度和可靠性[3]。
本論文設計的存儲模塊由 XILINX公司的XC3S1600E[4]和意法半導體公司的NAND512W3A[5]構成。FPGA通過I/O引腳與NANDFLASH進行數(shù)據(jù)傳遞,通過片選信號和NANDFLASH返回的信號對NANDFLASH進行控制。地址存儲空間與數(shù)據(jù)存儲空間分別存放NANDFLASH操作地址和外圍設備采集的數(shù)據(jù)[6]。
NANDFLASH和FPGA相連接的部分包括:8個I/O口,鎖存信號線,狀態(tài)信號線。鎖存信號線包括:地址鎖存(ALE),指令鎖存(CLE),寫使能(WE)以及讀使能(RE)。狀態(tài)信號線包括:片選信號(CE)和狀態(tài)位信號 (R/B)。其中,狀態(tài)位信號高電平時表示NANDFLASH空閑,低電平時表示NANDFLASH忙碌。存儲模塊結構由框圖1所示。
圖1 存儲模塊結構框圖
ALE和CLE分別為地址鎖存和命令鎖存,因為FPGA與NANDFLASH之間的所有通信都是通過8 個I/O口進行的,通過ALE和CLE的狀態(tài)來區(qū)分通信的具體內容。當ALE高電平時表示傳輸?shù)膬热轂榈刂沸畔ⅲ擟LE高電平時表示傳輸?shù)膬热轂橹噶钚畔?,當兩個都為低電平時則表示通信內容為數(shù)據(jù)。RE和WE分別為讀寫使能端,低電平有效。其中,片選信號低電平有效,狀態(tài)位信號高電平就緒(Ready),低電平忙碌(Busy)。FPGA自帶的I/O引腳數(shù)量很多,通過對FPGA進行編程使其能向NANDFLASH發(fā)出片選和使能信號[7]。FPGA將采集到的數(shù)據(jù)分類進行存儲。NANDFLASH的操作主要包含擦除、編程和讀取,由NANDFLASH的內部硬件結構決定了其擦除操作是以塊(Block)為單位進行的,編程和讀取操作是以頁(Page)為單位進行的。實現(xiàn)整個存儲功能的基本要求是必須要保證編程操作的過程中數(shù)據(jù)的可靠性和完整性。由于在寫入過程中存在頁寄存器(Page register),這個頁是專門用來存放將要寫入的數(shù)據(jù),其本質相當于頁緩存,當緩存的數(shù)據(jù)收集滿一頁后再傳輸給后續(xù)的物理存儲單元[8]。
NAND512W3A芯片的各種操作必須寫入相應的命令才能順利執(zhí)行,由于命令、地址、數(shù)據(jù)共用I/O,所以要通過命令鎖存信號和地址鎖存信號共同控制而分時復用[9]。其中NANDFLASH的引腳命令很豐富,下面是NANDFLASH的主要操作簡介。
3.1 擦除操作
器件的擦除操作是以塊為單位的。加載塊地址時先輸入60h建立擦除命令,然后再輸入確認命令D0h,執(zhí)行內部擦除過程。先建立再擦除的兩步命令時序可以保證存儲數(shù)據(jù)不會被外部干擾所影響導致誤擦除。擦除操作流程圖如圖2所示。
圖2NANDFLASH擦除操作流程圖
3.2 寫入操作
在編寫NANDFLASH的控制程序時器件的編程以頁為單位,一個頁編程周期中可以對一個或者多個連續(xù)的字節(jié)進行編程。一個頁編程周期包括串行數(shù)據(jù)加載階段和編程階段組成。數(shù)據(jù)在加載階段被加載至數(shù)據(jù)寄存器中,在數(shù)據(jù)編程階段被寫入存儲單元。寫操作的過程為:1)發(fā)送寫開始指令80h;2)發(fā)送第1個cycle地址;3)發(fā)送第2個cycle地址;4)發(fā)送第3個cycle地址;5)發(fā)送第4個cycle地址;6)寫入數(shù)據(jù)至頁末;7)發(fā)送寫結束指令10h。具體仿真波形如圖3和圖4所示。
3.3 讀取操作
NANDFLASH的數(shù)據(jù)讀取操作包括NANDFLASH 的READ ID操作和讀取片內數(shù)據(jù)操作。其中READ ID操作是讀操作的基礎操作,NANDFLASH器件ID包括:Manufacture ID和Device ID,這些信息是判斷NANDFLASH的重要憑證。具體操作為:在CLE為高點平且WE_n的下降沿,在IO輸入90h命令讓NANDFLASH進入讀ID狀態(tài),接著在ALE為高電平且WE_n的下降沿時,在IO輸入00h地址,等待tALLRL1的時間后RE_n由高置低,在之后RE_n的兩個下降沿將ID讀出。其結果Manufacture ID為20h,Device ID為76h,板級驗證圖5所示。
NAND512W3A每頁分為A,B,C 3個區(qū),總共528字節(jié)。其中A區(qū)256字節(jié),B區(qū)256字節(jié),C區(qū)16字節(jié),A區(qū)和B區(qū)的讀取時序一致,讀取時要分三步讀取。在A區(qū)讀取完畢后可以通過將片選信號暫時拉高來中斷讀操作,將片選信號再次拉低即可進行B區(qū)的讀取操作NAND512W3A的尋址分為4個cycle。分別是:A[0:7]、A[9:16]、A[17:24]、A[25: 26]。 讀操作的過程為:1)發(fā)送讀取指令;2)發(fā)送第1個cycle地址;3)發(fā)送第2個cycle地址;4)發(fā)送第3個cycle地址;5)發(fā)送第4個cycle地址;6)等待信號變回高電平;7)讀取數(shù)據(jù)至頁末。圖6和圖7為具體的讀取A區(qū)操作仿真波形圖。
圖3NANDFLASH寫操作ModelSim仿真波形圖
圖4 NANDFLASH寫操作ChipScope仿真波形圖
圖5 READ ID ChipScope仿真圖
壞塊問題一直是NANDFLASH存儲過程中的基本問題,壞塊的種類分為出廠壞塊和使用過程中的新增壞塊,一般生產(chǎn)NANDFLASH的廠家會有標記出出廠壞塊的個數(shù)和存在的位置,燒寫時應當避開這些出廠壞塊進行燒寫。而在存儲過程中出現(xiàn)的新增壞塊則需要進行ECC校驗。創(chuàng)建壞塊信息表的存儲方式是在系統(tǒng)接收到了NANDFLASH的擦除命令后,先讀取NANDFLASH中的固有壞塊信息并且對有效塊進行兩次擦除操作,同時建立邏輯塊地址和有效塊標識表[10]。擦除操作完畢后,將該表同時寫入到NANDFLASH前3塊有效塊中,這樣可以防止因某一塊的損壞而使壞塊信息丟失,不能正確判斷出有效塊,從而導致存儲數(shù)據(jù)出現(xiàn)偏差商確保每個壞塊的第一或者第二頁的列地址 2048處[11]。這樣在每次上電過程中將3塊中的好壞塊標識信息都讀出并對比,如有某一塊存儲壞塊信息不正確,則立即將信息表轉存到有效塊中,做好備份工作。具體實現(xiàn)操作首先是NANDFLASH出廠時廠是非FFh數(shù)據(jù)。由于初始壞塊信息在某些情況下是可擦除的,因此在使用之前應該依據(jù)初始壞塊信息建立初始化壞塊表,本設計中初始化壞塊表是在記錄NANDFLASH里創(chuàng)建的,創(chuàng)建初始化壞塊表[12]。具體操作如圖8所示。
圖6 NANDFLASH A區(qū)讀操作仿真波形圖
圖7 NANDFLASH A區(qū)讀操作結果放大圖
圖8 創(chuàng)建初始化壞塊表流程圖
為了使NANDFLASH在斷電再上電后仍能繼續(xù)之前的操作,地址緩存在每次NANDFLASH讀寫操作后都會更新當前地址,更新的地址將被存入NANDFLASH的地址存儲空間。在下一次NAND FLASH操作開始之前,再把之前存入的地址讀出并當作這次工作的操作地址[13-14]。這樣就可以保證NANDFLASH在重新上電之后,操作地址可以再從NANDFLASH的地址存儲空間讀出,從而繼續(xù)工作。在燒寫過程中,當一個片選的容量存滿之后,需要自動切換到下一個片選信號,進而繼續(xù)工作。對NANDFLASH的每次操作都涉及到對應的操作地址,即頁地址、塊地址和片選號(從頁首開始操作,不考慮頁內地址)。一次操作完成后,應該更新操作地址并進行相應的判斷[15]。地址更新時,依次更新頁地址、塊地址和片選信號,當一個地址達到最大值時,該地址歸零同時高階地址加一。
文中針對炮彈彈道測試系統(tǒng)存儲模塊進行了設計,具體使用方案為FPGA搭載大容量NANDFLASH。主要完成的工作有:1)對FPGA擦除、讀取和寫入NANDFLASH的步驟做了簡單的介紹。2)針對NANDFLASH出現(xiàn)壞塊的情況給出了相應的解決方案。3)對NANDFLASH操作地址實時更新,并將操作地址進行存儲,重新上電后讀出地址繼續(xù)操作。最終實現(xiàn)系統(tǒng)所需要求,性能穩(wěn)定。
[1]任勇峰,張凱華,程海亮.基于FPGA的高速數(shù)據(jù)采集存儲系統(tǒng)設計[J].電子器件,2015,38(1):135-139.
[2]黃輝.基于FPGA的數(shù)據(jù)記錄儀NANDFLASH讀寫模塊研制[J].科技創(chuàng)新導報,2012,12:13-14.
[3]常璐,蒲南江.一種基于FPGA的高速數(shù)據(jù)記錄系統(tǒng)的設計[J].電腦學習,2011,4(2):132-134.
[4]XILINX.Spartan3E Platform FPGA handbook[EB/ OL].
[5]ST.NAND01GW3A0CV1 datasheet[EB/OL].
[6]張博,段哲民.基于FPGA的數(shù)據(jù)采集系統(tǒng)設計[J].電子設計工程,2012,20(7):86-88.
[7]劉東海,任永峰,儲成君.基于FPGA控制的NAND FLASH存儲設計[J].科學技術與工程,2013,34(13): 10349-10353.
[8]張峰.基于NANDFLASH陣列的高速存儲技術[J]..電訊技術,2013,53(1):68-70.
[9]趙櫸云,張敬帥.基于NANDLFLASH的數(shù)據(jù)存儲系統(tǒng)設計[J].單片機與嵌入式系統(tǒng)應用,2012(6): 71-73.
[10]舒文麗,吳云峰,趙啟義,等.NANDFLASH壞塊存儲辦法[J].電子儀器,2011,34(5):580-583.
[11]喬立巖,李元亨,王戈.一種NANDFLASH壞塊管理優(yōu)化方法的實現(xiàn) [J].電子測量技術,2015,38 (7):19-21.
[12]賈源泉,肖儂,歐洋,等.基于NANDFLASH的多路并行存儲系統(tǒng)中壞塊策略的研究[J].計算機研究與發(fā)展,2012(49):68-72.
[13]李槐生.基于FPGA的NANDFLASH控制器的設計[J].科學之友,2011(11):146-149.
[14]吳凡.基于FPGA和NANDFLASH的嵌入式存儲系統(tǒng)設計[J].電子科技,2016,29(3):97-101.
[15]邢亮,黃暉,田丹.機載系統(tǒng)NANDFLASH存儲技術[J].航空計算技術,2014,44(1):123-125.
Design of nandflash memory module with high speed and large capacity based on FPGA
PENG Zhuo-wen1,YANG Xin-min1,WANG Sheng-hong2
(1.National Key Laboratory of Transient Physics,Nanjing University of Science and Technology,Nanjing 210094,China;2.Huaihai Industrial Group,Changzhi 046000,China)
In order to achieve the storage of Ballistic test system’s real-time data,this article designs a storage module.The module consists of XILINX XC3S1600E and STMicroelectronics NAND512W3A,which controls the read&white operation of NANDFLASH by programing the FPGA.Aiming at the problems that NANDFLASH contains bad block,this paper proposes for a corresponding management measure and secures its data’s reliability.As well,the memory module could continue work when it is reenergized though updating and saving the operation address in real time.
FPGA;NANDFLASH;large storage;bad block management
TN98
A
1674-6236(2017)07-0111-04
2016-04-22稿件編號:201604222
彭卓文(1992—),男,湖北十堰人,碩士。研究方向:FPGA的數(shù)據(jù)采集和記錄。