王偉偉 徐進(jìn) 李京鋒 李驥 修展
(北京航天長征飛行器研究所 北京市 100076)
在航天飛行器研制初期,遙測系統(tǒng)負(fù)責(zé)各類參數(shù)的數(shù)據(jù)采集和存儲工作,可獲得飛行器飛行過程中環(huán)境參數(shù)、重要控制數(shù)據(jù)以及圖像數(shù)據(jù),為飛行器性能評估和改進(jìn)提供重要數(shù)據(jù)支持。而存儲器作為遙測系統(tǒng)的重要組成部分,可以記錄完整的全程數(shù)據(jù),通過硬回收的方式獲取試驗(yàn)數(shù)據(jù),相比于無線遙測受限于帶寬和傳輸距離的影響,存儲器可以提供更為準(zhǔn)確和詳細(xì)的試驗(yàn)數(shù)據(jù),為后續(xù)改進(jìn)提供依據(jù)。傳統(tǒng)遙測系統(tǒng)只是需要記錄某些環(huán)境參數(shù)及一些控制數(shù)據(jù),對數(shù)據(jù)量和傳輸速率要求不高,一般容量為4GB,傳輸速率為20MB/s 即可滿足要求,但隨著飛行器對性能和準(zhǔn)確度的要求,系統(tǒng)和產(chǎn)品不斷增加,需要記錄的數(shù)據(jù)也越來越多,尤其是導(dǎo)引頭技術(shù)的發(fā)展,數(shù)據(jù)量提高了3~4 倍,傳輸速率也高達(dá)數(shù)Gbps,傳統(tǒng)的存儲器無法滿足需求,同時由于速率的增加,落地環(huán)境更加惡劣,存儲器的可靠回收也成為一個大挑戰(zhàn)。
本文針對上述問題,提出了高速低誤碼高可靠回收存儲器的設(shè)計(jì)方法,將存儲容量提高到128G 字節(jié),速率可達(dá)2.4Gbps,并通過交叉冗余備份方式,實(shí)現(xiàn)了存儲器的高可靠回收。
根據(jù)系統(tǒng)需求,為了滿足高沖擊環(huán)境下可靠回收的要求,存儲器的設(shè)計(jì)原則是在滿足性能的情況下盡量減小體積和重量,通過灌封的方式保護(hù)存儲芯片,提高存儲器的抗沖擊能力。
存儲器設(shè)計(jì)的關(guān)鍵是選擇存儲芯片。目前市場上應(yīng)用最多的大容量存儲芯片主要有UFS、eMMC 及NAND Flash 三類。UFS 全稱是Universal Flash Storage,即“通用閃存存儲”,采用串行數(shù)據(jù)傳輸技術(shù),有兩個數(shù)據(jù)通道,工作模式為全雙工;eMMC 全稱為embedded Multi Media Card, 即“嵌入式多媒體存儲卡”,采用并行數(shù)據(jù)傳輸技術(shù),擁有8 位數(shù)據(jù)線,工作模式為半雙工。該兩種產(chǎn)品依托于操作系統(tǒng)實(shí)現(xiàn)復(fù)雜的接口協(xié)議,廣泛應(yīng)用于手機(jī)存儲領(lǐng)域。但在航天領(lǐng)域高強(qiáng)度、高可靠性及惡劣回收環(huán)境的應(yīng)用場合,NAND Flash 應(yīng)用廣泛,其接口操作簡單,在不使用操作系統(tǒng)的情況下就滿足系統(tǒng)要求。經(jīng)過調(diào)研,結(jié)合開發(fā)經(jīng)驗(yàn),最終選擇美國Micron 公司的NAND Flash 芯片,該芯片單片容量可達(dá)16GB,讀寫速率可達(dá)50MB/s,且該芯片封裝為表貼SOP 形式,拆卸方便,能夠在最壞的情況下通過拆卸芯片的方式實(shí)現(xiàn)回收。
在選定存儲芯片后,考慮到高速數(shù)據(jù)傳輸需求以及小型化要求,選擇Altera 的MAX10 FPGA,該芯片不需要外置配置芯片,減小了體積。同時該芯片支持高速LVDS 接口,可以通過內(nèi)部的IP 來實(shí)現(xiàn)。
圖1:存儲器設(shè)計(jì)原理框圖
圖2:FPGA 軟件各模塊相互關(guān)系
圖3:Flash 控制模塊處理流程
圖4:Altera SoftLVDS IP 核例化圖
在選定主要芯片后,根據(jù)系統(tǒng)功能,為減小體積,存儲器采用5V 供電,使用LDO 產(chǎn)生內(nèi)部所有的電源。設(shè)計(jì)一個串口接收電路來接收地面或其他設(shè)備傳送過來的控制指令,包括擦除、記錄、下載等,該設(shè)計(jì)中使用雙路光耦進(jìn)行接收,起到冗余備份的作用。數(shù)據(jù)下載通過普通LVDS 進(jìn)行,為了減小體積,使用FPGA 內(nèi)部自帶的LVDS 接口來模擬LVDS 編碼器發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)時使用8b10b 編碼,然后通過LVDS 驅(qū)動芯片發(fā)送給接口設(shè)備,完成數(shù)據(jù)的下載和狀態(tài)的匯報。綜上所述,最終確定了存儲器的硬件設(shè)計(jì)方案。存儲器由3 塊板卡組成,分別為一塊FPGA 控制板和2 塊Flash 陣列板(一塊存儲數(shù)據(jù),一塊備份數(shù)據(jù)),其中FPGA 控制板完成對2 塊Flash 陣列板的讀寫控制以及與接口設(shè)備的通信,包括命令控制、數(shù)據(jù)的輸入以及數(shù)據(jù)下載等;2 塊Flash 陣列板相同,通過柔性板和FPGA 控制板連接,每個FPGA 陣列板上具有數(shù)據(jù)回讀接口,在落地后FPGA 板卡損害嚴(yán)重的情況下可以通過該接口將數(shù)據(jù)找回。
如圖1 所示,接口設(shè)備需要配合存儲器一起工作來完成所有功能。接口設(shè)備將通過其他接口和外系統(tǒng)進(jìn)行通信并接收總速率高達(dá)200MB/s 的數(shù)據(jù),然后將各路數(shù)據(jù)進(jìn)行統(tǒng)一編幀整合成一路數(shù)據(jù)通過SoftLVDS 接口發(fā)送給存儲器。為了滿足長距離可靠傳輸要求,設(shè)計(jì)時采用一路時鐘和四路數(shù)據(jù)的方式來傳輸數(shù)據(jù),每路數(shù)據(jù)帶寬為600Mbps,共同實(shí)現(xiàn)2.4Gbps 的數(shù)據(jù)傳輸。存儲器接收到數(shù)據(jù)后通過SoftLVDS 接口緩存到變位寬FIFO 中,32bit 進(jìn)64bit 出,然后將64bit 數(shù)據(jù)同時存放到NAND Flash 中,共需要8 片NAND Flash芯片,每片速度為30MB/s,小于芯片最大50M/s的能力,此方案可行,能夠滿足系統(tǒng)需求。
根據(jù)系統(tǒng)要求和硬件設(shè)計(jì)方案,通過設(shè)計(jì)FPGA 軟件實(shí)現(xiàn)功能。設(shè)計(jì)時將FPGA 軟件劃分為以下7 個功能模塊:時鐘產(chǎn)生模塊、復(fù)位信號產(chǎn)生模塊、頂層控制模塊、數(shù)據(jù)接收緩存模塊、指令接收模塊、FLASH 控制模塊以及數(shù)據(jù)輸出控制模塊。各模塊相互關(guān)系如圖2 所示。
圖5:ECC 校驗(yàn)碼產(chǎn)生框圖
圖6:ECC 進(jìn)行位翻轉(zhuǎn)糾正處理框圖
2.2.1 時鐘產(chǎn)生模塊
該模塊用于產(chǎn)生系統(tǒng)全局時鐘和各個模塊運(yùn)行所需時鐘信號。共需要2 個PLL(鎖相環(huán))模塊:一個PLL 是利用晶振輸入時鐘產(chǎn)生系統(tǒng)所需要的各種時鐘。另外一個PLL 用來同步高速LVDS數(shù)據(jù)。為了保證隨路時鐘能夠正確采樣到數(shù)據(jù),對隨路時鐘進(jìn)行相移操作。此設(shè)計(jì)中PLL 的輸入為60M 隨路時鐘,輸出為相移144°后的同頻時鐘輸出給數(shù)據(jù)接收模塊。
2.2.2 復(fù)位信號產(chǎn)生模塊
該模塊用于產(chǎn)生全局復(fù)位信號。通過PLL 鎖相環(huán)的LOCK 信號和計(jì)數(shù)器共同產(chǎn)生一個大于400ms 的全局復(fù)位信號,用于復(fù)位全部模塊和變量。
2.2.3 頂層控制模塊
該模塊用于控制本軟件的運(yùn)行狀態(tài),包頂層控制模塊提供配置使能信號使配置模塊開始對各模塊進(jìn)行配置。配置完成后,頂層控制模塊使用原理圖的形式,控制本軟件進(jìn)入運(yùn)行狀態(tài),開始進(jìn)行指令和數(shù)據(jù)的接收,并執(zhí)行響應(yīng)的操作。
2.2.4 數(shù)據(jù)接收緩存模塊
數(shù)據(jù)接收緩存模塊接口形式為高速LVDS 接口,包括4 路LVDS 數(shù)據(jù)和一路LVDS 時鐘。存儲器對接收到的LVDS 信號進(jìn)行解析,將有效數(shù)據(jù)放入FIFO 中。
2.2.5 指令接收控制模塊
指令接收控制模塊用于接收RS422 指令,并對指令進(jìn)行解析,從而產(chǎn)生其他模塊所需要的使能信號。
2.2.6 Flash 控制模塊
該模塊是FPGA 軟件的核心部分,主要根據(jù)指令完成對Flash的操作。該存儲器共有16 片F(xiàn)lash,分成兩組P1 和P2,P1 和P2互為備份,功能相同。根據(jù)Micron 芯片手冊設(shè)計(jì)以下7 個子模塊:復(fù)位模塊、配置模塊、讀ID 模塊、上電檢測模塊、擦除模塊、寫模塊和讀模塊。各子模塊處理流程如圖3 所示。
(1)復(fù)位模塊。根據(jù)芯片手冊要求,F(xiàn)lash 正常工作首先需要一個復(fù)位操作,復(fù)位操作后才能進(jìn)行后續(xù)模塊。為了保證可靠性,設(shè)計(jì)時如果復(fù)位不成功,則進(jìn)行重試,重試次數(shù)為10 次,若10 次不成功反饋錯誤結(jié)果。
(2)配置模塊。配置模塊對Flash 芯片的工作模式進(jìn)行設(shè)定,根據(jù)需要設(shè)定相應(yīng)的工作模塊。上電默認(rèn)為Timemode0,該設(shè)計(jì)中將工作模式設(shè)定在Timemode4。采用和復(fù)位模塊一樣的可靠性設(shè)計(jì)方法,若配置不成功,重試10 次。
(3)讀ID模塊。該模塊為了檢查16個Flash上電是否正常工作,將檢查結(jié)果反饋給地面測試系統(tǒng)。該模塊的另一個重要功能是在回收后,上電檢查16 個芯片的正常與否,快速定位到損壞芯片,使用與之冗余備份的芯片讀取數(shù)據(jù)。
圖7:兩組Flash 的相對位置示意圖
圖8:軟件調(diào)整后的Flash 中數(shù)據(jù)存放位置示意圖
(4)上電監(jiān)測模塊。根據(jù)手冊,NAND Flash 在出廠時允許有一定的壞塊量,所以在進(jìn)行擦除、讀、寫操作之前需要將Flash 壞塊檢測出來。Flash 的壞塊標(biāo)記位置在每個塊第一頁的第8192 位置,標(biāo)記為0x00。為了提高Flash 的寫入速度,設(shè)計(jì)時采用雙面操作,兩個片選信號(CE)乒乓操作。為了保證塊地址整體移動,設(shè)計(jì)時將兩個CE 的雙面地址共4 個塊地址一起進(jìn)行判斷,若其中有一個壞塊則跳過該塊。檢查壞塊時建立一個1bit×4096 的RAM 表,壞塊標(biāo)記為‘0’,好塊標(biāo)記為‘1’。通過該RAM 表,可以在擦除、記錄和下載時進(jìn)行查詢,確保操作正常塊區(qū)域,保證數(shù)據(jù)的正確存儲。
(5)擦除模塊。Flash 擦除操作為Flash 寫操作的前提。擦除時,首先需要根據(jù)上電檢測模塊建立的壞塊RAM 表進(jìn)行判斷,壞塊不進(jìn)行擦除操作;若好塊在擦除過程中不成功,則需要將其標(biāo)記為壞塊,即在該快的第一頁的8192 地址處標(biāo)記為0x00,同時更新壞塊RAM 表。
(6)寫模塊。該模塊用于對Flash 進(jìn)行編程存儲。設(shè)計(jì)時采用雙面操作增加寫入速度,雙面操作減少了等待Flash 每頁編程的時間,可以保證數(shù)據(jù)快速連續(xù)的寫入到存儲單元中。在寫入過程中為降低誤碼率,增加ECC 糾錯編碼算法,將計(jì)算出的ECC 編碼存放到每一頁的用戶區(qū)域中,供后讀數(shù)據(jù)時比較和判斷。
(7)讀模塊。讀模塊用于將Flash 中數(shù)據(jù)讀出,同樣由于使用了雙面操作,讀出數(shù)據(jù)時也需要進(jìn)行雙面操作。讀出數(shù)據(jù)的同時計(jì)算ECC 編碼值,并和寫入時的原ECC 編碼進(jìn)行比較,若有不同則計(jì)算出bit 反轉(zhuǎn)位置并糾正過來。
通過上述軟件設(shè)計(jì),實(shí)現(xiàn)了高速低誤碼高可靠回收存儲器設(shè)計(jì),經(jīng)過試驗(yàn)考核,性能穩(wěn)定。
本設(shè)計(jì)中使用到了Altera 自帶的高速LVDS 接口IP 核,通過例化該IP,并根據(jù)硬件設(shè)計(jì)配置相應(yīng)的參數(shù),可快速實(shí)現(xiàn)兩個設(shè)備間的高速數(shù)據(jù)傳輸。QuartusII 中Altera SoftLVDS IP 核如圖4 所示。
如圖4 所示,該IP 核只有兩個輸入信號和一個輸出信號,輸入信號中的rx_inclock 為上文講到的接收到的隨路時鐘經(jīng)過倍頻后的時鐘,隨路時鐘為60MHz,經(jīng)過5 倍頻輸出為300MHz,SoftLVDS IP 內(nèi)部采用雙邊沿采樣對四路數(shù)據(jù)進(jìn)行采楊實(shí)現(xiàn)600Mbps 的傳輸,每一路數(shù)據(jù)恢復(fù)出10bit 并行數(shù)據(jù),四路共恢復(fù)成40 路并行數(shù)據(jù),其中高8 位為控制信號,到為0xC0 時表示后面32bit 數(shù)據(jù)為有效數(shù)據(jù),在隨路時鐘即60MHz 相移144°后的時鐘采樣下緩存到FIFO 中,從而完成數(shù)據(jù)的正確傳輸。
由于硬件所選的NAND Flash 的容量為16GB,由數(shù)據(jù)塊和數(shù)據(jù)頁組成,讀寫操作均以頁為單位進(jìn)行,一頁為8KB 和448B 字節(jié)的用戶空閑空間組成。由于設(shè)計(jì)時使用ECC 算法每512 個字節(jié)產(chǎn)生3 字節(jié)檢驗(yàn)碼,因此在NAND Flash 的每頁的用戶空閑區(qū)需要存儲48 字節(jié)的校驗(yàn)碼。當(dāng)數(shù)據(jù)從FIFO 中取出寫入NAND Flash 時,需要根據(jù)原始數(shù)據(jù)使用“HanmminCodeGen3Bof512B”產(chǎn)生ECC校驗(yàn)碼,其產(chǎn)生原理框圖如圖5 所示。
按照圖5 所示的步驟,產(chǎn)生48 字節(jié)的檢驗(yàn)碼存放在每頁地址從8193 開始的用戶空閑區(qū)。當(dāng)需要從NAND Flash 中讀取數(shù)據(jù)時,需要使用“HanmminCodeGen3Bof512B”模塊重新生成48B 字節(jié)的校驗(yàn)碼同時將8K 數(shù)據(jù)存放在RAM 中等待進(jìn)行糾正。新ECC 校驗(yàn)碼和原ECC 檢驗(yàn)碼在“ErrLocation”模塊中進(jìn)行比較,找到位翻轉(zhuǎn)位置,然后進(jìn)入“RdCtrl_withECC”模塊對8K 待糾正數(shù)據(jù)的對應(yīng)位置的數(shù)據(jù)位進(jìn)行糾正,糾正完后將數(shù)據(jù)輸出,其處理流程圖如圖6 所示。
經(jīng)過上述兩個步驟,即實(shí)現(xiàn)了ECC 算法,將該部分實(shí)現(xiàn)代碼加入到整個NAND Flash 的控制器中,實(shí)現(xiàn)了bit 糾錯,將誤碼率降低到10-10以下。
存儲器需要適應(yīng)高速沖擊環(huán)境,設(shè)計(jì)的重點(diǎn)就是要保護(hù)Flash芯片的安全。在硬件設(shè)計(jì)上,將兩個Flash 陣列板通過柔性版一上一下折疊放入圓柱形結(jié)構(gòu)中進(jìn)行灌封處理。每個Flash 陣列板中的8 個Flash 芯片正反面放置,每面4 個。通過炮擊試驗(yàn)發(fā)現(xiàn),相同位置的Flash 芯片容易同時受到損壞。為了盡量避免該情況發(fā)生,設(shè)計(jì)時將備份Flash 陣列板上的Flash 芯片進(jìn)行交叉冗余備份,真正起到備份的目的。在某個芯片損壞的情況下,通過備份的芯片可以恢復(fù)出數(shù)據(jù)。存儲器安裝后兩組Flash 的相對位置示意圖如圖7所示。
如圖7 所示,F(xiàn)lash 芯片D1~D8 和D9-D16 分別存放數(shù)據(jù)的data[0]~data[63]位。為降低該風(fēng)險,設(shè)計(jì)時將P1 的數(shù)據(jù)存放位置不變,P2 的數(shù)據(jù)存放位置D9-D16 改為data[63]~data[0],通過交換管腳的方式實(shí)現(xiàn)。更改后的數(shù)據(jù)存放位置與P1 中的數(shù)據(jù)位置關(guān)系如圖8 所示。
經(jīng)過調(diào)整后,相同位置的Flash 存儲數(shù)據(jù)不同,存放相同數(shù)據(jù)的兩片F(xiàn)lash 分別位于存儲器板的不同位置,回收時若一個陣列中有某個Flash 芯片損壞,另一個陣列中存放該位置的芯片沒有損壞,則可以通過更改FPGA 引腳的方式重新組合成一個完整的存儲陣列,將數(shù)據(jù)讀出,從而降低了回收的風(fēng)險,提高回收的可靠性。
本文針對航天飛行器對存儲器高速率、大容量、低誤碼率以及高沖擊環(huán)境下可靠回收的要求,設(shè)計(jì)了一款存儲器,該存儲器使用SoftLVDS 高速傳輸技術(shù)、基于ECC 的NAND Flash 控制技術(shù)以及交叉冗余備份技術(shù)實(shí)現(xiàn)了高達(dá)2.4Gbps 傳輸速率、128G 大容量以及小于10-10的設(shè)計(jì)目標(biāo),滿足了系統(tǒng)需求,通過了試驗(yàn)驗(yàn)證,可靠回收數(shù)據(jù)。