国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2010-12-20 18:03    發(fā)布者:conniede
關(guān)鍵詞: FPGA , IP , JPEG , Motion , SoPC
1 引言

隨著多媒體技術(shù)及通信技術(shù)的快速發(fā)展,在嵌入式平臺(tái)上實(shí)現(xiàn)連續(xù)圖像壓縮的需求已變得日益廣泛。常用的系統(tǒng)結(jié)構(gòu)是獨(dú)立處理器配和專用圖像壓縮芯片或者是只用一個(gè)高主頻的數(shù)字信號(hào)處理器完成主要功能。但隨著大規(guī)模集成電路技術(shù)的發(fā)展及市場(chǎng)對(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)鍵部件。現(xiàn)有的MPEG系列,H26X系列IP核對(duì)FPGA的芯片資源及性能要求極高,難以滿足系統(tǒng)對(duì)低成本,低功耗的要求。所以設(shè)計(jì)一個(gè)適合低成本,低功耗的FPGA芯片的視頻壓縮IP核變得極為重要。這即要求壓縮算法的復(fù)雜度不能太高,又要求有適當(dāng)?shù)膲嚎s效果,Motion JPEG算法恰好滿足上述要求。

2. Motion JPEG壓縮算法簡(jiǎn)介

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ù)有二維離散余弦變換、量化、差分編碼、霍夫曼編碼和游程編碼等。單幀的處理過(guò)程如下圖所示。


3. IP核的結(jié)構(gòu)設(shè)計(jì)

3.1 二維離散余弦變換模塊

二維離散余弦變換是由一維離散余弦變換衍生而來(lái)的,所以可以用兩個(gè)級(jí)聯(lián)的一維離散余弦變換實(shí)現(xiàn)。實(shí)現(xiàn)時(shí)要注意第一級(jí)一維離散余弦變換模塊產(chǎn)生的結(jié)果不能直接作為第二級(jí)一維離散余弦變換模塊的輸入量,而是等到第一級(jí)一維離散余弦變換模塊產(chǎn)生的結(jié)果形成一個(gè)88的矩陣后,對(duì)這個(gè)88的矩陣做轉(zhuǎn)置處理,再把轉(zhuǎn)置后得到的矩陣按行掃描的順序輸出,這時(shí)輸出的數(shù)據(jù)才能作為第二級(jí)一維離散余弦變換模塊的輸入量。

二維離散余弦變換模塊處理的對(duì)象是88的像素矩陣,來(lái)自其前一級(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ù)緩存起來(lái),當(dāng)數(shù)據(jù)湊滿8個(gè)后再一次傳給二維離散余弦變換模塊。

二維離散余弦變換模塊輸出的數(shù)據(jù)是88的二維離散余弦系數(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ù)緩存起來(lái),在等待下一次二維離散余弦變換模塊輸出數(shù)據(jù)的8個(gè)時(shí)鐘周期的等待隔內(nèi),把數(shù)據(jù)串行傳給量化模塊。

3.1.1 第一級(jí)一維離散余弦變換模塊

根據(jù)一維離散余弦變換的定義和cos函數(shù)的互補(bǔ)對(duì)稱性,參考Weiping Li提出的Skew Circular Convolution的概念,能夠使一維離散余弦變換達(dá)到非常精簡(jiǎn)的硬件架構(gòu)。但是考慮到處理的對(duì)像是連續(xù)幀這個(gè)條件,速度就成為主要因素,因此沒(méi)有完全依照其提出的方法,而是適當(dāng)?shù)脑黾与娐访娣e來(lái)夠造新的11階全流水線結(jié)構(gòu),從而獲得最大的運(yùn)算速度。處理過(guò)程可劃分為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è)元素的長(zhǎng)度大于9位而耗用兩個(gè)嵌入式乘法單元去完成一個(gè)乘法操作,又很不經(jīng)濟(jì)。所以在階段2中實(shí)現(xiàn)乘法操作是最為合理的,階段2的輸入量為9位,恰好耗用一個(gè)個(gè)嵌入式乘法單元。這也同時(shí)要求乘法中的固定系數(shù)的位數(shù)為9位,位數(shù)的過(guò)多或過(guò)少都不能充分利用芯片上的硬件資源。

