Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)_第1頁
Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)_第2頁
Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)_第3頁
Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)_第4頁
Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Motion JPEG視頻壓縮IP核的設(shè)計與實現(xiàn)    引言    隨著多媒體技術(shù)及通信技術(shù)的快速發(fā)展,在嵌入式平臺上實現(xiàn)連續(xù)圖像壓縮的需求已變得日益廣泛。常用的系統(tǒng)結(jié)構(gòu)是獨立處理器配和專用圖像壓縮芯片或者是只用一個高主頻的數(shù)字信號處理器完成主要功能。但隨著大規(guī)模集成電路技術(shù)的發(fā)展及市場對產(chǎn)品低成本的要求不斷提高,一種新的在嵌入式平臺上實現(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核,通訊單元及控制

2、單元集成到一塊FPGA芯片上。較之以往的結(jié)構(gòu),不但極大地節(jié)約了系統(tǒng)資源和成本,更是減少了系統(tǒng)的復(fù)雜度。尤其是可以用硬件電路實現(xiàn)軟件處理極為耗時的運算功能,使得在低主頻,低功耗的嵌入式平臺上實現(xiàn)連續(xù)圖像實時壓縮變?yōu)榭赡?。連續(xù)圖像壓縮IP核也成為整個SOPC系統(tǒng)的一個關(guān)鍵部件。現(xiàn)有的MPEG系列,H26X系列IP核對FPGA的芯片資源及性能要求極高,難以滿足系統(tǒng)對低成本,低功耗的要求。所以設(shè)計一個適合低成本,低功耗的FPGA芯片的視頻壓縮IP核變得極為重要。這即要求壓縮算法的復(fù)雜度不能太高,又要求有適當(dāng)?shù)膲嚎s效果,Motion JPEG算法恰好滿足上述要求。1.Motion JPEG壓縮算法簡介&

3、#160;   Motion JPEG是一種基于靜態(tài)圖像JPEG壓縮標(biāo)準(zhǔn)的動態(tài)圖像壓縮標(biāo)準(zhǔn),壓縮時將連續(xù)圖像的每一個幀視為一幅靜止圖像進(jìn)行壓縮,從而可以生成序列化運動圖像。壓縮時不對幀間的時間冗余進(jìn)行壓縮,雖然降低了壓縮比,但也同時降低了復(fù)雜度,易于硬件電路實現(xiàn)。Motion JPEG標(biāo)準(zhǔn)所根據(jù)的算法是基于離散余弦變換和熵編碼,關(guān)鍵技術(shù)有二維離散余弦變換、量化、差分編碼、霍夫曼編碼和游程編碼等。單幀的處理過程如下圖所示。 2.IP核的結(jié)構(gòu)設(shè)計21二維離散余弦變換模塊    二維離散余弦變換是由一維離散余弦變換衍生而來的,所以可以用兩個

4、級聯(lián)的一維離散余弦變換實現(xiàn)。實現(xiàn)時要注意第一級一維離散余弦變換模塊產(chǎn)生的結(jié)果不能直接作為第二級一維離散余弦變換模塊的輸入量,而是等到第一級一維離散余弦變換模塊產(chǎn)生的結(jié)果形成一個8×8的矩陣后,對這個8×8的矩陣做轉(zhuǎn)置處理,再把轉(zhuǎn)置后得到的矩陣按行掃描的順序輸出,這時輸出的數(shù)據(jù)才能作為第二級一維離散余弦變換模塊的輸入量。    二維離散余弦變換模塊處理的對象是8×8的像素矩陣,來自其前一級模塊預(yù)處理模塊。預(yù)處理模塊一個時鐘周期只能輸出一個數(shù)據(jù),為了滿足二維離散余弦變換模塊中第一級一維離散余弦變換模塊一次運算需要8個輸入數(shù)據(jù)的要求,利用一

