文獻(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://forexkbc.com/tags/圖像壓縮" title="圖像壓縮" target="_blank">圖像壓縮系統(tǒng),。該系統(tǒng)不直接存儲(chǔ)圖像數(shù)據(jù),而是由FPGA采集數(shù)字化后的視頻圖像數(shù)據(jù),,通過DSP將采集的數(shù)據(jù)進(jìn)行編碼壓縮,,然后再將編碼壓縮后的數(shù)據(jù)通過PCI高速傳輸給計(jì)算機(jī),最后再通過計(jì)算機(jī)對(duì)圖像進(jìn)行解壓縮并顯示,。
1 總體結(jié)構(gòu)設(shè)計(jì)
本設(shè)計(jì)結(jié)合FPGA處理速度快,、DSP運(yùn)算能力強(qiáng)等優(yōu)點(diǎn),提出了如下方案:通過FPGA模擬I2C總線時(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ù)通過PCI總線傳輸給控制計(jì)算機(jī),然后通過計(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)包括行開始標(biāo)志SAV(Start of Active Video),長度為4 B,;行結(jié)束標(biāo)志EAV(End of Active Video),,長度為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í),需要將它們分開,,若需要顯示,,可以將YUV格式轉(zhuǎn)換為RGB格式。
2.2 FPGA與DSP接口設(shè)計(jì)
FPGA完成圖像數(shù)據(jù)的接收后,,經(jīng)過格式變換及濾波將圖像數(shù)據(jù)傳輸給DSP進(jìn)行壓縮,。壓縮打包完成后,又需要將數(shù)據(jù)回傳給FPGA,,通過FPGA控制PCI接口時(shí)序,,將數(shù)據(jù)最終上傳給計(jì)算機(jī)。為了滿足圖像數(shù)據(jù)高速,、雙向,、實(shí)時(shí)的傳輸,在DSP與FPGA之間設(shè)計(jì)了兩個(gè)高速的FIFO緩沖,。
本系統(tǒng)中選用Spartan3系列的XC3S1400AN作為核心處理器[1],,其內(nèi)部儲(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)和寫時(shí)鐘(WR_CLK),數(shù)據(jù)達(dá)到半滿,半滿標(biāo)志位置1(half_flag=′1′),;達(dá)到滿,,滿標(biāo)志置1(full_flag=′1′)。
FPGA和DSP的接口如圖4所示,,視頻數(shù)據(jù)采集,、處理完成之后,F(xiàn)PGA通過FIFO的滿標(biāo)志查看FIFO是否已滿,,如果未滿,則將32 bit圖像數(shù)據(jù)在寫時(shí)鐘的邏輯控制下寫入到FIFO,;將半滿信號(hào)連接到DSP的中斷引腳,,半滿信號(hào)置高,會(huì)觸發(fā)DSP的DMA進(jìn)程,,將FIFO中的圖像數(shù)據(jù)讀走[2],。同理,DSP通過EMIF外設(shè)接口將FPGA作為其外部存儲(chǔ)空間,,壓縮后的數(shù)據(jù)通過DMA寫到FPGA內(nèi)部的另一個(gè)FIFO,,半滿信號(hào)觸發(fā)FPGA內(nèi)部讀數(shù)進(jìn)程,將數(shù)據(jù)讀走,,通過PCI總線上傳到控制計(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ì)算速度超過每秒64億次,適合大數(shù)據(jù)吞吐量高速運(yùn)算,,比如在圖像處理領(lǐng)域,。同時(shí),DM642擁有豐富的外設(shè)接口,,包括可實(shí)現(xiàn)與SDRAM,、Flash等外部存儲(chǔ)芯片無縫數(shù)據(jù)連接的EMIF接口等,非常適合音視頻解碼,、數(shù)字監(jiān)控以及數(shù)字視頻服務(wù)等應(yīng)用[4],。
對(duì)圖像數(shù)據(jù)處理流程如圖5所示,源圖像先經(jīng)過正向預(yù)處理后進(jìn)行離散小波變換(DWT),,然后對(duì)變換的小波系數(shù)進(jìn)行量化處理和熵編碼,,最后將熵編碼后獲得的圖像數(shù)據(jù)打包成壓縮數(shù)據(jù)包輸出。解碼則按照壓縮碼流中提供的各個(gè)參數(shù)將編碼過程進(jìn)行逆向操作,最終將源圖像重構(gòu)還原出來,。
2.4 乒乓緩存設(shè)計(jì)
圖像傳感器單位時(shí)間內(nèi)產(chǎn)生的數(shù)據(jù)是連續(xù)的,,且數(shù)據(jù)量比較大,而DSP的編碼速率是變化的,。為了防止在編碼過程中造成數(shù)據(jù)的丟失,,需要在采集與編碼電路之間設(shè)計(jì)一組幀緩存電路。
常用的緩存電路主要有FIFO,、雙端口RAM和乒乓緩存結(jié)構(gòu)[5],。由于FIFO的存儲(chǔ)容量太小,不適合圖像視頻數(shù)據(jù)的大吞吐量緩存,。雙端口RAM配備必須進(jìn)行訪問仲裁控制,,設(shè)計(jì)較復(fù)雜。乒乓緩存結(jié)構(gòu)克服了它們所有的缺點(diǎn),,輸入的視頻數(shù)據(jù)流以幀為單位交替地寫入兩個(gè)不同的SDRAM存儲(chǔ)單元,,在寫入其中一塊SDRAM的同時(shí),將另一塊SDRAM中的數(shù)據(jù)讀出,,并送到數(shù)據(jù)編碼單元進(jìn)行運(yùn)算,。這樣數(shù)據(jù)的輸入/輸出都是不間斷的,非常適合流水線式操作,,完成數(shù)據(jù)的無縫緩存和處理,。
本設(shè)計(jì)中乒乓緩存結(jié)構(gòu)如圖6所示,DSP接收到FPGA傳輸?shù)膱D像數(shù)據(jù)后,,以幀為單位交替寫入兩塊SDRAM存儲(chǔ)器,。與此同時(shí),數(shù)據(jù)被交替讀出,,輸出給數(shù)據(jù)壓縮單元進(jìn)行編碼,。數(shù)據(jù)流被嚴(yán)格有效地控制,不會(huì)出現(xiàn)丟數(shù)據(jù)或者誤碼,,而且效率很高,。選用MT48LC2M-
32B2作為外部高度SDRAM緩存器,讀寫速率可以達(dá)到6 ns,,數(shù)據(jù)總線寬度為32 bit,,容量為64 Mbit,而高頻數(shù)字?jǐn)z像頭輸入的一幀圖像的大小為600×480×3=864 Kbit,,完全可以滿足要求,。
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ù)提取出來。
提取有效數(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ù)的開始,,而且為偶場(chǎng),接著讀取1 440 B圖像數(shù)據(jù),。同理,,若第4 B出現(xiàn)“C7”,表示奇數(shù)場(chǎng)數(shù)據(jù)的開始,,接著同樣讀取1 440 B有效圖像數(shù)據(jù);否則,,繼續(xù)等待定時(shí)基準(zhǔn)的出現(xiàn),。
3.2 DSP編碼邏輯
DSP對(duì)圖像數(shù)據(jù)的編碼流程如圖8所示,上電復(fù)位后,,DSP程序從Flash起始處加載并啟動(dòng),,通過二次引導(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接口主要用來下發(fā)上位機(jī)控制命令和系統(tǒng)參數(shù),,上傳編碼后的圖像數(shù)據(jù),。采用PCI9054芯片來連接本地總線和PCI總線,,PCI總線協(xié)議由PCI9054芯片內(nèi)部處理,只需對(duì)其進(jìn)行配置,,并完成硬件接口驅(qū)動(dòng)程序即可,,PCI9054工作在C模式,內(nèi)部采用了DMA數(shù)據(jù)傳輸方式[6],。
PCI接口內(nèi)部邏輯流程圖如圖9所示,,先判斷總線啟動(dòng)信號(hào)ADS,若該引腳電平由高變低,,則啟動(dòng)一次數(shù)據(jù)傳輸過程,,然后判斷讀寫信號(hào)電平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è)計(jì)過程中調(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接口傳輸給上位機(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ù)通過PCI卡傳輸給上位機(jī)時(shí)最高速率達(dá)到了38 MB/s,。
通過對(duì)比可知,壓縮比越高,,峰值信噪比越低,,主觀視覺的質(zhì)量也會(huì)有所下降,局部細(xì)節(jié)有些模糊,。總體來說,,本次設(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].中國科學(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總線的圖像采集卡的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:西南交通大學(xué),,2006.