摘 要: 提出了在FPGA上實(shí)現(xiàn)H.264中整數(shù)變換量化" title="整數(shù)變換量化" target="_blank">整數(shù)變換量化的方法,,設(shè)計(jì)了基于動(dòng)態(tài)數(shù)據(jù)寬度和流水線技術(shù)的軟核(IP),,在處理速度和硬件資源方面分別進(jìn)行優(yōu)化,。此軟核作為PowerPC的一個(gè)硬件加速模塊在Xilinx Virtex-ⅡPRO中進(jìn)行了驗(yàn)證,。實(shí)驗(yàn)表明,在目前較難使用軟件方法實(shí)現(xiàn)高分辨率圖像實(shí)時(shí)編碼的情況下,,本文設(shè)計(jì)的軟核能夠提供2110M Pixels/s的編碼速率,,完全適應(yīng)實(shí)時(shí)編碼。
關(guān)鍵詞: H.264,;整數(shù)變換量化,;動(dòng)態(tài)數(shù)據(jù)寬度,;流水線,;PLB;軟核
?
H.264以其高復(fù)雜度為代價(jià)獲得了優(yōu)異的編碼效率,, 其中除部分控制流程的復(fù)雜模塊外,,H.264中的很多模塊適合用硬件實(shí)現(xiàn),。應(yīng)用中通常使用CPU+FPGA結(jié)構(gòu),將耗時(shí)較多的模塊用FPGA實(shí)現(xiàn),,CPU僅負(fù)責(zé)一些低復(fù)雜度的算法和編碼流程參數(shù)的設(shè)置,。
參考文獻(xiàn)[1]、[4],、[5]介紹了整數(shù)變換量化的硬件實(shí)現(xiàn),,但沒有考慮數(shù)據(jù)在處理過程中的寬度問題,因此會(huì)造成FPGA資源的浪費(fèi),。本文充分考慮了數(shù)據(jù)在處理過程中的動(dòng)態(tài)范圍,,使用更少的FPGA資源來實(shí)現(xiàn)H.264中的整數(shù)變換量化模塊。
結(jié)合實(shí)際應(yīng)用,,文中對該軟核在計(jì)算速度和硬件資源方面分別做了優(yōu)化,。經(jīng)過速度優(yōu)化的軟核性能明顯優(yōu)于文獻(xiàn)[1]、[4],、[5]中的設(shè)計(jì),,經(jīng)過消耗資源優(yōu)化的軟核也完全能夠勝任高分辨率的實(shí)時(shí)編碼。
1 整數(shù)變換
在完成幀內(nèi)和幀間預(yù)測以后,,需要對圖像參差數(shù)據(jù)進(jìn)行整數(shù)變換和量化,,使圖像數(shù)據(jù)的能量集中到一小部分系數(shù)上,進(jìn)一步降低碼流速率,。
1.1 整數(shù)變換原理
H.264中對圖像參差進(jìn)行二維DCT變換,,表達(dá)式為:
其中:
X為輸入數(shù)據(jù),A為變換矩陣,,Y為變換結(jié)果,。H.264對4×4的圖像塊進(jìn)行操作,則相應(yīng)的4×4 DCT變換矩陣A為:
?
? 防止解碼后的數(shù)據(jù)失配,,H.264對4×4 DCT中的A進(jìn)行改造,,采用整數(shù)DCT技術(shù),取 則(1)式可分解為:
與E的乘法被歸納到量化運(yùn)算中,,這樣(CXCT)中只剩下整數(shù)的加法,、減法和移位運(yùn)算,因此可以大大降低硬件實(shí)現(xiàn)的復(fù)雜度,,變換結(jié)果最多只需要16位的數(shù)據(jù),。
1.2 整數(shù)變換硬件結(jié)構(gòu)
本設(shè)計(jì)H.264中的4×4整數(shù)變換采用蝶形快速算法,如圖1所示,。首先對4×4塊的每一行做一維整數(shù)變換,,然后再對行變換結(jié)果做列的一維整數(shù)變換,最終得到4×4的整數(shù)變換結(jié)果,。圖1模塊需要32個(gè)加法器和32個(gè)減法器,,這樣在一個(gè)時(shí)鐘周期內(nèi)就可以完成一個(gè)4×4塊的整數(shù)變換,。
?
整數(shù)變換通常的做法是全部使用16位加法器和減法器,這樣可以簡化設(shè)計(jì),。然而在實(shí)際應(yīng)用中,,輸入的像素點(diǎn)范圍是[0,255],,如果第一級變換就使用16位,,則數(shù)據(jù)寬度無疑會(huì)占用更多的硬件資源。根據(jù)分析可知,,計(jì)算一維行變換以后,,數(shù)據(jù)輸出范圍為[-765,1020],,只需使用11位二進(jìn)制數(shù)表示,。計(jì)算一維列變換以后,數(shù)據(jù)輸出范圍是[-3 060,,4 080],,需要使用13位二進(jìn)制數(shù)表示。因此整數(shù)變換模塊的數(shù)據(jù)寬度可以確定為:進(jìn)行一維行變換時(shí)的加法器和減法器使用11位數(shù)據(jù)寬度,,一維列變換的加法器和減法器使用13位數(shù)據(jù)寬度,。
由于數(shù)據(jù)單向流動(dòng)的特點(diǎn),即沒有反饋,,可以使用流水線提高系統(tǒng)性能,。使用流水線時(shí)需要注意前后模塊處理速率的匹配。如本模塊中在行變換與列變換插入緩存構(gòu)成前后模塊,,前后模塊用同一時(shí)鐘,,并且整個(gè)模塊的工作頻率以最低工作頻率的模塊來確定。本設(shè)計(jì)用1級流水線來提高工作頻率,。如果流水線級數(shù)過多會(huì)消耗大量FPGA資源,,仿真實(shí)驗(yàn)證明,此模塊使用1級流水線時(shí),,只增加極少FPGA資源,。
2 量化
為了進(jìn)一步降低圖像傳輸碼率,需要對圖像進(jìn)一步壓縮,,方法是使用變換編碼及量化技術(shù),。
2.1 量化原理
H.264中采用標(biāo)量量化器。標(biāo)量量化器的原理是:
其中,,y為輸入樣本點(diǎn)編碼,,Qstep為量化步長,F(xiàn)Q為y的量化值。H.264標(biāo)準(zhǔn)支持52個(gè)量化步長,。量化的簡化操作如下:
其中,Wij為輸入樣本點(diǎn)編碼,,MF是標(biāo)準(zhǔn)中定義的值,,QP為量化系數(shù),f為偏移量,,對幀內(nèi)預(yù)測圖像塊f取2qbits/3,,對幀間預(yù)測圖像塊f取2qbits/6。
2.2 量化器實(shí)現(xiàn)
量化器硬件結(jié)構(gòu)如圖2所示,,其結(jié)果是實(shí)現(xiàn)對式(4)和式(5)的組合電路,。W是需要量化的數(shù)據(jù),MF是根據(jù)QP和當(dāng)前點(diǎn)位置在查找表中得到的值,。f和qbits是根據(jù)QP查表的輸出,。
?
為了硬件資源消耗最少,需要分析數(shù)據(jù)在計(jì)算過程中的動(dòng)態(tài)范圍,,使用最少的數(shù)據(jù)寬度來表示傳輸?shù)臄?shù)據(jù),,從而使用最少的硬件資源來實(shí)現(xiàn)組合運(yùn)算邏輯。W是整數(shù)變換結(jié)果,,根據(jù)整數(shù)變換部分的分析,,其取值范圍是[-3 060,4 080],,MF最大取13 107,,乘法器輸出動(dòng)態(tài)范圍是[-40 107 420,53 476 560],,至少用27位二進(jìn)制數(shù)表示,。本量化器的乘法器使用Vetex-Ⅱ中的18×18硬件乘法器,因此在輸入加法器之前需要將數(shù)據(jù)寬度調(diào)整為27bit,。加法器輸出的27位數(shù)據(jù)通過移位模塊調(diào)整為16位數(shù)據(jù)寬度,。
綜合考慮工作頻率和資源占用率,設(shè)計(jì)中使用2級流水線來提高性能,。
2.3 量化器優(yōu)化
本量化器一次只能量化一個(gè)點(diǎn),,無法滿足高質(zhì)量圖像編碼的要求。針對高質(zhì)量圖像編碼對此量化器進(jìn)行速度優(yōu)化,,即將n個(gè)量化器并聯(lián),,一個(gè)時(shí)鐘周期計(jì)算n個(gè)點(diǎn)。n根據(jù)實(shí)際需要進(jìn)行選擇,??紤]到與變換模塊的速度匹配,選擇16個(gè)量化器并聯(lián)。
3 軟核設(shè)計(jì)及測試
3.1 PLB總線的軟核結(jié)構(gòu)
PLB(Processor Local Bus)總線是IBM開發(fā)的一種高性能片上總線,,主要應(yīng)用于PowerPC405處理器系統(tǒng)中,,它支持32位、64位和128位數(shù)據(jù)寬度,。本設(shè)計(jì)使用64位總線寬度,,最大速據(jù)傳輸速率達(dá)800Mb/s。
如圖3,,PLB的軟核設(shè)計(jì)分為總線接口和H.264整數(shù)變換量化模塊兩部分,。PLB總線接口是與硬件體系結(jié)構(gòu)相關(guān)的部分,它是整數(shù)變換量化模塊與PLB總線上其他設(shè)備進(jìn)行交互的橋梁,。整數(shù)變換量化模塊與體系結(jié)構(gòu)無關(guān),,它也可以被移植到ARM體系結(jié)構(gòu)中。
整數(shù)變換量化模塊的硬件結(jié)構(gòu)如圖4,。寄存器組包含9個(gè)32bit的寄存器,,0、1,、2,、3為輸入的4×4參差數(shù)據(jù)寄存器;5,、6,、7、8為輸出數(shù)據(jù)寄存器,;4為控制寄存器,,包括go、done,、reset,、intra、DCT,、ZSCAN,、QP、datacount,,分別對應(yīng)啟動(dòng),、完成、復(fù)位,、幀內(nèi)/幀間,、DCT/Hadamard變換、Z掃描輸出,、量化級數(shù),、數(shù)據(jù)輸出計(jì)數(shù)器,。第二個(gè)模塊對寄存器組中數(shù)據(jù)進(jìn)行4×4整數(shù)變換,使用1級流水線,。第三個(gè)模塊對輸入的整數(shù)變換結(jié)果按QP進(jìn)行量化,,量化模塊中的MF、f,、qbits使用FPGA中的查找表保存,。數(shù)據(jù)輸出模塊受ZSCAN位控制,當(dāng)ZSCAN=1時(shí),,輸出數(shù)據(jù)寄存器中的數(shù)據(jù)按Z掃描排列;ZSCAN=0時(shí),,按矩陣排列,。
?
3.2 軟核的測試
首先使用IBM的CoreConnect工具和Modelsim6.0a來仿真設(shè)計(jì)的軟核并使用虛擬平臺(tái)進(jìn)行測試,仿真的目的是保證PLB總線接口能被處理器正確訪問,。仿真測試平臺(tái)結(jié)構(gòu)如圖5所示,。通過虛擬處理器將虛擬內(nèi)存中的數(shù)據(jù)寫入待測軟核,然后讀取待測軟核中的數(shù)據(jù)并判斷是否正確,。
仿真通過以后,,再將軟核集成到系統(tǒng)中,以便驗(yàn)證軟核在實(shí)際系統(tǒng)中的工作是否符合要求,。驗(yàn)證平臺(tái)系統(tǒng)結(jié)構(gòu)如圖6,,軟核驗(yàn)證使用PC機(jī)和目標(biāo)板相結(jié)合的方法,目標(biāo)板使用Xilinx公司XUP Virtex-II PRO開發(fā)板,,內(nèi)部含有兩個(gè)PowerPC內(nèi)核,。
?
驗(yàn)證流程如圖7。首先通過USB口下載目標(biāo)板程序,,程序開始運(yùn)行以后通過RS232從上位機(jī)下載待編碼的圖像參差數(shù)據(jù),,下載的數(shù)據(jù)保存在目標(biāo)板上的256MB DDR SDRAM中。數(shù)據(jù)下載完畢后,,程序?qū)⒋幋a數(shù)據(jù)依次寫入軟核并啟動(dòng)轉(zhuǎn)換,,并將計(jì)算完的數(shù)據(jù)寫入DDR SDRAM,待全部數(shù)據(jù)編碼完畢,,PowerPC將處理結(jié)果一起發(fā)送給上位機(jī),。上位機(jī)將結(jié)果與本機(jī)C代碼執(zhí)行結(jié)果相比較,最終確認(rèn)軟核是否正確工作,。
?
4 綜合結(jié)果分析
本設(shè)計(jì)中的整數(shù)變化量化模塊在Xilinx的XC2VP30 FPGA中進(jìn)行綜合,。XC2P30含有13 696個(gè)Slices和136個(gè)18×18乘法器。綜合工具使用Xilinx的ISE9.1,。
整數(shù)變換模塊綜合結(jié)果如表1,。
對量化器在速度和硬件資源上分別做了優(yōu)化,表2給出了兩種優(yōu)化的綜合結(jié)果。
表3給出本設(shè)計(jì)整數(shù)變換量化模塊與文獻(xiàn)[1]的比較結(jié)果,。對照發(fā)現(xiàn)速度優(yōu)化軟核編碼性能遠(yuǎn)遠(yuǎn)高于文獻(xiàn)[1]的設(shè)計(jì),,資源優(yōu)化的軟核性能也略高于文獻(xiàn)[1]的設(shè)計(jì)。
?
軟核綜合結(jié)果如表4,。目前該軟核中的PLB接口部分資源占用較大,,后續(xù)工作對這部分進(jìn)一步優(yōu)化。
本文將H.264中的整數(shù)變換量化與微處理器系統(tǒng)相結(jié)合,,針對不同的應(yīng)用場合實(shí)現(xiàn)了兩個(gè)基于PLB總線的H.264 整數(shù)變換量化軟核,,并在Xilinx XUP Virtex-II PRO開發(fā)板中做了驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,,兩個(gè)軟核均能在系統(tǒng)中穩(wěn)定工作,,并能滿足不同分辨率的實(shí)時(shí)應(yīng)用。
參考文獻(xiàn)
[1] 劉海鷹,,張兆楊,,沈禮權(quán).基于FPGA的H.264變換量化的高性能的硬件實(shí)現(xiàn).中國圖像圖形學(xué)報(bào),2006,,11(11).
[2] RAJA G,,KHAN S,MIRZA M J.VLSI Architecture & Implementation of H.264 Integer Transform.IEEE,,2005.
[3] LEE S,,Kyeongsoon Cho.Implementation of an?AMBA-Compliant IP for H.264 Transform and?quantization.IEEE,2006.
[4] 樓劍,,陸亮,,虞露,等.H.264變換和量化的分析.浙江大學(xué)學(xué)報(bào),,2004(5).
[5] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)——H.264/AVC[M].北京:人民郵電出版社,,2005.
[6] IBM Inc,Xilinx Inc.64-Bit Processor Local Bus Architecture Specifications.http://www.xilinx.com/products/
virtex/coreconnect/03_05_02_cc/CoreConnect/crcn.html.