5、個串行轉(zhuǎn)并行模塊,把每個時鐘周期內(nèi)預(yù)處理模塊輸出的一個數(shù)據(jù)緩存起來,當(dāng)數(shù)據(jù)湊滿8個后再一次傳給二維離散余弦變換模塊。二維離散余弦變換模塊輸出的數(shù)據(jù)是8×8的二維離散余弦系數(shù)矩陣,傳遞給其后一級模塊量化模塊。量化模塊一個時鐘周期只能接收一個數(shù)據(jù),為了滿足二維離散余弦變換模塊中第二級一維離散余弦變換模塊一次運算產(chǎn)生8個輸出數(shù)據(jù)的條件,使用一個并行轉(zhuǎn)串行模塊,把每隔8個時鐘周期二維離散余弦變換模塊輸出一次的8個數(shù)據(jù)緩存起來,在等待下一次二維離散余弦變換模塊輸出數(shù)據(jù)的8個時鐘周期的等待隔內(nèi),把數(shù)據(jù)串行傳給量化模塊。211第一級一維離散余弦變換模塊    根據(jù)一維

6、離散余弦變換的定義和cos函數(shù)的互補對稱性,參考Weiping Li提出的Skew Circular Convolution的概念,能夠使一維離散余弦變換達(dá)到非常精簡的硬件架構(gòu)。但是考慮到處理的對像是連續(xù)幀這個條件,速度就成為主要因素,因此沒有完全依照其提出的方法,而是適當(dāng)?shù)脑黾与娐访娣e來夠造新的11階全流水線結(jié)構(gòu),從而獲得最大的運算速度。處理過程可劃分為4個階段。   階段1:消耗3個時鐘周期,完成8位有符號數(shù)的加減運算,結(jié)果為9位有符號數(shù)。   階段2:消耗2個時鐘周期,完成9位有符號數(shù)的固定系數(shù)乘法,因為乘的系數(shù)是小數(shù),所以要把小數(shù)轉(zhuǎn)換為二進(jìn)制表示

7、。   階段2中的乘法操作是用EP2C35芯片中的28個嵌入式乘法單元實現(xiàn)的。EP2C35芯片中共有70個嵌入式乘法單元,一個嵌入式乘法單元可以實現(xiàn)兩個9位數(shù)的乘法,兩個嵌入式乘法單元并聯(lián)可以實現(xiàn)兩個大于9位小于18位數(shù)的乘法。根據(jù)這一特性,假如在階段1中實現(xiàn)乘法會因輸入量是8位而浪費了一個嵌入式乘法單元的全部能力,假如在階段3或階段4中實現(xiàn)乘法又會因輸入量或系數(shù)中每個元素的長度大于9位而耗用兩個嵌入式乘法單元去完成一個乘法操作,又很不經(jīng)濟(jì)。所以在階段2中實現(xiàn)乘法操作是最為合理的,階段2的輸入量為9位,恰好耗用一個個嵌入式乘法單元。這也同時要求乘法中的固定系數(shù)的位數(shù)為9位,

8、位數(shù)的過多或過少都不能充分利用芯片上的硬件資源。    階段3:消耗3個時鐘周期完成9位有符號數(shù)的加減運算,結(jié)果為9位有符號數(shù)。一般的9位有符號數(shù)的加減的結(jié)果應(yīng)該用10位有符號數(shù)來表示,因為進(jìn)位操作或借位操作導(dǎo)致結(jié)果的位數(shù)從9位增長到10位。但是階段3的輸入序列是由9位有符號數(shù)乘以固定系數(shù)得到的,且固定系數(shù)的值都小于0.5,所以序列之間的加減操作不會引起進(jìn)位操作或借位操作,9位有符號數(shù)足夠表示加減操作的結(jié)果序列。    階段4:消耗3個時鐘周期完成9位有符號數(shù)的加減運算,結(jié)果為10位有符號數(shù),也是第一級一維離散余弦變換的最終結(jié)果。21

