高速Viterbi译码器的优化和实现
j的最高位Sk-2控制。当Sk-2=1时,交换器交叉互联,如果Sk-2为0时,各ACS和RAM直接相连。这种接口设计十分容易实现。
在Viterbi译码算法中,译码状态的转移导致度量的读出和写入地址的不同,这样用FPGA实现时就需要两块RAM采用乒乓模式实现。本文更新路径存储采用原位运算方法,也就是找出状态转移的规律性,建立转移后的新状态和转移前的老状态际址映射关系,使度量的更新在原位上进行,使存储空间减小一半。
2.2幸存路径管理模块
幸存路径的存回溯是Viterbi算法关键的一步,最终的译码输出从对幸存的回溯中得到。由于采用基2的状态转移算法,当前时刻对应的前序时刻状态只有2个,所以在路径回溯中采用1bit指针算法。也就是说,在每个状态路径更新时,只需写1bit路径状态转移信息。幸存路径存储单元可看作一个存储器阵列,每列对应一个状态,一列中的每个单元都有一个1位的指针。在实际设计中,考虑到数据总线的带宽有限,对于8位的幸存路径数据总线,在幸存路径存中将256个状态分成32块。对应幸存路径时,先通过当前状态地址寻址的方式来选择所对应的幸存路径块。
在实际应用中,为了保证译码的准确度,幸存路径的回溯长度通常取4~5倍约束长度,本文回溯长度定为64。如图5所示,当一个解码初始信号进来后,系统把当前所有状态中的最小状态,也就是最小状态值作为当前状态值,路径回溯模块把地址值送入MMU中,从32个分组块中选取相应的幸存路径存到幸存状态值(8位),然后根据当前状态的指针从这8位数据中得到1位幸存路径比特,而下一个状态值由当前状态的低7位和这个幸存路径比特决定。当回溯了64步后,控制信号给出一个输出指示时,当前状态值的最高位即是解码输出值。
图5路径回溯模块框图
本文重点从ACS的并行处理、度量路径的存储管理和路径回溯上对Viterbi译码方法进行了讨论。从实际应用出发,考虑到硬件功耗的面积的减小,采用了4个ACS并行,路径的存储和管理都采取了分组的模式,简化了接口电路,译码达到了较高的速度,完全可以满足3GPP标准的要求。用Xilinx的Virtex600EFPGA芯片实现了K=9、码率为1/2、编码速率为350kbps、时钟频率40MHz的Viterbi译码器。表1列出了XilinxISE对本设计综合布线报告中提供的参数。
表1Viterbi译码器布线参数表
NumberofSlices:1,596outof6,19223%
SliceFlipFlops:620
4inputLUTs:1,320
NumberofSlicescontaining
unrelatedlogic:0outof1,5960%
NumberofbondedIOBs:30outof15319%
NumberofBlockRAMs:20outof7234%Totalequivalentgatecountfordesign:474,21 《高速Viterbi译码器的优化和实现(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/171772.html
在Viterbi译码算法中,译码状态的转移导致度量的读出和写入地址的不同,这样用FPGA实现时就需要两块RAM采用乒乓模式实现。本文更新路径存储采用原位运算方法,也就是找出状态转移的规律性,建立转移后的新状态和转移前的老状态际址映射关系,使度量的更新在原位上进行,使存储空间减小一半。
2.2幸存路径管理模块
幸存路径的存回溯是Viterbi算法关键的一步,最终的译码输出从对幸存的回溯中得到。由于采用基2的状态转移算法,当前时刻对应的前序时刻状态只有2个,所以在路径回溯中采用1bit指针算法。也就是说,在每个状态路径更新时,只需写1bit路径状态转移信息。幸存路径存储单元可看作一个存储器阵列,每列对应一个状态,一列中的每个单元都有一个1位的指针。在实际设计中,考虑到数据总线的带宽有限,对于8位的幸存路径数据总线,在幸存路径存中将256个状态分成32块。对应幸存路径时,先通过当前状态地址寻址的方式来选择所对应的幸存路径块。
在实际应用中,为了保证译码的准确度,幸存路径的回溯长度通常取4~5倍约束长度,本文回溯长度定为64。如图5所示,当一个解码初始信号进来后,系统把当前所有状态中的最小状态,也就是最小状态值作为当前状态值,路径回溯模块把地址值送入MMU中,从32个分组块中选取相应的幸存路径存到幸存状态值(8位),然后根据当前状态的指针从这8位数据中得到1位幸存路径比特,而下一个状态值由当前状态的低7位和这个幸存路径比特决定。当回溯了64步后,控制信号给出一个输出指示时,当前状态值的最高位即是解码输出值。
图5路径回溯模块框图
本文重点从ACS的并行处理、度量路径的存储管理和路径回溯上对Viterbi译码方法进行了讨论。从实际应用出发,考虑到硬件功耗的面积的减小,采用了4个ACS并行,路径的存储和管理都采取了分组的模式,简化了接口电路,译码达到了较高的速度,完全可以满足3GPP标准的要求。用Xilinx的Virtex600EFPGA芯片实现了K=9、码率为1/2、编码速率为350kbps、时钟频率40MHz的Viterbi译码器。表1列出了XilinxISE对本设计综合布线报告中提供的参数。
表1Viterbi译码器布线参数表
NumberofSlices:1,596outof6,19223%
SliceFlipFlops:620
4inputLUTs:1,320
NumberofSlicescontaining
unrelatedlogic:0outof1,5960%
NumberofbondedIOBs:30outof15319%
NumberofBlockRAMs:20outof7234%Totalequivalentgatecountfordesign:474,21 《高速Viterbi译码器的优化和实现(第2页)》