階段3:消耗3個(gè)時(shí)鐘周期完成9位有符號(hào)數(shù)的加減運(yùn)算,結(jié)果為9位有符號(hào)數(shù)。一般的9位有符號(hào)數(shù)的加減的結(jié)果應(yīng)該用10位有符號(hào)數(shù)來(lái)表示,因?yàn)檫M(jìn)位操作或借位操作導(dǎo)致結(jié)果的位數(shù)從9位增長(zhǎng)到10位。但是階段3的輸入序列是由9位有符號(hào)數(shù)乘以固定系數(shù)得到的,且固定系數(shù)的值都小于0.5,所以序列之間的加減操作不會(huì)引起進(jìn)位操作或借位操作,9位有符號(hào)數(shù)足夠表示加減操作的結(jié)果序列。

階段4:消耗3個(gè)時(shí)鐘周期完成9位有符號(hào)數(shù)的加減運(yùn)算,結(jié)果為10位有符號(hào)數(shù),也是第一級(jí)一維離散余弦變換的最終結(jié)果。

3.1.2 并行矩陣轉(zhuǎn)置模塊

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

本文提出了一種新的矩陣轉(zhuǎn)置方法,稱為其并行矩陣轉(zhuǎn)置。用8個(gè)RAM(每個(gè)RAM有8個(gè)存儲(chǔ)空間)代替一個(gè)RAM(有64個(gè)存儲(chǔ)空間),再增加兩個(gè)8通道的旋轉(zhuǎn)多路器,同時(shí)配合對(duì)8個(gè)RAM的變址讀操作。一次輸入原始矩陣的一列,20個(gè)周期后完成一個(gè)88矩陣的轉(zhuǎn)置。比串行矩陣轉(zhuǎn)置節(jié)省至少100個(gè)時(shí)鐘周期。

并行矩陣轉(zhuǎn)置模塊的寫(xiě)操作:每個(gè)時(shí)鐘周期變換一次RAM_BANK的接入順序,每個(gè)RAM_BANK每次寫(xiě)入地址隨時(shí)鐘周期而順序遞增從,0增加到7,每次增加1。


并行矩陣轉(zhuǎn)置模塊的讀操作:每個(gè)時(shí)鐘周期變換一次RAM_BANK的輸出順序,每個(gè)RAM_BANK每次讀出地址隨時(shí)鐘周期而變化,且同一時(shí)鐘周期內(nèi)不同的RAM_BANK有不同的讀出地址。


在實(shí)際設(shè)計(jì)時(shí),通過(guò)接入旋轉(zhuǎn)多路器實(shí)現(xiàn)每個(gè)時(shí)鐘周期改變第一級(jí)一維離散余弦變換輸出端與RAM_BANK的接入順序,通過(guò)輸出旋轉(zhuǎn)多路器實(shí)現(xiàn)每個(gè)時(shí)鐘周期改變一次RAM_BANK與第二級(jí)一維離散余弦變換輸入端的接入順序。這兩個(gè)旋轉(zhuǎn)多路器,都是以8個(gè)時(shí)鐘周期為1個(gè)旋轉(zhuǎn)周期,在1個(gè)旋轉(zhuǎn)周期內(nèi)實(shí)現(xiàn)8個(gè)通道的旋轉(zhuǎn)接通。每個(gè)RAM_BANK的讀寫(xiě)地址都依靠同一個(gè)地址產(chǎn)生器產(chǎn)生,在一個(gè)時(shí)鐘周期內(nèi)所有RAM_BANK的寫(xiě)地址相同,讀地址不同。

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