9、2并行矩陣轉(zhuǎn)置模塊    常用的8×8矩陣轉(zhuǎn)置的方法是,先把64個矩陣元素按行掃描的順序一個個串行輸入到一個RAM(64個存儲空間)中,然后按轉(zhuǎn)置后的矩陣的行掃描順序把RAM中64個矩陣元素逐次輸出。這種方法最少需要128時鐘周期才能完成一個8×8矩陣的轉(zhuǎn)置??煞Q其為串行矩陣轉(zhuǎn)置。串行矩陣轉(zhuǎn)置一次接收一個輸入數(shù)據(jù)與一維離散余弦變換一次產(chǎn)生8個輸入數(shù)據(jù)在傳輸速率上不匹配,第一級一維離散余弦變換模塊需要在串行矩陣轉(zhuǎn)置工作期間等待,當(dāng)串行矩陣轉(zhuǎn)置完成后再產(chǎn)生新的一維離散余弦變換系數(shù)并傳遞給串行矩陣轉(zhuǎn)置模塊。這也是二維離散余弦變換難以設(shè)計為全并行的原因

10、。    本文提出了一種新的矩陣轉(zhuǎn)置方法,稱為其并行矩陣轉(zhuǎn)置。用8個RAM(每個RAM有8個存儲空間)代替一個RAM(有64個存儲空間),再增加兩個8通道的旋轉(zhuǎn)多路器,同時配合對8個RAM的變址讀操作。一次輸入原始矩陣的一列,20個周期后完成一個8×8矩陣的轉(zhuǎn)置。比串行矩陣轉(zhuǎn)置節(jié)省至少100個時鐘周期。    并行矩陣轉(zhuǎn)置模塊的寫操作:每個時鐘周期變換一次RAM_BANK的接入順序,每個RAM_BANK每次寫入地址隨時鐘周期而順序遞增從,0增加到7,每次增加1。      并

11、行矩陣轉(zhuǎn)置模塊的讀操作:每個時鐘周期變換一次RAM_BANK的輸出順序,每個RAM_BANK每次讀出地址隨時鐘周期而變化,且同一時鐘周期內(nèi)不同的RAM_BANK有不同的讀出地址。          在實際設(shè)計時,通過接入旋轉(zhuǎn)多路器實現(xiàn)每個時鐘周期改變第一級一維離散余弦變換輸出端與RAM_BANK的接入順序,通過輸出旋轉(zhuǎn)多路器實現(xiàn)每個時鐘周期改變一次RAM_BANK與第二級一維離散余弦變換輸入端的接入順序。這兩個旋轉(zhuǎn)多路器,都是以8個時鐘周期為1個旋轉(zhuǎn)周期,在1個旋轉(zhuǎn)周期內(nèi)實現(xiàn)8個通道的旋轉(zhuǎn)接通。每個RAM_BANK

12、的讀寫地址都依靠同一個地址產(chǎn)生器產(chǎn)生,在一個時鐘周期內(nèi)所有RAM_BANK的寫地址相同,讀地址不同。    在設(shè)計具體的硬件電路時,一個RAM_BANK就是一個雙端口RAM,為提高工作效率,每個RAM_BANK實際含有32個存儲單元而不是理論上的8個存儲單元。這樣一個RAM_BANK就可以分為4個區(qū)塊,每個區(qū)塊8個存儲單元,在寫入一個區(qū)塊的同時可以讀出前一個已經(jīng)寫入數(shù)據(jù)的區(qū)塊,形成一種乒乓緩沖的結(jié)構(gòu),用電路面積換取運行效率。整個矩陣轉(zhuǎn)置模塊是一個13階的流水線結(jié)構(gòu),每階流水耗用一個時鐘周期。     圖5是并行矩陣轉(zhuǎn)置模塊在

