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