張俊杰,沈霞宏,徐瑞瑞,王 盛,王冠雄
(上海航天電子技術(shù)研究所,上海 201109)
隨著載荷技術(shù)的飛速發(fā)展,新研衛(wèi)星對存儲系統(tǒng)的讀寫速率、存儲容量等指標(biāo)也提出了更高的要求,而傳統(tǒng)的異步星載存儲方案具有速率低、集成度低等特點,若繼續(xù)延用此方案則會造成單機(jī)體積功耗重量的倍增,無法適應(yīng)星上有限的資源限制,因此迫切需要開展新型星載存儲技術(shù)研究[1]。
文獻(xiàn)[2]中宋琪等人采用了3Dplus公司封裝的異步NANDFlash芯片,并結(jié)合流水線管理技術(shù)設(shè)計了一款宇航固態(tài)存儲器,其單芯片吞吐速率僅能達(dá)到500 Mbps。鎂光MT29F系列SLC型NANDFlash芯片提供了一種新的同步Flash控制方式,其數(shù)據(jù)傳輸采用DDR方式(時鐘上下沿同時采樣),支持更高的時鐘頻率,其接口吞吐率為傳統(tǒng)異步Flash控制方式的4倍,并且符合ONFI2.2標(biāo)準(zhǔn)。此外,該同步存儲芯片還提升了集成度,每個芯片包含8個LUN單元,每個LUN包含4 096個塊,每塊包含128頁,每頁能夠存儲8 640 Byte數(shù)據(jù),單芯片總?cè)萘靠蛇_(dá)256 GB。
文獻(xiàn)[3]中李袁鑫等人設(shè)計了一款支持ONFI2.1同步模式的NANDFlash控制器,但是其應(yīng)用平臺為SOC芯片并且只做了功能仿真,缺少對基于XILINX FPGA平臺的NANDFlash控制器設(shè)計和相關(guān)外圍電路的硬件設(shè)計指南。
因此,本文針對該同步NANDFlash芯片的外圍電路設(shè)計進(jìn)行信號完整性分析與優(yōu)化,設(shè)計了一款支持同步操作的NANDFlash控制器,用Modelsim對所設(shè)計的控制器進(jìn)行了仿真并進(jìn)行了板級驗證。
設(shè)計的同步NANDFlash控制器是存儲控制單元的一部分,能夠接收來自FPGA內(nèi)部上級管理單元的各種命令、操作地址和寫數(shù)據(jù)并返回讀數(shù)據(jù)和操作狀態(tài),實現(xiàn)了對底層Flash器件的直接控制??刂破骶唧w包括2個FIFO緩存模塊、主控模塊、數(shù)據(jù)轉(zhuǎn)換模塊、ECC模塊和時鐘管理模塊等,其結(jié)構(gòu)框圖如圖1所示。
圖1 控制器結(jié)構(gòu)
圖1中FIFO緩存模塊主要負(fù)責(zé)緩存讀寫數(shù)據(jù)并把數(shù)據(jù)同步到本地時鐘域;主控模塊主要負(fù)責(zé)所有狀態(tài)機(jī)的跳轉(zhuǎn)與各模塊控制信號的切換;數(shù)據(jù)轉(zhuǎn)換模塊主要用于單邊沿數(shù)據(jù)和雙邊沿數(shù)據(jù)的切換;ECC模塊主要用于數(shù)據(jù)的信道編碼和譯碼糾錯;時鐘管理模塊負(fù)責(zé)產(chǎn)生各模塊所需的時鐘資源。
主控模塊是整個控制器的核心控制模塊,由1個主狀態(tài)機(jī)和多個子狀態(tài)機(jī)構(gòu)成。主狀態(tài)機(jī)有1個空閑狀態(tài)和7個工作狀態(tài),分別對應(yīng)擦除操作、讀數(shù)據(jù)操作、寫數(shù)據(jù)操作、讀ID操作、讀狀態(tài)操作、重置操作和配置操作,其狀態(tài)轉(zhuǎn)換如圖2所示。每個工作狀態(tài)又對應(yīng)1個子狀態(tài)機(jī),負(fù)責(zé)每個操作的具體細(xì)節(jié)[4]。
圖2 主控狀態(tài)機(jī)
由于該NANDFlash芯片數(shù)據(jù)傳輸頻率高達(dá)200 MHz,在設(shè)計器件外圍電路時,為了在高速環(huán)境下獲得更好的信號質(zhì)量,本設(shè)計基于Hyperlynx對廠家提供的芯片IBIS模型進(jìn)行了仿真以選擇合適的終端匹配電阻[5]。
該款NANDFlash芯片傳輸電平標(biāo)準(zhǔn)為LVCOMS1V8。根據(jù)XLINX V5用戶指南,這種電平標(biāo)準(zhǔn)采用源端串聯(lián)阻抗匹配方式較為合理,且對于FPGA端可以使用V5 FPGA內(nèi)置的數(shù)控阻抗(LVDCI)以減小印制板布局布線的困難[6]。NANDFlash雙向IO管腳在無匹配電阻和匹配電阻為22 Ω的情況下做了時域仿真,如圖3所示。
圖3 Free-form仿真原理
由測量工具測得,在接入22 Ω阻抗匹配電阻后上升沿僅變緩了250 ps,對于Flash的操作時序的影響幾乎可以忽略,如圖4所示。
圖4 阻抗匹配仿真對比
無阻抗匹配時的Flash芯片端口的電壓過沖量達(dá)到300 mV以上,超過了芯片手冊中的推薦DC標(biāo)準(zhǔn),無法保證器件工作的可靠性。而在接入22 Ω阻抗匹配電阻后原來存在的振鈴現(xiàn)象得到了明顯的改善。若采用33 Ω匹配電阻,則對于振鈴現(xiàn)象并無更多改善,并且會使上升沿變得更緩,顯然是沒有必要的[7]。
要實現(xiàn)對NANDFlash的同步控制,需考慮諸多設(shè)計因素,限于篇幅有限,本文將針對在設(shè)計過程中遇到的主要問題展開討論。
NANDFlash在上電后需等待100 μs直至R/B信號拉高,之后Flash芯片會自動進(jìn)入異步Standby模式。在接收其他指令前,首先需要對芯片進(jìn)行復(fù)位(RESET指令)[8]。復(fù)位結(jié)束后需要通過配置指令對芯片進(jìn)行配置使之切換到同步模式5(工作時鐘100 MHz)空閑狀態(tài),此后可以通過其他指令控制芯片的工作模式。需要注意在配置成功之前指令與地址的輸入時序均為異步模式,而配置成功之后所有操作均為同步模式。本文所設(shè)計的該模塊狀態(tài)機(jī)流程圖如圖5所示。
圖5 上電復(fù)位及模式配置流程
其中,異步模式下的WE信號即為同步模式下的CLK信號(信號復(fù)用),CLK信號為同步模式下的100 MHz工作時鐘,因此在此時鐘切換時需要格外注意,應(yīng)盡量避免產(chǎn)生毛刺或組合邏輯電路[9]。若使用assign語句對該時鐘信號切換,在實際測試中仍發(fā)現(xiàn)有毛刺的存在。為了實現(xiàn)時鐘的無縫切換,設(shè)計中本文調(diào)用了XILINX MUX原句并使芯片在時鐘切換時處于非工作狀態(tài)。
本設(shè)計所有指令、地址、數(shù)據(jù)讀寫時序均嚴(yán)格遵守芯片手冊中的時序要求。為了更好地檢驗設(shè)計的正確性,本設(shè)計采用Micron科技提供的Verilog仿真模型對各模塊進(jìn)行了功能仿真[10]。仿真的部分截圖如圖6所示,從圖6中可以看出本文所設(shè)計的上電復(fù)位及配置等模塊通過了仿真模型的檢驗。
圖6 上電復(fù)位及配置仿真結(jié)果
本文根據(jù)MT29F256G08AUCAB芯片手冊所設(shè)計的寫操作流程圖如圖7所示。
圖7 寫操作流程
主要可分為以下幾個階段:
① 寫入80h指令和5個周期的地址,指定編程的塊地址和頁地址,每周期輸入的指令或地址需間隔tCAD并滿足同步時序。
② 將需要編程的數(shù)據(jù)通過8位數(shù)據(jù)總線以同步方式傳送至NANDFlash內(nèi)部寄存器中。
③ 寫入10h指令,即啟動編程,等待tPROG編程時間直至編程結(jié)束,可通過查詢RDY信號判斷編程是否結(jié)束。
④ 編程結(jié)束后可通過查詢指令70h讀取狀態(tài),檢測此次操作是否成功;若操作成功,則進(jìn)行下次操作,否則重新進(jìn)行編程。
在進(jìn)入DDR數(shù)據(jù)輸入模式之前,必須滿足以下條件:① CLK時鐘穩(wěn)定運(yùn)行;② CE信號拉低;③ W/R信號拉高;④ 滿足tCAD時間間隔;⑤ ALE和CLE在CLK上升沿拉高。
在進(jìn)入DDR數(shù)據(jù)輸入模式tDQSS時間之后,用戶控制器需要在DQS的上升沿和下降沿將待寫入的數(shù)據(jù)輸出到DQ[7∶0]寄存器端口,同時為了使芯片采數(shù)更加穩(wěn)定并滿足芯片的時序要求,本設(shè)計通過采樣時鐘與DQS信號間的相位差來控制DQS的沿口對準(zhǔn)寫入數(shù)據(jù)的中心。此外,寫入的數(shù)據(jù)為雙邊沿DDR形式,而在FPGA內(nèi)部處理的數(shù)據(jù)形式一般為單邊沿SDR形式,因此需要調(diào)用XILINX ODDR基元將SDR數(shù)據(jù)轉(zhuǎn)換為DDR數(shù)據(jù)。
在寫完一個頁之后,如果需要退出DDR數(shù)據(jù)輸入模式,則需要滿足以下條件:① CLK時鐘穩(wěn)定運(yùn)行并且DQS到CLK偏移量滿足tDSH和tDSS;② CE信號拉低;③ W/R信號拉高;④ ALE和CLE在CLK上升沿拉低。具體的時序要求可參考芯片手冊。
本文根據(jù)MT29F256G08AUCAB芯片手冊所設(shè)計的讀操作流程圖如圖8所示。
圖8 讀操作流程
主要可分為以下幾個階段:
① 寫入00h指令、5個周期的地址和30h指令,指定回讀的塊地址和頁地址并啟動讀操作,每周期輸入的指令或地址需間隔tCAD并滿足同步時序。
② 等待tR讀操作等待時間,對從NANDFlash內(nèi)部寄存器中讀出的數(shù)據(jù)進(jìn)行采樣并把雙邊沿數(shù)據(jù)(DDR)轉(zhuǎn)換為單邊沿數(shù)據(jù)(SDR)寫入到FPGA FIFO中。
在芯片響應(yīng)讀操作之后數(shù)據(jù)即可從NANDFlash陣列中輸出。在進(jìn)入DDR數(shù)據(jù)輸入模式之前,必須滿足以下條件:① CLK時鐘穩(wěn)定運(yùn)行;② CE信號拉低;③ 用戶控制器必須釋放DQ[7∶0]和DQS給芯片控制;④ 為了使選定的LUN在tWRCK時間內(nèi)取得DQ總線和DQS的控制權(quán),W/R在CLK上升沿必須拉低;⑤ 滿足tCAD時間間隔;⑥ ALE和CLE在CLK上升沿拉高。
在進(jìn)入DDR數(shù)據(jù)輸出模式之后,DQS信號會在距CLK上升沿tDQSCK時間之后開始翻轉(zhuǎn),其具體時間以芯片實測為準(zhǔn)。此后,NANDFlash會在DQS的雙邊沿從DQ[7∶0]端口輸出讀出的數(shù)據(jù)。
在讀完一個頁之后,如果需要退出DDR數(shù)據(jù)輸出模式,則需要滿足以下條件:① CLK時鐘穩(wěn)定運(yùn)行;② CE信號拉低;③ W/R信號拉低;④ ALE和CLE在CLK上升沿拉低。
由于讀出的數(shù)據(jù)是與DQS信號的邊沿對齊的,所以需要對接收到的DQS信號進(jìn)行90°相移使之與DQ信號的中心對齊,以采到準(zhǔn)確的數(shù)據(jù)。一般來說移相有2種方法:DCM時鐘管理單元;IODELAY延遲單元[11]。而NANDFlash中DQS信號并非真正的時鐘信號,有時該信號是拉低的,因此無法使用DCM進(jìn)行移相。本設(shè)計調(diào)用了XILINK IODELAY原句來進(jìn)行移相[12]。
此外,讀出的數(shù)據(jù)為DDR形式,而在FPGA內(nèi)部處理的數(shù)據(jù)形式一般為單邊沿SDR形式,因此需要將DDR數(shù)據(jù)轉(zhuǎn)換為SDR數(shù)據(jù)。若使用移相后DQS信號的上升沿和下降沿同時采樣,則相當(dāng)于電平觸發(fā),在高速時易受到干擾。因此,本文采用了XILINX FPGA自帶的IDDR基元來實現(xiàn)對DDR數(shù)據(jù)的采樣,在OPP OSITE_EDGE模式下其時序圖如圖9所示。
圖9 數(shù)據(jù)轉(zhuǎn)換時序圖
最后可以通過一組上升沿觸發(fā)的寄存器將這2組8 bit數(shù)據(jù)合并成16 bit數(shù)據(jù),再通過一級FIFO緩存將數(shù)據(jù)同步到本地時鐘域就可以對讀出的數(shù)據(jù)進(jìn)行下一級處理了。
本文實現(xiàn)了NANDFlash在同步模式下的應(yīng)用,在用Modelsim對本文所設(shè)計的控制器進(jìn)行仿真驗證之后,可以用EDA工具綜合并布局布線后下載到所設(shè)計的存儲板中進(jìn)行測試[13]。為了測試方便,本文采用了累加數(shù)作為碼源進(jìn)行測試。在同步模式下寫一頁操作的Chipscope采樣波形如圖10所示,在同步模式下讀一頁操作的Chipscope采樣波形如圖11所示。
圖10 同步Flash寫操作采樣圖
圖11 同步Flash讀操作采樣圖
可以看到在擦除操作過后,控制器往NANDFlash中以同步方式寫入一串累加數(shù)并成功讀出,沒有誤碼。連續(xù)的讀寫測試結(jié)果表明,在同步模式下,本文設(shè)計的控制器的功能和時序都工作正常。
本文以航天任務(wù)為背景,在對同步NANDFlash芯片存儲機(jī)理和時序邏輯進(jìn)行仔細(xì)研究的基礎(chǔ)上,分析并優(yōu)化了其外圍硬件電路的設(shè)計,并根據(jù)操作流程和數(shù)據(jù)流設(shè)計了一款支持ONFI2.2的同步NANDFlash控制器[14]。最后分別在仿真環(huán)境和真實環(huán)境下,對所設(shè)計的控制器進(jìn)行了時序測試,全面驗證了控制器的設(shè)計功能[15]。實驗結(jié)果表明,控制器工作正常,能夠以同步方式進(jìn)行讀寫等操作,將傳統(tǒng)異步方式的單芯片讀寫速率由399/375 Mbps提升至1 598/1 340 Mbps,實現(xiàn)了預(yù)期的設(shè)計目標(biāo),為下一代星載高速固態(tài)存儲系統(tǒng)的研制提供了技術(shù)支持。