文獻標(biāo)識碼: A
文章編號: 0258-7998(2014)11-0043-04
0 引言
傳統(tǒng)的視頻采集系統(tǒng)僅支持PAL和NTSC幾種制式的視頻數(shù)據(jù),這些模式很難清晰地抓拍到目標(biāo)快速變化的瞬時圖片,而很多高幀頻的攝像頭只是對圖像進行了簡單的采集,并未處理和壓縮。為了改善視頻圖像數(shù)據(jù)的信道傳輸和存儲速度,降低對信道寬度以及存儲空間大小的要求,本文設(shè)計了一種多接口、高速率傳輸?shù)?a class="innerlink" href="http://theprogrammingfactory.com/tags/圖像壓縮" title="圖像壓縮" target="_blank">圖像壓縮系統(tǒng)。該系統(tǒng)不直接存儲圖像數(shù)據(jù),而是由FPGA采集數(shù)字化后的視頻圖像數(shù)據(jù),通過DSP將采集的數(shù)據(jù)進行編碼壓縮,然后再將編碼壓縮后的數(shù)據(jù)通過PCI高速傳輸給計算機,最后再通過計算機對圖像進行解壓縮并顯示。
1 總體結(jié)構(gòu)設(shè)計
本設(shè)計結(jié)合FPGA處理速度快、DSP運算能力強等優(yōu)點,提出了如下方案:通過FPGA模擬I2C總線時序,對模擬視頻采集芯片TVP5150進行配置,并接收TVP5150輸出的ITU-R BT.656格式的圖像數(shù)據(jù);同時,采用了Camera Link 接口,接收標(biāo)準(zhǔn)數(shù)字相機輸出的圖像數(shù)據(jù)。在FPGA完成對視頻數(shù)據(jù)的采集并經(jīng)內(nèi)部FIFO緩存后,將數(shù)據(jù)打包并行傳輸給DSP,DSP對圖像進行JPEG2000標(biāo)準(zhǔn)的壓縮,壓縮幀頻不低于60幀/s,壓縮比不小于20:1;壓縮后的數(shù)據(jù)通過PCI總線傳輸給控制計算機,然后通過計算機對圖像進行解碼顯示。
圖像壓縮系統(tǒng)的整體結(jié)構(gòu)如圖1所示,主要包括圖像采集模塊、FPGA控制模塊、DSP壓縮模塊、PCI接口模塊、電源和時鐘管理模塊。
視頻采集模塊使用了型號為PNT-698的CCD模擬攝像頭,該攝像頭幀頻為25 Hz,場頻為50 Hz,像素為720×576,輸出為PAL制式圖像信號,信噪比大于48 dB,并可以實現(xiàn)自動增益控制以及自動白平衡調(diào)整,輸出接口標(biāo)準(zhǔn)為BNC。
2 硬件平臺的搭建
2.1 視頻接口協(xié)議設(shè)定
視頻接口由8路并行數(shù)據(jù)和1路時鐘信號組成,時鐘為像素時鐘,時鐘周期T=1/1 728fN,fN為行頻率,單位是Hz,fN=1/625(一幀圖像為625行),脈沖寬度t=18.5±3 ns,數(shù)據(jù)保持時間為td=18.5±3 ns。
視頻傳輸協(xié)議是以幀為單位傳輸,一幀圖像的傳輸格式如圖2所示。為了與標(biāo)準(zhǔn)電視圖像掃描方式相兼容,采用隔行掃描,每幀625行,每行1 728 B。其中第1行~第23行和第311行~第336行為場消隱信號,主要針對視頻數(shù)據(jù)場結(jié)束后掃描位置的重新定位,偶數(shù)場共288行(23~311),奇數(shù)場共288行(336~624)。
圖像解碼芯片TVP5150采用了同步信號嵌入數(shù)據(jù)內(nèi)部的輸出方式,所以需要對行數(shù)據(jù)結(jié)構(gòu)進行研究。行數(shù)據(jù)結(jié)構(gòu)如圖3所示,一行共1 728 B,前288 B為行控制信號,后1 440 B為圖像數(shù)據(jù)。行控制信號包括行開始標(biāo)志SAV(Start of Active Video),長度為4 B;行結(jié)束標(biāo)志EAV(End of Active Video),長度為4 B;行消隱信號280 B。SAV信號和EAV信號都由4 B組成,分別為FF、00、00、XY,前3 B為固定數(shù),最后1 B XY表示該行數(shù)據(jù)在整幀圖像中的位置信息。XY字節(jié)包含奇偶場標(biāo)志、行消隱狀態(tài)信息、場消隱狀態(tài)信息。
視頻圖像數(shù)據(jù)為YCbCr 4:2:2格式,Y表示一個像素的亮度,Cb、Cr表示一個像素的色差信號,一個像素2 B,每行共720個像素,共1 440 B。視頻數(shù)據(jù)格式為CbYCrYCbYCrY……CrY,因此可以理解為每個像素均有各自的亮度信號Y,但是共用一組色差信號Cb和Cr。在解包數(shù)據(jù)時,需要將它們分開,若需要顯示,可以將YUV格式轉(zhuǎn)換為RGB格式。
2.2 FPGA與DSP接口設(shè)計
FPGA完成圖像數(shù)據(jù)的接收后,經(jīng)過格式變換及濾波將圖像數(shù)據(jù)傳輸給DSP進行壓縮。壓縮打包完成后,又需要將數(shù)據(jù)回傳給FPGA,通過FPGA控制PCI接口時序,將數(shù)據(jù)最終上傳給計算機。為了滿足圖像數(shù)據(jù)高速、雙向、實時的傳輸,在DSP與FPGA之間設(shè)計了兩個高速的FIFO緩沖。
本系統(tǒng)中選用Spartan3系列的XC3S1400AN作為核心處理器[1],其內(nèi)部儲存資源豐富,內(nèi)部Flash 16 Mbit, Distributed RAM(分布式RAM)176 Kbit,Block RAM(塊RAM)576 Kbit。為了節(jié)約成本,同時考慮到系統(tǒng)的傳輸速率及可靠性,在FPGA內(nèi)部IP核中創(chuàng)建了內(nèi)部FIFO,數(shù)據(jù)寬度為32 bit,存儲容量為3 M×32 bit。采用了獨立的讀時鐘(RD_CLK)和寫時鐘(WR_CLK),數(shù)據(jù)達到半滿,半滿標(biāo)志位置1(half_flag=′1′);達到滿,滿標(biāo)志置1(full_flag=′1′)。
FPGA和DSP的接口如圖4所示,視頻數(shù)據(jù)采集、處理完成之后,F(xiàn)PGA通過FIFO的滿標(biāo)志查看FIFO是否已滿,如果未滿,則將32 bit圖像數(shù)據(jù)在寫時鐘的邏輯控制下寫入到FIFO;將半滿信號連接到DSP的中斷引腳,半滿信號置高,會觸發(fā)DSP的DMA進程,將FIFO中的圖像數(shù)據(jù)讀走[2]。同理,DSP通過EMIF外設(shè)接口將FPGA作為其外部存儲空間,壓縮后的數(shù)據(jù)通過DMA寫到FPGA內(nèi)部的另一個FIFO,半滿信號觸發(fā)FPGA內(nèi)部讀數(shù)進程,將數(shù)據(jù)讀走,通過PCI總線上傳到控制計算機。
2.3 DSP壓縮模塊設(shè)計
JPEG2000壓縮算法硬件實現(xiàn)復(fù)雜度比較高,其核心算法離散小波變換和EBCOT算法計算量特別大[3],同時要考慮到實時性要求,所以對CPU的處理速度以及緩存空間等要求很高。因此在本次設(shè)計中,選擇了TI公司C6000系列DSP中的TMS320DM642作為硬件平臺。該DSP計算速度超過每秒64億次,適合大數(shù)據(jù)吞吐量高速運算,比如在圖像處理領(lǐng)域。同時,DM642擁有豐富的外設(shè)接口,包括可實現(xiàn)與SDRAM、Flash等外部存儲芯片無縫數(shù)據(jù)連接的EMIF接口等,非常適合音視頻解碼、數(shù)字監(jiān)控以及數(shù)字視頻服務(wù)等應(yīng)用[4]。
對圖像數(shù)據(jù)處理流程如圖5所示,源圖像先經(jīng)過正向預(yù)處理后進行離散小波變換(DWT),然后對變換的小波系數(shù)進行量化處理和熵編碼,最后將熵編碼后獲得的圖像數(shù)據(jù)打包成壓縮數(shù)據(jù)包輸出。解碼則按照壓縮碼流中提供的各個參數(shù)將編碼過程進行逆向操作,最終將源圖像重構(gòu)還原出來。
2.4 乒乓緩存設(shè)計
圖像傳感器單位時間內(nèi)產(chǎn)生的數(shù)據(jù)是連續(xù)的,且數(shù)據(jù)量比較大,而DSP的編碼速率是變化的。為了防止在編碼過程中造成數(shù)據(jù)的丟失,需要在采集與編碼電路之間設(shè)計一組幀緩存電路。
常用的緩存電路主要有FIFO、雙端口RAM和乒乓緩存結(jié)構(gòu)[5]。由于FIFO的存儲容量太小,不適合圖像視頻數(shù)據(jù)的大吞吐量緩存。雙端口RAM配備必須進行訪問仲裁控制,設(shè)計較復(fù)雜。乒乓緩存結(jié)構(gòu)克服了它們所有的缺點,輸入的視頻數(shù)據(jù)流以幀為單位交替地寫入兩個不同的SDRAM存儲單元,在寫入其中一塊SDRAM的同時,將另一塊SDRAM中的數(shù)據(jù)讀出,并送到數(shù)據(jù)編碼單元進行運算。這樣數(shù)據(jù)的輸入/輸出都是不間斷的,非常適合流水線式操作,完成數(shù)據(jù)的無縫緩存和處理。
本設(shè)計中乒乓緩存結(jié)構(gòu)如圖6所示,DSP接收到FPGA傳輸?shù)膱D像數(shù)據(jù)后,以幀為單位交替寫入兩塊SDRAM存儲器。與此同時,數(shù)據(jù)被交替讀出,輸出給數(shù)據(jù)壓縮單元進行編碼。數(shù)據(jù)流被嚴(yán)格有效地控制,不會出現(xiàn)丟數(shù)據(jù)或者誤碼,而且效率很高。選用MT48LC2M-
32B2作為外部高度SDRAM緩存器,讀寫速率可以達到6 ns,數(shù)據(jù)總線寬度為32 bit,容量為64 Mbit,而高頻數(shù)字?jǐn)z像頭輸入的一幀圖像的大小為600×480×3=864 Kbit,完全可以滿足要求。
3 邏輯功能的實現(xiàn)
3.1 TVP5150解碼邏輯
TVP5150解碼芯片輸出的數(shù)據(jù)流中除了包含有效的視頻圖像數(shù)據(jù)之外,還包含行、場同步信號以及一些消隱數(shù)據(jù)。所以在視頻解碼時,需要根據(jù)同步信號以及ITU-R BT.656的標(biāo)準(zhǔn)格式將有效數(shù)據(jù)提取出來。
提取有效數(shù)據(jù)的流程圖如圖7所示,在時鐘的上升沿對TVP5150輸出的數(shù)據(jù)進行采樣,若連續(xù)出現(xiàn)“FF”、“00”、“00” 3個固定字節(jié),則表明出現(xiàn)了定時基準(zhǔn);如果第4 B出現(xiàn)“80”,表示一場數(shù)據(jù)的開始,而且為偶場,接著讀取1 440 B圖像數(shù)據(jù)。同理,若第4 B出現(xiàn)“C7”,表示奇數(shù)場數(shù)據(jù)的開始,接著同樣讀取1 440 B有效圖像數(shù)據(jù);否則,繼續(xù)等待定時基準(zhǔn)的出現(xiàn)。
3.2 DSP編碼邏輯
DSP對圖像數(shù)據(jù)的編碼流程如圖8所示,上電復(fù)位后,DSP程序從Flash起始處加載并啟動,通過二次引導(dǎo),最終將應(yīng)用程序全部搬移到DSP內(nèi)存中,然后跳轉(zhuǎn)到入口函數(shù)c_int00(),完成初始化配置,并等待FPGA的外部中斷觸發(fā)信號。FPGA采集到數(shù)據(jù)后,緩存到接口FIFO中,并以中斷的方式觸發(fā)DSP的DMA進程,DSP以DMA的方式將數(shù)據(jù)存儲到SDRAM中,若一幀圖像傳輸完畢,則觸發(fā)軟中斷,進入JPEG2000編碼子程序。編碼完成后,再次觸發(fā)DMA進程,將數(shù)據(jù)回傳給FPGA?!?.3 PCI傳輸接口邏輯
PCI接口主要用來下發(fā)上位機控制命令和系統(tǒng)參數(shù),上傳編碼后的圖像數(shù)據(jù)。采用PCI9054芯片來連接本地總線和PCI總線,PCI總線協(xié)議由PCI9054芯片內(nèi)部處理,只需對其進行配置,并完成硬件接口驅(qū)動程序即可,PCI9054工作在C模式,內(nèi)部采用了DMA數(shù)據(jù)傳輸方式[6]。
PCI接口內(nèi)部邏輯流程圖如圖9所示,先判斷總線啟動信號ADS,若該引腳電平由高變低,則啟動一次數(shù)據(jù)傳輸過程,然后判斷讀寫信號電平LWR,若LWR為1,表示PCI寫過程,否則為讀過程。PCI讀過程又分為讀狀態(tài)和讀數(shù)據(jù),通過地址總線LA來判斷,讀過程中,若LA=04H,則為讀寄存器狀態(tài);若LA=A0H,則為讀批量圖像數(shù)據(jù)。而寫過程中,若LA=01H,則為系統(tǒng)復(fù)位,立即執(zhí)行,不寫入寄存器;若LA=02H,則為命令下發(fā),需要將命令字寫入相應(yīng)寄存器;若LA=03H,則為命令刷新,立即執(zhí)行,不寫入寄存器。
為了使得數(shù)據(jù)不丟失,在PCI接口設(shè)計過程中調(diào)用FPGA的IP核添加了FIFO數(shù)據(jù)緩存器,位寬為32 bit,與PCI總線位寬相匹配,深度為4 KB。由于PCI數(shù)據(jù)總線是雙向傳輸,所以在FPGA內(nèi)部增添了數(shù)據(jù)方向控制模塊,保證了數(shù)據(jù)有序地下發(fā)和上傳。
4 結(jié)果分析
為了比較壓縮前后圖像的質(zhì)量,首先將未壓縮的圖片通過PCI接口傳輸給上位機并顯示,如圖10(a)所示,圖像大小為407 KB,格式為BMP。然后保持源圖片不變,將采集到的圖像數(shù)據(jù)傳輸給DSP編碼,編碼后傳輸給上位機,經(jīng)上位機解碼后得到的圖片如圖10(b)所示,其大小為59.5 KB,壓縮比約為10:1;圖10(c)大小為15.2 KB,壓縮比約為26:1。同時,圖像數(shù)據(jù)通過PCI卡傳輸給上位機時最高速率達到了38 MB/s。
通過對比可知,壓縮比越高,峰值信噪比越低,主觀視覺的質(zhì)量也會有所下降,局部細節(jié)有些模糊??傮w來說,本次設(shè)計的新型圖像壓縮編碼系統(tǒng)實現(xiàn)了預(yù)計的功能。
參考文獻
[1] 邸麗霞.基于FPGA的高速圖像數(shù)據(jù)采集存儲系統(tǒng)設(shè)計[J].電視技術(shù),2013,37(13):49-52.
[2] 李娟.基于FPGA的圖像預(yù)處理及顯示系統(tǒng)的設(shè)計[D].中國科學(xué)院研究生院,2011.
[3] 張曉娣,劉貴忠,曾召華,等.JPEG2000圖像壓縮編碼系統(tǒng)及其關(guān)鍵技術(shù)[J].電視技術(shù),2001(8):13-17.
[4] 鄭紅,劉振強,李振.嵌入式DSP應(yīng)用系統(tǒng)設(shè)計及實例剖析[M].北京:北京航空航天大學(xué)出版社,2012.
[5] 周如輝.實時視頻處理系統(tǒng)中乒乓緩存控制器的設(shè)計[J].電子元器件應(yīng)用,2006(4):66-68.
[6] 原學(xué)山.基于PCI總線的圖像采集卡的設(shè)計與實現(xiàn)[D].成都:西南交通大學(xué),2006.