張俊杰,沈霞宏,徐瑞瑞,王 盛,王冠雄
(上海航天電子技術研究所,上海 201109)
隨著載荷技術的飛速發展,新研衛星對存儲系統的讀寫速率、存儲容量等指標也提出了更高的要求,而傳統的異步星載存儲方案具有速率低、集成度低等特點,若繼續延用此方案則會造成單機體積功耗重量的倍增,無法適應星上有限的資源限制,因此迫切需要開展新型星載存儲技術研究[1]。
文獻[2]中宋琪等人采用了3Dplus公司封裝的異步NANDFlash芯片,并結合流水線管理技術設計了一款宇航固態存儲器,其單芯片吞吐速率僅能達到500 Mbps。鎂光MT29F系列SLC型NANDFlash芯片提供了一種新的同步Flash控制方式,其數據傳輸采用DDR方式(時鐘上下沿同時采樣),支持更高的時鐘頻率,其接口吞吐率為傳統異步Flash控制方式的4倍,并且符合ONFI2.2標準。此外,該同步存儲芯片還提升了集成度,每個芯片包含8個LUN單元,每個LUN包含4 096個塊,每塊包含128頁,每頁能夠存儲8 640 Byte數據,單芯片總容量可達256 GB。
文獻[3]中李袁鑫等人設計了一款支持ONFI2.1同步模式的NANDFlash控制器,但是其應用平臺為SOC芯片并且只做了功能仿真,缺少對基于XILINX FPGA平臺的NANDFlash控制器設計和相關外圍電路的硬件設計指南。
因此,本文針對該同步NANDFlash芯片的外圍電路設計進行信號完整性分析與優化,設計了一款支持同步操作的NANDFlash控制器,用Modelsim對所設計的控制器進行了仿真并進行了板級驗證。
設計的同步NANDFlash控制器是存儲控制單元的一部分,能夠接收來自FPGA內部上級管理單元的各種命令、操作地址和寫數據并返回讀數據和操作狀態,實現了對底層Flash器件的直接控制。控制器具體包括2個FIFO緩存模塊、主控模塊、數據轉換模塊、ECC模塊和時鐘管理模塊等,其結構框圖如圖1所示。

圖1 控制器結構
圖1中FIFO緩存模塊主要負責緩存讀寫數據并把數據同步到本地時鐘域;主控模塊主要負責所有狀態機的跳轉與各模塊控制信號的切換;數據轉換模塊主要用于單邊沿數據和雙邊沿數據的切換;ECC模塊主要用于數據的信道編碼和譯碼糾錯;時鐘管理模塊負責產生各模塊所需的時鐘資源。
主控模塊是整個控制器的核心控制模塊,由1個主狀態機和多個子狀態機構成。主狀態機有1個空閑狀態和7個工作狀態,分別對應擦除操作、讀數據操作、寫數據操作、讀ID操作、讀狀態操作、重置操作和配置操作,其狀態轉換如圖2所示。每個工作狀態又對應1個子狀態機,負責每個操作的具體細節[4]。

圖2 主控狀態機
由于該NANDFlash芯片數據傳輸頻率高達200 MHz,在設計器件外圍電路時,為了在高速環境下獲得更好的信號質量,本設計基于Hyperlynx對廠家提供的芯片IBIS模型進行了仿真以選擇合適的終端匹配電阻[5]。
該款NANDFlash芯片傳輸電平標準為LVCOMS1V8。根據XLINX V5用戶指南,這種電平標準采用源端串聯阻抗匹配方式較為合理,且對于FPGA端可以使用V5 FPGA內置的數控阻抗(LVDCI)以減小印制板布局布線的困難[6]。NANDFlash雙向IO管腳在無匹配電阻和匹配電阻為22 Ω的情況下做了時域仿真,如圖3所示。

圖3 Free-form仿真原理
由測量工具測得,在接入22 Ω阻抗匹配電阻后上升沿僅變緩了250 ps,對于Flash的操作時序的影響幾乎可以忽略,如圖4所示。

