基于C6000系列DSP的MPEG-4編碼器實(shí)現
3.2 利用VLIW結構設計程序
利用VLIW結構設計程序可以充分利用DSP多個(gè)功能單元并行工作的特性。DSP的每一個(gè)通道都有四個(gè)功能單元(L、S、M、D),每個(gè)功能單元負責完成一定的邏輯或者算術(shù)運算,另外A、B兩個(gè)通道的互訪(fǎng)可以通過(guò)交叉單元1x、2x完成。程序2中,在一個(gè)時(shí)鐘周期內并行執行八條指令,使用了所有的功能單元S2、S1、L1、M2、L2、M1、D1、D2,同時(shí)使用了所有的交叉單元1x、2x,已經(jīng)達到極限。但是這種并行指令的使用也有一定的限制,其最根本的要求就是不能引起資源沖突,例如:
·不能用同一個(gè)功能單元;
·不能對同一通道的寄存器進(jìn)行兩次long型寫(xiě)操作;
·不能對同一通道的寄存器同時(shí)進(jìn)行long型讀操作和存儲操作;
·讀同一寄存器不能超過(guò)4次;
·在同一個(gè)時(shí)鐘周期不能有兩個(gè)指令寫(xiě)入同一寄存器,這不是說(shuō)向同一寄存器寫(xiě)的兩條指令不能放在同一個(gè)并行指令包內,而是說(shuō)兩個(gè)指令不能在寫(xiě)寄存器的那個(gè)時(shí)鐘周期并存。
仍然以MPEG-4中的DCT算法為例說(shuō)明VLIW結構在程序優(yōu)化中的作用。進(jìn)行DCT變換的原始數據是short型的,因此可以將兩個(gè)數據合成一個(gè)32位的數據來(lái)訪(fǎng)問(wèn);為了使兩個(gè)通道并行訪(fǎng)問(wèn)數據和運算,應盡量把要訪(fǎng)問(wèn)的數據平均地分配給不同的通道寄存器;并且通過(guò)交叉單元使兩個(gè)通道相互訪(fǎng)問(wèn),從而達到很高的并行性,大大提高了編碼效率。
MPEG-4編碼的其它算法,例如逆DCT、運動(dòng)估計、運動(dòng)補償等算法都包含著(zhù)大量的循環(huán)運算和數據訪(fǎng)問(wèn)。因此利用DSP的VLIW結構和流水線(xiàn)結構優(yōu)化MPEG-4編碼算法就成為一種非常合適的方法。
當然,編寫(xiě)程序時(shí)不是將DSP的VLIW結構和流水線(xiàn)結構分開(kāi)考慮,而是將兩者結合起來(lái),在編寫(xiě)每一條指令時(shí)都要清楚這條指令的執行周期以及使用的功能單元,這樣才能編寫(xiě)出高效的程序。
表1對1-D Chen 8×8 DCT、100點(diǎn)點(diǎn)積和FIR濾波器算法的C語(yǔ)言實(shí)現與利用VLIW及流水線(xiàn)結構的匯編代碼實(shí)現進(jìn)行比較。從統計數據可以看出,利用DSP結構編寫(xiě)的匯編代碼執行效率要比C語(yǔ)言編寫(xiě)的代碼執行效率高40倍左右。因此充分利用DSP的VLIW結構和流水線(xiàn)結構設計匯編程序能夠使效率大幅度提高。
本文對MPEG-4編碼卡進(jìn)行了設計,主要難點(diǎn)是MPEG-4編碼算法的優(yōu)化,MPEG-4的編碼復雜、代碼量大。利用C6000系列DSP的VLIW結構和流水線(xiàn)結構設計出了MPEG-4編碼算法。實(shí)驗證明,算法效率得到了大幅度提高。
評論