文獻(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)行分組,,緩存處理,寫(xiě)入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)部擦除,、讀寫(xiě)操作,,反之亦然。Flash的寫(xiě)操作過(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ù)加載,。寫(xiě)完4組的時(shí)間為T(mén)={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的速率寫(xiě)入緩存,。當(dāng)寫(xiě)入數(shù)據(jù)個(gè)數(shù)大于4 096時(shí),,便以30 MB/s速率從緩存中讀出4 096個(gè)數(shù),,寫(xiě)入Flash(A)中,;同時(shí)繼續(xù)判斷緩存中的數(shù)是否大于4 096個(gè),,若大于,,同樣以30 MB/s速率讀出4 096個(gè)數(shù)寫(xiě)入Flash(B)中,。依次交替循環(huán),,利用兩片F(xiàn)lash完成有效數(shù)據(jù)的寫(xiě)入過(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寫(xiě)時(shí)鐘是根據(jù)LVDS解串出來(lái)的恢復(fù)時(shí)鐘,,而讀數(shù)時(shí)鐘是邏輯控制模塊的120 MHz時(shí)鐘,所以RAM讀寫(xiě)時(shí)鐘為異步時(shí)鐘,。RAM中的讀操作是在地址補(bǔ)償信號(hào)offset滿足要求的情況下進(jìn)行的,,而offset的值是在120 MHz時(shí)鐘下進(jìn)行判斷,,可能此時(shí)寫(xiě)地址正處于變化狀態(tài),,使得寫(xiě)地址的值不穩(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的速率寫(xiě)入一級(jí)緩存,,當(dāng)判斷寫(xiě)入數(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)寫(xiě)入數(shù)據(jù)大于10個(gè)后,以30 MB/s速率連續(xù)讀取4 096個(gè)數(shù)并寫(xiě)入Flash(A)中,;同時(shí),,如果判斷一級(jí)緩存中數(shù)據(jù)個(gè)數(shù)大于7 106,同樣以60 MB/s速率連續(xù)讀取4 096個(gè)數(shù)據(jù),,寫(xiě)入二級(jí)緩存(B),,當(dāng)控制Flash(B)模塊判斷二級(jí)緩存(B)中數(shù)據(jù)大于10個(gè)后,同樣以30 MB/s速率讀取4 096個(gè)數(shù)寫(xiě)入Flash(B),。Flash操作交替進(jìn)行,,實(shí)現(xiàn)LVDS有效數(shù)據(jù)輪流有序地寫(xiě)入兩片F(xiàn)lash。當(dāng)執(zhí)行Flash讀操作時(shí),,為了保證數(shù)據(jù)的完整性和正確性,,按照寫(xiě)操作時(shí)序依次交替讀出兩片F(xiàn)lash中的數(shù)據(jù)[6]。
采用方案二的設(shè)計(jì),,單片F(xiàn)lash的寫(xiě)入速率達(dá)到30 MB/s,,進(jìn)行并行擴(kuò)展后,使得LVDS數(shù)據(jù)流同時(shí)流入兩片F(xiàn)lash,寫(xiě)入速率可達(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)的寫(xiě)時(shí)鐘,,a4k_addra表示二級(jí)緩存(A)的寫(xiě)地址,,b4k_wrclk表示二級(jí)緩存(B)的寫(xiě)時(shí)鐘,b4k_addra表示二級(jí)緩存(B)的寫(xiě)地址,。
圖8所示展示了讀二級(jí)緩存寫(xiě)入Flash時(shí)序圖,。4k_rdclk為二級(jí)緩存4 KB的讀時(shí)鐘,4k_data為從4 KB緩存中讀出的數(shù)據(jù),,4k_addrb為4 KB緩存的讀地址,,flash_data為寫(xiě)入Flash中的數(shù)據(jù),we為Flash的寫(xiě)信號(hào),,countbyte為寫(xiě)入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] 車(chē)艷霞,,任勇峰,,劉東海.一種小體積高速數(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.