H.264/AVC中CAVLC編碼器的硬件設(shè)計(jì)實(shí)現(xiàn)
(5)寫碼字。
非零系數(shù)級(jí)的碼字為“前綴碼字+后綴碼字”,前綴碼字為prefix個(gè)0后緊跟一個(gè)1(即前綴碼字為1,碼長(zhǎng)為prefix+1),后綴碼字值為suffix,碼長(zhǎng)為levelsuffixsize。
依據(jù)圖3編碼流程,level編碼所需的時(shí)鐘周期與TC和T1之差有關(guān),不同的數(shù)據(jù)塊所需的時(shí)鐘周期不同,而編碼前需經(jīng)過掃描和統(tǒng)計(jì)。當(dāng)非零系數(shù)較多時(shí),level編碼采用傳統(tǒng)的串行方式所需的時(shí)鐘周期可能比統(tǒng)計(jì)模塊所耗要多,導(dǎo)致不穩(wěn)定的吞吐量。另一方面,獲得level的碼字需知道該系數(shù)的prefix、suffix以及l(fā)evelsuffixsize,而levelsuffixsize的大小是自適應(yīng)變化的,與上一個(gè)已編碼系數(shù)的絕對(duì)值大小有關(guān),這給并行處理帶來了一定困難。為此,采用并行處理和兩級(jí)流水線相結(jié)合的結(jié)構(gòu)并行處理2個(gè)非零系數(shù),如圖4所示。第一級(jí)初始化suffixlength,求coeffs的絕對(duì)值及中間變量levelcode;第二級(jí)更新suffixlength,計(jì)算prefix,suffix和levelsuffixlength。模塊coeffs SIPO buffer實(shí)現(xiàn)串行輸入并行輸出,輸入輸出關(guān)系如圖5所示。
3 實(shí)驗(yàn)驗(yàn)證分析
Level編碼電路結(jié)構(gòu)采用Verilog HDL語言描述,在ModelSim SE 6.0上進(jìn)行仿真,使用Synplicity公司的Synplify Pro完成綜合過程。最后采用Xilinx公司VirtexⅡ系列的xc2v250 FPGA進(jìn)行實(shí)現(xiàn)和驗(yàn)證。
圖6給出了ModelSim的仿真波形,其結(jié)果與JVT校驗(yàn)軟件模型JM16.2[7]的值一致。從圖6可以看出,并行編碼TC-T1個(gè)level值比串行方式節(jié)省(TC-T1)/2個(gè)時(shí)鐘周期,當(dāng)非零系數(shù)較多時(shí),也能獲得穩(wěn)定的吞吐量。表1給出了Synplify Pro綜合的硬件資源報(bào)告。系統(tǒng)允許的最高時(shí)鐘頻率為158.1 MHz,硬件資源消耗如表1所示。綜上所述,本設(shè)計(jì)滿足H.264實(shí)時(shí)高清視頻編碼的要求。
評(píng)論