新聞中心

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

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

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

          2.4熵編碼模塊

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

          熵編碼與前面介紹的量化都是數據壓縮的手段,但二者有所不同,熵編碼利用信號的統計特征來降低位率,理論上不會丟失信息,量化會丟失信息。實現熵編碼有多種方式,本文根據ISO/IEC10918協議,使用了游程編碼和霍夫曼編碼兩種方式。游程編碼的原理是把沿一定方向排列的等大小量化值的離散余弦變換系數作為連續的整體,用特定碼字替代這種連續的整體就會達到數據量減少的效果。霍夫曼編碼是一種變長編碼,將多次出現的代碼用較短的碼字代表,很少出現的代碼用較長的碼字代表。產生哈夫曼編碼要求掃描兩遍原始數據,第一遍掃描是為了在原始數據中精確地統計每個值出現的頻率,第二遍利用構造的哈夫曼樹得到編碼,兩次掃描耗時巨大,因此數據壓縮難以滿足實時性要求。ISO/IEC10918協議中在對大量8位精度圖像的平均統計基礎上,給出了4個合適大多數應用的個哈夫曼碼表。在實現硬件電路時把哈夫曼碼表存儲在片上ROM中,使用時直接查找。因為離散余弦變換中直流系數和交流系數分別使用不同的碼表,且直流系數不需要進行游程編碼,所以直流系數和交流系數使用不同的模塊來處理。

          2.4.1直流系數處理模塊

          直流系數是8×8矩陣內64個像素均值的度量,是包含了整個圖像能量的重要部分。利用相鄰的8×8矩陣的直流系數具有很強的相關性,對直流系數使用差分壓縮編碼。前一個8×8矩陣的直流系數作為當前矩陣的直流系數的預測值,求出現實值和預測值之間的差值后,再對差值做霍夫曼編碼。在硬件實現時,直流系數只有一個值,所以不需要做游程編碼,對其處理的第一步就是求得其與預測值之間的差值。根據差值的大小和正負查找存儲在片上ROM的標準霍夫曼碼表,得出前綴代碼和前綴代碼長度,同時根據ISO/IEC10918協議中提出的尾碼產生方式得到對應的尾碼代碼及尾碼代碼長度。上述處理完成之后再經過合并前綴代碼與尾碼代碼為霍夫曼代碼,則直流系數的熵編碼完成,之后等待被變長編碼模塊封裝。具體的實現電路由4階流水線組成,直流系數的熵編碼處理過程耗時4個時鐘周期。

          2.4.2交流系數處理模塊

          交流系數首先要現經過游程編碼處理。在游程編碼中非零交流系數前的零交流系數的個數是游程長度,前綴代碼及尾碼代碼的含義與直流系數中的一致,只不過在交流系數處理中游程長度和前綴代碼重新組合為一個新的查找索引來查找新的前綴代碼。ISO/IEC10918協議中給出的交流系數標準霍夫曼碼表里有兩個特殊的代碼。一個特殊代碼ZRL,ZRL代表游程編碼中游程長度大于16,如果游程長度大于32,48,56,分別用1個ZRL,2個ZRL,3個ZRL表示,盈余的游程長度加入下一個游程長度計算中。ZRL代碼只有前綴代碼,沒有尾碼代碼。為了方便實現,直接把ZRL的尾碼代碼長度設為零,起到屏蔽尾碼的作用。另一個特殊代碼EOB,EOB代表最后一個零行程中只有零元素直接代表當前矩陣的游程編碼已經掃描結束,若當前矩陣的最后一個交流系數是非零數的則以正常結束一個游程長度的計數作為當前矩陣游程編碼的結束。同ZRL類似,EOB也沒有尾碼代碼,所以使用同樣的處理手段。具體的實現電路由4階流水線組成,交流系數的熵編碼處理耗時4個時鐘周期。

          2.4.3交織模塊和冗余ZRL消除模塊

          交織模塊的作用是把前綴代碼和尾碼代碼合并為一個霍夫曼代碼,合并后的代碼易于進行下一階段的變長編碼操作,變長編碼操作過程需要的移位位數由前綴代碼長度加上尾碼代碼長度做和得到,這個求和過程也在交織模塊中實現。該模塊具體實現電路由2階流水線組成。

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

          2.4.4變長編碼模塊

          變長編碼的作用是把交織編碼輸出的含有不等長有效位的霍夫曼碼字,提取其中的有效位并將其組合為一個連續的32位碼流。

          編碼原理是把交織編碼輸出的含有不等長有效位的霍夫曼碼字向右位,移動的位數是前一個霍夫曼碼字的代碼長度。移位完成后的當前霍夫曼碼字與提供移動的位數的前一個霍夫曼碼字做或運算,同時累加兩個霍夫曼碼字的代碼長度。 累加和大于24時表明變長編碼的第一步完成。第二步是檢查前一步產生的24位封裝結果中是否有FF字節,若有則直接在FF字節后面添加00字節。并不是所有的24位封裝結果都需要在FF字節后面添加00字節,所以在第二步處理中還有移位處理。移位處理采用的方法與第一步移位處理的方法相同的,把24位封裝結果和添加00字節后的32位封裝結果,統一封裝為32位結果輸出。這個32位數據也是整個輸出的最終壓縮結果。

          3.基于SOPC結構的實際驗證系統

          經驗證, 可以實時處理由NTSC制式攝像頭采集經ADV7181處理后輸出的CCIR656標準數據,完成對連續視頻幀的實時壓縮。

          驗證系統結構如圖15所示,lineswitcher模塊把CCIR656標準數據的亮度分量以跳址寫入的方式通過Multi-Port SDRAM Controller模塊寫入到SDRAM中,亮度分量數據從隔行掃描變為逐行存貯。Multi-Port SDRAM Controller模塊是一個工業級的SDRAM控制器,可以將一個SDRAM數據端口仿真成四個虛擬的數據端口(兩個寫端口+兩個讀端口)。 SDRAM在存儲空間使用上劃分為4個區塊,在lineswitcher模塊寫入一個區塊的同時, 讀出前一個已寫入亮度分量的區塊。 IP核輸出端是一個Avalon總線上的具有流控制屬性從端口。DMA控制器與Motion JPEG IP核以流控制的方式進行數據傳輸,并把數據轉移到SRAM中。整個過程無需NIOSII處理器干預,只須等DMA控制器寫滿SRAM后以中斷的方式通知 NIOSII處理器以使其掛起Motion JPEG IP核,防止存入SRAM中數據被覆蓋。最后使用DE2_Control_Panel傳輸SRAM中壓縮后的數據到PC中,便可看到采集后圖像經壓縮后的效果。NIOSII處理器的作用是初始化DMA控制器和通過I2C總線設置ADV7181。

          考慮到芯片上的資源,驗證時只對ADV7181輸出的亮度分量進行壓縮,舍棄了色差分量。雖然沒有了色差分量,但是仍然可以得到清晰直觀的驗證效果。

          4.結論

          本設計主要有以下幾個特點。

          1:以全流水線結構來實現Motion JPEGIP核。

          雖然流水線技術已經是一種眾所周知的技術,但是現有的Motion JPEGIP核仍未實現全部流水線結構,一般多以狀態控制模塊為核心來協調各個子模塊。這就導致系統中最慢的子模塊在處理數據時,其它子模塊只能等待,對數據塊訪問的效率低下。同時由于數據塊的被多個子模塊所使用而又需要復雜的仲裁機制。本文提出的全流水線結構把整個處理過程分解為198個小操作,每個時鐘周期內由一階流水線完成一個小操作。當整個流水線鋪滿之后,整個數據處理過程中沒有等待延遲,沒有仲裁協議,大幅提高了系統的運行效率并降低了系統的復雜度。

          2:并行矩陣轉置結構的提出及基于并行矩陣轉置的并行二維離散余弦變換結構。

          并行矩陣轉置結構較之以往的串行矩陣轉置在處理8×8矩陣上至少節省了100個時鐘周期。二維離散余弦變換在采用了并行矩陣轉置之后,也實現了全部并行處理,43個時鐘周期完成了一次二維離散余弦變換,效率提高顯著。

          3:因采用全流水線結構而取得的較高的運行頻率。

          本文設計的Motion JPEGIP核在Quartus II 6.0中進行靜態時序分析,得到的最高運行頻率是150Mhz。

          現有IP核與本文設計的IP核的運行頻率比較

          實際驗證時不僅對處理CCIR656標準數據的能力給予驗證,同時也為100Mhz的運行頻率進行了驗證,結果證明IP核可以在100Mhz的運行頻率下正常工作。驗證方法是把7幀952×568的亮度分量文件存入SDRAM中作為原始數據,整個驗證系統以100Mhz頻率運行,經過0.05秒完成7幀的壓縮,幀率可達147 frame/s。壓縮后圖像的大小為原來亮度圖像的十分之一。

          4:可以在低成本,低功耗,高密度的CycloneII系列FPGA芯片上運行,通過Avalon總線與NIOSII處理器構成SOPC系統,為將來實際產品的設計搭建了一個良好的平臺。

          參考文獻

        【1】Weiping Li, A New Algorithm to Compute the DCT and its Inverse, IEEE TRANSATIONS ON SIGNAL, PROCESSING, VOL. 39. NO. 6, JUNE 1991
        【2】Shaw-MinLei, Ming-Ti ngSun, An Entropy Coding System for Digital HDTV Applications, IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY, VOL. 1, NO.1, MARCH 1991
        【3】ISO/IEC International Standard 10918-1. June 1992
        【4】Altera Corporation. Quartus II Version 7.2 Handbook. October 2007
        【5】Altera Corporation. Nios II Processor Reference Handbook. October 2007
        【6】Altera Corporation. Nios II Software Developer's Handbook. October 2007
        【7】Altera Corporation. Avalon Streaming InteRFace Specification. September 2007
        【8】張志剛. FPGA與SOPC設計教程-DE2實踐. 西安: 西安電子科技大學出版社, 2007年4月.
        【9】吳繼華,王誠. AlteraFPGA/CPLD設計(高級篇). 北京: 人民郵電出版社,2005年7月
        【10】簡弘倫.精通VerilogHDL IC設計核心技術實例詳解.北京:電子工業出版社, 2005年10月.

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

        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 晋江市| 榆树市| 白山市| 唐山市| 丽江市| 河津市| 唐海县| 朔州市| 凉山| 大荔县| 沂源县| 高安市| 嘉义县| 那曲县| 合江县| 涞水县| 贵溪市| 平安县| 乌兰浩特市| 绍兴市| 凤凰县| 马边| 洪泽县| 大方县| 玉田县| 慈溪市| 陆丰市| 华坪县| 丁青县| 城步| 昆山市| 建瓯市| 玉山县| 惠安县| 南京市| 安新县| 民丰县| 漯河市| 辽阳县| 哈密市| 武冈市|