圖4 阻抗匹配仿真對比
無阻抗匹配時的Flash芯片端口的電壓過沖量達到300 mV以上,超過了芯片手冊中的推薦DC標準,無法保證器件工作的可靠性。而在接入22 Ω阻抗匹配電阻后原來存在的振鈴現象得到了明顯的改善。若采用33 Ω匹配電阻,則對于振鈴現象并無更多改善,并且會使上升沿變得更緩,顯然是沒有必要的[7]。
要實現對NANDFlash的同步控制,需考慮諸多設計因素,限于篇幅有限,本文將針對在設計過程中遇到的主要問題展開討論。
NANDFlash在上電后需等待100 μs直至R/B信號拉高,之后Flash芯片會自動進入異步Standby模式。在接收其他指令前,首先需要對芯片進行復位(RESET指令)[8]。復位結束后需要通過配置指令對芯片進行配置使之切換到同步模式5(工作時鐘100 MHz)空閑狀態,此后可以通過其他指令控制芯片的工作模式。需要注意在配置成功之前指令與地址的輸入時序均為異步模式,而配置成功之后所有操作均為同步模式。本文所設計的該模塊狀態機流程圖如圖5所示。

圖5 上電復位及模式配置流程
其中,異步模式下的WE信號即為同步模式下的CLK信號(信號復用),CLK信號為同步模式下的100 MHz工作時鐘,因此在此時鐘切換時需要格外注意,應盡量避免產生毛刺或組合邏輯電路[9]。若使用assign語句對該時鐘信號切換,在實際測試中仍發現有毛刺的存在。為了實現時鐘的無縫切換,設計中本文調用了XILINX MUX原句并使芯片在時鐘切換時處于非工作狀態。
本設計所有指令、地址、數據讀寫時序均嚴格遵守芯片手冊中的時序要求。為了更好地檢驗設計的正確性,本設計采用Micron科技提供的Verilog仿真模型對各模塊進行了功能仿真[10]。仿真的部分截圖如圖6所示,從圖6中可以看出本文所設計的上電復位及配置等模塊通過了仿真模型的檢驗。

圖6 上電復位及配置仿真結果
本文根據MT29F256G08AUCAB芯片手冊所設計的寫操作流程圖如圖7所示。

圖7 寫操作流程
主要可分為以下幾個階段:
① 寫入80h指令和5個周期的地址,指定編程的塊地址和頁地址,每周期輸入的指令或地址需間隔tCAD并滿足同步時序。
② 將需要編程的數據通過8位數據總線以同步方式傳送至NANDFlash內部寄存器中。
③ 寫入10h指令,即啟動編程,等待tPROG編程時間直至編程結束,可通過查詢RDY信號判斷編程是否結束。
④ 編程結束后可通過查詢指令70h讀取狀態,檢測此次操作是否成功;若操作成功,則進行下次操作,否則重新進行編程。
在進入DDR數據輸入模式之前,必須滿足以下條件:① CLK時鐘穩定運行;② CE信號拉低;③ W/R信號拉高;④ 滿足tCAD時間間隔;⑤ ALE和CLE在CLK上升沿拉高。
在進入DDR數據輸入模式tDQSS時間之后,用戶控制器需要在DQS的上升沿和下降沿將待寫入的數據輸出到DQ[7∶0]寄存器端口,同時為了使芯片采數更加穩定并滿足芯片的時序要求,本設計通過采樣時鐘與DQS信號間的相位差來控制DQS的沿口對準寫入數據的中心。此外,寫入的數據為雙邊沿DDR形式,而在FPGA內部處理的數據形式一般為單邊沿SDR形式,因此需要調用XILINX ODDR基元將SDR數據轉換為DDR數據。
在寫完一個頁之后,如果需要退出DDR數據輸入模式,則需要滿足以下條件:① CLK時鐘穩定運行并且DQS到CLK偏移量滿足tDSH和tDSS;② CE信號拉低;③ W/R信號拉高;④ ALE和CLE在CLK上升沿拉低。具體的時序要求可參考芯片手冊。
本文根據MT29F256G08AUCAB芯片手冊所設計的讀操作流程圖如圖8所示。

