視頻壓縮IPcore設計 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:介紹了一種基于FPCA技術(shù)的視頻壓縮IPcore(Intellectual Property core,智力產(chǎn)權)設計。設計中綜合運用了分布式算法、并行運算和流水線(xiàn)單元,通過(guò)VerilogHDL(Veriog Hardware DescdPtionLanSuage)硬件描述語(yǔ)言描述運算單元及其結構配置。整個(gè)系統能在27MHz系統時(shí)鐘下工作。關(guān)鍵詞:視頻壓縮 IPcore FPCA 現行的視頻壓縮標準有多種,但基本屬于以下兩大類(lèi):視頻會(huì )議標準和多媒體標準。視頻會(huì )議標準包括ITU(Intemational Telecommunication Union)的H.263/H.261等。這些標準主要采用了基于DCT(離散余弦變換)編碼、運動(dòng)補償等技術(shù),使視頻流能以Nx64kbps(N=1~32)的速率傳輸。 多媒體壓縮標準主要包括:MPEG-1、MPEG-2、MPEG-4等,由CCITT和ISO的動(dòng)態(tài)圖像專(zhuān)家組(MotionPicture Experts Group)制定。MPEG-1主要應用在以CD-ROM為介質(zhì)的視頻上,比特率為1.5Mbps。MPEG-2應用在NTSC/PAL和CCIR601中, 比特率為2~10Mbps。MPEG—1和MPEG—2的目的都是有效傳輸和存儲音視頻。而MPEG-4是為了提供更有效的視頻壓縮,基于內容提供廣泛的接人方式。它既可以在5-64kbps的移動(dòng)電話(huà)和公共交換網(wǎng)中應用,也可以在4Mbps帶寬的電視中應用。JPEG(Joint Photographic Experts Group)標準是一個(gè)適用范圍廣泛的通用標準,由聯(lián)合圖像專(zhuān)家小組制定。它不僅適用于靜止圖像的壓縮,也適用于電視圖像序列的幀內圖像的壓縮[1]。 近年來(lái),隨著(zhù)FPGA技術(shù)的日益成熟,愈來(lái)愈多的曾使用軟件或DSP實(shí)現的復雜數字算法開(kāi)始使用PPCA完成。這當然是由于FPGA的特殊結構和特性,使它可以更加高速和高效地完成這些算法。IPcore技術(shù)可以把這些FPGA中的算法設計封裝成包(模塊)。這些包具有智力產(chǎn)權,可以被繼承、共享或購買(mǎi)。 1 視頻壓縮原理和算法實(shí)現 視頻壓縮技術(shù)主要利用圖像信號的相關(guān)、冗余等特性,通過(guò)一些變換算法,保留對人眼視覺(jué)最重要的部分,進(jìn)行編碼傳輸。大部分視頻壓縮利用2D-DCT(二維離散余弦變換)和2D-IDCT(二維反離散余弦變換)變換得到圖像的頻譜,高精度保留對人眼重要的高頻部分,低精度保留低頻部分從而對視頻流進(jìn)行壓縮[1]。其過(guò)程如圖1所示。1.1 DCT變換算法 2D-DCT變換是視頻壓縮中的常用變換[2]。在壓縮過(guò)程中,將一幅圖像分成許多8x8的小塊進(jìn)行變換。 8x8的2D-DCT變換如公式(1)所示: 如果直接使用公式(1)進(jìn)行2D-DCT變換,運算量將會(huì )十分巨大,普通FPGA很難有效完成整個(gè)視頻壓縮運算。所以需要先把2D-DCT運算進(jìn)行一些變換,簡(jiǎn)化計算,減少運算量。 2D-DCT具有正交可分解性悶,可以通過(guò)對輸入的矩陣先做一維行變換,再做一維列變換實(shí)現。即將8x8數據先按行方向進(jìn)行累加運算,產(chǎn)生中間矩陣,再對中間矩陣按列方向進(jìn)行累加運算,最后得到變換結果。2D-DCT可以分解成兩個(gè)1D-DCT運算,見(jiàn)公式(2)。 將公式(2)展開(kāi)成矩陣形式,得到公式(3)。計算一個(gè)這樣的單元需要64個(gè)乘法器和56個(gè)加法器,運算量還是很大。利用公式(3)的對稱(chēng)性進(jìn)行變換,可以得到公式(4),使乘法器減少到32個(gè),加法器減少到8個(gè)。一個(gè)由公式(4)推演出的分布式乘法器如圖2所示。4個(gè)乘數(x0…x3)同時(shí)與各自的系數(c0…c3)相與,然后相加得到一個(gè)和數,這個(gè)和數與除2器出來(lái)的數相加,得到一個(gè)新的累計數。這個(gè)新的累加數如果是最后的結果,則輸出;如果不是,送入除2器,進(jìn)行下一步累加。這樣,分布式乘法器就可以完成系數yj的運算。 由于DCT運算中的系數Cm是常數,對于擁有RAM單元的FPGA,上述運算也可以使用查ROM表的方法實(shí)現。將圖2中的虛線(xiàn)內部分,改換ROM單元,如圖3所示。這時(shí),(x0…x3)作為ROM表的地址位,通過(guò)查表的方式輸出和數,進(jìn)行累加運算。ROM表的地址位寬度為4,存儲單元數量DW=24=16。一些生產(chǎn)商提供的綜合軟件帶有IP庫,可以調用這些IP庫中的ROM模塊實(shí)現ROM表。例如ALTERA公司的Megafunction Library中的LPM_ROM可以用以下的語(yǔ)句調用(VerilogHDL)[4]。用VC或MATLAB生成一個(gè).mif的ROM表文件。 LPM_ROM U1( .address(adr), .inclock(clk), .q(dat)); defparaln lpm_rom_component.lpm_width=16, lpm_rom_component.lpm_widthad=4, lpm_rom_component.1pm_address_control ="REGISTERED", lpm_rom_component.ipm_outdata ="UNREGISTERED", lpm_rom_component.1pm_file="romtable.mif"; 這樣,可以得到由這些基本單元構成與矩陣公式(4)相對的1D-DCT的FPGA設計,如圖4所示。其中4RC單元表示圖3的結構。如前所述,2D-DCT需要兩個(gè)1D-DCT共同完成,但是兩個(gè)1D-DCT運算的中間變量并不是直接傳遞的,而需要一個(gè)矩陣轉置模塊進(jìn)行耦合。 1.2 轉置RAM 2D-DCT單元由兩個(gè)相同的1D-DCT和轉置RAM等組成,如圖5所示。根據公式(2),可以知道1D-DCT先對8x8單元的行進(jìn)行累加操作,把得到的結果暫存到RAM中,直到8行都運算完成。RAM中的臨時(shí)8x8矩陣要先轉置,把列數據變成行數據,經(jīng)并串轉換后輸入到第2個(gè)1D-DCT進(jìn)行行累加。 轉置RAM是一個(gè)8x8的RAM陣列。當數據完成1D-DCT變換后,即由xij到zjl變換,按行順序輸入到轉置RAM,在讀出時(shí)按列順序讀出,這樣完成zil到zli的變換;然后將z9并串轉換,輸入到第二個(gè)1D-DCT,由zli運算得到ylk。這樣就完成了公式(1)的2D-DCT整個(gè)變換,如圖6所示。 1.3 2D-IDCT 2D-IDCT變換如公式(5)所示。可見(jiàn)公式(5)與公式(1)相同,所以2D-IDCT可以用與2D-DCT的同樣方法實(shí)現。 1.4 量化,編碼 量化算法包括一張量化表,它因人眼對各種空間頻率的靈敏度的不同而確定。在表中,較低空間頻率的精度要高于較高頻率的精度,這是由于人眼的低頻分量比較敏感,而對高頻分量不太敏感。 編碼可以采用游程編碼或熵編碼。單元模塊均可通過(guò)FPGA的片上RAM(滿(mǎn)足雙口RAM的特性)設計完成。圖62 結論 整個(gè)視頻壓縮IPcore設計可以在FPGA上實(shí)現,在27MHz的系統時(shí)鐘下工作。根據具體芯片的不同,可以在更高的速率工作。壓縮速率可以達到108Mbps。 實(shí)際應用中,數據字長(cháng)對壓縮效果和比率有較大影響,一般情況下系數Cm取12位,可以滿(mǎn)足大部分的視頻壓縮要求。 整個(gè)視頻壓縮IPcore可以直接下載到FPGA上(例如EDIF格式),獨立實(shí)現視頻壓縮功能,也可以通過(guò)軟件設計與其他的IPcore協(xié)同工作。例如,在網(wǎng)絡(luò )攝像機的應用上,可以把視頻壓縮IPcore、數字攝像頭控制器、網(wǎng)絡(luò )接口一起編譯成新的核。這個(gè)核具有視頻采 集、壓縮、傳輸等一系列功能。把核的EDIF文件通過(guò)生產(chǎn)廠(chǎng)商的下載軟件下載到FPGA上,就可以在一塊芯片上實(shí)現所有網(wǎng)絡(luò )攝像機的功能。實(shí)現了SoPC(System On a Programmable Chip)的目標。
評論