13、ModelSim仿真軟件中的時序仿真結(jié)果,仿真的時鐘頻率設(shè)定為100Mhz。從輸入數(shù)據(jù)到開始得到結(jié)果,中間間隔了13個時鐘周期。213第二級一維離散余弦變換模塊    第二級一維離散余弦變換模塊在計算結(jié)構(gòu)上與第一級一維離散余弦變換模塊一樣也分為4個階段,完成一次運算耗用13個時鐘周期,每個時鐘周期完成一個流水線操作,實際的電路結(jié)構(gòu)是13階的流水線結(jié)構(gòu)。    階段1:消耗3個時鐘周期,完成10位有符號數(shù)的加減運算,結(jié)果為11位有符號數(shù)。    階段2:消耗4個時鐘周期,完成11位有符號數(shù)的固定系數(shù)乘法。&

14、#160;   這個階段與第一級一維離散余弦變換模塊的有所不同,沒有使用嵌入式乘法單元,因為完成一個11位有符號數(shù)的固定系數(shù)乘法需要2個嵌入式乘法單元并聯(lián),完成整個階段28個乘法操作需要56個嵌入式乘法單元,這占整個芯片嵌入式乘法單元的80。一個模塊過多的耗用嵌入式乘法單元會造成Cyclone II芯片在布局布線時跨越區(qū)域過大,從而導(dǎo)致布線延時過大。    第二級一維離散余弦變換模塊在這個階段中采用Altera的Mega function中的PARALLEL_ADD模塊實現(xiàn)固定系數(shù)乘法操作。PARALLEL_ADD模塊可以在4個時鐘周期內(nèi)完成8

15、個16位有符號數(shù)的加法操作。11位有符號數(shù)的乘法轉(zhuǎn)化為8個以內(nèi)的11位有符號數(shù)的加法。固定系數(shù)都小于0.5,所以PARALLEL_ADD模塊的結(jié)果可取11位。上述方法可理解為用并行加法來實現(xiàn)了一個簡單的陣列乘法器。    這種用并行加法來實現(xiàn)了一個簡單的陣列乘法,在不使用嵌入式乘法單元的條件下,是一種實現(xiàn)固定系數(shù)乘法的合理選擇。在后來的驗證中也證明,除了在計算過程比嵌入式乘法單元多兩個時鐘周期,電路面積有所增加以外,其計算精度和運行速度都基本與嵌入式乘法單元相同。運算過程中比使用嵌入式乘法單元多出的多兩個時鐘周期也會因為整個二維離散余弦變換是全流水結(jié)構(gòu)而只增加了流

16、水線的鋪滿時間,流水線一旦鋪滿后,這個兩個時鐘周期的延遲對運算延遲的影響將不再存在。    階段3:消耗3個時鐘周期,完成11位有符號數(shù)的加減法操作,結(jié)果仍為11位有符號數(shù)。結(jié)果仍為11位有符號數(shù)而不是12位有符號數(shù)的原因在第一級一維離散余弦變換模塊的階段3中已說明。    階段4:消耗3個時鐘周期完成11位有符號數(shù)的加減運算,結(jié)果為12位有符號數(shù),也是二維離散余弦變換的最終結(jié)果。214并行全流水結(jié)構(gòu)的二維離散余弦變換模塊    在不考慮二維離散余弦變換中輸入數(shù)據(jù)的串行轉(zhuǎn)為并行,輸出數(shù)據(jù)的并行轉(zhuǎn)為串行的條

17、件下。即假設(shè)二維離散余弦變換模塊的前一級模塊可以在每一個時鐘周期內(nèi)為其提供64位數(shù)據(jù),二維離散余弦變換模塊的后一級模塊可以在每一個時鐘周期內(nèi)接受其產(chǎn)生的96位數(shù)據(jù)。這時本文提出的并行全流水線結(jié)構(gòu)的二維離散余弦變換模塊只需要43個時鐘周期就可以完成一個8×8矩陣的二維離散余弦變換。    圖6及圖7是該模塊在ModelSim仿真軟件中的時序仿真結(jié)果,仿真的時鐘頻率設(shè)定為100Mhz,43個時鐘周期完成一次8×8二維離散余弦變換。        相同數(shù)據(jù)在Matlab中二維離散余