圖8 讀操作流程
主要可分為以下幾個階段:
① 寫入00h指令、5個周期的地址和30h指令,指定回讀的塊地址和頁地址并啟動讀操作,每周期輸入的指令或地址需間隔tCAD并滿足同步時序。
② 等待tR讀操作等待時間,對從NANDFlash內部寄存器中讀出的數據進行采樣并把雙邊沿數據(DDR)轉換為單邊沿數據(SDR)寫入到FPGA FIFO中。
在芯片響應讀操作之后數據即可從NANDFlash陣列中輸出。在進入DDR數據輸入模式之前,必須滿足以下條件:① CLK時鐘穩定運行;② CE信號拉低;③ 用戶控制器必須釋放DQ[7∶0]和DQS給芯片控制;④ 為了使選定的LUN在tWRCK時間內取得DQ總線和DQS的控制權,W/R在CLK上升沿必須拉低;⑤ 滿足tCAD時間間隔;⑥ ALE和CLE在CLK上升沿拉高。
在進入DDR數據輸出模式之后,DQS信號會在距CLK上升沿tDQSCK時間之后開始翻轉,其具體時間以芯片實測為準。此后,NANDFlash會在DQS的雙邊沿從DQ[7∶0]端口輸出讀出的數據。
在讀完一個頁之后,如果需要退出DDR數據輸出模式,則需要滿足以下條件:① CLK時鐘穩定運行;② CE信號拉低;③ W/R信號拉低;④ ALE和CLE在CLK上升沿拉低。
由于讀出的數據是與DQS信號的邊沿對齊的,所以需要對接收到的DQS信號進行90°相移使之與DQ信號的中心對齊,以采到準確的數據。一般來說移相有2種方法:DCM時鐘管理單元;IODELAY延遲單元[11]。而NANDFlash中DQS信號并非真正的時鐘信號,有時該信號是拉低的,因此無法使用DCM進行移相。本設計調用了XILINK IODELAY原句來進行移相[12]。
此外,讀出的數據為DDR形式,而在FPGA內部處理的數據形式一般為單邊沿SDR形式,因此需要將DDR數據轉換為SDR數據。若使用移相后DQS信號的上升沿和下降沿同時采樣,則相當于電平觸發,在高速時易受到干擾。因此,本文采用了XILINX FPGA自帶的IDDR基元來實現對DDR數據的采樣,在OPP OSITE_EDGE模式下其時序圖如圖9所示。

圖9 數據轉換時序圖
最后可以通過一組上升沿觸發的寄存器將這2組8 bit數據合并成16 bit數據,再通過一級FIFO緩存將數據同步到本地時鐘域就可以對讀出的數據進行下一級處理了。
本文實現了NANDFlash在同步模式下的應用,在用Modelsim對本文所設計的控制器進行仿真驗證之后,可以用EDA工具綜合并布局布線后下載到所設計的存儲板中進行測試[13]。為了測試方便,本文采用了累加數作為碼源進行測試。在同步模式下寫一頁操作的Chipscope采樣波形如圖10所示,在同步模式下讀一頁操作的Chipscope采樣波形如圖11所示。

圖10 同步Flash寫操作采樣圖

圖11 同步Flash讀操作采樣圖
可以看到在擦除操作過后,控制器往NANDFlash中以同步方式寫入一串累加數并成功讀出,沒有誤碼。連續的讀寫測試結果表明,在同步模式下,本文設計的控制器的功能和時序都工作正常。
本文以航天任務為背景,在對同步NANDFlash芯片存儲機理和時序邏輯進行仔細研究的基礎上,分析并優化了其外圍硬件電路的設計,并根據操作流程和數據流設計了一款支持ONFI2.2的同步NANDFlash控制器[14]。最后分別在仿真環境和真實環境下,對所設計的控制器進行了時序測試,全面驗證了控制器的設計功能[15]。實驗結果表明,控制器工作正常,能夠以同步方式進行讀寫等操作,將傳統異步方式的單芯片讀寫速率由399/375 Mbps提升至1 598/1 340 Mbps,實現了預期的設計目標,為下一代星載高速固態存儲系統的研制提供了技術支持。