《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于AMBA APB總線的Nand Flash控制器的設(shè)計(jì)
基于AMBA APB總線的Nand Flash控制器的設(shè)計(jì)
來(lái)源:微型機(jī)與應(yīng)用2013年第20期
王新君1, 張 煒2, 馮士維1, 胡 杰2
(1. 北京工業(yè)大學(xué) 電子信息與控制工程學(xué)院, 北京100124; 2. 北京華芯微特科技有限公司,
摘要: 介紹了基于AMBA APB總線Nand Flash控制器的設(shè)計(jì),,首先簡(jiǎn)單介紹了 Nand Flash的一些特點(diǎn),然后詳細(xì)介紹了Nand Flash 控制器的整體框架,、具體功能及其內(nèi)部的數(shù)據(jù)通路,。該控制器通過(guò)ModelSim進(jìn)行了仿真及FPGA板級(jí)驗(yàn)證,,結(jié)果證明能夠滿足Nand Flash時(shí)序要求。
Abstract:
Key words :

摘  要: 介紹了基于AMBA APB總線Nand Flash控制器的設(shè)計(jì),,首先簡(jiǎn)單介紹了 Nand Flash的一些特點(diǎn),,然后詳細(xì)介紹了Nand Flash 控制器的整體框架、具體功能及其內(nèi)部的數(shù)據(jù)通路,。該控制器通過(guò)ModelSim進(jìn)行了仿真及FPGA板級(jí)驗(yàn)證,,結(jié)果證明能夠滿足Nand Flash時(shí)序要求。
關(guān)鍵詞: Nand Flash,; Flash控制器,; AMBA APB總線; 仿真,; 狀態(tài)機(jī)

    嵌入式系統(tǒng)的廣泛應(yīng)用使得數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)管理逐步成為一個(gè)重要課題,。Flash存儲(chǔ)器越來(lái)越多地應(yīng)用并逐步取代其他存儲(chǔ)器,成為嵌入式系統(tǒng)中重要地?cái)?shù)據(jù)及程序載體[1],。
    Flash主要分為Nor Flash,、Nand Flash、And Flash三種,。Nand Flash由于其優(yōu)越的性能,,成為主流內(nèi)存。Nand Flash不僅具有存儲(chǔ)密度高,、讀出數(shù)據(jù)快的優(yōu)點(diǎn),,而且價(jià)格上也有優(yōu)勢(shì),適合大數(shù)據(jù)存儲(chǔ)[2],。但是應(yīng)用Nand Flash必須提供專用的接口控制時(shí)序,,因此目前設(shè)計(jì)主流的嵌入式SoC芯片如果要提供對(duì)Nand Flash的支持,就需要設(shè)計(jì)一個(gè)Nand Flash控制模塊電路,。
 本文介紹了Nand Flash的操作方法,,并基于此操作方法詳細(xì)介紹了該接口電路的結(jié)構(gòu)及讀寫(xiě)數(shù)據(jù)流。同時(shí)介紹了Nand Flash的詳細(xì)操作和狀態(tài)機(jī)控制,。最后,,給出了該模塊在服務(wù)器上的仿真時(shí)序圖。
1 Flash簡(jiǎn)介
    由Intel公司于1988年推出的Nor Flash技術(shù)具有工作電壓低、隨機(jī)讀取快,、功耗低,、穩(wěn)定性高等優(yōu)點(diǎn)。東芝公司于1989年發(fā)表的Nand Flash結(jié)構(gòu)則強(qiáng)調(diào)成本和性能,,其容量較大,、改寫(xiě)速度快,適用于大量數(shù)據(jù)的存儲(chǔ),,在嵌入式產(chǎn)品中得到了廣泛的應(yīng)用,,如數(shù)碼產(chǎn)品、小體積U盤(pán)等[3],。
    隨著SoC技術(shù)的發(fā)展,,集成SoC的整機(jī)系統(tǒng)規(guī)模越來(lái)越大,功能越來(lái)越強(qiáng)大,。在這些整機(jī)系統(tǒng)中,,Nand Flash得到了廣泛的應(yīng)用。為了支持Nand Flash通信,,在SoC中必須設(shè)計(jì)Nand Flash控制器接口,。本文設(shè)計(jì)的Nand Flash控制器支持AMBA APB接口。經(jīng)ModelSim仿真和FPGA驗(yàn)證表明,,本設(shè)計(jì)完全滿足Nand Flash的時(shí)序和通信功能要求,,并最終成功流片。