18、弦變換結(jié)果見圖8。       二者差值的分析:本文提出的二維離散余弦變換模塊在對小數(shù)乘法結(jié)果的處理上采取了截尾方式,沒有保留小數(shù)參加后續(xù)的運算。這與Matlab中64位的浮點運算的運算結(jié)果相比在變換系數(shù)中的直流系數(shù)上和第1個交流系數(shù)上相差的數(shù)值為8,其它系數(shù)可以認(rèn)為是近似相同的。    對小數(shù)乘法結(jié)果的處理采取截尾方式的原因有兩點:    1:保留小數(shù)位數(shù)過多會導(dǎo)致在后續(xù)的計算中輸入數(shù)據(jù)位數(shù)過長,特別是對于全8路并行結(jié)構(gòu)更易產(chǎn)生數(shù)據(jù)偏移或時鐘偏移,同時也會降低模塊的運行頻率

19、。    2:考慮到后續(xù)的量化模塊,采用標(biāo)準(zhǔn)的量化表時直流系數(shù)的量化步長為16是差值8的2倍,而且量化過程中有對量化結(jié)果四舍五入的處理。所以差值8會在量化過程中基本被消除。這一點在后面的實際圖像測試中得到了映證,壓縮后的圖像在視覺上與原始圖像一致。22量化模塊    量化過程就是每個離散余弦變換系數(shù)除以各自的量化步長并對結(jié)果取整的過程。取整采用的是四舍五入的方式。為了方便在FPGA中實現(xiàn),離散余弦變換系數(shù)除以各自的量化步長改為乘以量化步長的倒數(shù),量化步長的倒數(shù)使用二進(jìn)制小數(shù)表示,選取長度為12位。乘法器用EP2C35中兩個嵌入式乘法單

20、元并聯(lián)實現(xiàn)。因為離散余弦變換系數(shù)的長度為12位有符號的數(shù),所以乘操作后得到的24位結(jié)果,保留高12位,低12位舍去。具體電路在算法結(jié)構(gòu)上分為3個階段,由5階的流水線組成,完成整個量化操作耗時5個時鐘周期。  23 ZigZag掃描模塊    經(jīng)過量化處理后的離散余弦變換系數(shù)的高頻分量大部分為零。經(jīng)過ZigZag掃描后,一個二維的8×8離散余弦變換系數(shù)矩陣變?yōu)橐粋€一維含64個元素的序列,頻率分量按從低到高排列,一維序列的高頻部分會出現(xiàn)大量的連續(xù)零元素。產(chǎn)生這種一維序列的目的是為了使用熵編碼中游程編碼,進(jìn)一步提高壓縮效率。 &#

21、160;  從電路功能的角度上看,ZigZag掃描模塊的作用就是把按列順序輸入的量化后的離散余弦變換系數(shù)以ZigZag掃描的順序輸出。處理時以一個8×8的離散余弦變換系數(shù)矩陣為一個處理單元,在接收一個以列順序輸入的8×8的離散余弦變換系數(shù)矩陣的同時,把前一個已經(jīng)接收完畢的8×8的離散余弦變換系數(shù)矩陣以ZigZag掃描的順序輸出。一個擁有128個存儲單元,每個存儲單元長度為9位的雙口RAM可以完成上述功能。RAM的128個存儲單元在使用上分為兩個操作區(qū),每個操作區(qū)64個存儲單元,一個操作區(qū)用于接收以列順序輸入的8×8的離散余弦變換系數(shù)矩陣,同時另

