一、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可以通過并行處理來(lái)提高數(shù)據(jù)傳輸速度。其次,F(xiàn)PGA可以實(shí)現(xiàn)Nand Flash的高可靠性,因?yàn)镕PGA可以通過ECC校驗(yàn)來(lái)檢測(cè)和糾正數(shù)據(jù)傳輸中的錯(cuò)誤。此外,F(xiàn)PGA可以實(shí)現(xiàn)Nand Flash的低功耗,因?yàn)镕PGA可以通過動(dòng)態(tài)電壓調(diào)節(jié)技術(shù)來(lái)降低功耗。最后,F(xiàn)PGA可以實(shí)現(xiàn)Nand Flash的高靈活性,因?yàn)镕PGA可以通過重新編程來(lái)適應(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)接口,含有用來(lái)鎖存命令和地址的時(shí)鐘,和一個(gè)用來(lái)鎖存數(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命令,來(lái)選擇其中一個(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)為高來(lái)使能支持的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)表示誰(shuí)擁有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總線接口模塊接收來(lái)自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ī)來(lái)實(shí)現(xiàn), 通過系統(tǒng)的時(shí)鐘來(lái)控制所有的狀態(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的不同命令來(lái)拼好時(shí)隙,保證其通過PHY出去的時(shí)候,是符合對(duì)應(yīng)模式下的對(duì)應(yīng)命令的時(shí)序的。
7) 、PHY接口模塊
PHY接口模塊需要使用ISERDES/OSERDES來(lái)實(shí)現(xiàn),需要根據(jù)用戶側(cè)的時(shí)鐘頻率來(lái)決定接口的帶寬。通常需要向上兼容(為了兼容不同模式下的時(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è)備、頁(yè)編程、頁(yè)讀取、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)注
1643文章
21968瀏覽量
614295 -
amd
+關(guān)注
關(guān)注
25文章
5566瀏覽量
135916 -
控制器
+關(guān)注
關(guān)注
114文章
16979瀏覽量
182994 -
FlaSh
+關(guān)注
關(guān)注
10文章
1668瀏覽量
151007 -
接口
+關(guān)注
關(guān)注
33文章
8952瀏覽量
153223
原文標(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)先 登錄
標(biāo)準(zhǔn)NAND FLASH控制器
標(biāo)準(zhǔn)NAND FLASH控制器/超高速NAND FLASH陣列控制器
SPARTAN 3 FPGA的Nand Flash接口優(yōu)點(diǎn)是什么
nand flash 接口切換
NAND Flash的儲(chǔ)存結(jié)構(gòu)與接口設(shè)計(jì)
基于FPGA的SD卡的數(shù)據(jù)讀寫實(shí)現(xiàn)(SD NAND FLASH)
NAND FLASH在WINCENET系統(tǒng)中的應(yīng)用設(shè)計(jì)
NAND Flash 的存儲(chǔ)結(jié)構(gòu)以及NAND Flash的接口控制設(shè)計(jì)

NAND Flash主機(jī)接口控制器技術(shù)研究

FPGA MCU FSMC通信接口——NAND Flash模式

SPI Nand Flash簡(jiǎn)介

NOR Flash和NAND FLASH的區(qū)別是什么

NAND Flash接口簡(jiǎn)單介紹

NAND Flash 原理深度解析(下)

評(píng)論