引言
在當今的數字信息時代,人們對大容量數據存儲的需求日趨旺盛。作為非易失性存儲器的NAND Flash,由于其高容量低成本的特點,逐漸在實際產品,比如固態硬盤、智能手機、平板電腦等消費類電子產品中得到應用。
由于其特殊的內部結構,NAND Flash的操作方式與NOR Flash不太一樣,不支持隨機字節訪問,其讀、寫操作均要以頁面(Page)為單位進行,同一頁面在未擦除前不允許進行多次寫操作;而擦除操作必須以塊(Block)為單位進行。因此,需要針對這一特性設計專用的控制器來完成各種操作。
本文根據這一目的,設計了一款NAND Flash控制器。該控制器不僅能夠完成前面提到的基本操作,還能支持ONFI2.1標準中的同步接口模式。使其能夠以200MB/s的速度對NAND Flash設備進行讀寫操作,遠遠快于其他同類NAND Flash控制器。
1 ONFI標準
ONFI(Open NAND Flash Interface,開放式NAND閃存接口)規范是一種Flash閃存接口的標準,它是Intel為統一當初混亂的閃存接口所倡導的標準。因為在此之前,市場上銷售的NAND閃存芯片在引腳定義上都不完全相同。這就使得為一家公司設計的控制器,很有可能無法用在另一家公司的產品上。比如為東芝芯片設計的控制器,就無法用在三星或海力士的產品上,這就給上游的主控設計商以及最終的產品設計人員帶來了很大的困難。
為此,Intel聯合多家NAND Flash廠商制定了ONFI標準,統一NAND Flash芯片的引腳定義,并在此基礎上采用新的技術以實現新的功能。2006年發布了ONFI1.O標準,使得接口的統一邁出了實質性的一步。但是該版本速度較慢,最高速度只有34MB/s,不具有太大的競爭優勢。為了提高速度,ONFI組織在2008年發布了ONFI2.0,將接口速度提升到了133MB/s。在該版本中,主要是通過兩項技術來提高傳輸速度。第一項就是在DRAM領域里常用的DDR(Double Data Rate,兩倍數據率)信號技術。第二項是使用源同步時鐘來精確控制鎖存信號,使其能夠達到更高的工作頻率。2009年,ONFI組織又推出了規格更高的ONFI2.1標準,把最高速度提高到了200MB/s。
2 控制器結構
本文設計的NAND Flash控制器是SOC芯片的一部分,作為AHB Slave被掛在總線上,接收來自CPU的讀、寫和擦除等命令。其結構框圖如圖1所示。
其中AHB Slave接口模塊主要是負責處理與AHB總線協議相關的操作;ECC編譯碼模塊主要是負責對存入NAND Flash中的數據進行糾錯編碼和對從NAND Flash中讀出的數據進行糾錯碼譯碼的工作;異步FIFO模塊用來緩存數據,并承擔數據跨時鐘域的工作;主控模塊負責整個控制器的控制;異步收發接口模塊主要負責異步模式下的數據讀寫;同理,同步收發接口模塊主要負責同步模式下的數據讀寫。本文的重點是與ONFI標準相關的接口設計,所以AHB Slave與ECC兩個模塊在此不再介紹,具體請參閱其他相關文獻。
主控模塊是整個控制器的中心控制模塊,由一個主狀態機和多個子狀態機構成。主狀態機有1個空閑狀態和8個工作狀態,分別對應著8種具體的操作。其狀態轉換如圖2所示。而每個工作狀態又對應1個子狀態機,負責每個操作的具體細節。由于篇幅所限,本文只列出Program操作的子狀態機狀態轉換圖,如圖3所示。其他子狀態機的狀態可以根據ONFI標準來確定。
3 同步模式設計
3.1 同步接口設計
支持ONFI2.0及以上的NAND Flash芯片既支持傳統的異步接口模式,也能通過配置工作在源同步的DDR接口模式下,從而達到速度的提高。如圖4所示,在同步工作模式下,增加了DQS信號,并將異步模式下的WE#信號變為CLK信號,RE#變為W/R信號。有很多文獻介紹了傳統異步接口模式下的NAND Flash控制器設計,本文不再贅述,以下開始介紹同步工作模式下的接口電路設計。
當NAND Flash工作于同步接口模式時,接口I/O數據為DDR形式,讀寫操作時序見圖5,可以發現它非常類似于DDR SDRAM的時序,其中DQ[7:0]為數據,DQS為數據選通信號,其基本思想就是將兩組持續時間為一個時鐘周期的數據合并,使得在傳輸過程中一個時鐘周期的上升沿和下降沿都能傳輸數據,從而獲得傳輸速度的倍增。
DQ和DQS均為雙向驅動信號,當進行寫操作時,由控制器進行驅動,當進行讀操作時,由Flash芯片內部進行驅動,本文雙向信號采用圖6方法實現,該結構需要置于整個設計的頂層,從而利于綜合的進行。
DQ與DQS信號間的相位關系對DDR接口非常重要。當對NAND Flash進行寫操作時,控制器必須產生一個與DQ數據信號中心對齊的DQS信號,所用發送端口電路如圖7所示,CLKS為同步接口模式下系統的整體時鐘。通過多路選擇器實現16bit數據DATA_O轉兩組8bit數據DQ_O輸出。CL-KS為高時對應DATA_O的高8bit數據,CLKS為低時對應DATA_O的低8bit數據,最后將CLKS進行移相作為DQS_O選通信號輸出。
當從Flash存儲器件讀取的時候,Flash輸出的DOS信號是與DQ信號邊沿對齊的,需要對接收到的DQS信號進行相移使之與DQ信號中心對齊,以采到準確的數據。圖8是DQS移相后與DQ中心對齊的實際仿真波形圖。所用讀接口結構如圖9所示,首先將DQS_I選通信號進行移相,然后通過兩組分別為上升沿觸發和下降沿觸發的寄存器采樣與DQS_I上升沿和下降沿對齊的兩組8bit數據DQ_I,并通過一組同樣是上升沿觸發的寄存器將這兩組8bit數據合并成16bit數據。
實現讀寫操作的電路中都使用了DELAY單元,以達到移相的目的,DELAY單元可以由兩種方法實現:DLL和延遲線。將相移定為90°,是假設DQ和DQS是理想的源同步接口,并假定DQ和DQS經過芯片內部延時、PCB板上延時及pin腳延時是相同的,這樣能得到最理想的數據窗口。
3.2 異步時鐘域處理
很明顯,同步接口模式下的控制器將涉及到較多的異步時鐘域的通信,需要小心處理。首先,由于本文所設計的控制器中所有跨時鐘域的單比特控制信號沒有窄脈沖形式,因此均可以使用雙D觸發同步器作同步,此外涉及跨時鐘域的數據緩沖需要使用異步FIFO。由于ONFI2.1規定的最快Timing Mode達到了200MB/s的數據速率,而涉及本文應用的連接Flash控制器的下一級模塊消耗數據的速率為100MB/s,如果按照公式計算FIFO的深度,可如式(1)所示,其中的4KB是仿真實驗所使用的仿真模型的頁面(Page)大小。
4KB×(1-100MB/s÷200MB/s)=2KB (1)
這樣大的FIFO將帶來較大的硬件代價,考慮到NAND Flash的讀寫操作是可以暫停的,故本文將FIFO深度設為128,寬度為16bit。
如何判斷異步FIFO的空滿狀態也是設計FIFO的難點。本文所使用的FIFO采用圖10的結構,FIFO Memory模塊采用寄存器組作為核心存儲,這是由于本文應用環境下可能經常出現讀空或寫滿的情況,這樣會頻繁遇到讀寫同一個地址,因此不適合用雙端口SRAM作為FIFO的核心存儲;Wptr&Full模塊用于產生寫指針和滿標志;Rptr&Empty模塊用于產生讀指針和讀標志;此外還有兩組同步器分別將寫指針同步到讀時鐘域和讀指針同步到寫時鐘域。跨時鐘傳送的讀寫指針都事先轉換成格雷碼,以避免亞穩態問題及提高可靠性。
以下介紹空滿標志判斷電路的實現。空標志的條件是讀操作引起的讀寫指針相等,滿標志的條件是寫操作引起的讀寫指針相等。本文采用的方法是,構造指針寬度為N+1,深度為2N的FIFO,利用多加了一位寬度的指針實現空滿狀態的判斷:當指針最高位不同而其似位相同時,FIFO為滿;當指針完全相同時,FIFO為空。指針及地址產生電路見圖11,給出的地址addr={addrmsb,ptr[n-3:0]},ptr[n-1:0]作為格雷碼指針給出,用于判斷空滿,其中addrmsb由gnext[n-1]^gnext[n-2]產生。
3.3 異步模式切換到同步模式
根據ONFI 2.1規定,NAND Flash剛上電時一律處在異步接口模式的Timing Mode 0下工作,需要通過SETFEATURES操作才能轉換到同步接口模式下工作,步驟如下,同時操作時序見圖12。
(1)發出SET FEATURES(EFh)命令;
(2)將地址設為01h;
(3)向P1寫入1Xh,其中X表示需要設定的同步接口Timing ModeX;
(4)P2到P3均寫入00h;
(5)此時R/B#信號將保持低電平tITC。控制器需要將CE#拉高。在tITC期間,控制器不得向NAND Flash發出任何命令,包括讀狀態命令。
(6)當tITC結束后R/B#拉高,同步接口開啟。在CE#使能之前,控制器需要給出CLK。
注意到異步接口轉換到同步接口模式下,需要啟動NAND Flash所需的CLK,因此本文將SET FEATURES操作拆分成兩部分,以啟動CLK為界進行分割,兩部分操作中間需產生中斷,并告訴CPU此時需要啟動CLK。同步模式不同Timing Mode之間的切換操作和上述類似,只不過需要將啟動CLK的操作改為轉變CLK頻率的操作。
4 仿真與綜合
使用Verilog硬件描述語言對該控制器進行實現之后,再使用EDA工具仿真和綜合。仿真結果表明,本文設計的控制器的功能和時序都工作正常。圖13是在同步模式下寫1頁操作的仿真時序,圖14是在同步模式下讀1頁操作的仿真時序。
使用Synopsys公司的Design Compiler工具對代碼進行綜合,采用SMIC 0.18 μm工藝。得到的數據如表1所示。
由綜合結果可知,最高工作頻率達到了118MHz,滿足ONFI標準100MHz頻率、200MB/s的最快數據傳輸速率的要求,并有超過15%的裕量。因此,本文設計的NANDFlash控制器具有一定的實用價值。
5 結束語
本文設計了一種滿足ONFI2.1標準要求的NANDFlash控制器,并通過了功能仿真和綜合。該控制器既可以在傳統的異步模式下工作,也可以在同步模式下工作,并達到了ONFI標準要求的200MB/s的數據讀寫速率。達到了最初的設計目的,對其他的NAND Flash控制器設計具有參考意義。
責任編輯:gt
評論
查看更多