22、一個操作區(qū)以ZigZag掃描的順序輸出前一個已經(jīng)接收完畢的8×8的離散余弦變換系數(shù)矩陣。兩個操作區(qū)輪換交替,形成一種乒乓操作模式。在這里使用乒乓操作是為了保持整個IP核的整體全流水線設(shè)計。    乒乓操作是一種常用于數(shù)據(jù)流控制的處理技巧。其特點是相互配合切換多個存儲單元并完成數(shù)據(jù)的處理,把處理后的數(shù)據(jù)沒有停頓的運送到下一個處理模塊。把一個乒乓操作模塊當(dāng)作一個整體,從其兩端看數(shù)據(jù),輸入數(shù)據(jù)和輸出數(shù)據(jù)都是連續(xù)不斷的,沒有任何停頓,因此非常適合流水線結(jié)構(gòu)。圖11是ZigZag掃描模塊在ModelSim仿真軟件中的時序仿真結(jié)果,仿真的時鐘頻率設(shè)定為100Mhz。

23、輸入數(shù)據(jù)是一個8×8的二維矩陣。按列掃描順序輸入的如下矩陣: 0 1 5 6 14 15 27 28 2 4 7 13 16 26 29 42 3 8 12 17 25 30 41 43 9 11 18 24 31 40 44 53 10 19

24、60;23 32 39 45 52 54 20 22 33 38 46 51 55 60 21 34 37 47 50 56 59 61 35 36 48 49 57 58 62 63  24熵編碼模塊    熵編碼與前面介紹的量化都是數(shù)據(jù)壓縮的手段,但二者有

25、所不同,熵編碼利用信號的統(tǒng)計特征來降低位率,理論上不會丟失信息,量化會丟失信息。實現(xiàn)熵編碼有多種方式,本文根據(jù)ISO/IEC10918協(xié)議,使用了游程編碼和霍夫曼編碼兩種方式。游程編碼的原理是把沿一定方向排列的等大小量化值的離散余弦變換系數(shù)作為連續(xù)的整體,用特定碼字替代這種連續(xù)的整體就會達(dá)到數(shù)據(jù)量減少的效果?;舴蚵幋a是一種變長編碼,將多次出現(xiàn)的代碼用較短的碼字代表,很少出現(xiàn)的代碼用較長的碼字代表。產(chǎn)生哈夫曼編碼要求掃描兩遍原始數(shù)據(jù),第一遍掃描是為了在原始數(shù)據(jù)中精確地統(tǒng)計每個值出現(xiàn)的頻率,第二遍利用構(gòu)造的哈夫曼樹得到編碼,兩次掃描耗時巨大,因此數(shù)據(jù)壓縮難以滿足實時性要求。ISO/IEC1091

26、8協(xié)議中在對大量8位精度圖像的平均統(tǒng)計基礎(chǔ)上,給出了4個合適大多數(shù)應(yīng)用的個哈夫曼碼表。在實現(xiàn)硬件電路時把哈夫曼碼表存儲在片上ROM中,使用時直接查找。因為離散余弦變換中直流系數(shù)和交流系數(shù)分別使用不同的碼表,且直流系數(shù)不需要進(jìn)行游程編碼,所以直流系數(shù)和交流系數(shù)使用不同的模塊來處理。241直流系數(shù)處理模塊    直流系數(shù)是8×8矩陣內(nèi)64個像素均值的度量,是包含了整個圖像能量的重要部分。利用相鄰的8×8矩陣的直流系數(shù)具有很強的相關(guān)性,對直流系數(shù)使用差分壓縮編碼。前一個8×8矩陣的直流系數(shù)作為當(dāng)前矩陣的直流系數(shù)的預(yù)測值,求出現(xiàn)實值和預(yù)測值之

