Motion JPEG視頻壓縮IP核的設(shè)計(jì)與實(shí)現(xià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)算延遲的影響將不再存在。
本文引用地址:http://www.bjwjmy.cn/article/84771.htm階段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é)果。
2.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è)8×8矩陣的二維離散余弦變換。
圖6及圖7是該模塊在ModelSim仿真軟件中的時(shí)序仿真結(jié)果,仿真的時(shí)鐘頻率設(shè)定為100Mhz,43個(gè)時(shí)鐘周期完成一次8×8二維離散余弦變換。
相同數(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é)上與原始圖像一致。
2.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í)鐘周期。
2.3 ZigZag掃描模塊
經(jīng)過(guò)量化處理后的離散余弦變換系數(shù)的高頻分量大部分為零。經(jīng)過(guò)ZigZag掃描后,一個(gè)二維的8×8離散余弦變換系數(shù)矩陣變?yōu)橐粋€(gè)一維含64個(gè)元素的序列,頻率分量按從低到高排列,一維序列的高頻部分會(huì)出現(xiàn)大量的連續(xù)零元素。產(chǎn)生這種一維序列的目的是為了使用熵編碼中游程編碼,進(jìn)一步提高壓縮效率。
從電路功能的角度上看,ZigZag掃描模塊的作用就是把按列順序輸入的量化后的離散余弦變換系數(shù)以ZigZag掃描的順序輸出。處理時(shí)以一個(gè)8×8的離散余弦變換系數(shù)矩陣為一個(gè)處理單元,在接收一個(gè)以列順序輸入的8×8的離散余弦變換系數(shù)矩陣的同時(shí),把前一個(gè)已經(jīng)接收完畢的8×8的離散余弦變換系數(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ū)用于接收以列順序輸入的8×8的離散余弦變換系數(shù)矩陣,同時(shí)另一個(gè)操作區(qū)以ZigZag掃描的順序輸出前一個(gè)已經(jīng)接收完畢的8×8的離散余弦變換系數(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è)8×8的二維矩陣。按列掃描順序輸入 的如下矩陣:
評(píng)論