新聞中心

EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > Motion JPEG視頻壓縮IP核的設(shè)計(jì)與實(shí)現(xiàn)

Motion JPEG視頻壓縮IP核的設(shè)計(jì)與實(shí)現(xiàn)

作者:東北大學(xué) 李大舟 吳建華 時(shí)間:2008-06-25 來(lái)源:電子技術(shù)應(yīng)用 收藏

  2.4熵編碼模塊

本文引用地址:http://www.butianyuan.cn/article/84771.htm

  熵編碼與前面介紹的量化都是數(shù)據(jù)壓縮的手段,但二者有所不同,熵編碼利用信號(hào)的統(tǒng)計(jì)特征來(lái)降低位率,理論上不會(huì)丟失信息,量化會(huì)丟失信息。實(shí)現(xiàn)熵編碼有多種方式,本文根據(jù)ISO/IEC10918協(xié)議,使用了游程編碼和霍夫曼編碼兩種方式。游程編碼的原理是把沿一定方向排列的等大小量化值的離散余弦變換系數(shù)作為連續(xù)的整體,用特定碼字替代這種連續(xù)的整體就會(huì)達(dá)到數(shù)據(jù)量減少的效果?;舴蚵幋a是一種變長(zhǎng)編碼,將多次出現(xiàn)的代碼用較短的碼字代表,很少出現(xiàn)的代碼用較長(zhǎng)的碼字代表。產(chǎn)生哈夫曼編碼要求掃描兩遍原始數(shù)據(jù),第一遍掃描是為了在原始數(shù)據(jù)中精確地統(tǒng)計(jì)每個(gè)值出現(xiàn)的頻率,第二遍利用構(gòu)造的哈夫曼樹得到編碼,兩次掃描耗時(shí)巨大,因此數(shù)據(jù)壓縮難以滿足實(shí)時(shí)性要求。ISO/IEC10918協(xié)議中在對(duì)大量8位精度圖像的平均統(tǒng)計(jì)基礎(chǔ)上,給出了4個(gè)合適大多數(shù)應(yīng)用的個(gè)哈夫曼碼表。在實(shí)現(xiàn)硬件電路時(shí)把哈夫曼碼表存儲(chǔ)在片上ROM中,使用時(shí)直接查找。因?yàn)殡x散余弦變換中直流系數(shù)和交流系數(shù)分別使用不同的碼表,且直流系數(shù)不需要進(jìn)行游程編碼,所以直流系數(shù)和交流系數(shù)使用不同的模塊來(lái)處理。

  2.4.1直流系數(shù)處理模塊

  直流系數(shù)是8×8矩陣內(nèi)64個(gè)像素均值的度量,是包含了整個(gè)圖像能量的重要部分。利用相鄰的8×8矩陣的直流系數(shù)具有很強(qiáng)的相關(guān)性,對(duì)直流系數(shù)使用差分壓縮編碼。前一個(gè)8×8矩陣的直流系數(shù)作為當(dāng)前矩陣的直流系數(shù)的預(yù)測(cè)值,求出現(xiàn)實(shí)值和預(yù)測(cè)值之間的差值后,再對(duì)差值做霍夫曼編碼。在硬件實(shí)現(xiàn)時(shí),直流系數(shù)只有一個(gè)值,所以不需要做游程編碼,對(duì)其處理的第一步就是求得其與預(yù)測(cè)值之間的差值。根據(jù)差值的大小和正負(fù)查找存儲(chǔ)在片上ROM的標(biāo)準(zhǔn)霍夫曼碼表,得出前綴代碼和前綴代碼長(zhǎng)度,同時(shí)根據(jù)ISO/IEC10918協(xié)議中提出的尾碼產(chǎn)生方式得到對(duì)應(yīng)的尾碼代碼及尾碼代碼長(zhǎng)度。上述處理完成之后再經(jīng)過(guò)合并前綴代碼與尾碼代碼為霍夫曼代碼,則直流系數(shù)的熵編碼完成,之后等待被變長(zhǎng)編碼模塊封裝。具體的實(shí)現(xiàn)電路由4階流水線組成,直流系數(shù)的熵編碼處理過(guò)程耗時(shí)4個(gè)時(shí)鐘周期。

  2.4.2交流系數(shù)處理模塊

  交流系數(shù)首先要現(xiàn)經(jīng)過(guò)游程編碼處理。在游程編碼中非零交流系數(shù)前的零交流系數(shù)的個(gè)數(shù)是游程長(zhǎng)度,前綴代碼及尾碼代碼的含義與直流系數(shù)中的一致,只不過(guò)在交流系數(shù)處理中游程長(zhǎng)度和前綴代碼重新組合為一個(gè)新的查找索引來(lái)查找新的前綴代碼。ISO/IEC10918協(xié)議中給出的交流系數(shù)標(biāo)準(zhǔn)霍夫曼碼表里有兩個(gè)特殊的代碼。一個(gè)特殊代碼ZRL,ZRL代表游程編碼中游程長(zhǎng)度大于16,如果游程長(zhǎng)度大于32,48,56,分別用1個(gè)ZRL,2個(gè)ZRL,3個(gè)ZRL表示,盈余的游程長(zhǎng)度加入下一個(gè)游程長(zhǎng)度計(jì)算中。ZRL代碼只有前綴代碼,沒(méi)有尾碼代碼。為了方便實(shí)現(xiàn),直接把ZRL的尾碼代碼長(zhǎng)度設(shè)為零,起到屏蔽尾碼的作用。另一個(gè)特殊代碼EOB,EOB代表最后一個(gè)零行程中只有零元素直接代表當(dāng)前矩陣的游程編碼已經(jīng)掃描結(jié)束,若當(dāng)前矩陣的最后一個(gè)交流系數(shù)是非零數(shù)的則以正常結(jié)束一個(gè)游程長(zhǎng)度的計(jì)數(shù)作為當(dāng)前矩陣游程編碼的結(jié)束。同ZRL類似,EOB也沒(méi)有尾碼代碼,所以使用同樣的處理手段。具體的實(shí)現(xiàn)電路由4階流水線組成,交流系數(shù)的熵編碼處理耗時(shí)4個(gè)時(shí)鐘周期。

  2.4.3交織模塊和冗余ZRL消除模塊

  交織模塊的作用是把前綴代碼和尾碼代碼合并為一個(gè)霍夫曼代碼,合并后的代碼易于進(jìn)行下一階段的變長(zhǎng)編碼操作,變長(zhǎng)編碼操作過(guò)程需要的移位位數(shù)由前綴代碼長(zhǎng)度加上尾碼代碼長(zhǎng)度做和得到,這個(gè)求和過(guò)程也在交織模塊中實(shí)現(xiàn)。該模塊具體實(shí)現(xiàn)電路由2階流水線組成。

  冗余ZRL消除模塊不是ISO/IEC10918協(xié)議的一部分,但它源于標(biāo)準(zhǔn)協(xié)議里對(duì)EOB的定義。從EOB之前直到最近一個(gè)的非零交流系數(shù)出現(xiàn),中間產(chǎn)生的ZRL都是可以消除的。基于全流水線結(jié)構(gòu)的電路設(shè)計(jì)一般很難滿足這一要求,原因是全流水線結(jié)構(gòu)的電路每級(jí)產(chǎn)生的結(jié)果都會(huì)直接傳遞給下一級(jí),不對(duì)結(jié)果作保留。唯一的方法就是構(gòu)造一個(gè)同步FIFO來(lái)緩存前幾個(gè)時(shí)鐘周期內(nèi)產(chǎn)生的結(jié)果,根據(jù)之前輸入的數(shù)據(jù)量和當(dāng)前輸入的數(shù)據(jù)量是否滿足ZRL的冗余條件而選擇性的對(duì)FIFO輸出的結(jié)果做屏蔽。屏蔽的手段就是把FIFO輸出數(shù)據(jù)的對(duì)應(yīng)的霍夫曼代碼長(zhǎng)度清零。這樣在下一步的變長(zhǎng)編碼中會(huì)因ZRL的霍夫曼代碼長(zhǎng)度為零而消除冗余的ZRL。

  2.4.4變長(zhǎng)編碼模塊

  變長(zhǎng)編碼的作用是把交織編碼輸出的含有不等長(zhǎng)有效位的霍夫曼碼字,提取其中的有效位并將其組合為一個(gè)連續(xù)的32位碼流。

  編碼原理是把交織編碼輸出的含有不等長(zhǎng)有效位的霍夫曼碼字向右位,移動(dòng)的位數(shù)是前一個(gè)霍夫曼碼字的代碼長(zhǎng)度。移位完成后的當(dāng)前霍夫曼碼字與提供移動(dòng)的位數(shù)的前一個(gè)霍夫曼碼字做或運(yùn)算,同時(shí)累加兩個(gè)霍夫曼碼字的代碼長(zhǎng)度。 累加和大于24時(shí)表明變長(zhǎng)編碼的第一步完成。第二步是檢查前一步產(chǎn)生的24位封裝結(jié)果中是否有FF字節(jié),若有則直接在FF字節(jié)后面添加00字節(jié)。并不是所有的24位封裝結(jié)果都需要在FF字節(jié)后面添加00字節(jié),所以在第二步處理中還有移位處理。移位處理采用的方法與第一步移位處理的方法相同的,把24位封裝結(jié)果和添加00字節(jié)后的32位封裝結(jié)果,統(tǒng)一封裝為32位結(jié)果輸出。這個(gè)32位數(shù)據(jù)也是整個(gè)輸出的最終壓縮結(jié)果。

  3.基于SOPC結(jié)構(gòu)的實(shí)際驗(yàn)證系統(tǒng)

  經(jīng)驗(yàn)證, 可以實(shí)時(shí)處理由NTSC制式攝像頭采集經(jīng)ADV7181處理后輸出的CCIR656標(biāo)準(zhǔn)數(shù)據(jù),完成對(duì)連續(xù)視頻幀的實(shí)時(shí)壓縮。

  驗(yàn)證系統(tǒng)結(jié)構(gòu)如圖15所示,lineswitcher模塊把CCIR656標(biāo)準(zhǔn)數(shù)據(jù)的亮度分量以跳址寫入的方式通過(guò)Multi-Port SDRAM Controller模塊寫入到SDRAM中,亮度分量數(shù)據(jù)從隔行掃描變?yōu)橹鹦写尜A。Multi-Port SDRAM Controller模塊是一個(gè)工業(yè)級(jí)的SDRAM控制器,可以將一個(gè)SDRAM數(shù)據(jù)端口仿真成四個(gè)虛擬的數(shù)據(jù)端口(兩個(gè)寫端口+兩個(gè)讀端口)。 SDRAM在存儲(chǔ)空間使用上劃分為4個(gè)區(qū)塊,在lineswitcher模塊寫入一個(gè)區(qū)塊的同時(shí), 讀出前一個(gè)已寫入亮度分量的區(qū)塊。 IP核輸出端是一個(gè)Avalon總線上的具有流控制屬性從端口。DMA控制器與Motion JPEG IP核以流控制的方式進(jìn)行數(shù)據(jù)傳輸,并把數(shù)據(jù)轉(zhuǎn)移到SRAM中。整個(gè)過(guò)程無(wú)需NIOSII處理器干預(yù),只須等DMA控制器寫滿SRAM后以中斷的方式通知 NIOSII處理器以使其掛起Motion JPEG IP核,防止存入SRAM中數(shù)據(jù)被覆蓋。最后使用DE2_Control_Panel傳輸SRAM中壓縮后的數(shù)據(jù)到PC中,便可看到采集后圖像經(jīng)壓縮后的效果。NIOSII處理器的作用是初始化DMA控制器和通過(guò)I2C總線設(shè)置ADV7181。

  考慮到芯片上的資源,驗(yàn)證時(shí)只對(duì)ADV7181輸出的亮度分量進(jìn)行壓縮,舍棄了色差分量。雖然沒(méi)有了色差分量,但是仍然可以得到清晰直觀的驗(yàn)證效果。

  4.結(jié)論

  本設(shè)計(jì)主要有以下幾個(gè)特點(diǎn)。

  1:以全流水線結(jié)構(gòu)來(lái)實(shí)現(xiàn)Motion JPEGIP核。

  雖然流水線技術(shù)已經(jīng)是一種眾所周知的技術(shù),但是現(xiàn)有的Motion JPEGIP核仍未實(shí)現(xiàn)全部流水線結(jié)構(gòu),一般多以狀態(tài)控制模塊為核心來(lái)協(xié)調(diào)各個(gè)子模塊。這就導(dǎo)致系統(tǒng)中最慢的子模塊在處理數(shù)據(jù)時(shí),其它子模塊只能等待,對(duì)數(shù)據(jù)塊訪問(wèn)的效率低下。同時(shí)由于數(shù)據(jù)塊的被多個(gè)子模塊所使用而又需要復(fù)雜的仲裁機(jī)制。本文提出的全流水線結(jié)構(gòu)把整個(gè)處理過(guò)程分解為198個(gè)小操作,每個(gè)時(shí)鐘周期內(nèi)由一階流水線完成一個(gè)小操作。當(dāng)整個(gè)流水線鋪滿之后,整個(gè)數(shù)據(jù)處理過(guò)程中沒(méi)有等待延遲,沒(méi)有仲裁協(xié)議,大幅提高了系統(tǒng)的運(yùn)行效率并降低了系統(tǒng)的復(fù)雜度。

  2:并行矩陣轉(zhuǎn)置結(jié)構(gòu)的提出及基于并行矩陣轉(zhuǎn)置的并行二維離散余弦變換結(jié)構(gòu)。

  并行矩陣轉(zhuǎn)置結(jié)構(gòu)較之以往的串行矩陣轉(zhuǎn)置在處理8×8矩陣上至少節(jié)省了100個(gè)時(shí)鐘周期。二維離散余弦變換在采用了并行矩陣轉(zhuǎn)置之后,也實(shí)現(xiàn)了全部并行處理,43個(gè)時(shí)鐘周期完成了一次二維離散余弦變換,效率提高顯著。

  3:因采用全流水線結(jié)構(gòu)而取得的較高的運(yùn)行頻率。

  本文設(shè)計(jì)的Motion JPEGIP核在Quartus II 6.0中進(jìn)行靜態(tài)時(shí)序分析,得到的最高運(yùn)行頻率是150Mhz。

  現(xiàn)有IP核與本文設(shè)計(jì)的IP核的運(yùn)行頻率比較

  實(shí)際驗(yàn)證時(shí)不僅對(duì)處理CCIR656標(biāo)準(zhǔn)數(shù)據(jù)的能力給予驗(yàn)證,同時(shí)也為100Mhz的運(yùn)行頻率進(jìn)行了驗(yàn)證,結(jié)果證明IP核可以在100Mhz的運(yùn)行頻率下正常工作。驗(yàn)證方法是把7幀952×568的亮度分量文件存入SDRAM中作為原始數(shù)據(jù),整個(gè)驗(yàn)證系統(tǒng)以100Mhz頻率運(yùn)行,經(jīng)過(guò)0.05秒完成7幀的壓縮,幀率可達(dá)147 frame/s。壓縮后圖像的大小為原來(lái)亮度圖像的十分之一。

  4:可以在低成本,低功耗,高密度的CycloneII系列FPGA芯片上運(yùn)行,通過(guò)Avalon總線與NIOSII處理器構(gòu)成SOPC系統(tǒng),為將來(lái)實(shí)際產(chǎn)品的設(shè)計(jì)搭建了一個(gè)良好的平臺(tái)。

  參考文獻(xiàn)

