关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍_第1页
关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍_第2页
关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍_第3页
关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍_第4页
关于基于Xilinx FPGA 的高速Viterbi回溯译码器的性能分析和应用介绍_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关于基于XilinxFPGA的高速Viterbi回溯译码器的性能分析和应用介绍新一代移动通信系统目前主要采用多载波传输技术,基带传输速率较3G有很大提高,一般要求业务速率能达到30Mb/s以上。约束长度卷积码以及Viterbi译码器由于其性能和实现的优点,在新一代通信系统中仍然占有一席之地。这就要求进一步提高Viterbi译码器的译码速率,同时优化Viterbi设计以减少由速率提高和约束长度的增加带来的硬件实现复杂度。1Viterbi译码器基本结构

Viterbi译码器主要由分支度量计算(BMU),度量累积存贮(PathMetric),度量比较判断(ACS)以及回溯译码(TraceBack)4个模块组成[1],如图1所示。本文优化主要针对约束长度为9的1/2卷积码,生成多项式为561(oct),753(oct)。BMU(BranchMetricUnit)模块计算接收的2个软信息与4种可能的编码输出的欧式距离,作为分支度量送入ACS模块。ACS(Add_Compare_Select)模块根据编码方式和状态转移将分支度量和256状态的度量分别进行累积相加,得到进入下一时刻的新度量,然后比较到达下一时刻同一状态的2种度量大小,选择小的度量,同时生成各状态的幸存比特输出。TraceBack回溯模块由ACS生成的当前时刻的判决比特回溯L个时刻(L为回溯深度),得到L时刻前的状态和译码输出。2XilinxVirtexII的结构和功能

VirtexII是Xilinx公司的高性能系列FPGA。最高规模能达到8000000门,内部时钟高达400MHz。存贮单元具有高达到3M容量的真正双端口BlockRam。运算单元中包括最多168b的专用乘法器。VirtexII中的可配置单元为CLB(ConfigurableLogicBloccks)。CLB中的资源可以灵活配置成多种结构。包括实现查找表,移位寄存器等功能。在存贮资源不够的时候,CLB也可以配置为分布式的Ram[2]。双口BlockRam是Viterbi译码器中实现回溯译码的主要模块,其端口如图2所示。可以看出Block-Ram具有2套独立的地址和数据输入、输出线,独立的端口使能、写使能控制线,而且2个端口各自的时钟输入可以不同。这些结构保证了BlockRam是一个完全真正双端口操作的存贮器。VirtexII系列中BlockRam最多有168个,每个容量为18k。可以配置成不同的数据宽度和深度。同时BlockRam的访问时间只有3.3ns,能够保证高速的存取要求。3基于XilinxBlockRam的回溯优化方案

3.1回溯算法的原理和存在的问题

在Viterbi译码模块中,ACS和TraceBack是最核心的模块。ACS需进行大量的累积和比较运算,TraceBack需进行多步回溯运算。当Viterbi译码器译码状态为256时,这些运算都需要占用大量的时间和资源。对于256状态的1/2卷积码的译码,需要512个加法器,512个比较器和选择器来完成累加度量、比较度量大小,并选择小的度量作为该状态新的度量。对一个状态度量更新的操作如图3所示。ACS得出的256位的判决比特送入回溯模块进行译码。回溯译码通过寻找在一定深度范围内的最小度量的路径来获得最大似然译码。实现中采用截尾译码,每一个时钟到来的时候,ACS模块会送入当前时刻各状态的幸存比特(如图4中的Sign[S]),从这些幸存比特可以得到由当前各状态往回L时刻的最小路径上,前一时刻经过的状态(如图4中,Sign[S]=0,最小路径上前一时刻状态为T1,否则为T2)。如果存贮了L个时刻的256位状态幸存比特,就可以从当前时刻的某一状态开始回溯L时刻得到对应的最小路径起始状态(如图4中从S状态回溯L时刻得到初始的P状态)。实际上无论从当前的何种状态开始回溯,当回溯深度L为5~10倍的编码寄存器数时,所得到的L时刻前的初始状态都是相同的(当采用约束长度为9的卷积码,L最少应为40)[3]。按照上述的回溯方案对256状态的卷积码进行译码时,会占用大量的资源,在VirtexII系列中的Xc2v3000上综合时如果对ACS模块也不做任何处理的话甚至会产生资源不够的情况。除此之外这种回溯要求在一个时钟周期内进行L步回溯操作,结果导致速率达不到30Mb/s的要求。3.2基于XilinxBlockRam的回溯优化方案

虽然一个时钟周期回溯L步在30MHz的时钟速率下不能完成,但是如果回溯前的开始状态已经是确定的最小路径中的状态,那么每回溯一步就对应一个译码输出,这样的输出速率就能达到高速率。最后只需对L步的回溯译码输出做一个L深度的倒序(LIFO)就能得到正确顺序的译码输出。XilinxVirtexII的双端口BlockRam[2]能够真正地对2个端口进行不同的读写操作。这种结构能很好的吻合改进回溯算法的要求。应用这种结构可以存贮ACS送入的幸存比特,同时通过控制地址的读写来实现写入幸存比特和回溯译码读出同步进行。回溯模块存贮管理原理如图5所示。回溯模块的实现结构如图6所示。在图5中,1,2,3分别为3块位宽为256,深度为64的双端口BlockRam,实现中将3块合为1块位宽256,深度192的BlockRam。BlockRam的2个口设为A口和B口。A口为只读口,每个时钟到来时,将地址Tb_add指向的ACS幸存比特读出,并回溯计算出前一时刻的状态。B口为读写口,且读操作优于写操作。当时钟到来时,先根据当前的状态和地址Dec_add所读出的幸存比特计算出前一时刻的状态和译码输出,然后在相同的时钟周期内在同一地址处将ACS新产生的幸存比特写入。图5中细箭头表示译码读出和ACS幸存比特写入地址(Dec_add)的起始位置和方向,粗箭头表示回溯读出前一时刻状态的读地址(Tb_add)的起始位置和前进方向。每64个时钟开始时,回溯读出的起始状态设为0,而译码读出的初始状态为上一个64个时钟结束时回溯得到的初始状态(虚线箭头所示)。每64个时钟开始的时候,双端口BlockRam的2个读写地址的初始值按照图示的规律循环右移,且前进的方向每64个时钟反向一次。到64×6个时钟后恢复初始的地址值和方向。由图5中可以看出,64×3个时钟后,将对块2回溯得到的状态作为初始状态开始对块1中的幸存比特进行回溯译码,这时才开始真正的译码输出。所以译码延时为192个时钟周期,译码的回溯深度为64个时钟周期。4性能分析

本文的优化方案在XilinxISE5集成环境下进行Verilog描述以及综合和布局布线,并使用Modelsim7对约束长度为9、回溯深度为64的Viterbi软译码器在信噪比为2.8db的高斯白噪声信道中进行了后仿真,接收误码率小于10-7。采用不同约束长度的译码器在ISE5.2环境下进行综合和布局布线后,速率和面积的比较结果如表1所示。仿真使用的FPGA为XilinxVirtexII系列中的Xc2v3000[2]。由表1可以得出,当采用基于Xilinx双口Block-Ram

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论