首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于DSP处理器的UMTS Turbo MAP 解码器(4)

基于DSP处理器的UMTS Turbo MAP 解码器(4)

图 2 基于窗口的Turbo解码器的高效实现
  BLACKFIN处理器上MAP解码器度量计算实现
  在这一部分,将讨论Turbo MAP解码器中复杂的度量计算如何在ADI Blackfin处理器上实现,并充分利用Blackfin处理器提供的专用特性高效实现Turbo解码器。
  1 状态度量计算实现
  
  图3 第n+1级和第n级计算的蝶形算法
  状态度量α和β可由式(4)和式(5)求得,该状态度量的计算可用图3所示的方法得以实现。α由正向(从左到右)计算得到,而β则由反向(从右到左)计算得到。图中,实线和虚线分别对应于输入“1”和“0”的编码。虽然通过分支度量(γ),可以由两个输入状态度量计算出两个输出状态度量(α和β),但这两个度量的输出状态却根据它们各自的输入状态而有所不同。在执行过程中,这一输入和输出状态度量的位置改变,在将数据从ALU寄存器存入存储器和将数据从存储器载入ALU寄存器时,可以通过加载/存储(DAG)模块解决。
  
  图4 UMTS Turbo解码器状态度量估计的高效实现
  UMTS Turbo解码过程中,α和β计算在Blackfin处理器上的高效实现如图4。由于Blackfin处理器能以向量模式运行,在单个指令周期执行四个16位加/减操作或两个16位求最大值操作,每一级α的计算需要8个循环周期来完成,而每一级β的计算则需要另外8个周期来完成。                                                                                                                                                                                               

2 LLR的实现
  对于UMTS Turbo解码器,MAP算法的LLR可由式(1),式(2)和式(3)计算得到。式(2)和式(3)分别说明了通过α、γ和β来计算位“1”和位“0”的APP值的关系。这些MAP LLR的关系如图5(a)和图5(b)所示。
  
  图5(a) 位“1”的 MAP关系,(b)位“0”的MAP关系
  对于两个相同的输入和输出,位“1”和位“0”的MAP关系并不相似(极少情况下状态被交换),而这类不对称流程使我们无法利用Blackfin中计算单元和加载/存储单元的最大带宽。例如,图5(a)和图5(b)中标示的部分,我们考虑与式(2)和式(3)的前两项相对应的顶端蝶形运算。
  
  图6 在Blackfin ALU上的LLR计算
  由于Blackfin只需要三个周期就能完成四个16位加法和两个16位求最大值操作,要平衡加载/存储(DAG)单元的带宽和计算单元,只能用三个周期来加载数据。假设三个寄存器在三个周期中分别加载了α0|α0, α1|α1和 β4|β0,如图6所示。那么通过16位加法操作,我们可以在两个周期中计算出α0+β4|α0+β0和α1+β4|α1+β0。但是,MAX 操作要求仿照式(3)从反方向由α1+β0|α1+β4求得输出的第二项。Blackfin的16位加法指令所支持的交叉选项(CO)选项可用来换回加法的中间输出,如图6所示。如果没有交叉选项(CO),我们将耗费四个周期来计算四次加法,而不是两个。采用(CO)选项换回之后,执行最大向量操作(一个周期)即可得到两个Log-Max 输出。这一部分程序代码如图7所示。有了(CO)选项,就可以在18个Blackfin指令周期内计算某一级上的LLR值。

  
  图7 利用BF5xx处理器交叉选项(CO)的LLR高效实现
  总结
  本文介绍了在ADI BF5xx处理器上Turbo MAP解码器的高效实现,详细说明了基于窗口的存储空间降低方法,并利用16位加/减和16位求最大值向量指令以及交叉选项(CO),高效地在Blackfin嵌入式处理器上实现了Turbo MAP解码。该方法耗费大约36个BF5xx周期,即可计算得到一个LLR输出。同时,利用约50kB的BF5xx存储空间,完成了UMTS Turbo MAP解码算法的数据和程序存储。
继承事业,薪火相传
返回列表