陶 莉,陳萬培
(揚州大學 信息工程學院,江蘇 揚州 225000)
隨著信息產(chǎn)業(yè)的飛速發(fā)展,各個行業(yè)對數(shù)據(jù)存儲的要求越來越高,基于閃存技術(shù)的NAND Flash存儲芯片由于價格低、體積小以及效率高的優(yōu)勢,廣泛應(yīng)用于現(xiàn)代數(shù)碼產(chǎn)品以及固態(tài)硬盤等媒體設(shè)備。作為高密度靜態(tài)可擴展存儲器,NAND Flash存儲芯片在大容量高速數(shù)據(jù)存儲系統(tǒng)中占據(jù)主流地位[1-2]。
采用NAND Flash存儲芯片作為存儲介質(zhì)的固態(tài)盤,比傳統(tǒng)的存儲設(shè)備更能承受溫度的變化、機械的振動和沖擊,同時具有耗電少、存儲密度提升快、可靠性更高的優(yōu)點,易于實現(xiàn)高速度大容量的存儲[3-8]。NAND Flash存儲芯片結(jié)構(gòu)每比特成本低,具有更高的性能,并且能像磁盤一樣可以通過接口輕松升級[9-13]。另外,NAND Flash存儲芯片的封裝尺寸在不斷減少,而存儲容量每年會提高3~4倍[14-17]。由于NAND Flash存儲芯片復(fù)雜的接口操作,設(shè)計了一種與其時序相吻合的NAND Flash存儲芯片控制器。為了提高數(shù)據(jù)存儲容量和存取速度,文獻[18-20]采用的是多個控制器來操作多片NAND Flash存儲芯片,這樣設(shè)計方案在多個控制器之間同步問題比較明顯,接口復(fù)雜性也較高。基于此,本文提出了以單個控制器為基礎(chǔ),進行數(shù)據(jù)總線擴展,從而并行地控制多片NAND Flash存儲芯片。同時加入了流水線技術(shù)和乒乓操作,進一步提高數(shù)據(jù)存取速度。
基于FPGA可擴展的NAND Flash存儲芯片控制器的設(shè)計與測試系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 NANDFlash控制器結(jié)構(gòu)
整個測試系統(tǒng)由主機控制模塊和NAND Flash存儲芯片控制器模塊組成。NAND Flash存儲芯片控制器作為設(shè)計的核心包括1個邏輯控制模塊、2個數(shù)據(jù)緩沖區(qū)以及寄存器組。主機控制模塊相當于用戶端,用來發(fā)送命令給NAND Flash存儲芯片控制器。NAND Flash存儲芯片控制器主要產(chǎn)生與NAND Flash存儲芯片相吻合的時序并且直接控制NAND Flash存儲芯片。為了能夠并行操作4組NAND Flash存儲芯片,將NAND Flash存儲芯片控制器與外設(shè)NAND Flash存儲芯片之間的控制信號及狀態(tài)信號均擴展為4組,數(shù)據(jù)線擴展為32 bit。將測試系統(tǒng)下載到FPGA里,通過板卡上的高速接口與NAND Flash存儲芯片連接,即可方便地進行復(fù)位、讀ID、擦除、寫和讀的基本操作。
NANDFlash存儲芯片控制器主要采用狀態(tài)機并且利用Verilog HDL語言設(shè)計完成的。邏輯控制模塊是控制器的關(guān)鍵,用于產(chǎn)生符合要求的操作時序以及狀態(tài)間的轉(zhuǎn)換,2個數(shù)據(jù)緩沖區(qū)模塊用于數(shù)據(jù)的緩存以及實現(xiàn)乒乓操作,寄存器組用于存放NAND Flash存儲芯片的內(nèi)設(shè)命令、狀態(tài)、地址和配置參數(shù)。
主狀態(tài)機主要由6個狀態(tài)組成,如圖2所示,分別是空閑狀態(tài)、復(fù)位狀態(tài)、讀ID狀態(tài)、擦除狀態(tài)、編程狀態(tài)和讀狀態(tài)。
圖2 主狀態(tài)轉(zhuǎn)移
在系統(tǒng)完成復(fù)位狀態(tài)之后,主狀態(tài)將進入空閑狀態(tài),等待使能信號的到來從而進入下一個狀態(tài)。當接收到使能信號后,狀態(tài)具體的轉(zhuǎn)移是由命令碼的值(cmd_code)決定的。如果命令碼cmd_code=A2,那么狀態(tài)跳轉(zhuǎn)到編程狀態(tài)并且執(zhí)行相應(yīng)的子狀態(tài),在該狀態(tài)完成之后發(fā)出完成標志done信號給主狀態(tài),這時主狀態(tài)會進入空閑狀態(tài)并且等待下一個使能信號的到來。如果命令碼cmd_code=A3或者A4,流程和命令碼cmd_code=A2執(zhí)行過程類似。
NANDFlash存儲芯片控制器的塊擦除狀態(tài)轉(zhuǎn)移圖如圖3所示。對于NAND Flash存儲芯片來說,在寫入數(shù)據(jù)之前必須進行塊擦除操作。
首先,NAND Flash存儲芯片控制器接收到主機發(fā)送的命令字60H,表示開始對NAND Flash存儲芯片進行塊擦除操作。主機發(fā)出3 Byte地址來決定具體待擦除的塊,之后NAND Flash存儲芯片控制器內(nèi)部發(fā)出命令字D0H,即真正的擦除操作開始,隨后狀態(tài)信號R/B#變?yōu)榈碗娖?,表明塊擦除操作正在進行中,當狀態(tài)信號R/B#變?yōu)楦唠娖?,說明擦除操作完成。
NANDFlash存儲芯片控制器的頁編程狀態(tài)轉(zhuǎn)移圖如圖4所示。
圖4 頁編程狀態(tài)轉(zhuǎn)移
首先切換一個待編程的緩沖區(qū),用來做數(shù)據(jù)的緩存,主機發(fā)送一頁數(shù)據(jù)8 KB給數(shù)據(jù)緩沖區(qū),隨后發(fā)出命令80H給NAND Flash存儲芯片控制器表示開始頁編程操作,由于NAND Flash存儲芯片讀寫的最小單位是頁,所以只要發(fā)送3 Byte地址來表示需要編程的頁地址,NAND Flash存儲芯片控制器接收到地址和命令后,把數(shù)據(jù)緩沖區(qū)里的數(shù)據(jù)寫到NAND Flash存儲芯片的寄存器里。在NAND Flash存儲芯片控制器發(fā)出命令字10H后,NAND Flash存儲芯片將會自動編程,狀態(tài)信號R/B#將進入低電平并且在這個過程中R/B#信號一直保持低電平。在編程操作完成后,狀態(tài)信號R/B#進入高電平。通過狀態(tài)寄存器的值來檢測整個操作是否成功完成。
NANDFlash存儲芯片控制器的讀頁狀態(tài)轉(zhuǎn)移如圖5所示。
圖5 頁讀狀態(tài)轉(zhuǎn)移
主機發(fā)送命令字00H給NAND Flash存儲芯片控制器開始讀頁操作,同時向NAND Flash存儲芯片控制器發(fā)出3 Byte頁地址,在NAND Flash存儲芯片控制器發(fā)送命令字30H后,NAND Flash存儲芯片進行內(nèi)部處理,此時狀態(tài)信號R/B#變?yōu)榈碗娖?,在此過程中NAND Flash存儲芯片控制器從NAND Flash存儲芯片中將一頁數(shù)據(jù)加載到數(shù)據(jù)緩沖區(qū)里,一旦狀態(tài)信號R/B#變?yōu)楦唠娖街螅砻骺刂破饕呀?jīng)將整頁數(shù)據(jù)全部讀進數(shù)據(jù)緩沖區(qū)里,此時緩存區(qū)里的數(shù)據(jù)可以被主機取走,等待所有數(shù)據(jù)被主機讀完,操作完成。
NANDFlash控制器內(nèi)部采用了2個單端口的RAM作為雙數(shù)據(jù)緩沖區(qū),來實現(xiàn)乒乓操作,這樣節(jié)省了用戶的等待時間,有效地提高了數(shù)據(jù)的訪問速度。本次設(shè)計中,每個緩沖區(qū)大小為8 KB,數(shù)據(jù)線I/O口大小為32 bit。例如,在寫操作時,對地址為0xFF8的寄存器的最低位設(shè)置為“0”,表示選擇緩沖區(qū)A,主機向其寫入8 KB后交給NAND Flash存儲芯片控制器操作,這時控制器對NAND Flash芯片進行寫操作,同時控制器將地址為0xFF8的寄存器的最低位設(shè)置為“1”,表示選中緩沖區(qū)B,主機向其寫入8 KB,等待上一周期的寫操作完成,一旦寫操作完成后,主機將緩沖區(qū)B交給控制器,控制器將緩沖區(qū)A交給主機,即進行緩沖區(qū)交換,這時控制器再次進入寫操作,需要將緩沖區(qū)B里的所有數(shù)據(jù)寫入NAND Flash芯片,此時主機向緩沖區(qū)A寫入8 KB,如此交替循環(huán)。
數(shù)據(jù)雙緩沖技術(shù)實現(xiàn)了輸入數(shù)據(jù)和輸出數(shù)據(jù)都是連續(xù)不斷地,因此非常適合對數(shù)據(jù)流進行流水線處理。
本系統(tǒng)是基于Verilog HDL語言設(shè)計完成的,并且在FPGA開發(fā)板上進行了驗證。開發(fā)板選用的是Cyclone V,系統(tǒng)時鐘設(shè)定為50 MHz,NAND Flash芯片選用的型號是MT29F64G08。為了分析系統(tǒng)內(nèi)部的實時數(shù)據(jù),這里借助Signal Tap II邏輯分析儀來捕獲信號波形,將Signal Tap II邏輯分析儀的采樣時鐘設(shè)置為50 MHz,和開發(fā)板系統(tǒng)時鐘保持一致。整個實驗對整個系統(tǒng)分別進行了功能驗證和性能驗證。
功能性驗證是基于單片NAND Flash芯片完成的,對讀、寫和擦除狀態(tài)進行了驗證,實驗結(jié)果如圖6、圖7和圖8所示。通過對結(jié)果進行分析,所設(shè)計的NAND Flash控制器的讀寫和擦除操作的時序完全吻合NAND Flash芯片的時序,即控制器能夠正確操作NAND Flash芯片,從而得出所設(shè)計的NAND Flash存儲芯片控制器在功能上符合要求。
由圖6可知,采樣點從144~148,主機發(fā)出第64塊的塊地址,同時發(fā)出擦除命令60H給NAND Flash存儲芯片控制器,經(jīng)過若干個周期后,在采樣點9處NAND Flash芯片接收到控制器發(fā)來的擦除命令,并且開始執(zhí)行塊擦除操作。
由圖7可知,在采樣點-8處,主機從地址為3FF9H的狀態(tài)寄存器中讀回狀態(tài)值為E0H,表示NAND Flash芯片是準備就緒的,采樣點-7~-3這4個時鐘周期里,主機發(fā)送3 Byte地址值(第64塊中的第2頁的地址)以及寫命令80H。當采樣點在-1處時,主機向控制器中的數(shù)據(jù)緩沖區(qū)寫入8 KB,在控制器發(fā)出命令10H后,NAND Flash芯片進入寫操作。
由圖8可知,在采樣點-9處,主機從地址為3FF9H的狀態(tài)寄存器中讀回狀態(tài)值為E0H,表示NAND Flash芯片是準備就緒的,采樣點-8~-4這4個時鐘周期里,主機發(fā)送3 Byte地址值(第64塊中的第2頁的地址)以及讀命令00H。3個時鐘周期后,控制器發(fā)送寫命令30H給NAND Flash芯片,NAND Flash芯片接收到命令之后開始進行讀操作,8 KB全部從緩沖區(qū)里正確讀出,這表明所設(shè)計的控制器完全符合系統(tǒng)功能要求。
圖6 擦除狀態(tài)采樣圖
圖7 寫狀態(tài)采樣圖
圖8 讀狀態(tài)采樣圖
在完成功能測試與驗證之后,進一步地對NAND Flash存儲芯片控制器進行性能測試。針對讀寫操作,表1和表2分別給出了單片NAND Flash芯片頁寫操作和頁讀操作所用的時間。
表1 頁寫時鐘數(shù)
測試ID號時鐘數(shù)平均時鐘數(shù)133 743230 933333 762430 941530 989633 80132 361.5
從表1可以看出,在寫操作時,不同的頁需要的時間是不同的,因此時間平均值32 361.5作為衡量的指標參數(shù),由于頁的大小是8 KB,時鐘頻率是50 MHz,因此寫操作的速度是12.7 MB/s。同樣,從表2可以看出,讀操作所用的時間平均值是2 617.8,速度是156.5 MB/s。對于多片NAND Flash芯片并行結(jié)構(gòu),寫速度可以達到50.8 MB/s,讀速度可以達到626 MB/s。
表2 頁讀時鐘數(shù)
測試ID號時鐘數(shù)平均時鐘數(shù)12 54522 54032 65942 64652 66662 6512 617.8
本文針對NAND Flash存儲芯片接口復(fù)雜、不適合直接對其進行數(shù)據(jù)的存儲與讀取的問題,提出了一種符合NAND Flash存儲芯片時序的控制器來對其直接操作,該控制器是基于FPGA設(shè)計的,采用狀態(tài)機思想實現(xiàn)。為了進一步加快數(shù)據(jù)存儲與讀取速度,并且加大數(shù)據(jù)的存儲量,本文采用了多片NAND Flash并行結(jié)構(gòu)將數(shù)據(jù)位擴展到32位,設(shè)計了2個數(shù)據(jù)緩沖區(qū),實現(xiàn)了雙數(shù)據(jù)緩沖。今后將針對提高NAND Flash存儲芯片的讀寫速度方面展開更為深入的研究。