新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > Motion JPEG視頻壓縮IP核的設計與實現

        Motion JPEG視頻壓縮IP核的設計與實現

        作者:東北大學 李大舟 吳建華 時間:2008-06-25 來源:電子技術應用 收藏

          這種用并行加法來實現了一個簡單的陣列乘法,在不使用乘法單元的條件下,是一種實現固定系數乘法的合理選擇。在后來的驗證中也證明, 除了在計算過程比乘法單元多兩個時鐘周期,電路面積有所增加以外,其計算精度和運行速度都基本與乘法單元相同。運算過程中比使用嵌入式乘法單元多出的多兩個時鐘周期也會因為整個二維離散余弦變換是全流水結構而只增加了流水線的鋪滿時間,流水線一旦鋪滿后,這個兩個時鐘周期的延遲對運算延遲的影響將不再存在。

        本文引用地址:http://www.104case.com/article/84771.htm

          階段3:消耗3個時鐘周期,完成11位有符號數的加減法操作,結果仍為11位有符號數。結果仍為11位有符號數而不是12位有符號數的原因在第一級一維離散余弦變換模塊的階段3中已說明。

          階段4:消耗3個時鐘周期完成11位有符號數的加減運算,結果為12位有符號數,也是二維離散余弦變換的最終結果。

          2.1.4并行全流水結構的二維離散余弦變換模塊

          在不考慮二維離散余弦變換中輸入數據的串行轉為并行,輸出數據的并行轉為串行的條件下。即假設二維離散余弦變換模塊的前一級模塊可以在每一個時鐘周期內為其提供64位數據,二維離散余弦變換模塊的后一級模塊可以在每一個時鐘周期內接受其產生的96位數據。這時本文提出的并行全流水線結構的二維離散余弦變換模塊只需要43個時鐘周期就可以完成一個8×8矩陣的二維離散余弦變換。

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

          相同數據在Matlab中二維離散余弦變換結果見圖8。

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

          對小數乘法結果的處理采取截尾方式的原因有兩點:

          1:保留小數位數過多會導致在后續的計算中輸入數據位數過長,特別是對于全8路并行結構更易產生數據偏移或時鐘偏移,同時也會降低模塊的運行頻率。

          2:考慮到后續的量化模塊,采用標準的量化表時直流系數的量化步長為16是差值8的2倍,而且量化過程中有對量化結果四舍五入的處理。所以差值8會在量化過程中基本被消除。這一點在后面的實際圖像測試中得到了映證,壓縮后的圖像在視覺上與原始圖像一致。

          2.2量化模塊

          量化過程就是每個離散余弦變換系數除以各自的量化步長并對結果取整的過程。取整采用的是四舍五入的方式。

          為了方便在FPGA中實現,離散余弦變換系數除以各自的量化步長改為乘以量化步長的倒數,量化步長的倒數使用二進制小數表示,選取長度為12位。乘法器用 EP2C35中兩個嵌入式乘法單元并聯實現。因為離散余弦變換系數的長度為12位有符號的數,所以乘操作后得到的24位結果,保留高12位,低12位舍去。具體電路在算法結構上分為3個階段,由5階的流水線組成,完成整個量化操作耗時5個時鐘周期。

          2.3 ZigZag掃描模塊

          經過量化處理后的離散余弦變換系數的高頻分量大部分為零。經過ZigZag掃描后,一個二維的8×8離散余弦變換系數矩陣變為一個一維含64個元素的序列,頻率分量按從低到高排列,一維序列的高頻部分會出現大量的連續零元素。產生這種一維序列的目的是為了使用熵編碼中游程編碼,進一步提高壓縮效率。

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

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

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大城县| 金阳县| 万源市| 山丹县| 洛南县| 都兰县| 镇原县| 亚东县| 子长县| 永泰县| 安泽县| 广平县| 汉阴县| 寻乌县| 合作市| 靖西县| 溧水县| 临武县| 隆尧县| 长宁区| 青海省| 安溪县| 沐川县| 阿鲁科尔沁旗| 浦北县| 句容市| 达州市| 长治县| 桐庐县| 乐业县| 什邡市| 临颍县| 松滋市| 天等县| 水城县| 庐江县| 依安县| 蓝田县| 烟台市| 繁昌县| 新疆|