圖5是并行矩陣轉(zhuǎn)置模塊在ModelSim仿真軟件中的時(shí)序仿真結(jié)果,仿真的時(shí)鐘頻率設(shè)定為100Mhz。從輸入數(shù)據(jù)到開(kāi)始得到結(jié)果,中間間隔了13個(gè)時(shí)鐘周期。

3.1.3 第二級(jí)一維離散余弦變換模塊

第二級(jí)一維離散余弦變換模塊在計(jì)算結(jié)構(gòu)上與第一級(jí)一維離散余弦變換模塊一樣也分為4個(gè)階段,完成一次運(yùn)算耗用13個(gè)時(shí)鐘周期,每個(gè)時(shí)鐘周期完成一個(gè)流水線操作,實(shí)際的電路結(jié)構(gòu)是13階的流水線結(jié)構(gòu)。

階段1:消耗3個(gè)時(shí)鐘周期,完成10位有符號(hào)數(shù)的加減運(yùn)算,結(jié)果為11位有符號(hào)數(shù)。

階段2:消耗4個(gè)時(shí)鐘周期,完成11位有符號(hào)數(shù)的固定系數(shù)乘法。

這個(gè)階段與第一級(jí)一維離散余弦變換模塊的有所不同,沒(méi)有使用嵌入式乘法單元,因?yàn)橥瓿梢粋(gè)11位有符號(hào)數(shù)的固定系數(shù)乘法需要2個(gè)嵌入式乘法單元并聯(lián),完成整個(gè)階段28個(gè)乘法操作需要56個(gè)嵌入式乘法單元,這占整個(gè)芯片嵌入式乘法單元的80%。一個(gè)模塊過(guò)多的耗用嵌入式乘法單元會(huì)造成Cyclone II芯片在布局布線時(shí)跨越區(qū)域過(guò)大,從而導(dǎo)致布線延時(shí)過(guò)大。

第二級(jí)一維離散余弦變換模塊在這個(gè)階段中采用Altera的Mega function中的PARALLEL_ADD模塊實(shí)現(xiàn)固定系數(shù)乘法操作。PARALLEL_ADD模塊可以在4個(gè)時(shí)鐘周期內(nèi)完成8個(gè)16位有符號(hào)數(shù)的加法操作。11位有符號(hào)數(shù)的乘法轉(zhuǎn)化為8個(gè)以內(nèi)的11位有符號(hào)數(shù)的加法。固定系數(shù)都小于0.5,所以PARALLEL_ADD模塊的結(jié)果可取11位。上述方法可理解為用并行加法來(lái)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的陣列乘法器。

這種用并行加法來(lái)實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的陣列乘法,在不使用嵌入式乘法單元的條件下,是一種實(shí)現(xiàn)固定系數(shù)乘法的合理選擇。在后來(lái)的驗(yàn)證中也證明,除了在計(jì)算過(guò)程比嵌入式乘法單元多兩個(gè)時(shí)鐘周期,電路面積有所增加以外,其計(jì)算精度和運(yùn)行速度都基本與嵌入式乘法單元相同。運(yùn)算過(guò)程中比使用嵌入式乘法單元多出的多兩個(gè)時(shí)鐘周期也會(huì)因?yàn)檎麄(gè)二維離散余弦變換是全流水結(jié)構(gòu)而只增加了流水線的鋪滿時(shí)間,流水線一旦鋪滿后,這個(gè)兩個(gè)時(shí)鐘周期的延遲對(duì)運(yùn)算延遲的影響將不再存在。

階段3:消耗3個(gè)時(shí)鐘周期,完成11位有符號(hào)數(shù)的加減法操作,結(jié)果仍為11位有符號(hào)數(shù)。結(jié)果仍為11位有符號(hào)數(shù)而不是12位有符號(hào)數(shù)的原因在第一級(jí)一維離散余弦變換模塊的階段3中已說(shuō)明。

