摘 要: 介紹了基于AMBA APB總線Nand Flash控制器的設(shè)計,首先簡單介紹了 Nand Flash的一些特點,然后詳細介紹了Nand Flash 控制器的整體框架、具體功能及其內(nèi)部的數(shù)據(jù)通路。該控制器通過ModelSim進行了仿真及FPGA板級驗證,結(jié)果證明能夠滿足Nand Flash時序要求。
關(guān)鍵詞: Nand Flash; Flash控制器; AMBA APB總線; 仿真; 狀態(tài)機
嵌入式系統(tǒng)的廣泛應(yīng)用使得數(shù)據(jù)存儲和數(shù)據(jù)管理逐步成為一個重要課題。Flash存儲器越來越多地應(yīng)用并逐步取代其他存儲器,成為嵌入式系統(tǒng)中重要地數(shù)據(jù)及程序載體[1]。
Flash主要分為Nor Flash、Nand Flash、And Flash三種。Nand Flash由于其優(yōu)越的性能,成為主流內(nèi)存。Nand Flash不僅具有存儲密度高、讀出數(shù)據(jù)快的優(yōu)點,而且價格上也有優(yōu)勢,適合大數(shù)據(jù)存儲[2]。但是應(yīng)用Nand Flash必須提供專用的接口控制時序,因此目前設(shè)計主流的嵌入式SoC芯片如果要提供對Nand Flash的支持,就需要設(shè)計一個Nand Flash控制模塊電路。
本文介紹了Nand Flash的操作方法,并基于此操作方法詳細介紹了該接口電路的結(jié)構(gòu)及讀寫數(shù)據(jù)流。同時介紹了Nand Flash的詳細操作和狀態(tài)機控制。最后,給出了該模塊在服務(wù)器上的仿真時序圖。
1 Flash簡介
由Intel公司于1988年推出的Nor Flash技術(shù)具有工作電壓低、隨機讀取快、功耗低、穩(wěn)定性高等優(yōu)點。東芝公司于1989年發(fā)表的Nand Flash結(jié)構(gòu)則強調(diào)成本和性能,其容量較大、改寫速度快,適用于大量數(shù)據(jù)的存儲,在嵌入式產(chǎn)品中得到了廣泛的應(yīng)用,如數(shù)碼產(chǎn)品、小體積U盤等[3]。
隨著SoC技術(shù)的發(fā)展,集成SoC的整機系統(tǒng)規(guī)模越來越大,功能越來越強大。在這些整機系統(tǒng)中,Nand Flash得到了廣泛的應(yīng)用。為了支持Nand Flash通信,在SoC中必須設(shè)計Nand Flash控制器接口。本文設(shè)計的Nand Flash控制器支持AMBA APB接口。經(jīng)ModelSim仿真和FPGA驗證表明,本設(shè)計完全滿足Nand Flash的時序和通信功能要求,并最終成功流片。
2 總體結(jié)構(gòu)與子模塊劃分
該設(shè)計是基于AMBA APB總線的模塊。AMBA2.0總線為嵌入式微控制器定義了一套片上總線標準,用戶可獨立設(shè)計基于該規(guī)范的外IP。
總體結(jié)構(gòu)如圖1所示,可分為APB總線接口模塊、Flash控制模塊。APB總線接口模塊控制時序依據(jù)AMBA APB總線規(guī)范,主要負責(zé)與APB總線之間的通信與交互,如鎖存總線來的地址、數(shù)據(jù)、片選、使能等。Flash控制模塊主要負責(zé)與APB總線接口模塊的交互、從Flash獲取數(shù)據(jù),并將8 bit數(shù)據(jù)整合成32 bit。
Read_Done表示讀取數(shù)據(jù)結(jié)束,由Flash控制模塊輸出到APB接口模塊,作為中斷觸發(fā)信號觸發(fā)中斷。APB接口模塊中的中斷(interrupt)部分處理中斷信號,并輸出Int_Output信號。DATA是Flash控制器由Flash中讀出的數(shù)據(jù)。Flash_Addr、Read_Enable、Read_Type和Addr_Length是由APB接口模塊給到Flash控制模塊的信號,分別是各自對應(yīng)寄存器的值。Spi_clk、CS、WP、HOLD、SI和SO是Flash控制模塊與Flash對應(yīng)端口的連接。
3 AMBA APB總線接口模塊
該Flash控制器通過APB總線接口模塊與APB總線接口通信。APB總線輸入信號包括時鐘信號PCLK、片選信號PSEL、復(fù)位信號PRESETn、地址信號PADDR[31:0]、寫數(shù)據(jù)信號PWDATA[31:0],還包括控制信號組:PWRITE為讀寫控制信號、PENABLE為使能信號。APB總線接口模塊返回給總線的信號有讀數(shù)據(jù)信號PRDATA[31:0]。APB總線讀寫按照APB總線讀寫時序要求,如圖2、圖3所示。
APB接口模塊中包含多個寄存器,各個寄存器的功能:Addr_Length_Reg是地址長度寄存器,用于鎖存Addr_Length信號(Addr_Length是長度信號,表示將要傳送的數(shù)據(jù)長度,該數(shù)據(jù)長度可以自行定義由APB總線輸入,較為靈活,可以拷貝不同長度的數(shù)據(jù)或程序);Read_Type_Reg是讀類型寄存器,用于鎖存APB總線的Read_Type信號(Read_Type是讀類型信號,標志讀取數(shù)據(jù)時的方式,Read_Type為0時是單通道讀數(shù)據(jù),為1時是雙通道讀數(shù)據(jù));Flash_Addr_Reg 是Flash地址寄存器,用于鎖存Flash_Addr信號(Flash_Addr是Flash讀操作的起始地址);Read_Enable_Reg是讀使能寄存器,用于鎖存APB總線的Read_Enable信號(Read_Enable是使能信號,當(dāng)Read_Enable置1時,開始從Flash中讀取數(shù)據(jù),直到數(shù)據(jù)長度等于Addr_Length_Reg中的數(shù)據(jù)長度值)。
4 Flash控制模塊
本設(shè)計采用的Flash支持標準SPI接口,最高時鐘頻率可達120 MHz。本設(shè)計支持對Flash的讀操作分為單通道方式和雙通道方式,分別如圖4、圖5所示。
Flash控制器對于Flash的讀操作通過狀態(tài)機實現(xiàn)。狀態(tài)機負責(zé)整個模塊的狀態(tài)控制,完成對Nand Flash的讀、寫、發(fā)命令字、發(fā)地址等狀態(tài)控制操作。寄存器堆包括當(dāng)前狀態(tài)寄存器、下一狀態(tài)寄存器、命令寄存器、地址寄存器、數(shù)據(jù)長度寄存器、數(shù)據(jù)接收寄存器、地址發(fā)送狀態(tài)寄存器、命令發(fā)送狀態(tài)寄存器和數(shù)據(jù)接收使能寄存器。當(dāng)前狀態(tài)寄存器和下一狀態(tài)寄存器分別寄存當(dāng)前狀態(tài)和下一狀態(tài);命令寄存器和地址寄存器分別寄存發(fā)給Nand Flash的命令字和地址;數(shù)據(jù)長度寄存器寄存當(dāng)前傳輸數(shù)據(jù)的個數(shù);兩個32位數(shù)據(jù)接收寄存器輪流交替接收數(shù)據(jù);地址發(fā)送狀態(tài)寄存器和命令發(fā)送狀態(tài)寄存器分別標示地址和命令的發(fā)送完成與否;兩個數(shù)據(jù)接收使能寄存器標示是否可以接收數(shù)據(jù),對應(yīng)于兩個數(shù)據(jù)接收寄存器。
狀態(tài)機部分包括9個狀態(tài),分別是Idle、Send_Command、Send_Address_S、Receive_Data_A_S、Receive_Data_B_S、Send_Address_D、Send_M、Receive_Data_A_D和Receive_Data_B_D,用以發(fā)出對Nand Flash的控制操作信號。其狀態(tài)轉(zhuǎn)換關(guān)系如圖6所示。
在有些設(shè)計中,會將FIFO控制以及時序控制模塊做在一起,形成一個大狀態(tài)機[3]。還有一些設(shè)計對FIFO的控制構(gòu)造成兩個協(xié)同工作的狀態(tài)機,再對時序的控制劃分成另一個基本上由計數(shù)器組成的模塊,使得每個模塊思路簡單清晰,FIFO利用率高,而且FIFO大小可配置[4]。但是,這樣設(shè)計的狀態(tài)機過于復(fù)雜,對FIFO的利用率較低或者控制較為煩冗,硬件資源占用較大。本設(shè)計對于數(shù)據(jù)的緩存采取應(yīng)用寄存器的方法,占用硬件資源較小,而且采用兩個32位寄存器輪流緩存數(shù)據(jù),消除了等待時間且控制簡單,提高了傳輸效率。
5 模塊驗證
該設(shè)計Verilog代碼編寫完成后,編寫測試向量(Testbench)并進行了仿真,證實其功能是完全可以實現(xiàn)的。實際波形如圖7、圖8所示。
該模塊已先后通過了服務(wù)器上進行的寄存器級(RTL)模擬、后模擬驗證和在FPGA開發(fā)板上的仿真驗證,并在實際芯片設(shè)計中得到了具體的應(yīng)用驗證,流片后芯片功能達到了預(yù)期的設(shè)計目的。
軟件實現(xiàn)對Flash的各種操作的方式很耗費時鐘周期,讀寫速度大大下降。該設(shè)計不僅解決了傳輸速度慢的問題,同時建立了由片外Flash到片內(nèi)存儲空間的直通道,可將數(shù)據(jù)直接從Flash傳輸?shù)狡瑑?nèi),傳輸操作由Flash控制模塊完成而不需要CPU參與,減少CPU占用。與此同時,實現(xiàn)了多種Flash數(shù)據(jù)傳輸方式,包括單通道讀、雙通道讀,數(shù)據(jù)傳輸長度由用戶自行定義,根據(jù)實際需求自由設(shè)置傳輸長度,增強了該設(shè)計的利用范圍、靈活性和可移植性。另外,F(xiàn)lash控制模塊內(nèi)的兩個數(shù)據(jù)接收寄存器交替接收數(shù)據(jù),消除了兩次數(shù)據(jù)接收之間的等待時間,提高了芯片的工作效率。當(dāng)然因為Nand Flash的操作復(fù)雜,該設(shè)計還未能完全實現(xiàn)對Nand Flash所有操作的支持,在今后的設(shè)計中需進一步完善。
參考文獻
[1] 蔡錦達,王德福,黃小松.大容量Nand Flash在ARM嵌入式系統(tǒng)中的應(yīng)用[J]. 工業(yè)控制計算機, 2004,17(5):43-44.
[2] 王洋,劉衛(wèi)東,于崗.基于AMBA APB總線Nand Flash控制器的設(shè)計研究[J].電子設(shè)計工程,2011,19(20):166-168.
[3] 唐宇光,王鎮(zhèn),凌明.一種基于AMBA總線的Nand Flash 控制接口電路設(shè)計[J].電子器件,2004,27(2):306-311.
[4] 薛杰,戎蒙恬,劉文江.一種可配置Nand-Flash控制器的設(shè)計[J].信息技術(shù),2006(11):1-4.