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