階段4:消耗3個(gè)時(shí)鐘周期完成11位有符號(hào)數(shù)的加減運(yùn)算,結(jié)果為12位有符號(hào)數(shù),也是二維離散余弦變換的最終結(jié)果。


3.1.4 并行全流水結(jié)構(gòu)的二維離散余弦變換模塊

在不考慮二維離散余弦變換中輸入數(shù)據(jù)的串行轉(zhuǎn)為并行,輸出數(shù)據(jù)的并行轉(zhuǎn)為串行的條件下。即假設(shè)二維離散余弦變換模塊的前一級(jí)模塊可以在每一個(gè)時(shí)鐘周期內(nèi)為其提供64位數(shù)據(jù),二維離散余弦變換模塊的后一級(jí)模塊可以在每一個(gè)時(shí)鐘周期內(nèi)接受其產(chǎn)生的96位數(shù)據(jù)。這時(shí)本文提出的并行全流水線結(jié)構(gòu)的二維離散余弦變換模塊只需要43個(gè)時(shí)鐘周期就可以完成一個(gè)88矩陣的二維離散余弦變換。

圖6及圖7是該模塊在ModelSim仿真軟件中的時(shí)序仿真結(jié)果,仿真的時(shí)鐘頻率設(shè)定為100Mhz,43個(gè)時(shí)鐘周期完成一次88二維離散余弦變換。



相同數(shù)據(jù)在Matlab中二維離散余弦變換結(jié)果見(jiàn)圖8。



二者差值的分析:本文提出的二維離散余弦變換模塊在對(duì)小數(shù)乘法結(jié)果的處理上采取了截尾方式,沒(méi)有保留小數(shù)參加后續(xù)的運(yùn)算。這與Matlab中64位的浮點(diǎn)運(yùn)算的運(yùn)算結(jié)果相比在變換系數(shù)中的直流系數(shù)上和第1個(gè)交流系數(shù)上相差的數(shù)值為8,其它系數(shù)可以認(rèn)為是近似相同的。

對(duì)小數(shù)乘法結(jié)果的處理采取截尾方式的原因有兩點(diǎn):

1):保留小數(shù)位數(shù)過(guò)多會(huì)導(dǎo)致在后續(xù)的計(jì)算中輸入數(shù)據(jù)位數(shù)過(guò)長(zhǎng),特別是對(duì)于全8路并行結(jié)構(gòu)更易產(chǎn)生數(shù)據(jù)偏移或時(shí)鐘偏移,同時(shí)也會(huì)降低模塊的運(yùn)行頻率。

2):考慮到后續(xù)的量化模塊,采用標(biāo)準(zhǔn)的量化表時(shí)直流系數(shù)的量化步長(zhǎng)為16是差值8的2倍,而且量化過(guò)程中有對(duì)量化結(jié)果四舍五入的處理。所以差值8會(huì)在量化過(guò)程中基本被消除。這一點(diǎn)在后面的實(shí)際圖像測(cè)試中得到了映證,壓縮后的圖像在視覺(jué)上與原始圖像一致。

3.2 量化模塊

量化過(guò)程就是每個(gè)離散余弦變換系數(shù)除以各自的量化步長(zhǎng)并對(duì)結(jié)果取整的過(guò)程。取整采用的是四舍五入的方式。

為了方便在FPGA中實(shí)現(xiàn),離散余弦變換系數(shù)除以各自的量化步長(zhǎng)改為乘以量化步長(zhǎng)的倒數(shù),量化步長(zhǎng)的倒數(shù)使用二進(jìn)制小數(shù)表示,選取長(zhǎng)度為12位。乘法器用EP2C35中兩個(gè)嵌入式乘法單元并聯(lián)實(shí)現(xiàn)。因?yàn)殡x散余弦變換系數(shù)的長(zhǎng)度為12位有符號(hào)的數(shù),所以乘操作后得到的24位結(jié)果,保留高12位,低12位舍去。具體電路在算法結(jié)構(gòu)上分為3個(gè)階段,由5階的流水線組成,完成整個(gè)量化操作耗時(shí)5個(gè)時(shí)鐘周期。


