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