基于DSP處理器的UMTS Turbo MAP 解碼器
2 LLR的實(shí)現(xiàn)
對(duì)于UMTS Turbo解碼器,MAP算法的LLR可由式(1),式(2)和式(3)計(jì)算得到。式(2)和式(3)分別說明了通過α、γ和β來計(jì)算位“1”和位“0”的APP值的關(guān)系。這些MAP LLR的關(guān)系如圖5(a)和圖5(b)所示。
圖5(a) 位“1”的 MAP關(guān)系,(b)位“0”的MAP關(guān)系
對(duì)于兩個(gè)相同的輸入和輸出,位“1”和位“0”的MAP關(guān)系并不相似(極少情況下狀態(tài)被交換),而這類不對(duì)稱流程使我們無法利用Blackfin中計(jì)算單元和加載/存儲(chǔ)單元的最大帶寬。例如,圖5(a)和圖5(b)中標(biāo)示的部分,我們考慮與式(2)和式(3)的前兩項(xiàng)相對(duì)應(yīng)的頂端蝶形運(yùn)算。
圖6 在Blackfin ALU上的LLR計(jì)算
由于Blackfin只需要三個(gè)周期就能完成四個(gè)16位加法和兩個(gè)16位求最大值操作,要平衡加載/存儲(chǔ)(DAG)單元的帶寬和計(jì)算單元,只能用三個(gè)周期來加載數(shù)據(jù)。假設(shè)三個(gè)寄存器在三個(gè)周期中分別加載了α0|α0, α1|α1和 β4|β0,如圖6所示。那么通過16位加法操作,我們可以在兩個(gè)周期中計(jì)算出α0+β4|α0+β0和α1+β4|α1+β0。但是,MAX 操作要求仿照式(3)從反方向由α1+β0|α1+β4求得輸出的第二項(xiàng)。Blackfin的16位加法指令所支持的交叉選項(xiàng)(CO)選項(xiàng)可用來換回加法的中間輸出,如圖6所示。如果沒有交叉選項(xiàng)(CO),我們將耗費(fèi)四個(gè)周期來計(jì)算四次加法,而不是兩個(gè)。采用(CO)選項(xiàng)換回之后,執(zhí)行最大向量操作(一個(gè)周期)即可得到兩個(gè)Log-Max 輸出。這一部分程序代碼如圖7所示。有了(CO)選項(xiàng),就可以在18個(gè)Blackfin指令周期內(nèi)計(jì)算某一級(jí)上的LLR值。
總結(jié)
本文介紹了在ADI BF5xx處理器上Turbo MAP解碼器的高效實(shí)現(xiàn),詳細(xì)說明了基于窗口的存儲(chǔ)空間降低方法,并利用16位加/減和16位求最大值向量指令以及交叉選項(xiàng)(CO),高效地在Blackfin嵌入式處理器上實(shí)現(xiàn)了Turbo MAP解碼。該方法耗費(fèi)大約36個(gè)BF5xx周期,即可計(jì)算得到一個(gè)LLR輸出。同時(shí),利用約50kB的BF5xx存儲(chǔ)空間,完成了UMTS Turbo MAP解碼算法的數(shù)據(jù)和程序存儲(chǔ)。
評(píng)論