3.3 ZigZag掃描模塊

經(jīng)過(guò)量化處理后的離散余弦變換系數(shù)的高頻分量大部分為零。經(jīng)過(guò)ZigZag掃描后,一個(gè)二維的88離散余弦變換系數(shù)矩陣變?yōu)橐粋(gè)一維含64個(gè)元素的序列,頻率分量按從低到高排列,一維序列的高頻部分會(huì)出現(xiàn)大量的連續(xù)零元素。產(chǎn)生這種一維序列的目的是為了使用熵編碼中游程編碼,進(jìn)一步提高壓縮效率。

從電路功能的角度上看,ZigZag掃描模塊的作用就是把按列順序輸入的量化后的離散余弦變換系數(shù)以ZigZag掃描的順序輸出。處理時(shí)以一個(gè)88的離散余弦變換系數(shù)矩陣為一個(gè)處理單元,在接收一個(gè)以列順序輸入的88的離散余弦變換系數(shù)矩陣的同時(shí),把前一個(gè)已經(jīng)接收完畢的88的離散余弦變換系數(shù)矩陣以ZigZag掃描的順序輸出。一個(gè)擁有128個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元長(zhǎng)度為9位的雙口RAM可以完成上述功能。RAM的128個(gè)存儲(chǔ)單元在使用上分為兩個(gè)操作區(qū),每個(gè)操作區(qū)64個(gè)存儲(chǔ)單元,一個(gè)操作區(qū)用于接收以列順序輸入的88的離散余弦變換系數(shù)矩陣,同時(shí)另一個(gè)操作區(qū)以ZigZag掃描的順序輸出前一個(gè)已經(jīng)接收完畢的88的離散余弦變換系數(shù)矩陣。兩個(gè)操作區(qū)輪換交替,形成一種乒乓操作模式。在這里使用乒乓操作是為了保持整個(gè)IP核的整體全流水線設(shè)計(jì)。

乒乓操作是一種常用于數(shù)據(jù)流控制的處理技巧。其特點(diǎn)是相互配合切換多個(gè)存儲(chǔ)單元并完成數(shù)據(jù)的處理,把處理后的數(shù)據(jù)沒(méi)有停頓的運(yùn)送到下一個(gè)處理模塊。把一個(gè)乒乓操作模塊當(dāng)作一個(gè)整體,從其兩端看數(shù)據(jù),輸入數(shù)據(jù)和輸出數(shù)據(jù)都是連續(xù)不斷的,沒(méi)有任何停頓,因此非常適合流水線結(jié)構(gòu)。圖11是ZigZag掃描模塊在ModelSim仿真軟件中的時(shí)序仿真結(jié)果,仿真的時(shí)鐘頻率設(shè)定為100Mhz。輸入數(shù)據(jù)是一個(gè)88的二維矩陣。按列掃描順序輸入的如下矩陣:

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
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


3.4 熵編碼模塊

熵編碼與前面介紹的量化都是數(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ù)量減少的效果。霍夫曼編碼是一種變長(zhǎng)編碼,將多次出現(xiàn)的代碼用較短的碼字代表,很少出現(xiàn)的代碼用較長(zhǎng)的碼字代表。產(chǎn)生哈夫曼編碼要求掃描兩遍原始數(shù)據(jù),第一遍掃描是為了在原始數(shù)據(jù)中精確地統(tǒng)計(jì)每個(gè)值出現(xiàn)的頻率,第二遍利用構(gòu)造的哈夫曼樹(shù)得到編碼,兩次掃描耗時(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)處理。

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

