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