Motion JPEG視頻壓縮IP核的設(shè)計(jì)與實(shí)現(xiàn)
引言
本文引用地址:http://www.biyoush.com/article/84771.htm隨著多媒體技術(shù)及通信技術(shù)的快速發(fā)展,在嵌入式平臺(tái)上實(shí)現(xiàn)連續(xù)圖像壓縮的需求已變得日益廣泛。常用的系統(tǒng)結(jié)構(gòu)是獨(dú)立處理器配和專用圖像壓縮芯片或者是只用一個(gè)高主頻的數(shù)字信號(hào)處理器完成主要功能。但隨著大規(guī)模集成電路技術(shù)的發(fā)展及市場對(duì)產(chǎn)品低成本的要求不斷提高,一種新的在嵌入式平臺(tái)上實(shí)現(xiàn)連續(xù)圖像壓縮的系統(tǒng)結(jié)構(gòu)正逐步成為上述兩種系統(tǒng)結(jié)構(gòu)的替代者。這種新的結(jié)構(gòu)就是Altera公司提出的基于Avalon總線的SOPC結(jié)構(gòu)。SOPC結(jié)構(gòu)可以把處理器,圖像壓縮IP核,通訊單元及控制單元集成到一塊FPGA芯片上。較之以往的結(jié)構(gòu),不但極大地節(jié)約了系統(tǒng)資源和成本,更是減少了系統(tǒng)的復(fù)雜度。尤其是可以用硬件電路實(shí)現(xiàn)軟件處理極為耗時(shí)的運(yùn)算功能,使得在低主頻,低功耗的嵌入式平臺(tái)上實(shí)現(xiàn)連續(xù)圖像實(shí)時(shí)壓縮變?yōu)榭赡堋_B續(xù)圖像壓縮IP核也成為整個(gè)SOPC系統(tǒng)的一個(gè)關(guān)鍵部件?,F(xiàn)有的MPEG系列,H26X系列IP核對(duì)FPGA的芯片資源及性能要求極高,難以滿足系統(tǒng)對(duì)低成本,低功耗的要求。所以設(shè)計(jì)一個(gè)適合低成本,低功耗的FPGA芯片的視頻壓縮IP核變得極為重要。這即要求壓縮算法的復(fù)雜度不能太高,又要求有適當(dāng)?shù)膲嚎s效果,Motion JPEG算法恰好滿足上述要求。
1.Motion JPEG壓縮算法簡介
Motion JPEG是一種基于靜態(tài)圖像JPEG壓縮標(biāo)準(zhǔn)的動(dòng)態(tài)圖像壓縮標(biāo)準(zhǔn),壓縮時(shí)將連續(xù)圖像的每一個(gè)幀視為一幅靜止圖像進(jìn)行壓縮,從而可以生成序列化運(yùn)動(dòng)圖像。壓縮時(shí)不對(duì)幀間的時(shí)間冗余進(jìn)行壓縮,雖然降低了壓縮比,但也同時(shí)降低了復(fù)雜度,易于硬件電路實(shí)現(xiàn)。Motion JPEG標(biāo)準(zhǔn)所根據(jù)的算法是基于離散余弦變換和熵編碼,關(guān)鍵技術(shù)有二維離散余弦變換、量化、差分編碼、霍夫曼編碼和游程編碼等。單幀的處理過程如下圖所示。
2.IP核的結(jié)構(gòu)設(shè)計(jì)
2.1二維離散余弦變換模塊
二維離散余弦變換是由一維離散余弦變換衍生而來的,所以可以用兩個(gè)級(jí)聯(lián)的一維離散余弦變換實(shí)現(xiàn)。實(shí)現(xiàn)時(shí)要注意第一級(jí)一維離散余弦變換模塊產(chǎn)生的結(jié)果不能直接作為第二級(jí)一維離散余弦變換模塊的輸入量,而是等到第一級(jí)一維離散余弦變換模塊產(chǎn)生的結(jié)果形成一個(gè)8×8的矩陣后,對(duì)這個(gè)8×8的矩陣做轉(zhuǎn)置處理,再把轉(zhuǎn)置后得到的矩陣按行掃描的順序輸出,這時(shí)輸出的數(shù)據(jù)才能作為第二級(jí)一維離散余弦變換模塊的輸入量。
二維離散余弦變換模塊處理的對(duì)象是8×8的像素矩陣,來自其前一級(jí)模塊預(yù)處理模塊。預(yù)處理模塊一個(gè)時(shí)鐘周期只能輸出一個(gè)數(shù)據(jù),為了滿足二維離散余弦變換模塊中第一級(jí)一維離散余弦變換模塊一次運(yùn)算需要8個(gè)輸入數(shù)據(jù)的要求,利用一個(gè)串行轉(zhuǎn)并行模塊,把每個(gè)時(shí)鐘周期內(nèi)預(yù)處理模塊輸出的一個(gè)數(shù)據(jù)緩存起來,當(dāng)數(shù)據(jù)湊滿8個(gè)后再一次傳給二維離散余弦變換模塊。
二維離散余弦變換模塊輸出的數(shù)據(jù)是8×8的二維離散余弦系數(shù)矩陣,傳遞給其后一級(jí)模塊量化模塊。量化模塊一個(gè)時(shí)鐘周期只能接收一個(gè)數(shù)據(jù),為了滿足二維離散余弦變換模塊中第二級(jí)一維離散余弦變換模塊一次運(yùn)算產(chǎn)生8個(gè)輸出數(shù)據(jù)的條件,使用一個(gè)并行轉(zhuǎn)串行模塊,把每隔8個(gè)時(shí)鐘周期二維離散余弦變換模塊輸出一次的8個(gè)數(shù)據(jù)緩存起來,在等待下一次二維離散余弦變換模塊輸出數(shù)據(jù)的8個(gè)時(shí)鐘周期的等待隔內(nèi),把數(shù)據(jù)串行傳給量化模塊。
2.1.1第一級(jí)一維離散余弦變換模塊
根據(jù)一維離散余弦變換的定義和cos函數(shù)的互補(bǔ)對(duì)稱性,參考Weiping Li提出的Skew Circular Convolution的概念,能夠使一維離散余弦變換達(dá)到非常精簡的硬件架構(gòu)。但是考慮到處理的對(duì)像是連續(xù)幀這個(gè)條件,速度就成為主要因素,因此沒有完全依照其提出的方法,而是適當(dāng)?shù)脑黾与娐访娣e來夠造新的11階全流水線結(jié)構(gòu),從而獲得最大的運(yùn)算速度。處理過程可劃分為4個(gè)階段。
階段1:消耗3個(gè)時(shí)鐘周期,完成8位有符號(hào)數(shù)的加減運(yùn)算,結(jié)果為9位有符號(hào)數(shù)。
階段2:消耗2個(gè)時(shí)鐘周期,完成9位有符號(hào)數(shù)的固定系數(shù)乘法,因?yàn)槌说南禂?shù)是小數(shù),所以要把小數(shù)轉(zhuǎn)換為二進(jìn)制表示。
階段2中的乘法操作是用EP2C35芯片中的28個(gè)嵌入式乘法單元實(shí)現(xiàn)的。EP2C35芯片中共有70個(gè)嵌入式乘法單元,一個(gè)嵌入式乘法單元可以實(shí)現(xiàn)兩個(gè) 9位數(shù)的乘法,兩個(gè)嵌入式乘法單元并聯(lián)可以實(shí)現(xiàn)兩個(gè)大于9位小于18位數(shù)的乘法。根據(jù)這一特性,假如在階段1中實(shí)現(xiàn)乘法會(huì)因輸入量是8位而浪費(fèi)了一個(gè)嵌入式乘法單元的全部能力,假如在階段3或階段4中實(shí)現(xiàn)乘法又會(huì)因輸入量或系數(shù)中每個(gè)元素的長度大于9位而耗用兩個(gè)嵌入式乘法單元去完成一個(gè)乘法操作,又很不經(jīng)濟(jì)。所以在階段2中實(shí)現(xiàn)乘法操作是最為合理的,階段2的輸入量為9位,恰好耗用一個(gè)個(gè)嵌入式乘法單元。這也同時(shí)要求乘法中的固定系數(shù)的位數(shù)為9位,位數(shù)的過多或過少都不能充分利用芯片上的硬件資源。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論