2 總體結(jié)構(gòu)與子模塊劃分
    該設(shè)計(jì)是基于AMBA APB總線的模塊,。AMBA2.0總線為嵌入式微控制器定義了一套片上總線標(biāo)準(zhǔn),,用戶可獨(dú)立設(shè)計(jì)基于該規(guī)范的外IP。
 總體結(jié)構(gòu)如圖1所示,可分為APB總線接口模塊,、Flash控制模塊,。APB總線接口模塊控制時(shí)序依據(jù)AMBA APB總線規(guī)范,主要負(fù)責(zé)與APB總線之間的通信與交互,,如鎖存總線來(lái)的地址,、數(shù)據(jù)、片選,、使能等,。Flash控制模塊主要負(fù)責(zé)與APB總線接口模塊的交互、從Flash獲取數(shù)據(jù),,并將8 bit數(shù)據(jù)整合成32 bit,。
    Read_Done表示讀取數(shù)據(jù)結(jié)束,由Flash控制模塊輸出到APB接口模塊,,作為中斷觸發(fā)信號(hào)觸發(fā)中斷。APB接口模塊中的中斷(interrupt)部分處理中斷信號(hào),并輸出Int_Output信號(hào),。DATA是Flash控制器由Flash中讀出的數(shù)據(jù),。Flash_Addr、Read_Enable,、Read_Type和Addr_Length是由APB接口模塊給到Flash控制模塊的信號(hào),,分別是各自對(duì)應(yīng)寄存器的值。Spi_clk,、CS,、WP、HOLD,、SI和SO是Flash控制模塊與Flash對(duì)應(yīng)端口的連接,。
3 AMBA APB總線接口模塊
 該Flash控制器通過(guò)APB總線接口模塊與APB總線接口通信。APB總線輸入信號(hào)包括時(shí)鐘信號(hào)PCLK,、片選信號(hào)PSEL,、復(fù)位信號(hào)PRESETn、地址信號(hào)PADDR[31:0],、寫(xiě)數(shù)據(jù)信號(hào)PWDATA[31:0],還包括控制信號(hào)組:PWRITE為讀寫(xiě)控制信號(hào),、PENABLE為使能信號(hào)。APB總線接口模塊返回給總線的信號(hào)有讀數(shù)據(jù)信號(hào)PRDATA[31:0],。APB總線讀寫(xiě)按照APB總線讀寫(xiě)時(shí)序要求,,如圖2、圖3所示,。

    APB接口模塊中包含多個(gè)寄存器,,各個(gè)寄存器的功能:Addr_Length_Reg是地址長(zhǎng)度寄存器,用于鎖存Addr_Length信號(hào)(Addr_Length是長(zhǎng)度信號(hào),,表示將要傳送的數(shù)據(jù)長(zhǎng)度,,該數(shù)據(jù)長(zhǎng)度可以自行定義由APB總線輸入,較為靈活,,可以拷貝不同長(zhǎng)度的數(shù)據(jù)或程序),;Read_Type_Reg是讀類型寄存器,用于鎖存APB總線的Read_Type信號(hào)(Read_Type是讀類型信號(hào),標(biāo)志讀取數(shù)據(jù)時(shí)的方式,,Read_Type為0時(shí)是單通道讀數(shù)據(jù),為1時(shí)是雙通道讀數(shù)據(jù));Flash_Addr_Reg 是Flash地址寄存器,,用于鎖存Flash_Addr信號(hào)(Flash_Addr是Flash讀操作的起始地址);Read_Enable_Reg是讀使能寄存器,,用于鎖存APB總線的Read_Enable信號(hào)(Read_Enable是使能信號(hào),當(dāng)Read_Enable置1時(shí),開(kāi)始從Flash中讀取數(shù)據(jù),直到數(shù)據(jù)長(zhǎng)度等于Addr_Length_Reg中的數(shù)據(jù)長(zhǎng)度值),。
