datasheet
超过460,000+ 应用技术资源下载
pdf

(2,1,9)软判决Viterbi译码器的设计与FPGA实现

  • 1星
  • 日期: 2014-03-05
  • 大小: 4.59MB
  • 所需积分:1分
  • 下载次数:1
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 219软判决Viterbi译码器的设计与FPGA实现

卷积码是无线通信系统中广泛使用的一种信道编码方式。Viterbi译码算法是一种卷积码的最大似然译码算法,它具有译码效率高、速度快等特点,被认为是卷积码的最佳译码算法。本文的主要内容是在FPGA上实现约束长度为9,码率为1/2,采用软判决方式的Viterbi译码器。 本文首先介绍了卷积码的基本概念,阐述了Viterbi算法的原理,重点讨论了决定Viterbi算法复杂度和译码性能的关键因素,在此基础上设计了采用“串-并”结合运算方式的Viterbi译码器,并在Altera EP1C20 FPGA芯片上测试通过。本文的主要工作如下: 1.对输入数据采用了二比特四电平量化的软判决方式,对欧氏距离的计算方法进行了简化,以便于用硬件电路方式实现。 2.对ACS运算单元采用了“串-并”结合的运算方式,和全并行的设计相比,在满足译码速度的同时,节约了芯片资源。本文中提出了一种路径度量值存储器的组织方式,简化了控制模块的逻辑电路,优化了系统的时序。 3.在幸存路径的选择输出上采用了回溯译码方法,与传统的寄存器交换法相比,减少了寄存器的使用,大大降低了功耗和设计的复杂度。 4.本文中设计了一个仿真平台,采用Modelsim仿真器对设计进行了功能仿真,结果完全正确。同时提出了一种在被测设计内部插入监视器的调试方法,巧妙地利用了Matlab算法仿真程序的输出结果,提高了追踪错误的效率。 5.该设计在Altera EP1C20 FPGA芯片上通过测试,最大运行时钟频率110MHz,最大译码输出速率10.3Mbps。 本文对译码器的综合结果和Altera设计的Viterbi译码器IP核进行了性能比较,比较结果证明本文中设计的Viterbi译码器具有很高的工程实用价值。