27、間的差值后,再對差值做霍夫曼編碼。在硬件實現(xiàn)時,直流系數(shù)只有一個值,所以不需要做游程編碼,對其處理的第一步就是求得其與預(yù)測值之間的差值。根據(jù)差值的大小和正負(fù)查找存儲在片上ROM的標(biāo)準(zhǔn)霍夫曼碼表,得出前綴代碼和前綴代碼長度,同時根據(jù)ISO/IEC10918協(xié)議中提出的尾碼產(chǎn)生方式得到對應(yīng)的尾碼代碼及尾碼代碼長度。上述處理完成之后再經(jīng)過合并前綴代碼與尾碼代碼為霍夫曼代碼,則直流系數(shù)的熵編碼完成,之后等待被變長編碼模塊封裝。具體的實現(xiàn)電路由4階流水線組成,直流系數(shù)的熵編碼處理過程耗時4個時鐘周期。  242交流系數(shù)處理模塊    交流系數(shù)首先要現(xiàn)經(jīng)過

28、游程編碼處理。在游程編碼中非零交流系數(shù)前的零交流系數(shù)的個數(shù)是游程長度,前綴代碼及尾碼代碼的含義與直流系數(shù)中的一致,只不過在交流系數(shù)處理中游程長度和前綴代碼重新組合為一個新的查找索引來查找新的前綴代碼。ISO/IEC10918協(xié)議中給出的交流系數(shù)標(biāo)準(zhǔn)霍夫曼碼表里有兩個特殊的代碼。一個特殊代碼ZRL,ZRL代表游程編碼中游程長度大于16,如果游程長度大于32,48,56,分別用1個ZRL,2個ZRL,3個ZRL表示,盈余的游程長度加入下一個游程長度計算中。ZRL代碼只有前綴代碼,沒有尾碼代碼。為了方便實現(xiàn),直接把ZRL的尾碼代碼長度設(shè)為零,起到屏蔽尾碼的作用。另一個特殊代碼EOB,EOB代表最后一

29、個零行程中只有零元素直接代表當(dāng)前矩陣的游程編碼已經(jīng)掃描結(jié)束,若當(dāng)前矩陣的最后一個交流系數(shù)是非零數(shù)的則以正常結(jié)束一個游程長度的計數(shù)作為當(dāng)前矩陣游程編碼的結(jié)束。同ZRL類似,EOB也沒有尾碼代碼,所以使用同樣的處理手段。具體的實現(xiàn)電路由4階流水線組成,交流系數(shù)的熵編碼處理耗時4個時鐘周期。 243交織模塊和冗余ZRL消除模塊    交織模塊的作用是把前綴代碼和尾碼代碼合并為一個霍夫曼代碼,合并后的代碼易于進(jìn)行下一階段的變長編碼操作,變長編碼操作過程需要的移位位數(shù)由前綴代碼長度加上尾碼代碼長度做和得到,這個求和過程也在交織模塊中實現(xiàn)。該模塊具體實現(xiàn)電路由2階流

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

31、RL的霍夫曼代碼長度為零而消除冗余的ZRL。244變長編碼模塊    變長編碼的作用是把交織編碼輸出的含有不等長有效位的霍夫曼碼字,提取其中的有效位并將其組合為一個連續(xù)的32位碼流。    編碼原理是把交織編碼輸出的含有不等長有效位的霍夫曼碼字向右位,移動的位數(shù)是前一個霍夫曼碼字的代碼長度。移位完成后的當(dāng)前霍夫曼碼字與提供移動的位數(shù)的前一個霍夫曼碼字做或運算,同時累加兩個霍夫曼碼字的代碼長度。累加和大于24時表明變長編碼的第一步完成。第二步是檢查前一步產(chǎn)生的24位封裝結(jié)果中是否有FF字節(jié),若有則直接在FF字節(jié)后面添加00字節(jié)。并不是所

32、有的24位封裝結(jié)果都需要在FF字節(jié)后面添加00字節(jié),所以在第二步處理中還有移位處理。移位處理采用的方法與第一步移位處理的方法相同的,把24位封裝結(jié)果和添加00字節(jié)后的32位封裝結(jié)果,統(tǒng)一封裝為32位結(jié)果輸出。這個32位數(shù)據(jù)也是整個IP核輸出的最終壓縮結(jié)果。  3.基于SOPC結(jié)構(gòu)的實際驗證系統(tǒng)    經(jīng)驗證,Motion JPEG IP核可以實時處理由NTSC制式攝像頭采集經(jīng)ADV7181處理后輸出的CCIR656標(biāo)準(zhǔn)數(shù)據(jù),完成對連續(xù)視頻幀的實時壓縮。     驗證系統(tǒng)結(jié)構(gòu)如圖15所示,lineswitc

