一、Nand Flash接口定義解析
Nand Flash因其具有容量大、成本低、壽命長的特點,被廣泛的用作數(shù)據(jù)存儲的解決方案。然而NandFlash的讀寫控制較為復雜,Nand Flash的接口控制器大多是基于PC機或ARM處理器為架構(gòu)進行開發(fā)的,存在操作不方便的問題。
FPGA實現(xiàn)Nand Flash接口的優(yōu)點有很多。首先,F(xiàn)PGA可以實現(xiàn)Nand Flash的高速讀寫,因為FPGA可以通過并行處理來提高數(shù)據(jù)傳輸速度。其次,F(xiàn)PGA可以實現(xiàn)Nand Flash的高可靠性,因為FPGA可以通過ECC校驗來檢測和糾正數(shù)據(jù)傳輸中的錯誤。此外,F(xiàn)PGA可以實現(xiàn)Nand Flash的低功耗,因為FPGA可以通過動態(tài)電壓調(diào)節(jié)技術(shù)來降低功耗。最后,F(xiàn)PGA可以實現(xiàn)Nand Flash的高靈活性,因為FPGA可以通過重新編程來適應(yīng)不同的應(yīng)用場景。
在Nand Flash控制器中,接口的設(shè)計直接影響Nand Flash控制器訪問存儲顆粒的速度。目前業(yè)界有兩種主流的接口標準ONFI(Open Nand Flash Interface)與Toggle。ONFI是Intel和Micron等公司主導的開放的Nand Flash接口標準,這里主要針對ONFI標準進行描述。
圖1、ONFI標準發(fā)展
如圖1所示,ONFI目前支持5種不同的數(shù)據(jù)接口類型:SDR/NV-DDR/NV-DDR2/NV-DDR3和NV-LPDDR4。SDR是傳統(tǒng)的NAND接口,使用RE_n鎖存讀數(shù)據(jù),WE_n鎖存寫數(shù)據(jù),沒有時鐘。NV-DDR是雙數(shù)據(jù)率(Double Data Rate-DDR)接口,含有用來鎖存命令和地址的時鐘,和一個用來鎖存數(shù)據(jù)的數(shù)據(jù)選通信號。
NV-DDR2是雙數(shù)據(jù)率接口,含有額外的擴展速度(scaling speed)的功能,像On-Dietermination以及差分信號。NV-DDR3接口包含所有NV-DDR2的特性,但操作在VccQ=1.2V。數(shù)據(jù)接口包含的特性如下圖2所示。
圖2 、ONFI數(shù)據(jù)接口
如果上電時VccQ=1.8V或3.3V,則device 應(yīng)該操作在SDR接口timing mode 0。如果 Host 在參數(shù)page中判定NV-DDR 和NV-DDR2都被支持,則host可以通過Feature Address為01h的SetFeature命令,來選擇其中一個接口以及支持的timing mode。參見ONFI 5.1 5.31.1。
如果上電時VccQ=1.2V,則 device 應(yīng)操作在NV-DDR3接口timing mode 0。如果host 在參數(shù)page中判明了支持的NV-DDR3timing mode,則host可以通過將CE_n轉(zhuǎn)為高來使能支持的timing mode,并將接口速度改變?yōu)槠谕膖iming mode。當host 將CE_n 拉低后,新的timingmode會生效。參見ONFI 5.15.31.1。
二、ONFI的接口信號
圖4、Signal Assignment based on Data Interface Type
如圖4所示,ONFI標準發(fā)展過程中的接口SDR/NV-DDR/NV-DDR2/NV-DDR3/NV-LPDDR4,其接口信號也有了相應(yīng)的調(diào)整。
對于NV-DDR/NV-DDR2/NV-DDR3和NV-LPDDR4接口,與 SDR 接口相比,其共同的變化有:
a、I/O總線重命名為DQ總線
b、新加了一個名為DQS(DQ Strobe)的DQ 數(shù)據(jù)總線選通信號。DQS是雙向信號,用于數(shù)據(jù)傳輸。DQS不能用于命令或地址周期。對于從host到device的數(shù)據(jù)傳輸(寫),DQS的鎖存沿對齊到有效數(shù)據(jù)窗口的中間;對于從device到host的數(shù)據(jù)傳輸(讀),DQS的鎖存沿對齊到DQ總線的轉(zhuǎn)換沿。當操作在SDR接口時,DQS應(yīng)該被host拉高,被device忽略。
對于 NV-DDR 接口,與SDR接口相比,主要變化有:
a、WE_n變成時鐘信號(CLK)。CLK應(yīng)該被使能并且具有有效的時鐘周期,不論命令周期,地址周期和數(shù)據(jù)周期什么時候發(fā)生。在CE_n為低期間,CLK應(yīng)保持相同的頻率;參見2.9.1。
b、RE_n變成寫/讀方向信號(W/R_n)。該信號表示誰擁有DQ總線和DQS信號。Host應(yīng)該僅在ALE和CLE被鎖存到0時才能轉(zhuǎn)換W/R_n;參見4.20.2.6中W/R_n要求。
對于NV-DDR2和NV-DDR3接口,與SDR接口相比,主要變化有:
c、RE_n 可作為單端信號(single-ended)或者作為一個互補信號對(RE_t,RE_c)使用
d、增加了名為DQS(DQ strobe)的DQ數(shù)據(jù)總線選通信號。DQS可作為單端信號或者作為一個互補信號對(DQS_t,DQS_c)使用。
對于NV-LPDDR4數(shù)據(jù)接口,與SDR數(shù)據(jù)接口相比,變化如下:
a、RE_n必須用作互補信號對(RE_t、RE_c)。
b、增加了一個用于DQ數(shù)據(jù)總線的選通信號,稱為DQS(DQ選通)。DQS必須用作互補信號對(DQS_t、DQS_c)。
c、添加了一個用于DQ數(shù)據(jù)總線的可選數(shù)據(jù)總線反相信號,稱為DBI_n。DBI_ n指定DQ信號是否被反轉(zhuǎn)。DBI_n被視為DQ,因此AC參數(shù)和接口訓練等規(guī)范應(yīng)適用于DBI。
三、基于AMD FPGA的Nand Flash接口讀寫實現(xiàn)
基于上述ONFI的協(xié)議標準,使用AMD FPGA進行Nand Flash的接口設(shè)計有如下幾個優(yōu)點:
由于Nand Flash的接口速率比較高,AMD FPGA的IO口性能通過很多代產(chǎn)品的迭代,IO口性能比較穩(wěn)定,兼容性較好;
可以使用AMD MPSOC進行設(shè)計,通過PS端的程序編寫,可以方便地配合PL端進行ONFI標準的接口設(shè)計,執(zhí)行效率高,并且設(shè)計比較簡單成熟;
在進行ONFI標準升級時,可以通過修改接口PHY部分的硬核邏輯(OSERDES/ISERDES)的配置,就可以提升接口的帶寬,可靠性和穩(wěn)定性都很好。
如圖5所示,使用AMD 的MPSOC可以方便地通過如下類似的BD配置,只需要PS使用簡單函數(shù)把NandFlash當作普通外設(shè)即可進行讀寫,實現(xiàn)數(shù)據(jù)的配置和讀寫Nand Flash。如下圖所示。圖中僅展示了Nand Flash的單個通道的接口BD配置。
由于篇幅有限,不對Nand Flash芯片的各個命令不同模式的時序信號進行介紹,默認大家是了解的。
圖5、MPSOC讀寫Flash的簡單BD配置
而其中有關(guān)Nand Flash Controller的架構(gòu)建議如下圖6所示。
圖6、ONFI的Nand Flash Controller實現(xiàn)
Nand Flash控制器硬件系統(tǒng)中, 各個模塊的功能描述如下:
1) 、AXI總線接口模塊模塊
AXI總線接口模塊接收來自PS端或者CPU端發(fā)送的命令以及數(shù)據(jù)信息, 然后把相應(yīng)的設(shè)備狀態(tài)的值, 通過狀態(tài)寄存器返回給PS或CPU。它是PS與Nand Flash控制器進行數(shù)據(jù)、命令等交互的橋梁。
2) 、控制器狀態(tài)機模塊
控制器固件對Nand Flash芯片的各種操作由狀態(tài)機完成, 狀態(tài)機包含Nand Flash控制器運行的各種狀態(tài), 每一個命令碼操作由Nand Flash控制器的各種狀態(tài)有序組合而成, 共同完成對Nand Flash存儲芯片的一次操作。
圖7、控制器狀態(tài)機
Nand Flash控制器的功能實現(xiàn)由控制器狀態(tài)機模塊完成。系統(tǒng)沒有操作時, 控制器處于IDLE狀態(tài), 命令代碼被寫入命令寄存器,確定下一步要執(zhí)行的命令后,Nand Flash控制器轉(zhuǎn)移到某個相應(yīng)的子狀態(tài)序列, 完成對存儲器的指定操作。
在控制器狀態(tài)機中, 程序?qū)?zhí)行不同功能的控制。每個獨立的過程由一個子狀態(tài)機來實現(xiàn), 通過系統(tǒng)的時鐘來控制所有的狀態(tài)轉(zhuǎn)換。每個子狀態(tài)操作完成需要的步驟和時鐘個數(shù)可能不盡相同, 程序則通過維護一個專用寄存器進行協(xié)調(diào), 以確保滿足Nand Flash器件的時間控制要求。
3) 、命令接口模塊
命令接口用于進行命令的識別和判斷,Processor側(cè)可以封裝好不同opcode的命令,方便軟件進行操作。比如,Select Way0命令,可以設(shè)置opcode為6'h20,address為{24'd0,8'b1}。
4) 、數(shù)據(jù)接口模塊
數(shù)據(jù)接口主要是有關(guān)控制器的用戶側(cè)數(shù)據(jù)的輸入和輸出接口實現(xiàn)(基于AXI接口),比如iWriteData、iWriteLast、iWriteValid、iWriteKeep、WriteReady、oReadData、oReadLast、oReadValid、oReadKeep、iReadReady等。
5) 、緩存模塊
緩存模塊包括RAM和異步FIFO模塊,模塊用于緩存命令和數(shù)據(jù)的雙端口RAM,由多個不同RAM和FIFO組成。
6) 、發(fā)送引擎模塊
根據(jù)ONFI的手冊,識別Command Interface的不同命令來拼好時隙,保證其通過PHY出去的時候,是符合對應(yīng)模式下的對應(yīng)命令的時序的。
7) 、PHY接口模塊
PHY接口模塊需要使用ISERDES/OSERDES來實現(xiàn),需要根據(jù)用戶側(cè)的時鐘頻率來決定接口的帶寬。通常需要向上兼容(為了兼容不同模式下的時序要求),需要兼容老的慢速模式(比如NV-DDR/NV-DDR2等),其信號是上述圖中的DQDQSCEWE等信號。
四、Nand Flash接口功能測試流程和實測結(jié)果
對本文所設(shè)計實現(xiàn)的Nand Flash控制器的功能, 在EDA軟件環(huán)境下進行了仿真驗證, 其測試流程如圖 8所示。
圖8、接口測試流程
在圖 5所示的仿真驗證過程中, 需對Nand Flash芯片進行一系列交互操作, 如讀ID、擦除、讀設(shè)備、頁編程、頁讀取、ECC校驗、I/O讀等, 且每次操作完成后, 都要讀設(shè)備狀態(tài)并判斷操作是否成功, 只有操作正常完成才繼續(xù)進行下一步的操作, 否則退出測試過程。
實際測試的結(jié)果是,按照上述方案,已經(jīng)實現(xiàn)過ONFI2.1(NV-DDR2)的實際測試,暫未進行NV-DDR3接口的實際測試。實測MPSOC使用ZU19EG器件,NandFlash芯片選用MT29F64G08AECABH1。NandFlash芯片工作在mode 5狀態(tài)(8192 Bytesper Page)的實測條件下,實現(xiàn)了48 MB/s的寫入速度和93 MB/s 讀出速度。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602978 -
amd
+關(guān)注
關(guān)注
25文章
5466瀏覽量
134087 -
控制器
+關(guān)注
關(guān)注
112文章
16332瀏覽量
177803 -
FlaSh
+關(guān)注
關(guān)注
10文章
1633瀏覽量
147939 -
接口
+關(guān)注
關(guān)注
33文章
8575瀏覽量
151014
原文標題:AMD FPGA實現(xiàn)Nand Flash接口讀寫方案
文章出處:【微信號:Comtech FPGA,微信公眾號:Comtech FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論