4 Flash控制模塊
    本設(shè)計(jì)采用的Flash支持標(biāo)準(zhǔn)SPI接口,最高時(shí)鐘頻率可達(dá)120 MHz,。本設(shè)計(jì)支持對(duì)Flash的讀操作分為單通道方式和雙通道方式,,分別如圖4,、圖5所示。

    Flash控制器對(duì)于Flash的讀操作通過(guò)狀態(tài)機(jī)實(shí)現(xiàn),。狀態(tài)機(jī)負(fù)責(zé)整個(gè)模塊的狀態(tài)控制,,完成對(duì)Nand Flash的讀、寫(xiě),、發(fā)命令字,、發(fā)地址等狀態(tài)控制操作。寄存器堆包括當(dāng)前狀態(tài)寄存器,、下一狀態(tài)寄存器,、命令寄存器、地址寄存器,、數(shù)據(jù)長(zhǎng)度寄存器,、數(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ù)長(zhǎng)度寄存器寄存當(dāng)前傳輸數(shù)據(jù)的個(gè)數(shù),;兩個(gè)32位數(shù)據(jù)接收寄存器輪流交替接收數(shù)據(jù);地址發(fā)送狀態(tài)寄存器和命令發(fā)送狀態(tài)寄存器分別標(biāo)示地址和命令的發(fā)送完成與否,;兩個(gè)數(shù)據(jù)接收使能寄存器標(biāo)示是否可以接收數(shù)據(jù),,對(duì)應(yīng)于兩個(gè)數(shù)據(jù)接收寄存器。
    狀態(tài)機(jī)部分包括9個(gè)狀態(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ā)出對(duì)Nand Flash的控制操作信號(hào)。其狀態(tài)轉(zhuǎn)換關(guān)系如圖6所示,。

 

 

    在有些設(shè)計(jì)中,會(huì)將FIFO控制以及時(shí)序控制模塊做在一起,形成一個(gè)大狀態(tài)機(jī)[3],。還有一些設(shè)計(jì)對(duì)FIFO的控制構(gòu)造成兩個(gè)協(xié)同工作的狀態(tài)機(jī),再對(duì)時(shí)序的控制劃分成另一個(gè)基本上由計(jì)數(shù)器組成的模塊,使得每個(gè)模塊思路簡(jiǎn)單清晰,FIFO利用率高,而且FIFO大小可配置[4]。但是,這樣設(shè)計(jì)的狀態(tài)機(jī)過(guò)于復(fù)雜,對(duì)FIFO的利用率較低或者控制較為煩冗,,硬件資源占用較大,。本設(shè)計(jì)對(duì)于數(shù)據(jù)的緩存采取應(yīng)用寄存器的方法,占用硬件資源較小,,而且采用兩個(gè)32位寄存器輪流緩存數(shù)據(jù),,消除了等待時(shí)間且控制簡(jiǎn)單,,提高了傳輸效率。
5 模塊驗(yàn)證
 該設(shè)計(jì)Verilog代碼編寫(xiě)完成后,,編寫(xiě)測(cè)試向量(Testbench)并進(jìn)行了仿真,,證實(shí)其功能是完全可以實(shí)現(xiàn)的。實(shí)際波形如圖7,、圖8所示。

    該模塊已先后通過(guò)了服務(wù)器上進(jìn)行的寄存器級(jí)(RTL)模擬,、后模擬驗(yàn)證和在FPGA開(kāi)發(fā)板上的仿真驗(yàn)證,并在實(shí)際芯片設(shè)計(jì)中得到了具體的應(yīng)用驗(yàn)證,,流片后芯片功能達(dá)到了預(yù)期的設(shè)計(jì)目的。
    軟件實(shí)現(xiàn)對(duì)Flash的各種操作的方式很耗費(fèi)時(shí)鐘周期,,讀寫(xiě)速度大大下降,。該設(shè)計(jì)不僅解決了傳輸速度慢的問(wèn)題,同時(shí)建立了由片外Flash到片內(nèi)存儲(chǔ)空間的直通道,,可將數(shù)據(jù)直接從Flash傳輸?shù)狡瑑?nèi),,傳輸操作由Flash控制模塊完成而不需要CPU參與,減少CPU占用,。與此同時(shí),,實(shí)現(xiàn)了多種Flash數(shù)據(jù)傳輸方式,包括單通道讀,、雙通道讀,,數(shù)據(jù)傳輸長(zhǎng)度由用戶自行定義,根據(jù)實(shí)際需求自由設(shè)置傳輸長(zhǎng)度,,增強(qiáng)了該設(shè)計(jì)的利用范圍,、靈活性和可移植性。另外,,F(xiàn)lash控制模塊內(nèi)的兩個(gè)數(shù)據(jù)接收寄存器交替接收數(shù)據(jù),,消除了兩次數(shù)據(jù)接收之間的等待時(shí)間,提高了芯片的工作效率,。當(dāng)然因?yàn)镹and Flash的操作復(fù)雜,,該設(shè)計(jì)還未能完全實(shí)現(xiàn)對(duì)Nand Flash所有操作的支持,在今后的設(shè)計(jì)中需進(jìn)一步完善,。
參考文獻(xiàn)
[1] 蔡錦達(dá),王德福,黃小松.大容量Nand Flash在ARM嵌入式系統(tǒng)中的應(yīng)用[J]. 工業(yè)控制計(jì)算機(jī), 2004,17(5):43-44.
[2] 王洋,劉衛(wèi)東,于崗.基于AMBA APB總線Nand Flash控制器的設(shè)計(jì)研究[J].電子設(shè)計(jì)工程,2011,19(20):166-168.
[3] 唐宇光,王鎮(zhèn),凌明.一種基于AMBA總線的Nand Flash 控制接口電路設(shè)計(jì)[J].電子器件,2004,27(2):306-311.
[4] 薛杰,戎蒙恬,劉文江.一種可配置Nand-Flash控制器的設(shè)計(jì)[J].信息技術(shù),2006(11):1-4.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。