RAM讀寫時序限制解決方案
在逆塊掃描順序中,一些后續(xù)的系數(shù)可能需要在一開始時就準(zhǔn)備好,而一些在前面次序的系數(shù)則可能在后續(xù)的時間使用,所以只有一個塊的所有數(shù)據(jù)都存儲完成后,才能進(jìn)行后續(xù)的反變換,故至少要對一個塊的變換系數(shù)進(jìn)行存儲。為了提高處理速度,后續(xù)的反變換模塊中將采用并行流水線輸入,因此存儲模塊此時不能采用有時序限制的RAM,本文采用了寄存器組實現(xiàn)。同時為了消除塊數(shù)據(jù)的準(zhǔn)備延時,還采用了乒乓結(jié)構(gòu),即在設(shè)計中用了兩個寄存器組,這樣就可在處理當(dāng)前一個塊系數(shù)的同時,用另一個寄存器組來存儲下一個塊反量化后的數(shù)據(jù)。
在反變換中也需要用到轉(zhuǎn)置存儲。為了節(jié)省資源,本設(shè)計采用了寄存器復(fù)用技術(shù),即反變換中用到的轉(zhuǎn)置矩陣與逆掃描后用于存儲變換系數(shù)的矩陣復(fù)用,具體復(fù)用方法如圖3所示。

以上為一個寄存器組,包含64個13 bit的寄存器。最后一列為反變換模塊輸入,即當(dāng)一個塊變換系數(shù)根據(jù)逆掃描順序存儲完后,連續(xù)8個時鐘周期讀取寄存器組最后一列,在每個時鐘周期向反變換模塊并行輸入8個13 bit的數(shù)據(jù)。第一列為轉(zhuǎn)置數(shù)據(jù)輸入端??紤]到反變換流水線及復(fù)用的問題,在連續(xù)2個時鐘周期讀取寄存器組最后一列輸入到反變換模塊后,轉(zhuǎn)置數(shù)據(jù)開始從第一列輸入,這樣可以滿足反變換內(nèi)部的流水線問題,也可以達(dá)到寄存器復(fù)用的目的。第一行為轉(zhuǎn)置數(shù)據(jù)的輸出,最后一行在轉(zhuǎn)置數(shù)據(jù)輸出時賦值為零,這樣可以使轉(zhuǎn)置輸出和寄存器賦零同時進(jìn)行,從而可以減少不必要的時鐘周期和資源。
2 仿真結(jié)果及分析
根據(jù)上述思想,采用Verilog HDL語言對算法進(jìn)行了RTL級電路描述,并采用Altera公司的軟件Quartus II 8.0 對此算法進(jìn)行了實現(xiàn)和仿真驗證,并將仿真結(jié)果與rm52j軟件的輸出結(jié)果進(jìn)行了比較。Quartus II仿真結(jié)果如圖4所示,波形圖給出了一個塊的反量化和反變換輸出結(jié)果。rm52j的輸出結(jié)果如圖5所示,比較可見輸出結(jié)果相同。


本設(shè)計采用的是自頂向下和自下而上的混合設(shè)計方法,逆掃描、反量化和反變換過程是AVS系統(tǒng)中的一個模塊,局部的測試很難判斷出該模塊是否可以應(yīng)用到整個解碼系統(tǒng)中去,所以此模塊亦在自己搭建的基于SoPC的AVS驗證平臺上進(jìn)行了驗證。加入此模塊前,軟件處理一幀碼流時間與用此硬件模塊代替軟件模塊后的解碼時間如圖6所示,通過計算可知解碼速度提高約15%。

評論