北京邮电大学 硕士学位论文 (2,1,9)软判决Viterbi译码器的设计与FPGA实现 姓名:侯晓凡 申请学位级别:硕士 专业:电磁场与微波技术 指导教师:刘元安 20080305 北京邮电大学硕十学位论文 摘要 (2,1,9)软判决Viterbi译码器的设计与FPGA实现 摘要 卷积码是无线通信系统中广泛使用的一种信道编码方式。 Viterbi译码算法是一种卷积码的最大似然译码算法,它具有译码效 率高、速度快等特点,被认为是卷积码的最佳译码算法。本文的主要 内容是在FPGA上实现约束长度为9,码率为1/2,采用软判决方式的 Viterbi译码器。 本文首先介绍了卷积码的基本概念,阐述了Viterbi算法的原 理,重点讨论了决定Viterbi算法复杂度和译码性能的关键因素,在 此基础上设计了采用“串一并’’结合运算方式的Viterbi译码器,并 在Altera EPIC20 FPGA芯片上测试通过。本文的主要工作如下: 1.对输入数据采用了二比特四电平量化的软判决方式,对欧氏 距离的计算方法进行了简化,以便于用硬件电路方式实现。 2.对ACS运算单元采用了“串一并"结合的运算方式,和全并行 的设计相比,在满足译码速度的同时,节约了芯片资源。本文中提出 了一种路径度量值存储器的组织方式,简化了控制模块的逻辑电路, 优化了系统的时序。 3.在幸存路径的选择输出上采用了回溯译码方法,与传统的寄 存器交换法相比,减少了寄存器的使用,大大降低了功耗和设计的复 杂度。 ’ 4.本文中设计了一个仿真平台,采用Modelsim仿真器对设计进 行了功能仿真,结果完全正确。同时提出了一种在被测设计内部插入 监视器的调试方法,巧妙地利用了Matlab算法仿真程序的输出结果, 提高了追踪错误的效率。 5.该设计在Altera EPIC20 FPGA芯片上通过测试,最大运行时 钟频率1 10MHz,最大译码输出速率10.3Mbps。 本文对译码器的综合结果和Altera设计的Viterbi译码器IP核 进行了性能比较,比较结果证明本文中设计的Viterbi译码器具有很 高的工程实用价值。 关键词: 卷积码Viterbi算法译码器FPGA _北●__京___邮_l—电——大●学_-—硕_●±___-堂—-垡___笙__●壅-_●___●_____-_-I--_●-__●—●____I_-__-————————————————————一 一一 竺璺坐里 A DES IGN AND FPGA IMPLEMENTATION OF (2,1,9)SOFr_DECISl0N VITERBI DECODER Convolutional code iS extensively used in wireless commucations. Viterbi algorithm iS a maximum-likelood algorithm for convolutional code decoding and has been considered as the best decoding algorithm for its efficiency and high-speed.The main purpose of this thesis is to implement a soft.decision Viterbi decoder on FPGA which has constraint length of 9 and code rate of 1/2. In this thesis。the theory of convolutional code and Viterbi algorithm are firstly expatiated.Then several key points which decide the complexity and performance of decoder are thoroughly discussed.On the basis of decoding algorithms and relative technologies developed in this field,a Viterbi decoder design based on FPGA is given.This design is tested on Altera EPlC20 FPGA.The major work iS as following: 1.In this design,soft.decision decoding is used and input symbol is represented as 2.bit code being level 4 quantified.The algorithm to compute the Euclidean distance is simplified SO that it can be easily implemented by hardware circuits. 2.Four Add.Compare.Select units are used in this design to form a new architecture which save the chip resources compared with full.parallel design but still meet the demand of decoding speed.A new method of implementing the path metric memory is presented in the thesis,which simplify the conresponding control circuits in the control module SO that the system timing is soundly optimized. 3.We take Tace.back method to output the decoded data,which saves register resources and has fewer power consumption compared with Register—change method. 4.We design a testbench to implement the functional simulation and verify the design by Modelsim simulator.During the simulation,a debugging method is introduced to improve the simulation efficiency.This 北京邮l乜人学硕:卜学位论文 method iS implemented by inserting monitor jnto the design under test. 5.This design passed on-chip test on AItera EPlC20 FPGA.Its max work freq,i cncy is l 10MHz,and max throughoutput is 10.3Mbps. At la文we compared the performance of this decoder with AItera IP soft core and the result prove that this decoder shares a good performance and can be used in pratical engineering. KEY WORDS:Convolutional code Viterbi algorithm Decoder FPGA 独创性(或创新性)声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。尽我 所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位或证书而使用 过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明确的说明并 表示了谢意。 申请学位论 本人签名: 处,本人承担一切相关责任。 日期:2业呈:±≥ 关于论文使用授权的说明 学位论文作者完全了解北京邮电人学有关保留和使用学位论文的规定,即:研究生在 校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国家有关部 门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校可以公布学位论文 的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇编学位论文。(保密 的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权节。非保密论文注释: 本学位论文不 权书。 本人签名 日期:迎星:幺! 导师签名 日期: 坦垒坐! 北京邮电大学硕上学位论文 第一章绪论 第一章绪论 1.1研究背景和意义 1.1.1研究背景 提高信息传输的可靠性和有效性是通信系统一直追求的目标,随着现代通信 的发展,人们对传输的可靠性和有效性的要求也越来越高。纠错码是提高信息传 输可靠性的一种重要手段。卷积码作为一种有效的信道编码方式己经得到广泛的 应用,它与维特比(Vitethi)译码算法共同实现了前向纠错,从而改进了在多噪声 及衰落信道下译码的准确性,增强了数字通信系统的性制11[21。 现代信息和编码理论的奠基人香农(Shannon)[21在1948年提出了著名的有 噪信道编码定理,在定理中香农(Shanon)给出了在数字通信系统中实现可靠通信 的方法以及在特定信道上实现可靠通信的信息传输速率上限。同时,该定理还给 出了有效差错控制编码的存在性证明,从而促进了信道编码领域研究的快速发 展。卷积码是Elias等人在1955年提出的是一种非常有前途的编码方法,尤其是 在其最大似然译码算法一维特比译码算法提出之后,卷积码在通信系统中得到了 极为广泛的应用。其中约束长度K=7,码率为1/2和1/3的Odenwalder卷积码已 经成为商业卫星通信系统中的标准编码方法。在“航海家"以及“先驱者"等太 空探测器上也都采用了卷积码作为其差错控制编码方法。在移动通信领域,GSM 采用约束长度K_5,码率为1/2的卷积码;在IS95.CDMA中,上行链路中采用 的是约束长度K=9,码率为1/3的卷积码,在下行链路中采用的是约束长度K=9, 码率为1/2的卷积码。特别在第三代移动通信标准中也是以卷积码以及与卷码相 关的编码方法作为差错控制编码方案的。 Vi terbi译码器实现的两大主流是:基于DSP开发和基于ASIC技术开发。 前者是在DSP上进行软件设计,具有算法设计灵活,升级方便,精度可编程控 制等优点,但是存在处理速度慢,成本高,资源利用率低等缺点。基于ASIC技 术开发的Viterbi译码器则可以很好地克服这些缺陷,过去由于硬件技术水平较 低而很少采用,但随着微电子技术的发展,可编程器件性能的提高,ASIC实现 北京邮电人学硕一f:学位论文 第一章绪论 方式越来越成为设计的主流,而且随着Viterbi译码算法的深入研究,其硬件复 杂性问题得到越来越好地解决。在现代通信系统中,图象、语音、数据、视频的 多种业务复用,数据的传输率越来越高,对系统的处理速度要求也越来越高,为 了数据的实时传输,必须有高速处理信息的能力。采用DSP方式开发的Viterbi 译码器越来越难以满足高速数据吞吐率的需求,而必须采用ASIC方式来实现。 随着微电子技术的发展,系统设计师们更愿意自己设计专用集成电路(ASICl 芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适 的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件 (FPLD),其中应用最广泛的当属现场可编程门阵歹U(FPGA)和复杂可编程逻辑器 件(CPLD)。1985年Xilinx公司推出第一片FPGA至今,FPGA已经历了十几年 的发展历史,占据了巨大的市场,逐渐取代了ASIC,其原因在于FPGA不仅解 决了电路系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件 投入少、芯片价格不断降低,特别是对小批量、多品种的产品需求,使FPGA成 为首选。电路设计人员使用FPGA/CPLD进行电路设计时,不需要具备专门的集 成电路深层次的知识,随着现代EDA技术的发展,借助高性能EDA软件来辅助 设计,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。随着 半导体亚微米技术的发展,FPGA的芯片密度己经达到了百万门级甚至千万门 级,它的设计越来越接近于ASIC的设计,价格也越来越接近ASIC,因此FPGA 也被称为可编程的ASIC。在某些应用领域己出现FPGA取代了ASIC的趋势, 它们之间的互相竞争也进一步推动了半导体技术的发展。 1.1.2研究意义 本文中设计的Viterbi译码器是工作在无线多媒体传输系统基带处理芯片 上的一个模块。该芯片采用了软件无线电的设计思想,完成包括数字变频、载波 同步、信道编解码、扩频解扩、调制解调、发送成型滤波等功能。该芯片的所有 功能在一块大容量高密度的FPGA来实现,按照项目的计划,分别完成各个功能 模块的设计和实现。Altera和Xilinx公司都已推出自己的Viterbi译码器IP 核, 并且这些IP核可以根据自己的要求来进行配置,例如:Altera公司的 Viterbi译码器IP核可以根据约束长度、编码效率、译码速度等要求进行配置, 基本可以满足用户的需求。不过,这些IP核的使用价格却非常昂贵,由于是通 用的设计,性能并不能够达到最佳,而且不提供设计的源代码,这对于以后的工 作是很不利的。因此开发一款高性能的符合项目要求的Viterbi译码器具有重要 的意义。 一4一 北京邮电大学硕.J:学位论文 1.2论文的主要工作 第一章绪论 本文的主要工作是用FPGA实现(2,1,9)软判决Viterbi译码器,该设计 在A1tera EPIC20 FPGA芯片上通过测试,性能达到设计要求。 本文具体工作如下: 1.分析Viterbi译码算法原理,研究了决定算法复杂度和译码性能的关键 因素,结合项目要求确定Viterbi译码器的设计参数。 2.深入研究了Viterbi译码器VLSI实现的关键技术,包括架构设计、路径 度量值的归一化处理、ACS运算单元的设计、路径度量值存储单元的实现、幸存 路径选择输出等,在此基础上,综合考虑译码速度、译码延时、功耗、资源占用 等各项要素给出了一个符合项目要求的设计。 3.确定FPGA芯片选型,采用Verilog HDL语言实现各个模块的RTL级代码, 编写testbench对设计进行了功能仿真。 4.设计了Viterbi译码器的硬件测试平台,并在该平台上完成了译码器的 片上测试,测试结果验证了设计的正确性。 本文中设计的Viterbi译码器性能从译码速度和占用的芯片资源综合考量, 可以和Altera的IP核相比拟。同时,还可以采用流水线技术对部分模块进行进 一步的时序优化,使系统工作频率进一步提高。本文中设计的Viterbi译码器结 构可以很容易的扩展到(2,1,6)、(2,1,7)等参数的译码器中,为不同信道 条件下的信息传输提供不同的速度和性能。通过整个设计流程,使作者掌握了现 代化的EDA设计方法,为下一步的研究工作打下基础,本文取得的研究成果对于 无线多媒体传输系统的基带处理芯片的研究和开发积累了重要的知识和经验,对 以后的研究和开发具有重要的意义。 1.3论文的章节安排 本文主要围绕Vi terbi译码器的设计和FPGA实现展开讨论,主要内容和章 节安排如下: 第一章,介绍了该项目的背景,研究目的和意义,以及本人在项目中主要承 担的工作。 第二章,介绍了信道的基本概念,卷积码的编码原理;重点讨论了Viterbi 译码算法原理和决定算法复杂度和译码性能的几个关键因素。 第三章,根据第二章的分析结果,确定了译码器的相关参数,设计了译码器 电路的整体结构。针对设计中出现的难点提出了解决方法。 北京邮电人学硕}:学位论文 第一章绪论 第四章,主要围绕将第三章中的设计用FPGA芯片实现的流程。首先介绍了 FPGA的设计流程和技巧,接下来对各个模块的具体实现进行了详述,并给出了 用modelsim仿真的波形。 第五章,介绍了译码器的功能仿真和硬件测试过程,以及仿真和调试的一些 技巧。并对综合后的译码器性能进行了分析评价。 第六章,对本文的主要工作进行了总结,并展望了下一步的工作内容。 北京邮电大学硕寸:学位论文 第二章卷积码和Viterbi算法 第二章卷积码和V i terb i译码算法 2.1信道编码与卷积码‘小21‘31 信道编码是为了保证通信系统的传输可靠性,克服信道中的噪声和干扰而专 门设计的一类抗干扰技术和方法。它根据一定的(监督)规律在待发送的信息码 元中加入一些必要的(监督)码元,在接收端利用这些监督码元与信息码元之间 的(监督)规律,发现和纠正差错,以提高信息码元传输的可靠性。称待发送的 码元为信息码元,人为加入的多余码元称为监督码元(或校验码元)。信道编码 的目的就是试图以最少的监督码元代价,以换取最大程度的可靠性的提高。 在数字通信中,对整个通信系统进行差错控制的方式主要有三种:前向纠错 呷c)、检错重发(ARQ)和混合纠错(HEC)。前向纠错也称自动纠错,发送端发送 具有纠错性能的码,如果在传输过程中产生的错误介于该纠错码能纠正的类型, 则此译码器不仅能检错,而且能够自动纠错;检错重发又称自动请求重发,接收 端译码后,如发现传输有错误,则通知发送端重发接收端认为错误的消息,直到 接收端认可为止;混合纠错是上述两种方式的混合。接收端对少量的接收差错自 动纠正,而超出纠正能力的差错则通过自动请求重发的方法加以纠正。 按照对信息元处理的方法不同,纠错编码可以分为分组码和卷积码两大类。 分组码是把信源输出的信息序列,以每k个码元分组,通过编码器把每组的k个 信息元按一定规律产生r个多余码元(称为校验元或监督元),输出长度为n=k+r 的一个码字(组)。因此每一码组的r个校验元仅与本组的信息元有关,而与别组 无关。分组码用(n,k)表示,11表示码长,k表示信息位。卷积码是把信息源输出 的信息序列,以每k0个码元分为一段,通过编码器输出长为‰(乏ko)一段码段。 但是该码段的n。一ko个校验元不仅与本段的信息元有关,而且也与其前m段的 信息元有关,称m为编码存贮,也称约束长度,因此卷积码用(n。,k。,m)表示。 由于在卷积码的编码过程中,充分利用了各码段之间的相关性,在与分组 码同样的码率和设备复杂性条件下,无论从理论上还是实际上都己经证明卷积码 的性能要优于分组码,且实现最佳译码和准最佳译码也较分组码容易。所以在当 今的信息学领域内,卷积码成为研究的热点,并在已经实现的通信系统中得到了 广泛的应用。 北京邮I乜大学硕。H,、·e迂 2.1.1卷积码编码原理 第二章卷积码和Viterbi算法 卷积码是将发送的信息序列通过一个线性的、有限状态的移位寄存器而产生 的码。通常该移位寄存器由K级(每级k比特)和11个线性的代数函数生成器 组成,如图所示:二进制数据移位输入到编码器,沿着寄存器每次移动k比特位, 每一个k比特长的输入序列对应一个11比特长的输出序列。因此其编码效率(码 率)定义为Rc=k/n。参数K称为卷积码的约束长度【21。 1 X! :塑型 -I 图2-1卷积码编码原理图 2.1.2卷积码表示方法 描述卷积编码器常用的方法有:连接图(connection pictorial)、连接矢量 (connectionvector)、连接多项式(connection polynomial)、状态[羽(state diagram)、 状态树(treediagram)及网格图(trellis diagram)。下面以(2,1,3)卷积码为例说明卷积 码编码器的表示方法。 1、连接图表示 如图2.2所示,表示一个(2,1,3)的卷积码编码器,由两个触点转换开关和一 组3位移位寄存器及两个模2加法器组成。输入码元数k=l,模2加法器的数目为 n=2,因此编码效率k/n=1/2。在输入每个比特时,1位信息比特移入寄存器最左 端的一级,同时将寄存器中原有比特均向右移1级,接着便交替采样两个模二加 法器(先采样上面的加法器,再采样下面的加法器),得到的码元就是与该输入比 特相对应的分支码字。对每一个输入信号比特都重复上述采样过程。采用连接图 来表示卷积码编码器·叮以很清楚的看到其硬件实现的结构。 一8一 北京邮电人学硕上学位论文 第二章卷积码和Vhcrbi算法 图2-2卷积码的连接图 2、连接矢量表示 连接矢量表示卷积码编码器的方法如下。为编码器指定n个连接矢量集,每 个矢量对应一个模2加法器,每个矢量都是K维,表示该模2加法器和编码移位 寄存器之间的连接。矢量中第i位上的1表示移位寄存器相应级和模2加法器的 连接,若是O,则表示相应级与模2加法器之间无连接。图2-2中编码器,用连 接矢量91代表上方连接,92代表下方的连接,如下: gl一111 92-101 采用连接矢量来表示卷积编码器相对于连接图表示方法比较的简洁,目前大 多的标准规范都采用连接矢量来表示。 3、状态图表示 图2-2所示卷积编码器的输出由输入信息(编码寄存器最左边的一位)和编码 器的状态(编码寄存器最右边的K-1位)决定,可以将它看成是一个有限状态机 (Finite—State—Machine)的电路结构,因此可以用状态图来表示卷积码编码器。 图2—2所示的编码器对应图2—3所示的状态图。 00 10 图2-3卷积码的状态转移图 一9一 北京邮电大学硕l:?#位论文 第二章卷积码和Viterbi算法 图2.3中方框内码字表示编码器的状态,为编码寄存器最右端K.1级的内容, 共有4种a=00,b=10,b--01,d=ll,状态间的路径表示由此状态转移时的输出分支 字。对应于两种可能的输入比特,从每一状态出发只有两种转移,状态转移时的 输出分支字标注在相成的转移路径旁。实线表示输入比特0时的路径,虚线表示 输入比特1时的路径。编码器只在有限的几个状态之间转换,状态图表示方法明 确的表示了当输入信息不同时状态的改变和与之对应的输出。 4、网格图表示 虽然状态图表示了编码器的特性,但是没有表示时间过程,为了跟踪编码器 的状态转移我们常用网格l药(Trellis Diagram)来表示编码演算过程。图2-4即为图 2.2所示编码器的网格图表示。 状态 ti 00 t2 00 t3 t4 00 00 t5 00 t6 a=00 a=00 a=00 a=00 lO lO lO 图例 输入位0 输入位l 图“卷积码的网格图 网格图的节点代表了编码器的状态:第一行节点对应于状态a=00,相继的各 行节点分别对应于b=10,c=01,a=ll三种状态。分支代表编码器的所有可能的状态 转移情况,分支上的码字表示输出,实线表示输入比特O时产生的输出,虚线表 示输入比特1时产生的输出。如:当输入信息序列m=11011时,按照上述网格图 产生的输出为U--(11,01,01,00,01)。 2.2卷积码的最佳译码一Viterbi算法 卷积码的译码方法可分为两大类:即代数译码和概率译码【11。代数译码是以 卷积码的代数表示法为基础,从码字本身的代数结构出发,通过计算伴随式,确 定错误图样后得出结果。目前用得较多的是1963年Massey提出的门限译码。概 率译码不仅考虑码字的代数结构,还利用了信道的统计特性,充分发挥了卷积码 的特点,使译码错误概率大大降低。卷积码的概率译码最早始于1961年由 北京邮电大学硕十学位论文 第二章卷积码和Vitcrbi算法 Wozencrafl提出的序列译码,1963年由Fano进行了改进,提出了Fano算法。 1967年由Viterbi提出了另外一种概率译码算法.Viterbi译码算法,它是一种最大 似然译码算法,在码的约束度较小时,它比序列译码算法效率更高、速度更快, 译码器也较简单。因此,自Viterbi译码算法提出以来,无论在理论上还是在实 践上都得到了极其迅速的发展。下面介绍一下Viterbi译码算法的引入、基本原 理和性能分析。 2.2.1最大似然译码¨1 在一个编译码系统中,如图所示,输入信息序列M被编码为序列C,假设C 序列经过有噪声的无记忆信道传送给译码器。译码器根据一套译码规则,由接收 序列R给出与发送的信息序列M最接近的估值序列詹后。由于M与码字C之 间存在一一对应关系,所以这等价于译码器根据R产生一个C的估值序列。即 当且仅当e-C时,詹-M,这时译码器正确译码。如果译码器输出的e≯C, 则译码器产生了错误译码。 {e) 图2.5通信编译码系统不慈图 当给定接收序列R时,译码器的条件译码错误概率定义为: e(eln)=P(e—clR) 所以译码器的错误译码概率: (2.1) 足。∑P(R)P(E IR) (2.2) 式中P(R)是接收的译码序列R的概率,它与译码算法无关。所以译码错误 概率最小的最佳译码规则是使 min足;min2P(R)P(E IR) “ 这等价于对所有的R使 (2.3) minPE—m。ine(E IR)=鼍≯P(e≠c l尺) (2-4) 又有 minP(e—C l R);maxP(6"一c lR) (2—5) 因此,如果译码器对输入的R,能在岔个码字中选择一个使 北京邮电人学硕‘}:学位论文 第二章卷积码和Viterbi算法 P(e—cIR)(i-L2,…,2‘)最大的码字c;作为C的估值序列e,则这种译码规则 P(CiIR)=掣 一定使译码器输出错误概率最小,称这种译码规则为最大后验概率(MAP)译码。 由贝叶斯公式 (2-6) 可知,若发端发送每个码字的概率P(c;)均相同,且由于P(R)与译码方法无, 所以 maxP(Ci IR)净maxP(RICi) f-1,2,….2I i-L2,…·2I (2-7) 对于离散无记忆信道(DMC)而言 P(R JC;)=兀P(‘l c{『) (2·8) 这里码字cf=(Cil cf2,…,气),f一1,2’…,2‘。 一个译码器的译码规则若能在≯个码字C中选择一个C;使式2-7成为最大, 则这种译码规则成为最大似然译码(MLD),P(R l c)成为似然函数,相应的译码 器称为最大似然译码。由于IOgb x与x是单调关系,因此式2—8可写成 ;黔1。ga P(RI cf)--max logbP(‘l勺) (2-9) 称log。P(R I c)为对数似然函数或似然函数。对于DMC信道,MLD是使译码 错误概率最小的一种最佳译码准则或方法。通常用对数似然函数比较方便,这是 因为取对数前后所得结果的大小趋势不变,且对数似然函数对所收到的符号具有 相加性,因此,最大似然译码可看成是对所给定的接收序列求其对数似然函数的 累加值为最大的路径。 可以证明,对BSC而言,计算和寻找具有最大使然函数的路径就等价于寻找 与接受序列R,R-(气吃,…‘)具有最小汉明距离的路径,即寻找 m'md(R,Cj) .『=1,2’…,2舭 (2-10) 对于二进制输入Q进制输出的DMC信道而言,就是寻找与R具有最小软距离, 即最小欧氏距离的路径: m如以(足,c『1) .『-1,2,…,2u (2·11) 式中,尺I与c豇是接受序列R与q序列的Q进制表示。 2.2.2 Viterbi译码算法原理Ⅲ 由卷积码的编码过程可以看出,码序列的个数是很大的。例如当码序列长度 L=50,11=3,k=2时,则共有2V一21∞>1030个码序列。若m=5,则£+朋=55。如 果在一秒中内送出这舭一100个信息元,则信息传输速率只有100bit/s.这是很低 北京邮电大学硕十学位论文 第二章卷积码和Viterbi算法 的,但即使在如此低的信息速率下,也要求译码器在一秒中计算、比较10∞个似 然函数(或汉明距离、欧氏距离),这相当于要求译码器计算每一似然函数的时间 小于10铆秒,这根本无法实现。更何况通常情况下L是成百上千的。因此,有 必要寻找新的最大似然译码算法。Viterbi译码算法正是为了解决以上困难所引入 的一种最大似然译码算法。由于并不是在网格图上一次比较所有可能的2啦条路 径,而是接收一段,比较一段,选一段最可能的译码分支,从而达到整个码序列 是一个有最大似然函数的序列,其实现步骤的简单过程如下: 1、从某一时间单位j--m开始,计算进入每一状态的所有长为j段分支的部 分路径度量,为每一状态,从转移到其中的所有路径中挑选并存储一条有最大度 量的部分路径及其部分度量值,称此部分路径为相应状态下的留选路径或幸存路 径。 2、i增1,把此时刻进入每一状态的所有分支度量,和同这些分支相连的前 一时刻幸存路径的度量相加,得到了此时刻进入每一状态的部分路径度量值,选 取一个状态存储具有最大路径度量值的路径,并删去其他路径,从而得到了新的 幸存路径,因此幸存路径延长了一个分支。 3、若J<L+肌,则重复以上各部,否则停止,译码器得到了有最大路径度 量的路径。由时间单位m至L,网格图中2u个状态中每一个有一条幸存路径, 共有2伽条。但是在L时间单位(节点)后,网格图上的状态数目减少,留选路径 也相应减少。最后到第L十m单位时间,网格图回归到全为0的状态瓯,因此 仅剩下一条幸存路径。这条路径就是要找的具有最大似然函数的路径,也就是译 码器输出的估值码序列e。 由此可知,在网格图上用Viterbi译码算法找到的路径一定是一条最大似然 路, 因而这种译码方法是最佳的。 2.2.3卷积码的自由距离瞳1 卷积码的自由距离,是用来衡量所有可能码字序列对之间的距离的。其定义 为:整个编码码树上,所有半无限长序列之间的最小汉明距离。由于卷积码的自 由距离直接决定了它的纠错能力,所以寻找具有最大自由距离的卷积码是一项非 常重要的工作。不过对于卷积码的构造,目前除了计算机搜索外还没有其它更好 的方法。下表是由奥登沃尔德(Odenwalder,1970年)和拉森(tarsell,1973年)采 用计算机搜索方法得到的固定码率和约束长度时具有最大自由距离的卷积码。 北京邮电人学硕一Ij学位论文 第二章卷积码和Viterbi算法 约束长度K 生成多项式 (八进制表示) 自由距离 编码增益db 3 (5, 7) 5 4.26 4 (15, 17) 6 5.23 5 (23, 35) 7 6.02 6 (53, 75) 8 6.37 7 (133,171) 10 6.99 8 (247,371) 10 7.72 9 (561,753) 12 7.78 表2-1码率为l/2的最人自由距离 该设计中借鉴了上述表格中的结论,采用了码率为1/2,约束长度为9,卷积 码生成多项式为(561,753)的卷积码。 2.3 V i terb i算法复杂度和译码性能的平衡考虑 一般来说译码算法越复杂,获得的编码增益就越高,译码性能就越好,然而 算法越复杂所需的硬件资源就越多,译码速度就越慢。所以,就一个Vitcrbi译 码器的具体实现来讲,必须在算法复杂度和译码性能之间做一个很好的平衡,下 面从四个方面对这一问题进行阐述,并给出了该设计中采用的方案。 2.3.1硬判决译码和软判决译码啪 两电平是非O即1的判决,所以称为硬判决。而多电平则不属于非0即1的 简单的硬判决。软硬判决所允许的归一化噪声、干扰水平是不一样的。电平级数 越多,允许噪声和干扰越大判决性能越好,但是电平级数越多实现就越复杂,一 般去4或8电平即可。二者的主要差异有: 1、信道模型不一样。硬判决采用二进制对称信道BSC模型,软判决采用离 散无记忆信道模型即DMC模型 2、度量值与度量标准不一样,硬判决的度量值是汉明距离,度量准则是最 小汉明距离准则,软判决的度量值是似然值,度量标准是最大似然准则。 软判决与硬判决相比,稍微增加了一些复杂度,但是在性能上却比硬判决好 1.5~2dB,所以在实际译码中常采用软判决。在该设计中采用了Q=4的软判决方 式。 北京邮电大学硕士学位论文 第二章卷积码和Viterbi算法 2.3.2卷积编码约束长度与编码增益以及Viterbi译码器复杂度的关系: 随着约束长度K的增加,卷积码的自由距离“触增加,误码率随“肛成指数 下降,约束长度为K的卷积码编码器共有2”1个状态,因而Viterbi译码器必须有 同样的2肛1状态发生器,并且对每一个状态必须有一个路径寄存器来存储路径或 信息序列,以及一个存储路径度量值的存储器。所以Viterbi译码器的复杂性随 着卷积码编码器网格图上的状态增加而增加。为了不致使译码器太复杂,一般要 求约束长度K s10【¨。本文设计的译码器是约束长度K=9的卷积码。 2.3.3截尾译码与译码深度的选择 每个路径(或信息序列)存储器的存储路径长度是nL。这里,L是需要存储 的码序列的总长度。理论上Viterbi译码算法要等到全部信息接收完毕后才能得 到译码结果。若L很大,译码器的存储量太大而难以适用。在发送序列较长时, 需要的存储量和译码延时都相当大,这显然不能满足实时通信的要求。所以从实 用的角度来看,在Viterbi译码算法的具体实现中,通常会采用截短译码的方式, 即:每个路径存储器不必存储L很大的码序列而只要存储f《L段子码即可。当 译码器中存储的路径长度达到某个译码深度f时,就对幸存路径最前面的一级支 路做出判断,输出对应的信息码元,然后再计算下一级的幸存路径,依次类推。 按照截尾译码算法得到的判决不再是最大似然译码,但只要z做的不太小, 该算法的性能几乎和最大似然译码算法性能一样好。经验分析证明,若r是约束 长度K的5倍或更多,则在f时间单元后,所有2斌条幸存路径将以概率近于1 合并为同一信息足,并可确定地作出译码判决。此外,这也一定是最大似然判决, 因为不管哪一条幸存路径最终成为最大似然路径,它必然包含该信息组的译码信 息。因此,若z足够大,则几乎所有的译码判决都是最大释然的。且最后的译码 序列将很近最大的似然路径11lo 基于上述的分析在该设计中采用的译码深度f t“,总的码序列长度 L t192。 2.3.4译码器幸存路径的选择输出 译码器如何判决并输出所有路径寄存器中的第一段信息元,有以下几种方法 可以选择: 1、任选一条幸存路径的寄存器,把它的第一段信息元作为译码输出。 2、把所有2h个路径寄存器的第一段信息元取出,按大数准则输出第一段信 北京邮电人学硕I:学位论文 第二章卷积码和Vitcrbi算法 息兀。 3、对路径的度量定出一个门限,当某一路径的度量值超过此门限,就输出 此路径的第一段信息元。 4、在2拥个路径寄存器中,挑选一个具有最大路径度量的路径,以它的路径 寄存器的第一段信息元作为译码器的输出。 采用第4种方法的译码性能最好,并且实现并不复杂,在该设计中就采用了 此种方法选择幸存路径的输出。 北京邮电人学硕上学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 第三章 (2,1,9)软判决V i terb i译码器的设计 3.1 Viterb i译码器总体设计 3.1.1 Viterbi译码器设计参数: 根据上一章对译码算法的分析和研究,结合项目的实际需求,确定了译码器 的各项参数如下表所示: 表3.1 Vimrbi译码器设计参数表 参数名称 参数值 编码效率 Re=1/2 约束长度 K=9 卷积多项式 译码深度 码序列长度(译码帧长) 91=(7,5,3),92=(5,6,1) f一64 L一192 判决方式 软判决 量化电平级数 Q=4 3.1.2 Viterbi译码器架构设计 现代的EDA技术的发展使得“Top-Down一的设计方法成为可能,在本文的 设计中采用了“Top.Down"的设计方法。在对Viterbi译码器算法分析的基础上 对各个运算模块进行功能分解,确定了各个模块的功能,接口和数据流向,完成 了总体的架构设计。 该译码器的架构如图3.1所示:由BMG(Branch.Metric.Generation,分支度 量值计算模块)、ACS(Add.Compare.Select,加比选模块)、NewMtrRam(新路径 度量值存储器)、OldMtrRam(旧路径度量值存储器)、MtrCmp(Metric.Compare 路径度量值比较模块)、SrRam(Survivor-Memory,幸存路径存储器)、DEC(Decoder 译码模块)、Control(控制模块)、Clock(时钟模块)以及Input/Output(输入/ 北京邮电大学硕上学位论文 输出接1:3模块)组成。 第三章(2,1,9)软判决Viterbi译码器的设计 &@矽 Control 图3-1 Viterbi译码器架构图 下面介绍一下各个子模块完成的功能和数据流向:Input模块接收从信道上 传输来的信息序列存储在FIFO中,该译码器的码序列为192比特,采用2比特 4电平量化,每4个输入信息比特能译出1比特数据,所以每接收到192×4比 特数据Input模块就产生一个启动脉冲ReadyDec。Input模块把接收到的信息序 列送给BMG模块;BMG模块计算分支度量值送给ACS模块,ACS模块读取 OldMtrRam中存储的路径度量值和从BMG模块来的分支度量值,进行加.比.选 运算,把生成的新的路径度量值存储在NewMtrRam中,把选择的幸存路径存储 在SrRam中,(之所以将路径度量值存储器分为OldMtrRam,NewMtrRam是因 为由于该架构采用了“串.并”结合的结构,路径度量值的更新顺序和路径度量 值的读取顺序并不一致);MtrCmp模块比较ACS输出的路径度量值,输出最 小的一个作为回溯操作的起点状态;Control模块是该译码器的核心模块,它用 来产生各个子模块的使能、脉冲信号,以及存储器的地址,数据信号。在进行回 溯操作时需要读取幸存路径存储器的幸存路径值,幸存路径存储器的地址产生也 在Control模块中实现;在回溯操作完成后DEC模块开始工作,它直接接收BMG 模块的分支度量值,运算后产生译码输出存储到Output模块的FIFO中,在Control 模块的控制下输出。 北京邮电大学硕上学位论文 3.2路径度量值的归一化处理 第三章(2,l,9)软判决Viterbi译码器的设计 在Viterbi算法中,随着网格图的推进,各个路径的度量值是一个累加的过 程,如果使用无符号数,其整个度量值包括幸存路径度量值都会越来越大,而我 们在电路处理中,不可能使用无穷的数来表示这个度量值,因为不可能有这么大 的存储空间和处理能力。所以实际中都是用有限长度的数来表示这个度量值的, 随着网格图的前进,路径度量的值会不断的增大,当度量值的范围超出了所定义 的有限长度向量所能表示的最大值时,就会溢出.溢出时的度量值如果不进行必 要的处理,就会影响以后的幸存路径的选择和判决比特的生成,所以必须对路径 度量作溢出控制。文献[71qb指出,Viterbi算法有如下两个属性:1、Viterbi译码器 的输出只取决于路径度量之差,即路径度量的相对大小,而与路径度量的绝对数 值无关;2、路径度量之差是有界的,其上限为A=2nB,其中B为分支度量的上 限,13为使网格状态之间完全连接所需的网格级数。利用这两个属性,当路径度 量累加器的宽度C满足2c一1≥2V时,累加器的溢出将不影响路径度量之间的比 较,也就是说不影响译码结果,因此不需要增加防止路径度量累加器溢出的方法, 从而节省译码器电路实现时的开销。 该设计中采用了2比特4电平的量化,分支度量值上界B=3,编码状态寄存 器的个数也即使网格状态之间完全连接所需的级数n=8,由A=2nB得: A=2nB=2x8x3=48 (3.1) 由2c一1 2 2A得: C=7 所以当路径度量值存储器的位宽设为7位时,’不会产生溢出。 (3.2) 3.3 fitS运算单元和路径度量值存储器的设计 ACS运算单元是Viterbi译码器的核心运算部件,也是影响译码器译码速度 的最关键的因素。单个ACS运算模块实质上完成了如图3.3所示的蝶形运算 PM2i PMi PM-+128 图3.2 ACS蝶形运算图 北京邮电大学硕I二学他论文 第三章(2,1,9)软判决Viterbi译码器的设计 运算公式如下: PMj=min(PM五+肼2j』,PM州+BM州』) (3.3) PMf+1勰=min(PM2j+J日懈2i』+l勰,PM2f+l+J6f^f五+u+l勰) (3.4) 其中PM。表示状态i的路径度量值,BM圳表示从状态2i到状态i的分支 度量值。(该译码器的约束长度K=9,所以当输入‘1,时状态2i和2i+1的转 移状态是i+128)。 ACS运算单元的设计一般有两种结构18J可以采用,一是全并行的运算结构, 二是串行结构。这两种结构各有优缺点,约束长度为K时,全并行结构需要2卜1 个ACS单元并行计算,这样浪费了很大的硬件资源,但更新一次路径度量值只 要一个clock,译码速度快。串行结构更新一次状态路径度量值需要2卜1个clock, 译码速度慢,但只需要一个ACS计算单元,节省硬件资源。综合硬件资源和译 码速度两种因素,该设计采用了“串.并"结合的运算方式,采用4个ACS单元 并行运算,这样,更新一次路径度量值需要2“个Clock。采用全并行和全串行 的方式路径度量值存储器的实现都很简单,分别提供相应数量的存储单元即可。 采用“串.并“结合的运算方式需要对路径度量值存储器和幸存路径存储器进行 巧妙的安排和组织才能够顺利的完成流水线操作。 4个ACS单元在一个时钟周期内要完成8个状态的路径度量值计算,所以 路径度量值存储器在一个时钟周期内必须提供给ACS单元8个状态的路径度量 值,同时将ACS单元的计算结果,即新的路径度量值写到路径度量值存储器中。 由于蝶形运算后的状态发生转移,举例说明:假如读取的是S2i和S2i+l状态的 路径度量值,经过ACS运算后新的路径度量值是Si和Si+128的,这就给存储 器的设计带来麻烦,如果使用一块存储器,新的状态路径度量值还保存在原来的 位置,那么可能有的状态的路径度量值还没参与运算就被新值覆盖掉了,这肯定 是不可行的。本文中设计了一种巧妙的存储器组织结构,采用“乒乓“操作的方 法,使得能够同时读取和写入8个状态的路径度量值成为可能。 北京邮电人学硕士学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 图3-3 路径度量值存储器组织图 如图3.3所示:路径度量值存储器采用FPGA内部的BlockRam实现,采用 Ouartus中的MegaWizzard Plug-In Manager将BlockRam配置成Dual.Port.RAM 方式。路径度量值存储器共由4块DPRAM组成,其中OldMtrRam(包括 OldMtrRamUp和OldMtrRamDown)提供路径度量值给ACS参与运算,ACS运 算后产生新的路度量值存储到NewMtrRam(NewMtrRamUp和NewMtrRamDown) 中,用NewMtrRam的内容更新OldMtrRam的内容,这样保证了OldMtrRam存 储的路径度量值全部被读取一遍才被新值覆盖掉。 OldMtrRam有256个存储单元,每个单元存储一个状态的路径度量值,上下 部分各128个。存储器上半部分也即NewMtrRamUp和OldMtrRamUp保存0~127 状态的路径度量值,下半部分也即NewMtrRamDown和OldMtrRamDown保存 128~255状态的路径度量值,这样安排的目的是为了简化了存储器之间的连接关 系和存储器地址信号的产生。每次运算后NewMtrRam和OldMtrRam保存状态 路径度量值的顺序是一致的。用NewMtrRam的值更新OldMtrRam的值时不需 要特别设计中间过渡单元,NewMtrRam的数据输出总线可以直接连接到 OldMtrRam的数据输入总线上。 OldMtrRamUp和OldMtrRamDown的读出数据端IEI宽度为56位,地址宽度 为4位,两个存储器的地址总线Addr[3:0]是复接在一起的,最高位地址Addrl4】 作为多路器的Select信号上,这样上下两个存储器都输出8个状态的路径度量值, 但是由Select信号决定选取哪一个存储器的值给ACS。这样总的地址总线宽度 为5位,每个时钟周期地址变化一次,需要32个时钟周期把所有的路径度量值 都读取一遍。NewMtrRamUp和NewMtrRamDown存储器的输入数据端口宽度为 北京邮电大学硕十学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 28位,每个时钟周期各自接收4个状态的路径路径度量值,它们的写入地址信 号是顺序变化的,可以用一个简单的计数器来实现。它们的读出数据端口被设置 为56位,和OldMtrRamUp和OldMtrRamDown的写入数据端口宽度一致。当用 NewMtrRam的值更新OldMtrRam的值时每个时钟周期可以更新16个状态的路 径度量值,全部状态更新完毕需要16个时钟周期,是ACS运算速度的两倍。 举一个简单的例子来说明路径度量值的读写顺序: 如图4.3所示:译码器首先产生一个5bit的读地址信号,读取0—7状态的路 径度量值,经过ACS单元运算,产生O刁和128~131状态的新路径度量值写到 到NewMtrRam中。下一个时钟周期读取8~15状态的路径度量值,产生扣7和 132~135状态的新路径度量值。以此类推,直到所有的路径度量值被读取一遍, 在NewMtrRam即将写满的时候,开始用NewMtrRam的数据来更新OldMtrRam 的数据,这样的'缦计也要谨慎的安排更新OldMtrRam的时机,既保证流水线的 操作不被打断,又保证OldMtrRam的数据不被错误覆盖,下面会对这个问题进 行详细的说明。 图“描述了状态路径度量值的计算顺序 北京邮电大学硕L学位论文 OldMtrRamUp 肌7 8~15 第三章(2,l,9)软判决Viterbi译码器的设计 NewMtrRamUp NewMtrRamDown mv3 128~13l 4 ̄7 132~135 120~127 Oldl垤竹RamDown 128~135 136 ̄143 6m一63 188~19l NewMtrRamUp 洲7 NewM订RamDown 192~195 68—7l 132~135 248-255 124 ̄127 252~255 图3-4状态路径度量值计算顺序图 前面提到,当用NewMtrRam的数据更新OldMtrRam的数据时,需要16个 时钟周期才能完成全部更新。如果等OldMtrRam的数据全部读完才用 NewMtrRam的数据更新OldMtrRam,ACS需要等待16个时钟周期才能做下一 步的运算,使译码速度大大下降。为了不打断ACS运算的流水线操作,需要选 择恰当的更新时机。图4.5显示了路径度量值存储器的内容更新情况,从这里面 可以发现更新的规律。 图4_5中OldMtrRam带横线的部分表示路径度量值已经被读取的存储单元, NewMtrRam带横线的部分表示已经被新的路径度量值更新的存储单元。设 NewMtrRamUp的存储单元更新速度为X,则OldMtrRamUp的内容读取速度为 2X。用NewMtrRamUp的路径度量值更新OldMtrRam的路径度量值的速度也为 2X。只要NewMtrRamUp有新的值写入就可以用这个新值来更新OldMtrRamUp 的,因为OldMtrRamUp的读取速度快,未被读取的数据不会被覆盖。 NewMtrRamUp的读地址和OldMtrRamUp的写地址的产生也非常简单。当 北京邮电大学硕.f:学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 OldMtrRamUp的数据全被读完以后才开始读取OldMtrRamDown的数据,所以 在此之前不能够用NewMtrRamDown的数据更新OldMtrRamDown的数据。 NewMtrRamDown的写入速度为X,读取速度为2X,OldMtrRamDown的写入速 度为2X,读取速度也为2X。当开始读取OldMtrRamDown的数据时用 NewMtrRamDown的数据更新OldMtrRamDown的数据刚合适。既满足了 OldMtrRam的数据不被覆盖,又不会打断ACS运算的流水线操作。 图例匡| r—————————1 f I L.....--------·—·---—一 已被读取或更新的存储单元 未被读取或更新的存储单元 图3.5路径度量值存储器内容更新示意图 这种路径度量值存储器的设计方式不会打断ACS的流水线操作,结构清晰, 内部连接关系简单,地址和控制信号的产生也非常容易,简化了控制模块的逻辑, 北京邮l乜人学硕上学位论文 第三章(2,1,9)软判决'vriterbi译码器的设计 有利于优化控制模块的timing,从而提高整个系统的运行速度。这种存储器的组 织方式还可以扩展到其他约束长度的译码器中去,如(2,1,7)、(2,1,6) 等,只要卷积码的编码效率Rc=I/2。 3.4回溯算法和幸存路径存储器的设计 在Viterbi译码算法中,科研人员在幸存路径存储器和输出单元的设计上做 了大量的工作。有两种最常用的方法来实现幸存路径存储管理,一种是寄存器交 换法RE(RegisterExchange),一种是回溯法TB(TraceBack)。在此对两者的实现作 个简单介绍11lJ。 寄存器交换法存储的是路径上的信号信息,利用数据在寄存器阵列中的不断 交换实现信息的译码。其优点是译码延时短,输出端固定;缺点是要消耗大量的 寄存器资源(寄存器资源是FPGA中比较宝贵的资源),内部连接关系非常复杂, 并且功耗较大,不适于大约束度译码器的FPGA实现。 寄存器交换法的原理为:从加.比.选单元输出的是幸存路径的判决比特,寄 存器交换模块根据这个判决值来推断前一个状态,由于这个状态转移和网格图是 有关系的,也就是对可以同时转移来的两个状态进行比较的,进而得到输出比特。 当这个值是O时,可以判定前一个状态是通过它的上支路到达该状态;反之当这 个值是1时,可以判定前一个状态是通过它的下支路到达该状态。对于每一个状 态,都有它的幸存路径信息,在每一步网格图的行进过程中把这些幸存路径存储, 并与它的前一个状态的路径信息进行交换,由于时钟的前进,最后的幸存路径会 聚合成网格图上的一条路径,此时,每个状态的寄存器中存储的数据大部分是相 同的,所以由截尾译码算法,它的最后一位输出对每个状态来说一般是相同的。 具体的实现是在得到了前一个状态后,就可以把前一个状态的路径信息,作为 历史路径拷贝到自己的路径寄存器的相应位置中。若状态值为偶数时,编码器的 输入为0;若状态值为奇数时,编码器的输入为1。在设计中可以采用两个寄存器 组,它们的大小都是状态数乘以译码深度(对每一个状态都存储译码深度大小的 比特的译码信息,每个状态对应一个)。通过一个控制信号使得两组寄存器发生 交换,控制信号则每过一个时钟反转一次。 北京邮I乜大学硕十学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 SO Sl S2 s3 图3-6寄存器交换法原理图 回溯法译码时,存储器存储的是幸存路径的格状连接关系,通过读写路径信 息来完成数据的回溯输出。优点是内连关系简单、功耗小,存储器可以用FPGA 内部的BlockRam来实现,不占用宝贵的寄存器资源。缺点是译码延时较长。 采用回溯法译码时,每次把ACS单元比较器给出的路径信息按状态顺序存 储,当到达一定深度的时候,开始回溯译码。根据当前状态存储的路径信息可以 得到上一个状态,这个状态再根据对应的存储路径信息,又可以得到再上一个状 态,就这样可以一直回溯到最前面的状态,从而得到译码结果。 SO Sl S2 S3 图3-7同溯法原理图 回溯译码的时候,假设是f级深度的话,那么要在每个时钟里向后回溯f次。 因为每一步的回溯都要先计算向后回溯的状态后再进行下一步的回溯,所以整个 时延是随回溯的级数线性增长的。 该译码器的约束长度K=9,不适合用寄存器交换法输出幸存路径。由于采用 了64级的译码深度,所以整个回溯需要64个时钟周期才能完成。译码输出相应 增加了64个时钟周期的延时,但是不影响译码器的吞吐率。 实现回溯译码算法的关键是幸存路径存储器地址信号的产生。合理的设计幸 存路径存储器的组织会使地址信号的产生非常容易。和路径度量值存储器的组织 类似,幸存路径存储器也由两块DPRAM组成,SrRamUp和SrRamDown,第一 块存储0-127状态的幸存路径,第二块存储128—255状态的幸存路径。由于每个 时钟周期ACS将产生8个bit的幸存路径数据,所以每块RAM的写入端口位宽 为4bit,读出端口为1bit。 北京邮电大学硕:I:学位论文 第三章(2,1,9)软判决Viterbi译码器的设计 图3—8幸存路径值存储器组织图 幸存路径存储器的写入端口和读出端口的地址都是在Control模块中生成, 写入地址的生成要配合ACS模块的运算结果,而读出地址的生成则是回溯操作 的关键。幸存路径存储器读出端口总的地址宽度是14位的即RdAddr[13:01,不 过其最高位是连接到多路复用器的Select信号上的。这个14位的地址由一个6 比特的模64的计数器和8比特的状态寄存器组成,模64的计数器用来指示网格 图中的时间位置。8比特的状态寄存器指示了具体状态位置。从幸存路径存储器 读出的1比特数据表明了该状态是从“偶状态”还是“奇状态"转移来的。状态 寄存器执行左移操作,该数据作为状态寄存器的最低位,和模64计数器一起作 为下个时钟周期读取SrRam的地址。 北京邮电人学硕.1:学位论文 第四章Vitcrbi译码器的FPGA实现 第四章V i terb i译码器的FPGA实现 4.1 FPGA芯片选型 4.1.1 Altera产品概述 Altera是最大的可编程逻辑器件供应商之一【倒,其主要产品有:属EPLD的 MAX3000/5000/7000/9000和Classic系列;属FPGA的FIEX6K/8K/10K、 APEX20K ACEXIK Stratix/II/GX Cyclone/ll HardCopy/II等系列,有的资料将 ALTERA产品都归类为CPLD。ALTERA的CPLD器件具有良好的性能、极高的 密度和非常大的灵活性,除了具有一般PLD的特点外,还具有改进的结构、先 进的处理技术、现代化的开发工具以及多种宏功能模块可选用等优点。 4.1.2 AItera CycIone系列FPGA Cyclone FPGA器件基于全铜0.13#m、1.5V SRAM工艺,容量从2910-20060 个逻辑单元,具有多达294912bit嵌入式RAM。Cyclone支持各种单端I/O标准 (如I:们盯L、LVCMOS、PCI和SSTL-2/3)和差分I/O标准(如LVDS、RSDS 标准),每个LVDS通道可达640Mb/s。Cyclone器件有专用电路实现双数据速率 (DDR)SDRAM和快速周期(FCRAM),还有两个锁相环(PLL)提供六个输出 时钟和层次时钟结构,以及时钟管理电路。 Cyclone器件为大批量低成本的应用系统提供了经过优化的功能集。目前 Cyclone器件的批量价格是每千个LE不超过1.50美元,这种低成本结构和 Cyclone FPGA丰富的资源相结合,降低了实现完整的系统的成本。 Cyclone FPGA具有以下特性: 1、新的可编程架构实现了低成本。 2、嵌入式存储资源支持各种存储器应用和数字信号处理(DSP)。 3、专用外部存储接口电路,集成了DDR FCRAM和SDRAM器件以及SDR RAM存储器件接口。 4、支持串行、总线和网络接口及各种通信协议。 北京邮电人学硕+}:学位论文 第四章Viterbi译码器的FPGA实现 5、使用PLL管理片内和片外系统时序。 6、支持常用单端I/0标准和差分I/o标准。 7、支持NIOS II系列嵌入式处理器。 8、采用新的串行配置器件,降低了器件配置成本。 综上所述,Cyclone系列芯片最大的特点是低成本和丰富的片内RAM资源, 这正好符合我们的项目特点和设计要求。考虑到系统规模和实际需求,在该设计 中采用了Cyclone EPlC20F400C7芯片。该芯片是Cyclone系列资源最丰富的一 款,含有多达64个M4K Ram Block,20060个LE,同时含有2个PLL。 4.2FPGA设计流程 4.2.1FPGA设计流程‘胡 FPGA的设计流程大致分为系统规范、模块设计、设计输入、功能仿真、综 合、静态时序分析、布局布线、时序验证(后仿真)、配置下载等几个步骤。设 计流程如图.1所示: ]FI.I)L语言描述 IP核 设计输入文件【.v,.vhd) 时户F/面积/功耗约柬 工艺库 网表文件 工艺库 I/O分配 布局彳仃线约束 1、系统规范 图4-1 FPGA设计流程图 北京邮电人学硕上学位论文 第四章Viterbi译码器的FPGA实现 系统规范阶段是整个项目中最有创造性的阶段。它描述项目完成的功能,确 定设计的总体方案,平衡各个方面的因素,对整个项目有一个初步的规划。在系 统设计阶段,根据对设计面积,功耗,I/O和IP核使用等的估算,确定所使用的 目标芯片和设计工具。 2、模块设计 在制定完系统规范后,根据系统功能,采用自顶向下的方法,逐步细化,将 系统划分为可实现的设计模块。这些模块之『自J存在着一定的层次关系,每个模块 完成相对独立的功能。 3、设计输入 设计输入是指将模块设计阶段定义好的模块借助于一定的设计输入手段转 换为EDA工具接受的信息格式。目前主要的设计输入手段有:高级硬件描述语 言HDL(包括VHDL和VerilogHDL)和原理图。HDL语言支持不同层次的描 述,不依赖于FPGA厂家的工艺器件,便于修改。它可以用任意的文本编辑器作 为输入平台,在状态机、控制逻辑、总线功能方面较强。原理图输入法具有图形 化强、直观等特点,但是不适合描述复杂的逻辑。在该设计中主要采用了 VedlogHDL作为设计输入的主要工具语言。 4、功能仿真 功能仿真就是在仿真器上通过模拟实际电路的工作环境来对设计进行验证。 功能仿真需要把测试激励数据送入RTL代码模型,把RTL模型的输出通标准的 输出结果进行比较,从而验证RTL模型的正确性。在该设计中采用了Mentor公 司的Modelsim仿真工具。 5、综合 综合实际上是根据设计功能和实现该设计的约束条件(如面积,速度,功耗 等),将涉及描述文件变换成满足要求的电路设计方案,该方案必须满足预期的 功能和约束条件,对于综合来说,满足要求的方案可能有多个,综合器将产生一 个最优的或接近最优的结果。因此,综合的过程也就是设计目标的优化过程,最 终获得结果与综合器的性能有关。这个阶段产生的网表中包含了目标器件的逻辑 原件和互联的信息,供后续的静态时序分析和布局布线使用。FPGA的综合工具 有很多例如Synplicity公司的Synplify,Synopsys公司的Compilerll FPGA等, 在该设计中采用了Quartusll 6.0中自带的综合工具。 6、静态时序分析 静态时序分析是验证设计结果是否符合设计要求的重要流程,它和功能仿真 不同,它不需要输入测试激励,而是分析综合出来的电路本身是否违反设计规则。 7、布局布线 北京邮电大学硕:L学位论文 第叫章Viterbi译码器的FPGA实现 这一步骤是要完成实现方案(网表)到实际目标期间的变换。根据设计中指 定的约束条件、目标期间的结构资源和工艺特征,将电路方案中的逻辑元件分解 布局,用作拓扑器件的连线资源,实现布线连接,在布局布线时序信息产生反标 注文件(.sdf),给后续的时序仿真使用,同时还产生FPGA配置时所需要的位 流文件。FPGA设计中的布局布线工具主要由FPGA厂商提供,在该设计中采用 了Quartusll 6.0集成环境中自带的布局布线工具。 8、配置下载 配置下载是在功能仿真与时序仿真正确的前提下,将布局布线后形成的位流 文件通过下载工具下载到具体的FPGA芯片中,这个过程也叫FPGA编程。将位 流文件下载到FPGA器件内部后,就可以将FPGA和其他的芯片构成的系统进行 物理测试,当得到正确的测试结果后就证明了设计的正确性。在该设计中采用了 Quartusll 6.0集成环境中自带的配置下载工具。 4.2.2硬件设计语言与Veri IogHDL嘲 现代的电子系统越来越大,复杂度越来越高,20纪90年代末普通设计的规 模己经达到百万门的数量级。为了使如此复杂的芯片设计易于被人脑理解,很有 必要用一种高级语言来表达其功能,隐藏其具体实现的细节,硬件描述语言也就 应运而生了。现在有若干种硬件描述语言,最有代表性的是Verilog HDL,VHDL(Very high speed integrated circuit Hardware Description Language)和 ABEL HDL等,另外还有如ALTERA公司对自己产品设计的AHDL语言等。应 用硬件语言设计系统有很多好处: (1)以硬件语言从事设计工作,不需要考虑布线问题,设计之初只需要一个 好用的仿真软件即可,因此可以降低设计时的复杂度。 (2)硬件描述语言比较接近算法的推演,而画原理图的设计方式需由算法转 换成硬件概念,再将硬件概念转变成一个个硬件单元,因此硬件描述语言可减少 设计周期,加快商品的上市时间。 (3)硬件描述语言并没有固定的目标器件,所以硬件描述语言既可以用来设 计ASIC,也可以用来做FPGA或者CPLD(复杂可编程逻辑器件)。但应用画原理 图的设计方式,如果使用器件的种类或厂商不同,就必须使用不同的元件库来设 计。因此在选择目标器件方面,硬件描述语言的设计会有较大的弹性。 (4)硬件描述语言将使检测各种设计方案变成一种很容易、很方便的事情, 因为对方案的修改只需要修改HDL程序就可以了,这比修改原理图要容易得多。 该设计中使用了VerilogHDL来完成设计,这是一种被广泛使用的硬件描述 语言。Verilog HDL可以用于从算法级、门级到开关级的多种抽象设计层次的数 北京邮电大学硕士学位论文 第l,q章Vitcrbi译码器的FPGA实现 字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数 字系统之间,数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。 4.3 FPGA设计原则 4.3.1芯片资源和速度的平衡№1 芯片资源指的是设计中消耗的FPGA的逻辑资源数量,例如触发器(FF), 查找表(LUT),块存储器(BlockRam)等。速度是指设计在芯片上稳定运行 所能达到的最高频率,这个频率由设计的时序状况决定。芯片资源和速度是设计 质量评价的终极标准。同时,二者又是对立统一的矛盾体,要求一个设计同时具 备占用资源最少,运行速度最高是不现实的。科学设计的目标是应该在满足时序 要求的前提下占用最少的资源。因为占用资源越少在单芯片上实现的功能模块就 越多,整个系统需要的芯片数量就越少,产品的成本才能降低。芯片资源和速度 之间是可以转化的,一个设计如果时序余量较大,所能跑得频率远远高于设计要 求,那么就能够通过功能模块复用减少占用的芯片资源;反之如果一个设计的时 序要求很高,普通方法达不到设计频率,那么一般可以通过将数据流进行串并转 换,复制到各个运算模块,在输出数据时在对数据进行“并串转换",从而达到 设计的目标。 4.3.2流水线技术 首先说明这里指的流水线技术和cPu中采用的流水线技术有所区别,CPU 中的流水线技术是指在一个时钟周期内同时处理多条指令的指令处理方法,而这 里讲的流水线技术是数字电路设计中的时序优化技术,从本质上来说就是把在一 个时钟周期内执行的操作分成几步较小的操作,并在多个较高速的时钟内完成 如图4.1、4—2所示,对图4-1中的两个寄存器间的数据通路,在图4.2中将其分 成了3级,并在其间插入了两个寄存器,这就是流水线技术的使用。 寄 寄 数据输出 存 数据通路 存 器 器 ·卜一tpd——+ 图4-2数据通路示意图 北京邮电大学硕士学位论文 第四章Viterbi译码器的FPGA实现 例 数据 J通路 —-叫存卜-+ 数据 通路 亡《 I_丝-. 3 3 图4-3流水线不意图 对图4-1中的数据通路,延时为tpd,则该电路(不考虑寄存器的影响)从输入 到输出的最高时钟频率就为1/tpd。而在图4—2中,假设在理想情况下所分成的3 级,每级的延时为3/tpd,则该电路从输入到输出的最高频率可提高到原来的3 倍,采用流水线技术有效地提高了系统的时钟频率,因而在多个时钟周期连续工 作情况下,就提高了整个系统的数据处理量。在图4_1数据通路的输出在一个时 钟周期后被锁存在输出寄存器中;插入了流水线后,数据通路的输出需要三个时 钟周期才能被输出寄存器锁存。所以采用流水线技术的缺点在于消耗了寄存器资 源和增加了数据输出的延时,不过,这和它对整个系统时钟运行频率的提高往往 是微不足道的。在该设计中就充分使用了流水线技术对系统的关键路径进行了时 序优化,显著的提高了系统时钟的运行频率。 4.4 Vitorbi译码器各子模块的FPOA实现 4.4.1分支度量值计算模块B96的实现 BMG模块端口列表: 表4.1 BMG模块端口列表 端口名称 方向 功能描述 Clk_sys Reset Bmg_Ena input input input 时钟 复位 使能信号,高有效 状态寄存器状态,一个BMG模块计算的 State[7:0】 …J GO Bmg[1:01 input input 是奇偶两个状态的分支度量值,只输入偶 状态,奇状态是隐含的 接收到的待译码信息 G1一Bmg[1:0】 Bm_Ere_In_0[2:0】 Bm_Eve_In一1 12:01 input output output 接收到的待译码信息 偶状态,输入0时分支度量值 偶状态,输入1时分支度量信 北京邮电人学硕I:学位论文 第叫章Viterbi译码器的FPGA实现 Bm—Odd—In_0[2:0】 output 奇状态,输入‘O’时分支度量值 Bm—Odd—In一1 12:01 output 奇状态,输入‘1’时分支度量值 BMG模块完成的是图4-4所示的蝶形运算中的分支度量值, 1个BMG模 块完成一个蝶形运算的四个分支度量值的计算。 S2i S2i+l Si+128 图似蝶形运算不慈图 图中s2i表示蝶型运算的偶状态,¥2i+1表示奇状态,由于约束长度K=9,所 以状态寄存器为8位,他们的下一个状态将可能是Si和Si+128。 由于该设计采用了软判决方式,量化级数Q--4,按照Viterbi算法的要求,分 支度量值计算的是接收信息和卷积码编码器产生的输出之间的欧氏距离。 删=正2+y2=√(‘一q)2+(o—c,)2 其中BM表示要计算的分支度量值,x,Y表示接收信息和编码输出的欧氏距 离。‘,0,表示接收到的信息,q,c,表示编码输出信息。 由于式 中有平方和开根号的操作,这在硬件电路上实现是很复杂的。将上 式做一下化简得 BM"Ix[+IYI—I‘一ql+Iry一勺I 用上式代替计算欧氏距离,只用加法器就可以实现分支度量值的计算,在 译码性能上的损失很小,可以忽略不计。 BMG模块主要由卷积码编码器和欧氏距离计算单元组成,根据卷积运算的 特点可知,偶状态输入‘0’时和奇状态输入‘1’时的编码输出是一样的,偶状 态输入‘1’和奇状态输入‘O’时的编码输出是一样的。所以BMG模块的结构 如图4_5所示: 北京邮电大学硕:上学位论文 第四章Viterbi译码器的FPGA实现 State[7:0] 卷积码 编码器 G0 一 Gl G0_Bmg[!:O】 欧氏 距离 计算 单元 GI Bmg[1:O】 Bm—Eve In 012:0】 Bm—Eve—In一1【2:0】 Bin_Odd_In_0[2:0] ■ Bm Odd_ln_l【2:0】 图4-5 BMG模块电路结构图 每个BMG模块在每一个时钟周期完成奇偶两个状态的运算,产生四条分支 度量值,第三章中提到,该设计配置了4个ACS运算模块,所以在设计中需要 4个BMG模块配合ACS运算。 仿真波形如图禾6所示: ]-f叫t Clk_¥rs ] 厂] 厂 广] Ik5et STate-7:O: 18 【32 厂] IlO 厂] 148 GO_]Bq 6t_hs 【lo lw h● 1 b_[TeJn_O 0 BI-ETejkl 0 酗odd IE p 0 l虬Odd_k_1 0 l ● ● l l IlOO 101l 1010 ● ● 1210-—斗n 1100 IOlO I noo 1011 l 1011 1100 1010 I 图4_6 BMG模块仿真波形图 厂] 156 lOlt lOlt 1011 1011 .j 广] 厂] 16; 172 Isc ● Iloo 101 —— 1010 ito 一 Iolo 11—0 I如日 lot 为了优化该模块的timing插入了一级流水线,从图中可以看出,分支度量值; 是在使能信号Bmg_Ena有效后的第二个时钟上升沿出现的。 4.4.2加比选模块ACS的实现 ACS模块端口列表: 端口名称 Clk_sys Acs Ena Bm_Eve_In_0[2:0】 Bm_Eve_In_l[2:0] Bm_Odd In_O[2:0】 Bm—Cldd In 1 12:01 MtrEve[6:0】 表4_2 ACS模块端口列表 方向 功能描述 m‘put in‘put 时钟 使能信号,高有效 in‘put 偶状态输入‘O’时的分支度量值 m‘put m‘put 偶状态输入‘1’时的分支度量值 奇状态输入‘O’时的分支度量值 in‘put in‘put 奇状态输入‘1’时的分支度量值 偶状态的路径度量值 北京邮电大学硕士学位论文 第四章Viterbi译码器的FPGA实现 Mtr_Odd[6:0】 New_Mtr_In_0[6:0】 New_Mtr In 1 16:0】 BrnScl In0 input output output output 奇状态的路径度量值 输入‘0’时,输出的路径度量值 输入‘1’时,输出的路径度量值 编码状态寄存器输入‘0’时的幸 存路径值,如果选择的是从偶状态 来的分支则输出‘0’,否则输出 ‘1’ BmSel Inl output 编码状态寄存器输入‘1’时的幸 存路径值,如果选择的是从偶状态 来的分支则输出‘0’,否则输出 ‘1 在3.3节阐述过,单个ACS模块实现了图3.2所示的蝶形运算,根据式可 知,ACS运算模块可以由加法器,比较器和多路器组成的组合逻辑来实现。每 个路径度量值的计算需要两个路径度量值和两个分支度量值,总的数据宽度是 20位,这是一个很大的组合逻辑,在设计中插入了二级流水线来优化该模块的 timing。新的路径度量值是在使能信号Acs Ena有效后的第三个时钟周期出现。 ACS模块电路结构如图4.7所示: B 图4-.7 ACS模块电路结构图 仿真波形如图4.8所示: 北京邮电人学硕一I:学位论文 第四章Vited'i译码器的FPGA实现 Clk.sr3 乙』_n n厂 。]几f 1几 厂]广1 n n n r’ .n r n n r n n ‘_7几 厂 缸s』n 弭f BI_he—Ia_O j—【2 一l: k_fve_Ia_i 一15 12 Ii 15 l: Il 15 II Ij 12 IZ l: 15 I: 12 l BI.伽tIn_O E甄 一15 II 12 IZ Ij 15 12 12 - B--Odd-In_l 1 12 l工 12 Ii I三 I! Il 15 iI I 妣r_Eve 3i I】 o 137 lS 135 157 I: Vtr.0衄 3i 135 l: : I% 13i 135 137 — 轴Jtr_I._O 兰氆 139 138 I 11 I:≥ 136 l:O 136 7-- 轴地r—Zn_Z 盟I:: 139 13e I 15 139 13S I:2 138 kSL%I_InO lk'nSel_lnl I I l I I I I 广] IL JI 12 I: —● —— n l- I{ l: lL Jj 1; I: 15 ll I! I{ I瑟 一 IZ7 15 135 137 139 一Ill 135 l^ 13§ —19 136 l 15 II O l: I; I IZ 15 I ● Ij Il ’ I: i 135 】 3j I= 15 137 I: -9 19 36 I: 19 17 38 l lle I Il —- Ij —— 15 __ Il— 1—37— 135 —, 1—3—9 I:—9。 图锚ACS模块仿真波形图 4.4.3 MtrOmp模块的实现 MtrCmp模块端口列表: 表年3 MtrCmp模块端口列表 端口名称 方向 功能描述 Clk_Sys Mtrln[55:0】 input input 时钟信号 8个路径度量值,每个路径度量值的位 宽是7位 CmpEna StateMin[7:0】 input output 时能信号,有效时开始工作 比较完成后输出的最小状态, StateMinPulse有效时该输出有效 StateMinPulse output 指示StateMin[7:0]信号有效的脉冲 在3.4节阐述过,译码器的运算达到译码深度后,需要选择一条最小的路径 度量值来进行回溯操作,MtrCmp模块就是用来计算具有最小路径度量值的那个 状态。约束长度K=9的译码器有256个状态的路径度量值,每个路径度量值的 位宽都为7,显然从这么多数据中寻找最小的一个是很复杂的运算。由于这256 个路径度量值不是同时出现的,也就是说每个时钟周期有8个新的路径度量值出 现,所以这个运算可以分在32个时钟周期完成。该模块的电路结构如图4.8所 示: 北京邮电火学硕.I:学位论文 第四章Viterbi译码器的FPGA实现 图4-8 MtrCmp模块电路结构图 在一个时钟周期内,ACS运算部分送给MtrCmp模块8个状态的路径度量值, MtrCmp模块每个时钟周期都要执行一次从8个路径度量值中找出最小的一个的 运算,将运算结果保存在一个寄存器中,由于译码器完成256个状态的计算需要 32个时钟周期,所以在接下来的时钟周期内不但要找出8个当中最小的路径度 量值还要和保存在寄存器中上一个时钟周期的最小值相比较,选择较小的一个输 出。这样的设计使得从256个状态中找出最小值的运算在32个时钟周期内完成, 在每个时钟周期内仅需要找出8个路径度量值中的最小的一个。由于路径度量值 的位宽是7位的,运算电路将生成一个56输入的复杂组合逻辑,所以在MtrCmp 模块中插入了三级的流水线,插入流水线后最复杂的组合逻辑是14输入的,它 产生的延时在FPGA中是可以接受的。 在设计中有两点需要注意: 1、存储最小路径度量值的寄存器必须被初始化成一个较大的值,在设计中 被设置为127,否则如果在复位是被设为‘O’,输出永远是‘0’。 2、该模块的输出是具有最小路径度量值的状态,而不是最小的路径度量 值,所以在内部需要有一个32位的计数器结合比较器的输出来生成最 小路径度量值的状态。 MtrCmp模块的仿真波形如图4_9所示,最小路径度量值的状态StateMin[7:0】 是在使能信号Cmp 有效的第4个上升沿出现,当 StateMinPulse 是高电平时,.Ena StateMin[7:0]有效。 北京邮电大学硕十学位论文 第叫章Vitcrbi译码器的FPGA实现 舢 咖 肌 唧 肌 m 融钮 珊肌 几几唧 U唧 LLJ 妇 !|lri:iii:01 千I- -b —I.一 一I —I- 【一卜I一 一I-.1-hi-· ·-I-I-I- ,bbl- 蕊髓臻:9f 咄 l 5:il盛叠《 0 :c l=二 ● 浊美埘蟹 厂 图4-9 WtrCmp模块仿真波形图 4.4.4 DEC模块的实现 DEC模块端口列表: 端口名称 ClLSys Reset TraccPulse State_Dec[7:0】 GLDee[1:0】 GO_Dec[I:O】 Rev Dat Dec DecDatOut FrameHag DecPulse 表“DEC模块端口列表 方向 功能描述 input input 时钟信号 复位信号 input 回溯开始脉冲,收到该脉冲信号 后,DEC模块开始接受倒序的解码 输出数据Rcv Dat Dec input 到达译码深度后,最小路径度量值 对应的状态寄存器状态,也是回溯 操作的起点状态 input 待译码的信息,和编码矢量G1产 生的编码输出比较汉明距离 input 待译码的信息,和编码矢量GO产 生的编码输出比较汉明距离 input 64bit的解码输出数据按照倒序的 方式输出 output output 解码输出数据,每帧192bit 帧起始脉冲,每个脉冲信号后面跟 着192bit的译码输出数据,该信号 告诉output模块接受数据 output 截尾译码运算开始,译码直接从已 知的寄存器状态开始,选择欧氏距 北京邮电人学硕士学位论文 第四章Viterbi译码器的FPGA实现 离小的分支在网格图上推进,该信 号用于告诉Control模块提供待译 码的信息 DEC模块主要是用来输出译码后的数据,首先简单介绍一下译码器的运算流 程,在此基础上介绍DEC模块完成的工作: TI∞ePIbo I:mmFhg Dedkk 图4.10译码器运算流程图 前面介绍过译码器输入的译码帧长是192个码元,768比特,译码器输出的 帧长是192比特,译码深度是64,也就是前64比特的数据需要经过加.比.选的 运算,在网格图中寻找幸存路径,回溯输出得来,后面128比特数据只需从已知 的编码寄存器状态出发,比较两个分支的度量值得来。所以整个运算流程如图 4-10所示,包括四个步骤:1)、前64比特译码运算:在网格图上每推进一步都 要计算256个状态的路径度量值,ACS单元完成256个状态的路径度量值计算 需要32个时钟周期,乘以译码深度64就是前64比特译码运算部分花费时间: 2048个时钟周期。2)回溯运算:前面介绍过回溯操作需要64时钟周期,而且 回溯输出的64比特信息序列是倒序的,也就是说最先进入编码器的信息最后输 出,所以需要用一个FILO来保存回溯的输出数据3)输出64比特数据:从FIFO 中读出64比特数据需要64个时钟周期。4)对剩余的128个码元进行译码输出, 需要128个时钟周期,输出的128比特的数据和前面输出的64个数据组成一帧。 图4-10中,TracePulse脉冲标志回溯操作开始,FrameFlag脉冲标志开始输 出一帧的已解码数据,DecPulse标志截尾译码运算开始,也即开始输出后面的 128比特数据。 图4-11 DEC模块电路结构图 北京邮111人学硕-Jj学位论文 第pq章Viterbi译码器的FPGA实现 从图4.12可以看出,出现TracePulse脉冲后回溯操作开始,经过64个时钟周期 回溯操作完成,出现FrameFlag脉冲,标志着DecDatOut信号丌始输出译码后的 输出数据。再经过64个时钟周期,保存在FILO中的64比特数据都被输出,出 现DecPulse脉冲,标志着开始对后128比特的数据译码输出。 ㈣ 唧 咖哦姗嘲I 棚㈣ 唧㈣ 唧姗 硼哪 硼嘲咖 咖㈣ 删姗 舢硼 —Ⅱ■—■__■一0如幽… 唧舢 ㈣ 0 箕I..一·‘ f11"11".a晰“t t ~燃 ㈣ ㈣ ㈣ ㈣ 燃 ㈣ 耻~ ㈣燃l:: ㈣ 飞觥 黝趟 圃艇 黼艇 i.? r]1 肌 删 Ⅵ 帆 .嫡 Ⅶ厂山 n肌 Ⅷ 帅L 恤』『 删I LⅢ 1 0 0 图4.12 DEC模块仿真波形图 4.4.5 ControI模块的实现 Control模块端口列表: 表4.5 Control模块端口列表 端口名称 Clk_Sys Reset Ready_Dec 方向 input input input 功能描述 时钟信号 复位信号 从input模块来的脉冲,告诉 control模块已经接收到一帧 数据可以开始译码 Tb Dat input 从幸存路径存储器回溯输出 的数据,表示该状态的上一个 状态是偶状态还是奇状态 StateMinPulse input 从MtrCmp模块来的脉冲信 号,表示StateMin[7:0]信号有 效 StateMin[7:0】 input 从MtrCmp模块来的信号,表 北京邮I乜大学顾十学位论文 第网章Viterbi译码器的FPGA实现 示了具有最小路径度量值的 状态,也是回溯操作的起点状 态 DecPulse input 从DEC模块来的脉冲,告诉 Control模块进入截尾译码状 态 Bmg Ena StateToBmgO【7:0】 StateToBmgl[7:0】 iutput iutput 送给BMG模块的使能信号 送给BMG模块的要计算的状 态 StateToBm92[7:0】 StateToBm93[7:0】 Acs Ena iutput Acs模块的使能信号 Cmp Ena Rden 0ldMtrRam Rdaddr_OldMtrRam[4-0】 Wren OldMtrRam WraddrOldMtrRam[4:0】 Wren_NewMtrRam Wraddr_NewMtrRam[4:0] Rden NewM.trRam RdaddrNewMtrRam_Up[3:0】 RdaddrNewMtrRam_Down[3:0】 Wten Srram iutput iutput output iutput output output iutput iutput output output output MtrCmp模块的使能信号 OldMtrRam的读使能信号 OldMtrRam的读地址信号 OldMtrRam的写使能信号 OldMtrRam的写地址信号 NewMtrRam的写使能信号 NewMtrRam的写地址信号 NewMtrRam的读使能信号 NewMtrRamUp的读地址信号 NewMtrRamDown的读地址 信号 幸存路径存储器的写使能信 号 Wraddr_Srram[1 l:0】 output 幸存路径存储器的写地址信 号 Rden Srram output 幸存路径存储器读使能信号 Rdaddr._Srram[13:0】 output 幸存路径存储器读地址信号 Control模块是设计中的核心控制模块,它用来给其他的各个子模块提供控制 信号。Control模块内设计了一个有限状态机,围绕它产生子模块的控制信号: 北京邮电大学硕上学位论文 第四章Viterbi译码器的FPGA实现 图4-13 Control模块有限状态机示意图 如图4-13所示:状态S0表示空闲状态,当iuput模块接收到192个码元(768 比特)的信息序列就发送一个ReadyDec脉冲,有限状态机进入到S1状态:S1 表示前64比特译码运算状态,译码运算状态持续2048个时钟周期(通过驱动一’ 个模2048的计数器实现)进入状态S2;状态S2表示回溯译码的准备状态,需 要得到从DEC模块来的DecPulse脉冲才能进入S3状态;S3状态表示截尾译码 状态,此状态持续256个时钟周期(通过驱动一个模256的计数器实现)重新回 到空闲状态。在S3状态做了3个步骤的工作:回溯、输出前64比特译码数据, 对后128比特数据进行译码。 各个子模块的控制信号的产生都和状态机的状态有关,设计的关键是要各个 子模块按照流水线的方式协同工作,保证运算的连续性,从而提高译码器的最大 数据吞吐率。 北京邮电大学硕+I:学位论文 第五章系统仿真、综合与测试 第五章系统仿真、综合与测试 5.1Viterbi译码器的功能仿真 5.1.1 Viterbi译码器功能仿真平台 在RTL级代码编写完成后,设计了图5-1所示的功能仿真平台,采用 Modelsim仿真器对译码器进行了功能仿真: 图5-1译码器功能仿真平台 测试平台由两部分组成,第一部分是Matlab仿真程序,这一部分程序在 Viterbi译码器设计的前期用来对Viterbi算法进行仿真,分析算法性能。在Viterbi 译码器的RTL级代码编写完成以后,这一部分的程序为功能仿真提供测试激励 数据和测试校验数据。第二部分是VerilogHDL编写的testbench,testbench读取 Matlab程序产生的激励数据通过BFM总线转换成相应的测试激励提供给待测设 计(Viterbi译码器),译码器产生的响应和Matlab程序产生的译码输出比较,如 果比较结果一致则证明了设计的正确性。 采用这个测试平台,用Modelsim仿真器对设计进行了仿真,结果证明该设 北京邮电人学硕十学位论文 第五章系统仿真、综合与测试 计的算法和实现完全J下确。 Ⅲ 几n八八 1几几九几 n几几几『 l几几几几 1几n几几 几n几几I l八几九n 1几几几r n几几几I In几八八 几n几几r n 耻l|:l:蕃I嫂! 镩q::枷篇:幕芸茜 -卫】!】!】£ r.1:111●I _:1 :‘1:If:I。I: 111:1f111 九·1.1●i:, q。MjI摹葛袁;蒜,p E:I■:J:】: I:‘ ::“”。‘二¨;二1””1}“”…2 :”“’1’‘弘。…’掣。。。1‘。1’ ¨h’1:Ⅲ:产”I。:J“p”卜”‘。”,”I。“‘川j 研丑o:ij西-'I。I。土1.:l-一q…I|I=I筇wI “: ·:I三足L眭耻坐班!也雌I!^.,l—l· u·I I^I-I,l j_.qI I埘I*·I-J lI,I*· .,im,I _itl =l:,l≈I“l蔓取l‘:I.cI:{F.1—I—●…I- —I¨l珥¨I—I tI-·I嵋-·I啪扯tl p}:F II:F:J二:rEl-li--‘一lI._.¨:--':|ulJ 1·I.¨II I i l I I I 卜1●11‘.I b1^ 1£11 11:l二: KI::IIIIHIlil:;I;Ii31.'01;:ll:l::.1i+l;i ,lil.7’tjl211xInI=l=l:q ....一J .XC:。 ● ● 0 譬:: l二】:: 【:】·】l】‘】 】d}II:IL: .1::1311+l:Ol::l=L-I+-。l:i Ⅲ~ml*nnI:11】:】 :卫】;1】。 仁J l::--:I. ● I I‘J乞. J-—.J.—一 ‘—U: I J一5芈3J“一 I j:—卫j_叫—卫。J3一 上—J一 1-—JjJ‘ ‘ 1 I 1 l。-。p i+-l一●·Ik-I‘ 一l—l一_一ItIk-I-LCC: I J ● “J rJ:一I. J●—J一 r—量—j:—,:J‘1 J也J::—少‘—厶。J --Jt-J: j:—J●一 ’ l “】:】}工业J,J.. jJ..必’:l:;11礓蛋’I: 算z l 图5-2译码器仿真波形图 5.1.2使用Debussy提高调试效率 功能仿真消耗的时间主要有两部分组成:1、仿真器运行仿真消耗的时间, 这个跟仿真器的性能,设计的复杂程度,和运行仿真的处理器性能有关。2、发 现错误以后追踪和修改错误的时间。在FPGA的设计中,后者所消耗的时间往往 更多。为了提高追踪设计错误的效率,使用了Debussy调试软件。 Debussy是Novas公司的HDL调试和分析工具,这套软件不是用来跑模拟 仿真的,它的最强大的功能在于能够在HLD代码和仿真器产生的波形做即时的 跟踪,快速的找到设计中bug产生的原因。在复杂的设计中,模块的层次级别很 多,在一个模块内的bug往往被传导了很远的地方才出现,这给调试带来很大麻 烦,而Debussy可以很好的协助解决这个问题。 Dcbussy最常用的程序是nTracc和nWave,通过nTrace可以方便的浏览设计 的层次结构,每个信号的上一次驱动和下一级负载,信号在当前时刻的值,通过 跟踪信号在模块中的驱动顺序,很容易找到错误发生的源头。 使用Debussy的几个步骤: 1、使用Modesim对设计文件进行仿真,将波形文件以.vcd格式保存在一个 文件中。 2、导入设计的HDL源代码文件和保存的VCD文件。 北京邮电大学硕士学位论文 第五章系统仿真、综合与测试 3、调试追踪错误。 在该设计的功能仿真阶段使用了Debussy帮助调试,极大的提高了追踪设计 错误的效率。 一 o蜀。苴口L‘1圣 …一一^1_I +., ●‘. 0一— -0★”… 3#,f t●+ ^Ⅲ· ” ,一舞。 L要…苎—0 —4,一+盖…!,i;美j竺墼_J—!U孟竺苎一垒旦竺■~盥=j一!鼍…_勇,, -一早-口 --:-3㈨·一。!曼一._!哇...j童!生J·t,tP,Ko jl t* 图5—3 Debussy软仆界train 5.1.3一种巧妙的调试方法 如前所述,设计中的错误经常会传播到很远的地方才出现,这给定位错误带 来很大麻烦,如果仅仅从日志文件和仿真波形来查找错误,耗时耗力。在该设计 的功能仿真阶段采用了一个巧妙的方法,可以将设计中的错误定位在某一个小的 范围内,从而使错误的追踪变得相对容易。 译码器的译码结果是经过了很多模块的协同运算得到的,假如ACS模块设 计错了,根据6.1.1描述的仿真平台,只能在比较最后的译码结果时才能发现错 误,而无法得知在那一段时间,那个模块的错误传播到这里。在此,通过分析译 码器的内部结构,提出了一种在被测设计内部插入调试代码的方法来解决问题。 下面说明一下它的具体实现方法: 译码器的路径度量值存储器NewMtrRam每个时钟周期都要接收ACS单元的 计算结果进行更新。Matlab仿真程序中同样有一个路径度量值存储器单元,不过 它是在一个for循环内部,每循环一次,存储器更新一次。所以从Matlab仿真程 序中可以输出每次更新时路径度量值存储器的数据,作为校验文件。根据以上分 析,在被测试的译码器RTL代码中加入了图5.4所示的监视器(Monitor)。 北京邮电大学硕.L学位论文 第五章系统仿真、综合与测试 图5-4译码器Monitor示意图 在被测设计的RTL代码中插入Monitor的行为级描述。在仿真开始阶段, Monitor内部用一块初始化好的存储器保存了Matlab程序输出的每次更新时路径 度量存储器的数据。每个时钟周期ACS的运算结果来更新NewMtrRam时,也 同样保存到Monitor内部的寄存器中,和初始化后的存储器中的路径度量值进行 比较,如果不一致就报告详细的错误信息,退出仿真。输出的错误信息包括当前 的仿真时间,NewMtrRam的地址,ACS运算的结果等。 使用这种调试方法可以得到错误发生的时间,发生错误的状态等重要信息, 使接下来的调试有了目标和方向。同时,发现错误后可以选择立即退出仿真,后 面的仿真就不用跑了,节约了仿真时间。 5.2 Viterbi译码器的综合和性能分析 5.2.1综合结果 功能仿真完成以后对设计进行了综合、布局布线。在译码器的综合过程中采 用了Quartus6.0自带的综合工具。综合前需要设置时序、管脚等约束。图5.5是 北京邮电人学硕:L学位论文 第五章系统仿真、综合与测试 综合后Control模块的RTL级网表视图,图5.6是综合后的资源占用情况。 铲 秽 二:矽B厂 秽 矿 副甜 葑副 移 移 移 寸N 剖, J ,{ 打 ’■ 一. J J 爿 】 J 剖 两 目萝 蓍o 覃岳 {g}===。 哥Ii 干I j 剖 料 芒 移 、∞ 矿 吨几 剧 V上~ 型 一 ·移 。L—J -一 口孓。 rt一 刈 一* 叫 一 型l 叫 n钾¥tttus 23∞:35:16锄 图5.5 Control模块RTL级网表视图 Successful—Sqt Feb B·订li哺量蛳·Vn啪I脚D珏 如村tuⅡYersiOn 8.0 Build 178 0412712∞6对触1 Yersi强 Top-level hti ty I曲·V工璐BI pE∞D髓 7lily Devi ce CEyPcll聊on4e0优汀 Tisin‘|odels lriz值3. met tisiK requireHnts Yes Totsl locic.1emeuts 796/20,060(4■) Tot.1 pins Tot●l以rt试pins Tot毫l meio玎bit墨 9/30I(3■) 0 I吼鲫/294,912(7鼍) Tot.1 PUj 0 J,2(0■) 图5石译码器资源占用情况 5.2.2性能分析 经过综合和布局布线后,显示译码器的最大工作频率厂眦-102.42MHz。最 大数据吞吐率的计算公式如下: ‰-尝×192_10.35Mbps 为了检验译码器的综合性能,和Altcm公司的Viterbi译码器口核进行了对 比,Altera译码器的IP核也采用了(2,1,9)软判决方式,卷积多项式也是相 同的,不同的是Altera译码器的口核采用了0=-8的量化方式。 表5.I译码器资源情况占用列表 LogicElements MemoryBits fmaxft,Olz) Throughoutput 该译码器 796 19968 110.42 10.35 Altera IP核 2653 129024 174 11 北京邮电人学硕+学位论文 第五章系统仿真、综合与测试 从表5.1可以看出,该译码器的最大吞吐率和Altera的IP核是差不多的,但 是最大运行时钟频率低了不少。造成这种现象的原因是译码器的参数设置不同, Altera的译码器的译码深度z154,码序列长度三1128。该设计中占用的逻辑单 元比Altera的IP核少了很多,仅是前者的1/3,而占用的BlockRam的数量比后 者多。这种现象主要是因为前者采用了“乒乓”操作的方式设计存储器,占用了 较多的RAM资源,但是节省了逻辑单元。该译码器最大运行时钟频率fmax比 Altera IP核的低,除了时序优化的问题还有器件的问题,因为后者是在Cyclonelll 上综合的结果。 综合来说,该Viterbi译码器性能还是不错的,具有较强的工程实用价值。静 态时序分析表明,该设计的关键路径在DEC模块,所以还有很大的优化空间。 5.3 Viterbi译码器的硬件测试 5.3.1 Viterb i译码器硬件测试平台 本文设计的Viterbi译码器是无线多媒体传输系统基带处理芯片的一个模块, 需要和基带系统的其他模块协同工作,所以必须设计和其他模块通信的接口。 Viterbi译码模块和其他模块的接口采用了片内总线的方式,设计这样的硬件测试 平台是比较困难的。为了测试的方便,为译码器增加了一个UART接口,和PC 端的串口程序配合,组成一个简易的测试系统。 测试平台由硬件部分和软件部分组成,硬件部分包括:FPGA开发板(带有 Altera EPlC20F400C7芯片,UART接口,电源、晶振等外围器件)、PC机、串 口线、ByteBlasterII下载线。软件部分包括:Quartusll6.0集成开发软件、Matlab 仿真软件、PC端串口收发软件组成。 5.3.2 Viterbi译码器测试方法: 如图所示,首先把测试数据也就是Matlab仿真产生的待译码数据通过初始 化的方式存储在FPGA的BiockRam中,译码器读取BlockRam中的数据进行译 码,将译码结果缓存到FIFO中,通过UART接口传送给PC,由PC端的串口收 发软件接收。通过脚本程序比较串口接收到的数据和Matlab仿真产生的己解码 数据是否一致就可以判断译码器是否正常工作。 北京邮电人学硕十学位论文 第五章系统仿真、综合‘j测试 0 B f}划 i U 旧 ]程胛 A R I.............一 T PC 1r 陋墅卿( LH一 比较一——(__砒I矗仿蠢孬藁《:.…………………… 』设计是否正确z 图5.7译码器硬件测试平台 5.3.3使用SingaItapI I逻辑分析仪调试FPGA‘删 在布局布线完成以后,将设计下载到FPGA芯片中进行调试。在调试过程中 需要观测设计内部的信号,一般来说有两种方法:一种是将内部的信号驱动到 FPGA的UO端IZl上,用硬逻辑分析仪去观测。另外一种方法就是使用SignalTaplI 内嵌逻辑分析仪。由于逻辑分析仪价格昂贵,在该设计的调试过程中使用了 SignalTaplI。 SignalTapll内嵌逻辑分析仪是ARcra公司Quartus II设计软件中的调试工 具。随着FPGA容量的增大,FPGA的设计日益复杂,调试工具在减少产品研制 周期和降低开发成本扮演着越来越重要的角色。SingalTaplI内嵌逻辑分析仪通 过把一段执行逻辑分析功能的代码和客户的设计组合在一起编译、布局布线,然 后将状态采样和客户设定的节点信息存储于FPGA内嵌的BlockRam中,再经过 下载电缆传回计算机,通过图形了解节点的状态,满足了FPGA开发中硬件调试的 要求。它具有不占用额外的I/O管脚和PCB空问、不破环接口信号的完整性、 无干扰、便于升级、使用简单和价格低廉等特点。 使用SignalTap II无需额外的逻辑分析设备,只需将一根JTAG接口的下载电 缆连接到要调试的FPGA器件。SignalTap II对FPGA的引脚和内部的连线信号 进行捕获后,将数据存储在一定的RAM块中。因此,需要用于捕获的采样时钟信 号和保存被测信号的一定数目的RAM块。使用SignalTap II的一般流程是:设 计人员在完成设计并编译工程后,建立SignalTap II(.stp)文件并加入工程、配置 北京邮电人学硕士学位论文 第五章系统仿真、综合与测试 STP文件、编译并下载设计到FPGA、在Quartus II软件中显示被测信号的波形、 在测试完毕后将该逻辑分析仪从项目中删除。以下描述设置SignalTap II文件的 基本流程: 1、设置采样时钟。采样时钟决定了显示信号波形的分辨率,它的频率要大 于被测信号的最高频率,否则无法J下确反映被测信号波形的变化。SignalTapll 在时钟上升沿将被测信号存储到缓存。 2、设置被测信号。可以使用NodeFinder中的SignalTap II滤波器查找所有 预综合和布局布线后的SignalTaplI节点,添加要观察的信号。逻辑分析器不可 测试的信号包括:逻辑单元的进位信号、PLL的时钟输出、JTAG引脚信号、LVDS (低压差分)信号。 3、配置采样深度、确定RAM的大小。SignalTap II所能显示的被测信号波 形的时间长度为Tx,计算公式如下:Tx=NXTs。N为缓存中存储的采样点数, Ts为采样时钟的周期。 4、设置buffer acquisition mode。buffer acquisition mode包括循环采样存储、 连续存储两种模式。循环采样存储也就是分段存储,将整个缓存分成多个片段 (segment),每当触发条件满足时就捕获一段数据。该功能可以去掉无关的数据, 使采样缓存的使用更加灵活。 5、触发级别。SignalTap 11支持多触发级的触发方式,最多可支持10级触发。 6、触发条件。可以设定复杂的触发条件用来捕获相应的数据,以协助调试 设计。当触发条件满足时,在signalTaplI时钟的上升沿采样被测信号。 完成STP设置后,将STP文件同原有的设计下载到FPGA中,在QuartuslI 中SignalTap II窗口下查看逻辑分析仪捕获结果。 在设计的测试阶段,使用SignalTapll逻辑分析仪对译码器进行了片上调试, 极大的提高了分析和处理故障的效率。 10Ⅱ201)s一1,∞1n’324抛 圆n“a嗣setap 图5-8 SignalTaplI捕获信号截图 北京邮电大学硕上学位论文 5.3.4测试结果 第五章系统仿真、综合‘j测试 经过硬件测试平台的测试,该译码器能够在100M的系统时钟频率下稳定运 行,从串口收发软件接收到的经Viterbi译码器电路解码的数据和经Matlab仿真 程序译码的数据完全一致,证明了该设计的算法正确性,和电路设计的正确性。 同时,可以发现采用硬件电路译码速度要远远的快于Matlab仿真程序译码的速 度,这也验证了采用FPGA来实现卷积码译码在处理速度上的优越性 北京邮电人学硕十学位论文 第六章结束语 第六章结束语 6.1本文主要工作总结 从1967年Viterbi提出卷积码的译码算法以来,Viterbi译码算法本身己经有 了很大的发展。各种改进的可应用于不同领域的Viterbi译码算法被陆续提出。 随着大规模集成电路技术和数字通信的发展,人们对于数字通信的通信质量和通 讯速度要求日益提高,更快、功耗更低并且可以使用于多领域的处理芯片将会成 为今后研究的重点。 本文在分析了Viterbi算法的基础上,对算法复杂度和译码器性能之间的关系 做了详细的阐述,总结了Viterbi译码器设计的关键参数,并用Matlab对算法进 行了仿真,检验Viterbi算法有效性的同时为后面的设计提供了测试数据。 本文在分析研究现有的Viterbi算法VLSI实现技术的基础上,设计了一个(2, 1,9)软判决Viterbi译码器。设计中采用了“串.并"结合方式的ACS运算单元, 在满足设计指标的情况下,减少了资源占用。同时,提出了一种通用的路径度量 值存储器的组织方式,采用这种方式不会打断ACS的流水线操作,同时还具有 内部连接关系简单,地址和控制信号产生非常容易,易于对控制模块的逻辑进行 时序优化的特点,综合结果也表明采用这种设计方式大大减少了逻辑单元的资源 占用。 为了验证设计的正确性,在本文中设计了功能仿真平台,采用了业界流行的 仿真、调试工具对设计进行了验证。在仿真过程中,根据译码器的特点提出了一 种在被测设计(Viterbi译码器RTL级描述)内部插入监视器的方法提高仿真和 EPlC20F蝴FPGA芯片上进行了片 调试的效率,缩短了项目开发时间。 最后,本文中设计的译码器在Altcra 上测试,文中简单介绍了测试平台的搭建方法和调试技术。 本文中设计的(2,1,9)软判决维特比译码器通过了片上测试,运行稳定 可靠,综合结果也表明该译码器的性能和资源占用情况是相称的,有较高的工程 实用价值,同时也为以后进一步的研究进行了技术积累和储备。 北京邮I乜人学硕十学位论文 6.2下一步工作展望 第六章结束语 本文中设计的Viterbi译码器符合设计要求,具有较高的工程应用价值,但是 仍有许多需要进一步研究和改进的地方。 1、本文设计的译码器是固定参数的,而在无线多媒体传输系统中,不同的 信道质量和业务对编码增益的要求不一样。信道质量好的情况下需要高 的译码速率,低延迟,信道质量差的情况下需要高的编码增益。语音、 视频信息流需要高的译码速率来保证实时性,数据业务需要低的误码率 保证准确性。所以,设计编码效率,约束长度等参数可配置的译码器是 下一步的主要工作内容。 2、本文设计的译码器的设计中采用了“乒乓”操作的方式实现路径度量值 存储器,占用的RAM资源较多,这在某些RAM资源比较紧张的场合是 不合适的。对于约束长度较小的译码器可以采用原位存储的方法来节省 RAM资源,对于约束长度K=9的译码器采用此种方法会使控制信号的 产生比较复杂,这个方面的技术需要进一步的研究。 3、本文设计的译码器综合后的最大运行时钟频率为110MHz,Altera公司的 IP核最大运行时钟频率达到174MHz。所以说该设计还有很大的优化空 间。认真分析设计的关键路径,优化系统时序使之工作在更高的时钟频 率也是下一步需要重点做的工作。 Viterbi译码器设计的方法和技术还有很多,本文中仅仅介绍了其中的一部 分,局限于本人知识水平和项目开发时间,文中的不足之处还很多,需要进一步 的学习和提高。 北京邮电大学硕士学位论文 参考文献 参考文献 【11王新梅肖国镇,纠错码一原理与方法【M】,西安电子科技大学出版社,6 2004 【2】方军俞槐锉,信息论与编码【M】,电子-rqI,出版社,3 1995 【3】John G.Proakis,数字通信,第四版【M】,电子工业出版社4 2005 【4】吴伟陵牛凯,移动通信原理【M】,电子工业出版社1 2005 【5】杜慧敏李宥谋赵全良,基于Verilog的FPGA设计基础【M】,西安电子科技大学2 2006 【6】吴继华王诚,Altera FPGA/CPLD设计(高级篇)【M】,人民邮电出版社7 2005 【7】A.P.Hekstra,“An Alternative to Metric Rescaling in Viterbi Decoders”【J1正EE Trans.Comm.,V01.37,No.11,PP.1220-1222,Novemberl989. 【8】Y.Zhth M Benaissa."A Novel ACS Scheme for Area-Efficient Viterbi Decoders”【J】 IEEE,2003.PP.264-267. 【9】夏宁闻,Verilog数字系统设计教程【M】,北京航空航天大学出版社1 2004 【10]Chameleon Logics.“Viterbi decoding in field programmable gate arrays(FPGA)",【J】 Solid-State Circuits IEEE J.'3umal of Volume:25,Issue:4,Aug.1990 【11]T.ILTmong,Ming-Tang Shih,Irving S.Reed and E.H.Satofius.“A VI_SI Design for a Trace ·Back Viterbi Decoder",【J】IEEE Transactions on,Volume:40,Issue:3 March 1992 【12]Montse Boo,Francisco Arguello,Jvier D.Bmgnera"High-Performance VLSI Architecuture for the Viterbi Algorithm",【J】IEEE Transactions on,Volume:45,No.2,Febmary.1997 【13]Ching-WenWang Yun-Nan Chang“Design of Viterbi decoders with in-place state metric update and hybrid tmceback processing",【J】Signal Processing Systems,2001 IEEE Workshop on,26-28 scpt.2001 【14]Altera CorporationNiterbi Compiler user guide,January 2003 【15]Moorthy,H.T.,Lin,s.,Uehara,G.T..“Good trellises for IC implementation of Viterbi decoders for linear block codes”.【J1 Communications,IEEE Transactions on,Jan.1997: 52_63P 【16]Byonghyo Shim,Sungmin Cho,Jung Chul Suh."An improved VLSI architecture for Viterbi decoder'’.【J】TENCON蛾Proceedings of the正EE Region 10 Conference,15-17 Sept 1999:2 59.262P 【ITl Sayed Aon Mujtaba."An area-eficient VLSI architecture of the Viterbi decoder for他ve嗽 linl【IS-95(CDMA)air interface".【J】Signal Processing Proceedings,1998.ICSP’98.1998 Fourth International Conference on,12-16 Oct 1998".525-529P 一55— 北京邮电人学硕十学位论文 致谢 【18]Je Hyuk Ryu,Sang Cheon Kim,Jun Dong Cho,Hyun Woo Park,Yung Hoon Chang.“Lower power Viterbi decoder architecture with a new clock-gating trace-back unit”.【J】VLSI and CAD,1999.ICVC’99.矿International Conference on,26-27 Oct.1999:297.300 P 【19]Gennady Feygin,P.G Gulak,“Architectural Tradeoffs for Survivor Sequence Memory Management in Viterbi Decoders”,【J】Communications,IEEE Transactions On,Volume:41, No.3,March 1993 【20]李文江赵增辉,“用SignalTap II逻辑分析仪调试FPGA”,【J】无线电工程,2007年37卷 1期pp.48-50 —56— 北京邮电大学硕上学位论文 附录1. 缩略语及符号说明 FEC ARQ HEC ASIC FPGA CPUD IP DSP CDMA Mb心 MLD BSC DMC LE PLL R11L EDA DPRAM Forward Error Correction Automatic Repeat-request Hybrid Error Correction Application Specific Integrated Circuit Field Programmable Gate-Array Complex Programmable Logic Device Intelectuai Property Digital Signal Processing Code Division Multiple Access Maximum A-Posteriori Probability Maximum Liklihood Decoding Binary Symmetric Channel Discrete Memoryless Channel Logic Element Phase Locked LD叩 Register Transfer Logic Eletronic Design Automation Dual Port Ram 附录1缩略语.o-J符口.说明 一57— 北京邮也人学顼?仁学位论文 致谢 致谢 在这里,我首先要衷心的感谢我的导师刘元安教授。硕士研究生阶段刘元安 老师在学术和生活上对我进行了悉心的指导和热情关怀,并将我引入了无线通信 这个领域,引导我了解和熟悉了这个领域的前沿技术以及宽广的发展前景,在撰 写论文这一段时间里,刘老师对我的研究方向进行了详尽的分析,并对我在技术 上遇到的一些问题进行了指导,帮助我完成了本论文的研究工作。在其它方面, 刘元安老师十分关心我的生活和学习,并尽其所能的为我们创造良好的条件。从 刘元安老师这旱,我看到了一个成功者的胸怀和师长的风范,也使我从中汲取到 很多受益终身的东西。 在这里还需要特别感谢我实验室的唐碧华老师和袁东明老师,在我的研究生 学习生涯中,他们一直给予我最真诚的帮助和关心,给了我很多学习上的指导和 精神上的鼓励。同时也要感谢项目组的焦冀宁、刘琪、闫伟蓉、韩峥等等同学, 这些同学在我困难时都曾给予我无私的帮助,在我的论文项目研究中提供了十分 有益的指导和帮助。 最后,再次感谢那些在我的研究工作中帮助过我的老师和同学们,同时也感 谢所有在我成长过程中帮助过我的人们。 二燮!!丛兰硕:t:学位论文 攻读硕上学位期问发表论文 攻读硕士学位期间发表论文 【1】.侯晓凡,QDRII SRAM控制器的设计与FPGA实现,中国科技论文在线 一59— (2,1,9)软判决Viterbi译码器的设计与FPGA实现 作者: 学位授予单位: 侯晓凡 北京邮电大学 相似文献(10条) 1.学位论文 刘虎 基于FPGA的Viterbi译码器设计与实现 2009 卷积码是广泛应用于卫星通信、无线通信等多种通信系统的信道编码方式。Viterbi算法是卷积码的最大似然译码算法,该算法译码性能好、速度快 ,并且硬件实现结构比较简单,是最佳的卷积码译码算法。随着可编程逻辑技术的不断发展,使用FPGA实现Viterbi译码器的设计方法逐渐成为主流。不 同通信系统所选用的卷积码不同,因此设计可重配置的Viterbi译码器,使其能够满足多种通信系统的应用需求,具有很重要的现实意义。 本文设计了基于FPGA的高速Viterbi译码器。在对Viterbi译码算法深入研究的基础上,重点研究了Viterbi译码器核心组成模块的电路实现算法。本 设计中分支度量计算模块采用只计算可能的分支度量值的方法,节省了资源;加比选模块使用全并行结构保证处理速度;幸存路径管理模块使用3指针偶 算法的流水线结构,大大提高了译码速度。在Xilinx ISE8.2i环境下,用VHDL硬件描述语言编写程序,实现(2,1,7)卷积码的Viterbi译码器。在 (2,1,7)卷积码译码器基础上,扩展了Viterbi译码器的通用性,使其能够对不同的卷积码译码。译码器根据不同的工作模式,可以对(2,1,7)、 (2,1,9)、(3,1,7)和(3,1,9)四种广泛运用的卷积码译码,并且可以修改译码深度等改变译码器性能的参数。 本文用Simulink搭建编译码系统的通信链路,生成测试Viterbi译码器所需的软判决输入。使用ModelSim SE6.0对各种模式的译码器进行全面仿真验 证,Xilinx ISE8.2i时序分析报告表明译码器布局布线后最高译码速度可达200MHz。在FPGA和DSP组成的硬件平台上进一步测试译码器,译码器运行稳定 可靠。最后,使用Simulink产生的数据对本文设计的Viterbi译码器的译码性能进行了分析,仿真结果表明,在同等条件下,本文设计的Viterbi译码器 与Simulink中的Viterbi译码器模块的译码性能相当。 2.期刊论文 井小沛.武斌.张青春.Jing Xiaopei.Wu Bin.Zhang Qingchun 基于FPGA的卷积码的编/译码器设计 -电 子测量技术2008,31(2) 卷积码作为通信系统中重要的编码方式,以其良好的编码性能,合理的译码方法,被广泛应用.本文在介绍卷积码原理的基础上,详细阐述了基于FPGA的 卷积码的编/译码器的设计.值得一提的是,卷积码的译码采用维特比译码算法,利用了状态路径度量计算、保存路径转移过程和回溯译码等方法,在硬件实 现上能有效地减少存储量、降低功耗,提高整个编/译码器的性能.最后进行了模拟仿真,结果显示编译码的效果比较理想,达到了设计的目的. 3.学位论文 沈礼权 卷积码在CDMA2000中的应用及其译码器FPGA实现 2005 数字信息在有噪声的信道中传输时,受到噪声的影响,误码总是不可避免的。根据香农信息理论,只要使Es/N0足够大,就可以达到任意小的误码率 。采用差错控制编码,即信道编码技术,可以在一定的Es/N0条件下有效地降低误码率。按照对信息元处理方式不同,信道编码分为分组码与卷积码两类 。卷积码的k0和n0较小,实现最佳译码与准最佳译码更加容易。卷积码运用广泛,被ITU选入第三代移动通信系统,作为包括WCDMA,CDMA2000和TDSCDMA在内的信道编码的标准方案。 本文研究了CDMA2000业务通道中的帧结构,对CDMA2000系统中的卷积码特性及维特比译码的性能限进行了分析,并基于MATLAB平台做了相应的译码 性能仿真。我们设计了一种可用于CDMA2000通信系统的通用、高速维特比译码器。该译码器在设计上具有以下创新之处:(1)采用通用码表结构,支持可 变码率;帧控制模块和频率控制器模块的设计中采用计数器、定时器等器件实现了可变帧长、可变数据速率的数据帧处理方式。(2)结合流水线结构思想 ,利用四个ACS模块并行运行,加快数据处理速度;在ACS模块中,将路径度量值存贮器的存储结构进行优化,防止数据读写的阻塞,缩短存储器读写时 间,使译码器的处理速度更快。(3)为了防止路径度量值和幸存路径长度的溢出,提出了保护处理策略。我们还将设计结果在APEXEP20K30E芯片上进行了 硬件实现。该译码器芯片具有可变的码率和帧长处理能力,可以运行于40MHZ系统时钟下,内部最高译码速度可达625kbps。本文所提出的维特比译码器 硬件结构具有很强的通用性和高速性,可以方便地应用于CDMA2000移动通信系统。 4.期刊论文 李晓刚.蔡德林.LI Xiao-gang.CAI De-lin 2,1,7卷积码Viterbi译码器的一种设计方案 -信息技术 2008,32(1) 卷积码在通信系统中得到了极为广泛的应用.其中约束长度K=7,码率为1/2和1/3的Odenwalder卷积码已经成为商业卫星通信系统中的标准编码方法 .提出了一种(2,1,7)卷积码Viterbi译码器的设计方案,该译码器采用全并行结构的加/比/选模块和回溯法以提高译码速度,重点介绍了幸存路径存储与交 换单元的设计与实现. 5.学位论文 鄂炜 大约束度卷积码的Viterbi译码器的实现 2003 该文就是在卷积码约束度大的情况下,降低Viterbi译码器的硬件复杂度,同时保证一定的译码速率,用FPGA上设计实现Viterbi译码器.该文的设计采 用从下至上(Bottom up)的设计方式,先实现各个子模块,然后将各个模块有效的组合在一起,完成最终的译码器设计.该文的重点放在如下几个部分 :1)ACS模块采用四个ACS单元并行处理的方式,合理的安排路径度量存储器中读写数据的顺序,提出了一种度量状态分配算法,简化了ACS模块和存储模块之 间的接口电路.2)在路径度量存储的更新上采用原位运算的方法,减少了存储器的使用.同时,存储器的组织采用分块的方法,对应于四个ACS单元,将存储器 分成四块,每个ACS单元对其中的两块存储器进行读写操作.3)幸存路径管理模块采用选择更新的存储管理方法,使Viterbi译码器在译码过程中可以采用简 洁明了的查表法从幸存路径存储器中读取幸存路径,进行路径回溯. 6.期刊论文 程晓江.马晓军.刘洛琨 卷积码Viterbi译码器的FPGA的设计与实现 -通信技术2003,""(3) 给出了一种基于FPGA的切实可行的卷积码Viterbi译码器的实现方案.该方案只需要很少的硬件资源,速度较快.可以很方便地和Turbo译码器结合在单 片的FPGA上,并应用于3GPP WCDMA移动通信系统中. 7.期刊论文 刘华章.Liu Huazhang 长约束度卷积码译码器神经网络结构 -通信技术2000,""(2) 给出的神经网络译码器是为长约束度(K≥11)卷积码译码而设计的.Viterbi译码和序列译码是两种最大似然译码方法,虽然这两种技术能有效地提高 误比特率性能,但它们都存在局限性.另外,只要在神经元和数字异或门单元之间建立局部连接,就能非常容易地直接用超大规模集成电路(VLSI)实现硬件. 8.学位论文 段华蓉 Viterbi译码器的低功耗设计 2006 卷积码是一类重要的前向纠错编码,它编码简单,易于实现最佳译码,是当今无线数字通信系统的一个十分重要的组成部分。Viterbi译码算法是一 种用来解卷积编码的最大似然译码算法,它具有译码效率高、速度快及译码器实现结构简单的优点,被认为是卷积码的最佳译码算法。 随着VLSI的飞速发展和便携通信设备的大量涌现,功耗越来越成为制约设计的一个主要问题。Viterbi译码器是移动通信系统中的主要耗能单元,因 此如何降低Viterbi译码的复杂性和功耗,就成为一种迫切的需要,受到人们的普遍关注。本课题就是设计适用于移动通信系统的低功耗Viterbi译码器 。 电路的功耗分为静态功耗和动态功耗,对于CMOS电路,功耗主要是动态功耗,大约占总功耗的85—90%。动态功耗由负载电容、工作频率、工作电 压和能耗状态活动转换几率决定。在通常的设计环境中,设计者不能改变负载电容、工作频率或工作电压,而只能改变开关活动频率。降低开关活动频 率的实质就是尽量去除不必要的翻转、避免能量的白白浪费。从这里发掘功耗的潜力是很大的,主要通过优化算法、优化逻辑结构来实现。这是当前开 展低功耗逻辑优化的重要方面,也是本课题采用的方法。 Viterbi译码器主要由四个功能单元组成:分支度量单元(BMU),加比选单元(ACS),路径度量存储单元(PMU),幸存路径存储和输出单元 (SMU)。本文所做的Viterbi译码器设计采用模块化的设计方法,先对各个功能单元进行优化设计,然后将各个功能单元组合在一起,形成最终的译码 器。 本文对SMU单元进行了低功耗设计。在SMU中,由于要进行频繁的存储器读写,功耗很大,成为整个viterbi译码器中消耗功率最大的单元,因此对 SMU单元进行低功耗设计对降低Viterbi译码器的功耗起着非常重要的作用。本文首先分析了两种传统的SMU实现方法,这两种方法都存在一定的缺陷。其 次通过分析幸存路径存储和输出的过程,讨论了改进寄存器交换法,减少存储器使用数目和减少存储单元数据读写次数的可能性,并提出了具体的实现 方法。然后对比传统的寄存器交换法,进行了存储单元使用数量和功耗的对比,仿真结果表明能明显的降低功耗。 最后把各个功能模块组合成在一起,设计出了低功耗的Viterbi译码器,仿真结果表明比起没有采用低功耗技术的译码器,在译码器纠错性能和译码 速度不变的情况下,动态功耗降低了33%。 9.期刊论文 张成.杨健.ZHANG Cheng.YANG Jian 基于FPGA的卷积码Viterbi编码/译码器的设计与实现 -电脑知识 与技术2009,5(20) 该文设计了一种采用(2,1,2)卷积码的VB编码/解码器,并在XilinX公司SpartanⅡ-XC2S200 FPGA芯片上实现.所设计的VB编码/解码器具有前向纠错能 力强、编解码速度快、占用系统资源少等特点.综合后仿真结果显示,该VB编码/解码器的性能较理想,达到了预期的设计目标. 10.学位论文 任利华 IBOC DAB接收机Viterbi译码器结构设计研究 2007 卷积编码是深度空间通信系统、无线通信系统及广播系统中常用的一种编码方式,卷积码的最佳译码——Viterbi译码由于具有译码性能好,译码器 结构简单等特性,因而在各种数据传输系统,尤其是数字无线通信和卫星通信中,得到了极其迅速的发展。本文以带内同频道数字音频广播(IBOC DAB)接收机系统为应用对象,设计了能够较好地满足IBOCDAB系统音频传输业务和少量数据传输业务要求的Viterbi译码器。 (1)对Viterbi译码器在不同的约束长度、量化精度、译码深度下的译码性能进行了Simulink仿真和分析,确定出适合IBOC DAB系统的误码率为10<'5>数量级左右的(2,1,7)卷积码及8电平量化软判决Viterbi译码方案。 (2)在Viterbi译码器的具体电路结构设计中,分支度量模块(BMG)采用了一种速度快、所需硬件代价小的简化欧式距离求解方法;加比选(ACS)模块 采用全并行的运算结构,并加入了度量溢出单元来减小电路规模,加法器采用了流水线式超前进位加法器的设计方法,比较器采用了RTL(寄存器传输级 )结构描述,既提高了译码器的速度,又节省了硬件资源。 (3)分别用Mentor公司的Modelsim6.1和Synplicity公司的SynplifyPr08.1对Viterbi译码器进行了功能仿真和逻辑综合,在Xilinx ISE8.1下完成了 时序仿真和布局布线,并在Xilinx Spartan3 xc3s200芯片中进行了样片实现。经验证,在满足功耗的前提下译码器的数据吞吐率最高可达55Mbps。 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1315935.aspx 授权使用:北京理工大学(北京理工大学),授权号:8ba3fc25-c88b-4ce2-a644-9e2e001dc66c 下载时间:2010年11月14日
更多简介内容

评论

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })