TMS320C6000系列DSP維特比譯碼程序優(yōu)化設計
卷積碼因為其編碼器簡單、編碼增益高以及具有很強的糾正隨機錯誤的能力,在通信系統中得到了廣泛的應用?;谧畲笏迫粶蕜t的維特比算法(va)是在加性高斯白噪聲(awgn)信道下性能最佳的卷積碼譯碼算法,也是常用的一種算法。一般來說,實現軟判決維特比譯碼可以有三種方案供選擇:專用集成電路(asic)芯片、可編程邏輯陣列(fpga)芯片以及數字信號處理器(dsp)芯片。參考文獻[3]對這三種方案的優(yōu)劣做了詳細的比較。使用dsp芯片實現譯碼是最為靈活的一種方案,但速度也是最慢的,因為整個譯碼過程都是由軟件來實現的。在近年來興起的軟件無線電技術中,要求采用可編程能力強的的器件(dsp、cpu等)代替專用的數字電路。對信道編解碼而言,這樣做的優(yōu)點在于只需要在程序上加以少量改動,就可以適應不同的編碼速率以及各種通信系統所要求的不同的編解碼方法。然而速度的瓶頸限制了dsp譯碼在實時系統中的應用,因此提高dsp的譯碼速度對于軟件無線電有著重要的意義。本文的目的就是通過對譯碼程序結構優(yōu)化,來提高dsp芯片執(zhí)行va算法的速度。1維特比譯碼器首先,需要定義兩個將在本文中用到的術語:
輸入幀--每次輸入譯碼器的比特;
輸出幀--對應一個輸入幀,譯碼器輸出的比特。
圖1所示是卷積碼譯碼器(va算法)的一種典型結構。以(2,1,7)卷積碼為例(輸入幀含2比特,輸出幀為1比特),來說明譯碼器的三個主要部分。1.1支路度量計算單元(bmg)計算當前輸入幀對應的128條支路的路徑度量值,并將其存人支路度量存儲單元(bmm)。1.2加比選單元(acs)將支路度量值與相連的前面的路徑度量值相加得到延伸后的新路徑的度量值;比較連接在同一個狀態(tài)上的兩條新路徑的度量值;選擇其中度量值較小的那條路徑(幸存路徑),并將它的度量值存儲到新路徑度量存儲器(sm)中,幸存路徑值(對應編碼狀態(tài)的輸入比特)存儲到路徑存儲器(pm)中。
1.3幸存路徑計算單元找到64條幸存路徑中度量值最小的一個(最大似然路徑),通過回溯操作(traceback)在pm中找出該路徑對應的所有輸入比特,依次輸出即為譯碼結果。每輸出一幀,都對應著一次支路單元計算和64次acs操作。acs操作在總的運算時間里占了很大的比例。程序優(yōu)化的主要工作就是設法減少每個acs操作所需要的時鐘周期數。2 tms320c6000 dsp芯片的特點tms320c6000系列dsp是基于tms320c6000平臺的32位浮點dsp處理器。它包含兩個子系列:用于定點計算的tms320c62x系列和用于浮點計算的tms320c67x系列tms320c6000系列cpu結構如圖2所示。時鐘頻率最高可達到250mhz。該系列dsp包含兩個通用的寄存器組a和b,每組有16個32位的寄存器。芯片內含8個運算功能單元:兩個乘法器(.m1和.m2);六個算術邏輯單元(.l1.l2.s1.s2.d1.d2)。所有單元都能獨立并行操作。以tm320c6701為例,它的工作頻率最高為167mhz,最快速度可達8×167=1336mips。
實際上,要實現這個速度存在很多瓶頸,主要有下面幾種限制:(1)功能模塊的限制 8個功能模塊能夠執(zhí)行的指令不盡相同。在實際程序中,由于程序流程的限制,指令的位置不能隨便調換,因此不可能在每一個時鐘周期都讓8個模塊同時工作。程序優(yōu)化的主要手段就是要提高指令的并行程度,即平均每一周期內同時執(zhí)行的指令數。(2)交叉路徑(cross path)的限制 每一個功能模塊都只能對其所屬的寄存器組中的寄存器進行直接操作。例如.l1只能將結果直接寫入寄存器組a。如果要對另一個寄存器組執(zhí)行讀或寫操作,需要用到"交叉路徑",而整個cpu中只有兩條交叉路徑。也就是說,一個周期內至多能同時容納兩個相反方向的交叉讀寫。(3)多周期指令的限制 ld命令的功能是將數據從存儲器讀到寄存器中,由.d模塊執(zhí)行。但執(zhí)行l(wèi)d命令后必須等待4個周期才能得到需要的數據。類似這樣的需要多個周期才能完成的命令(例如跳轉指令b)都成為提高指令并行處理程度的障礙。(4)對長數據操作的限制 c6000指令集只能以8比特、16比特、32比特或者40比特為單位對數據進行操作。3 va在dsp上的優(yōu)化實現acs操作是整個va算法中運算量最大的部分。在通常的程序設計中,使用一種對稱的蝶形運算實現acs操作,每次可以完成兩個acs操作。因此優(yōu)化的核心