33、her模塊把CCIR656標(biāo)準(zhǔn)數(shù)據(jù)的亮度分量以跳址寫入的方式通過Multi-Port SDRAM Controller模塊寫入到SDRAM中,亮度分量數(shù)據(jù)從隔行掃描變?yōu)橹鹦写尜A。Multi-Port SDRAM Controller模塊是一個工業(yè)級的SDRAM控制器,可以將一個SDRAM數(shù)據(jù)端口仿真成四個虛擬的數(shù)據(jù)端口(兩個寫端口兩個讀端口)。SDRAM在存儲空間使用上劃分為4個區(qū)塊,在lineswitcher模塊寫入一個區(qū)塊的同時,Motion JPEG IP核讀出前一個已寫入亮度分量的區(qū)塊。Motion JPEG IP核輸出端是一個Avalon總線上的具有流控制屬性從端口。DMA控制器與M

34、otion JPEG IP核以流控制的方式進(jìn)行數(shù)據(jù)傳輸,并把數(shù)據(jù)轉(zhuǎn)移到SRAM中。整個過程無需NIOSII處理器干預(yù),只須等DMA控制器寫滿SRAM后以中斷的方式通知NIOSII處理器以使其掛起Motion JPEG IP核,防止存入SRAM中數(shù)據(jù)被覆蓋。最后使用DE2_Control_Panel傳輸SRAM中壓縮后的數(shù)據(jù)到PC中,便可看到采集后圖像經(jīng)壓縮后的效果。NIOSII處理器的作用是初始化DMA控制器和通過I2C總線設(shè)置ADV7181。         考慮到芯片上的資源,驗證時只對ADV7181輸出的亮度分量進(jìn)行壓

35、縮,舍棄了色差分量。雖然沒有了色差分量,但是仍然可以得到清晰直觀的驗證效果。 4.結(jié)論    本設(shè)計主要有以下幾個特點。    1:以全流水線結(jié)構(gòu)來實現(xiàn)Motion JPEG視頻壓縮IP核。    雖然流水線技術(shù)已經(jīng)是一種眾所周知的技術(shù),但是現(xiàn)有的Motion JPEG視頻壓縮IP核仍未實現(xiàn)全部流水線結(jié)構(gòu),一般多以狀態(tài)控制模塊為核心來協(xié)調(diào)各個子模塊。這就導(dǎo)致系統(tǒng)中最慢的子模塊在處理數(shù)據(jù)時,其它子模塊只能等待,對數(shù)據(jù)塊訪問的效率低下。同時由于數(shù)據(jù)塊的被多個子模塊所使用而又需要復(fù)雜的仲裁機(jī)制。本文提

36、出的全流水線結(jié)構(gòu)把整個處理過程分解為198個小操作,每個時鐘周期內(nèi)由一階流水線完成一個小操作。當(dāng)整個流水線鋪滿之后,整個數(shù)據(jù)處理過程中沒有等待延遲,沒有仲裁協(xié)議,大幅提高了系統(tǒng)的運行效率并降低了系統(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個時鐘周期。二維離散余弦變換在采用了并行矩陣轉(zhuǎn)置之后,也實現(xiàn)了全部并行處理,43個時鐘周期完成了一次二維離散余弦變換,效率提高顯著。    3:因采用全流水線結(jié)構(gòu)而取得的較高的運行頻率。    本文設(shè)計的Motion JPEG視頻壓縮IP核在Quartus II 6.0中進(jìn)行靜態(tài)時序分析,得到的最高運行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論