【1】Weiping Li, A New Algorithm to Compute the DCT and its Inverse, IEEE TRANSATIONS ON SIGNAL, PROCESSING, VOL. 39. NO. 6, JUNE 1991
【2】Shaw-MinLei, Ming-Ti ngSun, An Entropy Coding System for Digital HDTV Applications, IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY, VOL. 1, NO.1, MARCH 1991
【3】ISO/IEC International Standard 10918-1. June 1992
【4】Altera Corporation. Quartus II Version 7.2 Handbook. October 2007
【5】Altera Corporation. Nios II Processor Reference Handbook. October 2007
【6】Altera Corporation. Nios II Software Developer's Handbook. October 2007
【7】Altera Corporation. Avalon Streaming InteRFace Specification. September 2007
【8】張志剛. FPGA與SOPC設(shè)計(jì)教程-DE2實(shí)踐. 西安: 西安電子科技大學(xué)出版社, 2007年4月.
【9】吳繼華,王誠(chéng). AlteraFPGA/CPLD設(shè)計(jì)(高級(jí)篇). 北京: 人民郵電出版社,2005年7月
【10】簡(jiǎn)弘倫.精通VerilogHDL IC設(shè)計(jì)核心技術(shù)實(shí)例詳解.北京:電子工業(yè)出版社, 2005年10月.

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁(yè) 1 2 3 4 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