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