文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)04-0087-04
0 引言
應(yīng)用于航天遙測(cè)中的視頻攝像技術(shù)可以真實(shí)地還原航天器的飛行狀態(tài)、動(dòng)作和現(xiàn)場(chǎng)環(huán)境等多項(xiàng)關(guān)鍵指標(biāo)。航天器的飛行試驗(yàn)要求圖像具有較高的空間分辨率和時(shí)間分辨率,才不致丟失重要細(xì)節(jié),通常使用高速攝像機(jī)作為采集系統(tǒng)前端。在該領(lǐng)域,現(xiàn)場(chǎng)的場(chǎng)景必須完整、真實(shí)地還原出來(lái),而航天器有時(shí)可能不在地面監(jiān)測(cè)范圍之內(nèi),一些在軌試驗(yàn)數(shù)據(jù)只能先存入記錄器中,進(jìn)入監(jiān)測(cè)范圍內(nèi)再將數(shù)據(jù)回傳。記錄裝置的容量、帶寬以及其可靠性和穩(wěn)定性等因素都將影響數(shù)據(jù)能否準(zhǔn)確保存,并關(guān)系到整個(gè)試驗(yàn)的成敗[1]。
數(shù)據(jù)存儲(chǔ)技術(shù)的進(jìn)步主要體現(xiàn)在存儲(chǔ)介質(zhì)的發(fā)展和各種通信總線的應(yīng)用上。存儲(chǔ)介質(zhì)從磁帶到硬盤(pán)再到半導(dǎo)體器件,逐漸向微小型化、低功耗、高集成度和密集化發(fā)展,而半導(dǎo)體存儲(chǔ)器件已廣泛應(yīng)用于航天遙測(cè)領(lǐng)域。隨著1553B、光纖接口、以太網(wǎng)接口等高速總線的應(yīng)用,存儲(chǔ)帶寬也得以提高。LVDS接口憑借其低噪聲、低功耗和極高的傳輸效率等特點(diǎn)在測(cè)試計(jì)量、圖像處理方面發(fā)揮重要作用。本文旨在設(shè)計(jì)一種高可靠性的數(shù)據(jù)記錄器以實(shí)現(xiàn)對(duì)高速數(shù)字視頻信號(hào)的采集、存儲(chǔ)和回傳。
1 設(shè)計(jì)思路
結(jié)合當(dāng)前數(shù)據(jù)記錄器的研究現(xiàn)狀和發(fā)展趨勢(shì),采用FPGA作為數(shù)據(jù)記錄裝置的中控邏輯單元,用Flash作為核心存儲(chǔ)芯片,使用LVDS作為數(shù)據(jù)傳輸接口,特點(diǎn)是功耗低、可控性高,并且數(shù)據(jù)不易丟失。設(shè)計(jì)時(shí),采用自上而下的設(shè)計(jì)思想,分成多個(gè)模塊進(jìn)行編碼和調(diào)試。
已知數(shù)字視頻信號(hào)參數(shù):畫(huà)面分辨率為VGA(640×480),幀率100 f/s,采樣位數(shù)為8 bit,采樣頻率為40 MHz。經(jīng)計(jì)算得出接口處的數(shù)據(jù)流為30.72 Mb/s。應(yīng)用于航天遙測(cè)的精密儀器對(duì)設(shè)備出現(xiàn)誤碼、數(shù)據(jù)丟失等情況有嚴(yán)格的限制,其可靠性和穩(wěn)定性應(yīng)得到保證。確保設(shè)備研制成功的關(guān)鍵技術(shù)有三:一是數(shù)字視頻信號(hào)的完整采集,二是選擇合理的Flash工作方式并嚴(yán)格控制其時(shí)序約束,三是準(zhǔn)確高效地回傳混有幀標(biāo)記的圖像。
2 關(guān)鍵技術(shù)
2.1 圖像采集
攝像機(jī)輸出的數(shù)字視頻信號(hào)的時(shí)序如圖1所示。垂直同步信號(hào)vsync是實(shí)現(xiàn)圖像幀同步的標(biāo)志,當(dāng)vsync為1時(shí),攝像頭有數(shù)據(jù)輸出,vsync上升沿是獲取一幀數(shù)據(jù)的初始時(shí)刻;當(dāng)vsync為0時(shí),無(wú)數(shù)據(jù)輸出,可以利用這段時(shí)間在一幀圖像采集完成后加入其他信息,如時(shí)標(biāo)、幀計(jì)數(shù)和幀標(biāo)記等。水平同步信號(hào)hsync的上升沿為采集每一行的初始時(shí)刻,當(dāng)hsync為1時(shí),完成此行640個(gè)像素點(diǎn)的采集。重復(fù)操作480次,即可獲取一幀完整的圖像。數(shù)據(jù)采集流程如圖2所示。
在高速數(shù)據(jù)處理過(guò)程中,不同模塊在各自的同步時(shí)鐘下工作,為解決跨時(shí)鐘域問(wèn)題,要在數(shù)據(jù)交換接口處添加異步FIFO,以匹配不同傳輸速率的數(shù)據(jù)流。由圖1可知,在一個(gè)水平同步周期(18.75 s)內(nèi),采集并寫(xiě)入FIFO的數(shù)據(jù)量為640字節(jié),若以33 MHz的速率讀FIFO,則在這一時(shí)間內(nèi),流出FIFO的數(shù)據(jù)量為618.75字節(jié)。數(shù)據(jù)差值將在Vsync下降沿時(shí)達(dá)到最大,為10 200字節(jié),若采用半滿即讀的方式,則FIFO容量應(yīng)大于20 400字節(jié),否則就可能溢出。攝像機(jī)在時(shí)鐘上升沿發(fā)數(shù),記錄器用時(shí)鐘下降沿取數(shù)。存到記錄器中的數(shù)據(jù)是圖像和信息的組合,為了區(qū)分兩種類型的數(shù)據(jù),采用9位的FIFO緩存數(shù)據(jù),低8位用以寫(xiě)入數(shù)據(jù)流,最高位(MSB)用來(lái)標(biāo)識(shí)數(shù)據(jù)類型。部分代碼如下:
writeclk<=((not clk) and hsync) and vsync);
---寫(xiě)FIFO時(shí)鐘
fifo_in<=′0′ & information when vsync=′0′ else
′1′ & image_data;
---加 ′0′表示信息,加 ′1′表示圖像
2.2 數(shù)據(jù)存儲(chǔ)
Nand Flash有多種編程方式,如頁(yè)編程(Page Program)、雙平面頁(yè)編程(Two-plane Page Program)和交叉雙平面頁(yè)編程(Interleave Two-plane Page Program),如圖3所示。這三種工作方式最終導(dǎo)致Flash寫(xiě)入數(shù)據(jù)的速度不同[2]。
由表1可以看出,影響Flash編程時(shí)間的主要因素為tPRO。前兩種方式都花費(fèi)了大量的時(shí)間用在tPRO上,tPRO會(huì)隨著工作電壓和溫度的不同而變化。寫(xiě)完一整頁(yè)需要i個(gè)命令字周期、j個(gè)尋址周期和m個(gè)數(shù)據(jù)周期。
在三種工作方式下,若不考慮其他影響因素,F(xiàn)lash的持續(xù)寫(xiě)入速率計(jì)算如下:
事實(shí)上,在出廠時(shí)芯片就存在無(wú)效塊,而且在使用過(guò)程中還會(huì)產(chǎn)生新的無(wú)效塊。無(wú)效塊的存在一定程度上影響了Flash的寫(xiě)入速度,按照“判一塊寫(xiě)一塊”的方法顯然是行不通的。為此,本文采用一種“無(wú)效塊動(dòng)態(tài)管理算法”,即:在執(zhí)行寫(xiě)操作前對(duì)無(wú)效塊進(jìn)行檢測(cè),在RAM中建立無(wú)效塊地址列表;寫(xiě)入數(shù)據(jù)時(shí),將當(dāng)前塊地址與列表中的無(wú)效塊地址按順序?qū)Ρ扰袛啵蝗粢恢?,則認(rèn)為當(dāng)前塊無(wú)效,繼續(xù)判斷下一塊;否則,認(rèn)為當(dāng)前塊有效,可以進(jìn)行寫(xiě)操作[3]。讀取RAM無(wú)效塊列表的時(shí)間與無(wú)效塊檢測(cè)的時(shí)間相比微乎其微,在理論上和實(shí)際應(yīng)用中都得到了驗(yàn)證。
Flash的編程編碼算法本身并不復(fù)雜,但如果不對(duì)其做任何處理,一旦數(shù)據(jù)產(chǎn)生誤碼或丟失,在圖像回傳時(shí),可能導(dǎo)致后續(xù)圖像紊亂影響全局。因此,有必要對(duì)Flash存儲(chǔ)空間進(jìn)行特殊配置,以空間地址來(lái)記錄幀結(jié)構(gòu)。Flash每個(gè)Device存儲(chǔ)空間結(jié)構(gòu)如圖4所示,用A13~A31指定頁(yè)地址, 總共524 288頁(yè),2個(gè)Device共1 048 576頁(yè)[4]。一幀圖像數(shù)據(jù)為307 200字節(jié),占用75頁(yè),若按試驗(yàn)要求,飛行器每次工作記錄的5 000幀圖像數(shù)據(jù)僅占用了全空間的36%,有足夠的空間來(lái)配置地址,甚至完成地址的選擇和跳躍??臻g地址配置方式如圖5所示:白、灰兩色背景分別表示一幀數(shù)據(jù),圖像數(shù)據(jù)累計(jì)寫(xiě)滿75頁(yè),緊跟在第76頁(yè)寫(xiě)入信息,這樣就完整地記錄了一幀數(shù)據(jù),其中,代表信息的一頁(yè)用黑色加粗邊框標(biāo)出。采用交叉雙平面頁(yè)編程的工作模式,寫(xiě)入順序如黑色箭頭方向所示。Flash每一行有8個(gè)塊,每塊有64頁(yè),共512頁(yè),每行可以完整寫(xiě)入6幀數(shù)據(jù),然后跳過(guò)56頁(yè)進(jìn)入下一行繼續(xù)按照以上方法寫(xiě)數(shù)[5]。以此類推,每連續(xù)6個(gè)數(shù)據(jù)幀就有了統(tǒng)一的存儲(chǔ)結(jié)構(gòu),便于對(duì)圖像的恢復(fù)。這樣做的另一個(gè)優(yōu)點(diǎn)是可以實(shí)現(xiàn)數(shù)據(jù)的檢錯(cuò)和糾錯(cuò):數(shù)據(jù)從FIFO中流出被寫(xiě)入Flash時(shí),假若最高位為0,而計(jì)數(shù)器并非76,說(shuō)明傳輸時(shí)有數(shù)據(jù)丟失,則在寫(xiě)完信息數(shù)據(jù)后,直接跳到指定位置寫(xiě)下一幀,將錯(cuò)誤限制在一幀內(nèi),而不影響后序數(shù)據(jù)幀[6]。
2.3 圖像回傳
圖像回傳的本質(zhì)就是按照?qǐng)D1的時(shí)序?qū)lash存儲(chǔ)的圖像數(shù)據(jù)通過(guò)LVDS接口發(fā)出。由于每幀數(shù)據(jù)的附帶信息并非回傳所需,因此可以將第76頁(yè)直接跳過(guò);但這樣做的缺點(diǎn)是回傳讀數(shù)和普通讀數(shù)要被分為兩個(gè)不同的進(jìn)程,增加了程序占用的資源。因此,可以合并這兩個(gè)進(jìn)程,由后續(xù)模塊提取圖像數(shù)據(jù)[7]。這個(gè)過(guò)程將包括兩部分:一是按照?qǐng)D5所示黑色箭頭方向讀取數(shù)據(jù)并寫(xiě)入FIFO低8位,同時(shí)根據(jù)存儲(chǔ)空間地址判斷數(shù)據(jù)是圖像還是信息,用FIFO的最高位加以區(qū)分。二是FIFO非空即讀,若為圖像則合理產(chǎn)生vsync、hsync和clk信號(hào),并在clk上升沿時(shí)推送數(shù)據(jù);否則將vsync、hsync和clk信號(hào)全部置為低電平,且不把數(shù)據(jù)推送至LVDS接口處。過(guò)程一相對(duì)比較簡(jiǎn)單,這里不再敘述;過(guò)程二的工作流程如圖6所示。
3 系統(tǒng)驗(yàn)證
為了驗(yàn)證本文設(shè)計(jì)的記錄器的整體性能和可靠性,專門(mén)設(shè)計(jì)了一套檢測(cè)設(shè)備,包括硬件平臺(tái)和測(cè)試軟件。該設(shè)備的主要功能有:(1)模擬前端攝像機(jī),輸出垂直同步信號(hào)、水平同步信號(hào)、時(shí)鐘信號(hào)和8位位寬的數(shù)據(jù)流;(2)接收記錄器回傳的圖像;(3)測(cè)試軟件可以直接讀取記錄器中的完整數(shù)據(jù)(稱為“長(zhǎng)線讀數(shù)”),也可以讀取回傳至測(cè)試設(shè)備中的圖像數(shù)據(jù)(稱為“備用讀數(shù)”);(4)判定幀結(jié)構(gòu)是否完整,檢測(cè)數(shù)據(jù)是否正確;(5)顯示圖像。
由于一幀圖像數(shù)據(jù)有300 KB,若采用遞增模式的信號(hào)源,模擬攝像機(jī)輸出的數(shù)據(jù)格式為:1 200個(gè)“00h~FFh”+8字節(jié)的附加信息(“14 92”+幀計(jì)數(shù)+時(shí)標(biāo)+狀態(tài)信息)。
計(jì)算機(jī)軟件執(zhí)行“長(zhǎng)線讀數(shù)”或“備用讀數(shù)”命令后,將在線讀取完整數(shù)據(jù)或圖像數(shù)據(jù),存入一個(gè)后綴名為.dat的文件,經(jīng)多次考查,記錄裝置存儲(chǔ)的數(shù)據(jù)與檢測(cè)設(shè)備發(fā)送的數(shù)字量一致,符合設(shè)計(jì)要求。
4 結(jié)束語(yǔ)
本文主要介紹一種高速數(shù)字視頻信號(hào)記錄裝置,從程序編碼方面入手,選擇了穩(wěn)健、高效能的算法,重點(diǎn)介紹了圖像采集、存儲(chǔ)和回傳三項(xiàng)關(guān)鍵技術(shù),并設(shè)計(jì)了一套專用的檢測(cè)平臺(tái)。經(jīng)單機(jī)測(cè)試,設(shè)備穩(wěn)定性良好、功能齊備、滿足任務(wù)要求。由于采用的Flash芯片所限,本文所提出的編碼算法僅適用于碼率在40 Mb/s以下的數(shù)據(jù)存儲(chǔ)。
參考文獻(xiàn)
[1] 洪應(yīng)平.高速圖像數(shù)據(jù)固態(tài)存儲(chǔ)器的研制[D].太原:中北大學(xué),2011.
[2] 謝民.NAND型Flash在大容量存儲(chǔ)回放系統(tǒng)中的應(yīng)用[J].集成電路應(yīng)用,2006,3(4):94~98.
[3] SAMSUNG Electronics.K9WBGU1M Flash Memory:10-13.
[4] 孟令軍,嚴(yán)帥,龔敬,等.基于FPGA的高速圖像采集存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].自動(dòng)化與儀表,2011,9(26):40-42.
[5] 常璐.基于NAND Flash陣列的數(shù)據(jù)存儲(chǔ)技術(shù)研究[D].太原:中北大學(xué),2011.
[6] 齊亞軍,趙鳳軍.一種專用高速數(shù)據(jù)記錄器的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(1):107-109.
[7] 王小艷,張會(huì)新,孫永生.Camera Link協(xié)議和FPGA的數(shù)字圖像信號(hào)源設(shè)計(jì)[J].國(guó)外電子元器件,2008(7):59-61.