文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)09-0037-04
中文引用格式:張凱華,任勇峰,賈興中.基于FPGA的高速數(shù)據(jù)存儲(chǔ)系統(tǒng)優(yōu)化設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(09):37-40.
遙測(cè)系統(tǒng)數(shù)據(jù)記錄裝置是飛行器運(yùn)作的重要組成部分,其功能是負(fù)責(zé)接收采編器采集數(shù)據(jù)并實(shí)時(shí)存儲(chǔ),保證數(shù)據(jù)的完整和準(zhǔn)確,也稱為存儲(chǔ)器。在地面測(cè)試階段,存儲(chǔ)器主要通過(guò)測(cè)試電纜和采編器完成數(shù)據(jù)上傳操作,由工作人員通過(guò)上位機(jī)軟件進(jìn)行分析處理;而在飛行測(cè)試階段,存儲(chǔ)器在飛行狀態(tài)下記錄數(shù)據(jù),落地后通常會(huì)遭受沖擊和拉力破壞,對(duì)數(shù)據(jù)的回收工作帶來(lái)困難。存儲(chǔ)器數(shù)據(jù)的高速存儲(chǔ)和工作可靠性問(wèn)題由此產(chǎn)生。
1 方案設(shè)計(jì)
根據(jù)實(shí)際工程應(yīng)用,LVDS有效數(shù)據(jù)傳送速率不高于59 MB/s,設(shè)計(jì)要求存儲(chǔ)器能夠?qū)崿F(xiàn)LVDS有效數(shù)據(jù)的可靠存儲(chǔ)及數(shù)據(jù)回讀功能,存儲(chǔ)容量不小于3 GB。
作為存儲(chǔ)器的核心組成部分,存儲(chǔ)模塊設(shè)計(jì)由接口電路、中心邏輯控制芯片FPGA、配置芯片PROM、LVDS均衡器、LVDS解碼器、存儲(chǔ)芯片F(xiàn)lash、電源模塊以及60 MHz晶振等構(gòu)成。LVDS數(shù)據(jù)經(jīng)解碼器轉(zhuǎn)換為并行數(shù)據(jù)后傳送給FPGA,F(xiàn)PGA對(duì)其進(jìn)行分組,緩存處理,寫入Flash芯片;接口電路則實(shí)現(xiàn)存儲(chǔ)器數(shù)據(jù)的回收;由電源模塊為整個(gè)電路提供電源,60 MHz晶振提供工作時(shí)鐘。原理框圖如圖1所示。
2 關(guān)鍵技術(shù)設(shè)計(jì)
2.1 存儲(chǔ)速率優(yōu)化設(shè)計(jì)
根據(jù)設(shè)計(jì)要求,存儲(chǔ)模塊接收LVDS有效數(shù)據(jù)的傳輸速率不高于59 MB/s,要想實(shí)現(xiàn)數(shù)據(jù)準(zhǔn)確、完整的存儲(chǔ),就要求其存儲(chǔ)速率不低于59 MB/s。設(shè)計(jì)選用三星公司的NAND型Flash存儲(chǔ)芯片K9WBGO8U1M作為存儲(chǔ)介質(zhì),單片存儲(chǔ)容量為4 GB。
K9WBGO8U1M芯片由兩片K9WAGO8U1M組成,分別記為chip1和chip2,兩者通過(guò)芯片CE1和CE2引腳實(shí)現(xiàn)使能控制,當(dāng)CE1為低電平時(shí),chip1選通,可執(zhí)行內(nèi)部擦除、讀寫操作,反之亦然。Flash的寫操作過(guò)程即實(shí)現(xiàn)頁(yè)編程的過(guò)程,可分為加載和自動(dòng)編程兩個(gè)步驟,加載主要完成指令、地址的下發(fā),自動(dòng)編程則完成數(shù)據(jù)的存儲(chǔ)[1]。由于Flash結(jié)構(gòu)的特殊性,采用不同的操作方式,存儲(chǔ)速率都會(huì)有所不同,可分為以下幾種:
(1)單平面編程方式:該方式是指在同一時(shí)刻只有chip1或者chip2響應(yīng)命令操作,進(jìn)行頁(yè)編程,在時(shí)間上無(wú)法同時(shí)進(jìn)行,從而浪費(fèi)在等待的過(guò)程中。其操作流程圖如圖2所示。
(2)交替頁(yè)編程方式:該方式是在chip1完成加載并進(jìn)入頁(yè)編程時(shí)刻,對(duì)chip2進(jìn)行加載,其好處是實(shí)現(xiàn)了時(shí)間上的復(fù)用,避免因?yàn)榈却斐蓵r(shí)間浪費(fèi)。其操作流程圖如圖3所示。
(3)交替雙平面編程方式:Chip的內(nèi)部存儲(chǔ)空間可劃分為4個(gè)plane,每個(gè)plane由2 048個(gè)塊和4 KB的頁(yè)寄存器組成,能夠執(zhí)行單獨(dú)擦除和編程操作。在執(zhí)行雙平面編程操作時(shí),必須選擇兩個(gè)plane同時(shí)進(jìn)行操作。利用芯片內(nèi)部不同平面可以單獨(dú)進(jìn)行操作的特性,令chip1中plane0和plane1為第1組,plane2和plane3為第2組,chip2中plane0和plane1為第3組,plane2和plane3為第4組,采用如圖4所示的流水線操作技術(shù)[2],各組的加載和頁(yè)編程能夠?qū)崿F(xiàn)連續(xù)操作,大幅度提高了單片F(xiàn)lash的存儲(chǔ)速率。
當(dāng)?shù)?組加載完成后,頁(yè)編程的時(shí)間約為200 μs,此時(shí)對(duì)2、3、4組加載,加載時(shí)間大約為tjiazai={2[4 KB×t+7t]+tDBSY}×3=823.2 μs>200 μs;其中,t=1/30 MB/s,tDBSY為1 μs等待時(shí)間。因此第4組完成加載時(shí),第1組已經(jīng)完成頁(yè)編程操作,可以繼續(xù)加載。寫完4組的時(shí)間為T={2[4 KB×t+7t]+tDBSY}×4=1 097.6 μs,則單片F(xiàn)lash采用交替雙平面編程方式的最大存儲(chǔ)速率為4 096×8 B/1 097.6 μs=29.85 MB/s>29.5 MB/s,達(dá)不到59 MB/s的設(shè)計(jì)要求。因此,需要對(duì)存儲(chǔ)模塊數(shù)據(jù)總線進(jìn)行擴(kuò)展,采用兩片F(xiàn)lash并行存儲(chǔ)的辦法。該想法的實(shí)現(xiàn)對(duì)控制單元FPGA的邏輯設(shè)計(jì)提出更高的要求。
2.2 存儲(chǔ)邏輯優(yōu)化設(shè)計(jì)
針對(duì)存儲(chǔ)模塊數(shù)據(jù)總線擴(kuò)展帶來(lái)的邏輯控制難題,本設(shè)計(jì)利用FPGA內(nèi)部豐富的存儲(chǔ)資源以及VHDL語(yǔ)言的可操作性和高靈活性,在FPGA內(nèi)部構(gòu)造雙端口RAM[3],實(shí)現(xiàn)數(shù)據(jù)緩存,提出以下兩種方案:
方案一:利用FPGA內(nèi)部雙口RAM資源,構(gòu)造8 KB的緩存FIFO。圖5所示為存儲(chǔ)模塊的邏輯原理框圖。當(dāng)存儲(chǔ)模塊采集信號(hào)有效并進(jìn)入記錄狀態(tài)時(shí),數(shù)據(jù)流以60 MB/s的速率寫入緩存。當(dāng)寫入數(shù)據(jù)個(gè)數(shù)大于4 096時(shí),便以30 MB/s速率從緩存中讀出4 096個(gè)數(shù),寫入Flash(A)中;同時(shí)繼續(xù)判斷緩存中的數(shù)是否大于4 096個(gè),若大于,同樣以30 MB/s速率讀出4 096個(gè)數(shù)寫入Flash(B)中。依次交替循環(huán),利用兩片F(xiàn)lash完成有效數(shù)據(jù)的寫入過(guò)程。
經(jīng)過(guò)多次測(cè)試,發(fā)現(xiàn)存儲(chǔ)數(shù)據(jù)回讀后經(jīng)常出現(xiàn)某位置4 096 B與前4 096 B幀計(jì)數(shù)顛倒的情況。分析是由于雙端口RAM為異步操作造成地址補(bǔ)償信號(hào)offset的值誤判引起的[4]。雙口RAM寫時(shí)鐘是根據(jù)LVDS解串出來(lái)的恢復(fù)時(shí)鐘,而讀數(shù)時(shí)鐘是邏輯控制模塊的120 MHz時(shí)鐘,所以RAM讀寫時(shí)鐘為異步時(shí)鐘。RAM中的讀操作是在地址補(bǔ)償信號(hào)offset滿足要求的情況下進(jìn)行的,而offset的值是在120 MHz時(shí)鐘下進(jìn)行判斷,可能此時(shí)寫地址正處于變化狀態(tài),使得寫地址的值不穩(wěn)定,導(dǎo)致offset的誤判,從而出現(xiàn)幀計(jì)數(shù)顛倒的現(xiàn)象。
方案二:在方案一8 KB RAM之后增加兩個(gè)4 KB雙口RAM,構(gòu)成二級(jí)緩存[5]。實(shí)現(xiàn)兩級(jí)緩存的邏輯原理框圖如圖6所示。對(duì)于單路的LVDS信號(hào),數(shù)據(jù)以60 MB/s的速率寫入一級(jí)緩存,當(dāng)判斷寫入數(shù)據(jù)大于7 106后,以60 MB/s的速率連續(xù)讀取4 096個(gè)數(shù)據(jù)至二級(jí)緩存(A),同時(shí)控制Flash(A)模塊對(duì)二級(jí)緩存(A)中的數(shù)據(jù)進(jìn)行判斷,當(dāng)寫入數(shù)據(jù)大于10個(gè)后,以30 MB/s速率連續(xù)讀取4 096個(gè)數(shù)并寫入Flash(A)中;同時(shí),如果判斷一級(jí)緩存中數(shù)據(jù)個(gè)數(shù)大于7 106,同樣以60 MB/s速率連續(xù)讀取4 096個(gè)數(shù)據(jù),寫入二級(jí)緩存(B),當(dāng)控制Flash(B)模塊判斷二級(jí)緩存(B)中數(shù)據(jù)大于10個(gè)后,同樣以30 MB/s速率讀取4 096個(gè)數(shù)寫入Flash(B)。Flash操作交替進(jìn)行,實(shí)現(xiàn)LVDS有效數(shù)據(jù)輪流有序地寫入兩片F(xiàn)lash。當(dāng)執(zhí)行Flash讀操作時(shí),為了保證數(shù)據(jù)的完整性和正確性,按照寫操作時(shí)序依次交替讀出兩片F(xiàn)lash中的數(shù)據(jù)[6]。
采用方案二的設(shè)計(jì),單片F(xiàn)lash的寫入速率達(dá)到30 MB/s,進(jìn)行并行擴(kuò)展后,使得LVDS數(shù)據(jù)流同時(shí)流入兩片F(xiàn)lash,寫入速率可達(dá)60 MB/s,實(shí)現(xiàn)了傳輸速率與存儲(chǔ)速率的良好匹配。經(jīng)過(guò)多次測(cè)試,回讀數(shù)據(jù)無(wú)異常情況出現(xiàn)。因此,采用第二種設(shè)計(jì)方案。
存儲(chǔ)模塊一級(jí)緩存到二級(jí)緩存切換時(shí)序如圖7所示。8k_rdclk表示一級(jí)緩沖的讀時(shí)鐘,8k_data表示一級(jí)緩存中讀出的1 B數(shù)據(jù),8k_addrb表示一級(jí)緩沖讀地址,a4k_wrclk表示二級(jí)緩存(A)的寫時(shí)鐘,a4k_addra表示二級(jí)緩存(A)的寫地址,b4k_wrclk表示二級(jí)緩存(B)的寫時(shí)鐘,b4k_addra表示二級(jí)緩存(B)的寫地址。
圖8所示展示了讀二級(jí)緩存寫入Flash時(shí)序圖。4k_rdclk為二級(jí)緩存4 KB的讀時(shí)鐘,4k_data為從4 KB緩存中讀出的數(shù)據(jù),4k_addrb為4 KB緩存的讀地址,flash_data為寫入Flash中的數(shù)據(jù),we為Flash的寫信號(hào),countbyte為寫入Flash的字節(jié)計(jì)數(shù)。
2.3 存儲(chǔ)器硬件優(yōu)化設(shè)計(jì)
由于在飛行試驗(yàn)過(guò)程中,存儲(chǔ)器落地時(shí)會(huì)受到地面很大的沖擊作用,容易造成內(nèi)部電路板損壞,因此需要在電路板與機(jī)械結(jié)構(gòu)之間填充滿緩沖介質(zhì)[7]。盡管如此,很多情況下晶振也會(huì)不可避免地遭到破壞,直接影響到存儲(chǔ)數(shù)據(jù)的回收,而飛行試驗(yàn)的存儲(chǔ)數(shù)據(jù)對(duì)于航天分析具有至關(guān)重要的作用。因此在存儲(chǔ)器設(shè)計(jì)時(shí)采用多備份的設(shè)計(jì)原則,即將采集數(shù)據(jù)同時(shí)灌入甲、乙兩個(gè)存儲(chǔ)器,每個(gè)存儲(chǔ)器內(nèi)部分別有兩個(gè)存儲(chǔ)體,存儲(chǔ)體之間相互獨(dú)立、互為備份,存儲(chǔ)有相同的數(shù)據(jù)。
存儲(chǔ)器在落地過(guò)程中易受到拉力破壞,使其無(wú)法再通過(guò)測(cè)試電纜進(jìn)行數(shù)據(jù)回讀。針對(duì)存儲(chǔ)器落地時(shí)晶振損壞的情況,對(duì)存儲(chǔ)模塊的接口電路進(jìn)行改進(jìn)設(shè)計(jì),增加了備用讀數(shù)接口,兩者具有相同的電氣特性。在存儲(chǔ)器落地后通過(guò)備用讀數(shù)電纜連接地面測(cè)試臺(tái),由測(cè)試臺(tái)提供給存儲(chǔ)器電源和備用讀數(shù)時(shí)鐘進(jìn)行數(shù)據(jù)回讀,實(shí)現(xiàn)了存儲(chǔ)數(shù)據(jù)的可靠回收。備用讀數(shù)接口電路設(shè)計(jì)原理如圖9所示。
3 試驗(yàn)驗(yàn)證
對(duì)存儲(chǔ)器設(shè)計(jì)進(jìn)行改進(jìn)后,將存儲(chǔ)器、采編器和地面測(cè)試臺(tái)通過(guò)地面電纜連接,模擬飛行器上的數(shù)據(jù)采集、存儲(chǔ)過(guò)程。在數(shù)據(jù)回收后,由上位機(jī)軟件進(jìn)行分析處理,存儲(chǔ)數(shù)據(jù)準(zhǔn)確無(wú)誤,測(cè)試數(shù)據(jù)總量為300 GB。通過(guò)備用讀數(shù)接口和地面甩辯電纜接口讀出的數(shù)據(jù)相同,證明設(shè)計(jì)方案能夠?qū)崿F(xiàn)采集數(shù)據(jù)的準(zhǔn)確、完整存儲(chǔ)及可靠回收。
本次設(shè)計(jì)的存儲(chǔ)系統(tǒng)采用Flash的并行存儲(chǔ)技術(shù)和交替雙平面編程的方式,在存儲(chǔ)速率方面有很大提高,保證了數(shù)據(jù)存儲(chǔ)的準(zhǔn)確性和完整性。同時(shí)多備份和備用讀數(shù)接口的設(shè)計(jì)也提高了存儲(chǔ)器數(shù)據(jù)回收的可靠性,在數(shù)據(jù)高速存儲(chǔ)和可靠回收測(cè)試領(lǐng)域具有良好的應(yīng)用前景。
參考文獻(xiàn)
[1] 盛大鵬.基于Flash的高速大容量存儲(chǔ)器的研究[D].北京:中國(guó)科學(xué)院研究生院,2008.
[2] 車艷霞,任勇峰,劉東海.一種小體積高速數(shù)據(jù)記錄器的設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化與儀表,2011,26(11):9-11.
[3] 白佳俊,孟祥勇,張德平,等.基于W5300和FPGA的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(4):19-21.
[4] 馬游春,張濤,李錦明.FPGA集成FIFO在高過(guò)載存儲(chǔ)測(cè)試系統(tǒng)中的應(yīng)用[J].儀器儀表學(xué)報(bào),2006,27(6):2350-2351.
[5] 胡宏平,胡兵.基于FPGA的雙口RAM在信號(hào)采集中的應(yīng)用[J].微計(jì)算機(jī)信息,2007(23):223-225.
[6] 甄國(guó)涌.雷達(dá)視頻回波模擬設(shè)備關(guān)鍵技術(shù)研究[D].太原:中北大學(xué),2009.
[7] 劉飛.小型高速圖像存儲(chǔ)系統(tǒng)的設(shè)計(jì)[D].西安:西安電子科技大學(xué),2009.