<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

Motion JPEG視頻壓縮IP核的設計與實(shí)現

作者:東北大學(xué) 李大舟 吳建華 時(shí)間:2008-06-25 來(lái)源:電子技術(shù)應用 收藏

  2.4熵編碼模塊

本文引用地址:http://dyxdggzs.com/article/84771.htm

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

  2.4.1直流系數處理模塊

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

  2.4.2交流系數處理模塊

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

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

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

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

  2.4.4變長(cháng)編碼模塊

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

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

  3.基于SOPC結構的實(shí)際驗證系統

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

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

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

  4.結論

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

  1:以全流水線(xiàn)結構來(lái)實(shí)現Motion JPEGIP核。

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

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

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

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

  本文設計的Motion JPEGIP核在Quartus II 6.0中進(jìn)行靜態(tài)時(shí)序分析,得到的最高運行頻率是150Mhz。

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

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

  4:可以在低成本,低功耗,高密度的CycloneII系列FPGA芯片上運行,通過(guò)Avalon總線(xiàn)與NIOSII處理器構成SOPC系統,為將來(lái)實(shí)際產(chǎn)品的設計搭建了一個(gè)良好的平臺。

  參考文獻

【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實(shí)踐. 西安: 西安電子科技大學(xué)出版社, 2007年4月.
【9】吳繼華,王誠. AlteraFPGA/CPLD設計(高級篇). 北京: 人民郵電出版社,2005年7月
【10】簡(jiǎn)弘倫.精通VerilogHDL IC設計核心技術(shù)實(shí)例詳解.北京:電子工業(yè)出版社, 2005年10月.

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

上一頁(yè) 1 2 3 4 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>