直流系數(shù)是88矩陣內(nèi)64個(gè)像素均值的度量,是包含了整個(gè)圖像能量的重要部分。利用相鄰的88矩陣的直流系數(shù)具有很強(qiáng)的相關(guān)性,對(duì)直流系數(shù)使用差分壓縮編碼。前一個(gè)88矩陣的直流系數(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í)鐘周期。


3.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í)鐘周期。


3.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。

3.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è)IP核輸出的最終壓縮結(jié)果。


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

經(jīng)驗(yàn)證,Motion JPEG IP核可以實(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ù)的亮度分量以跳址寫(xiě)入的方式通過(guò)Multi-Port SDRAM Controller模塊寫(xiě)入到SDRAM中,亮度分量數(shù)據(jù)從隔行掃描變?yōu)橹鹦写尜A。Multi-Port SDRAM Controller模塊是一個(gè)工業(yè)級(jí)的SDRAM控制器,可以將一個(gè)SDRAM數(shù)據(jù)端口仿真成四個(gè)虛擬的數(shù)據(jù)端口(兩個(gè)寫(xiě)端口+兩個(gè)讀端口)。SDRAM在存儲(chǔ)空間使用上劃分為4個(gè)區(qū)塊,在lineswitcher模塊寫(xiě)入一個(gè)區(qū)塊的同時(shí),Motion JPEG IP核讀出前一個(gè)已寫(xiě)入亮度分量的區(qū)塊。Motion JPEG IP核輸出端是一個(gè)Avalon總線上的具有流控制屬性從端口。DMA控制器與Motion JPEG IP核以流控制的方式進(jìn)行數(shù)據(jù)傳輸,并把數(shù)據(jù)轉(zhuǎn)移到SRAM中。整個(gè)過(guò)程無(wú)需NIOSII處理器干預(yù),只須等DMA控制器寫(xiě)滿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)證效果。


5. 結(jié)論

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

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

雖然流水線技術(shù)已經(jīng)是一種眾所周知的技術(shù),但是現(xiàn)有的Motion JPEG視頻壓縮IP核仍未實(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)置在處理88矩陣上至少節(jié)省了100個(gè)時(shí)鐘周期。二維離散余弦變換在采用了并行矩陣轉(zhuǎn)置之后,也實(shí)現(xiàn)了全部并行處理,43個(gè)時(shí)鐘周期完成了一次二維離散余弦變換,效率提高顯著。

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

本文設(shè)計(jì)的Motion JPEG視頻壓縮IP核在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幀952568的亮度分量文件存入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)。
本文地址:http://m.qingdxww.cn/thread-47315-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美大陆日韩 | 欧美一区欧美二区 | 国产精品久久国产精品99 | 日韩毛片久久91 | 欧美又大又粗又长又美 | 久久精品亚洲一区二区三区浴池 | 麻豆激情 | china麻豆制作 | 国产一区二区三区不卡免费观看 | 草草线在成年免费视频网站 | 日本精品一在线观看视频 | 日日天天| 国产一区二区三区不卡在线观看 | 欧美高清在线观看 | 久久99热精品免费观看k影院 | 青青青青久久精品国产一百度 | 成人羞羞免费视频 | 黄网站色在线视频免费观看 | 高清不卡毛片免费观看 | 欧美性精品hd在线观看 | 久久精品国产亚洲婷婷 | 久久综合爱 | 精品免费在线视频 | 激动网色视频 | 欧美日韩网 | 久久久青青久久国产精品 | 日韩伦理在线高清视频播放免费 | 99热成人精品热久久669 | 四虎社区 | 精品一区精品二区 | 另类视频在线观看 | 免费观看黄页网站 | 九九精品视频免费 | 在线观看视频色 | 久久亚洲精品国产精品婷婷 | 精品欧美一区视频在线观看 | 欧美三级视频在线 | 国内在线观看精品免费视频 | 啊~用力cao我cao死我 | 国产精品免费看久久久久 | 欧美日本免费观看αv片 |