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

卷积Turbo码编译码器FPGA实现

  • 1星
  • 日期: 2014-03-05
  • 大小: 2.27MB
  • 所需积分:1分
  • 下载次数:1
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 卷积Turbo码编译码器FPGA实现

卷积Turbo码因其优异的纠错性能越来越受人门的关注,而编码器和译码器是编码理论实际应用的重点和难点。论文根据IEEE802.16e标准,以低时延、高吞吐量、支持高时钟频率、参数可配置为目标,对卷积Turbo码编码器和译码器的FPG...

上海师范大学 硕士学位论文 卷积Turbo码编译码器FPGA实现的研究 姓名:高子旺 申请学位级别:硕士 专业:通信与信息系统 指导教师:顾美康 20100301 摘要 卷积Turbo码因其优异的纠错性能越来越受人门的关注,而编码器和译码器 是编码理论实际应用的重点和难点。论文根据IEEE802.16e标准,以低时延、高 吞吐量、支持高时钟频率、参数可配置为目标,对卷积Turbo码编码器和译码器 的FPGA实现进行研究。 论文介绍了卷积Turbo码编码原理,之后采用至上而下的方法对编码器进行 设计。序列交织器和子块交织器是编码器的重要组成部分,也是提高编码器时钟 频率的瓶颈。论文采用基于查找表的方法,实现的交织器具有结构简单、通用性 强、时延小、逻辑链路短等优点。在系统最高时钟频率得以保证的前提下,论文 还对交织器的存储空间进行了合理的划分,尽量减小内嵌RAM的开销。此外论 文还对编码器流程做了详细而合理的设计,以减小编码器时延,提高吞吐量。 类似的,在译码器设计之前介绍了译码原理,详细推导了MAP译码算法和 Max.109.MAP译码算法,主要包括分支度量、前向状态度量、后向状念度量、外 部信息、对数似然比的计算。 分析了卷积Turbo码译码器的关键路径,和传统Turbo码译码器一样,关键 路径存在于前/后向状态度量计算单元,由加法器、求最大值逻辑链路、归一化处 理逻辑链路组成。不同的是求最大值操作对象由二个变成四个,这也是CTC译码 器的最高时钟频率比传统Turbo码译码器的最高时钟频率低的原因。专门设计了 四个数据求最大值逻辑链路,并放弃状态度量归一化处理操作以缩短关键路径, 提高系统最高时钟频率。 为了减小译码时延,提高吞吐量,采取了下列措施:首先,采用流水线技术, 将译码器数据处理过程分为数据分离、译码迭代、数据输出,译码迭代能连续进 行,不用等待数据分离或者数据输出。其次,调整分量译码顺序,先进行第二分 量译码再进行第一分量译码,这样信息比特判决时不需要对信息比特的对数似然 比进行解交织,节省了时间。最后,前向状态度量计算和后向状态度量计算同时 进行,在不牺牲译码性能的前提下,提前了外部信息的计算,减小了时延。 关键字:卷积Turbo码,FPGA,MAP,Max-log-MAP,时延 Abstract Convolutional Turbo Code has attracted more and more attention due to its excellent error correction performance,where the encoder and decoder are the emphasis and difficulty of the practical application of coding theory.According to standard IEEE802.1 6e,the paper deals with the implementation of Convolutional Turbo Code encoder and decoder with FPGA,aimed at low latency,high throughput,high clock frequency supported and parameter configuration supported. The paper introduces the principles of Convolutional Turbo Code encoding and then designs the encoder in detail by using top—down principle.Sequence interleaver and sub.block interleaver are not only essential components of the encoder but also the bottleneck for improving the clock frequency.The paper adopts look-up table-based approach to implement interleavers,which provides several advantages such as low complexity,generability,low latency and short critical path.It also divides the memory space of interleaver reasonably to minimize the consumption of embedded RAM,on the premise that the highest clock frequency is guaranteed.In addition,the paper contains a detailed and reasonable design of encoder process,in order to reduce the encoder latency and improve throughput. Similarly,before the decoder design,there is an introduction of decoding principles and a detailed derivation of MAP and Max—Log-MAP decoding algorithm, mainly including the calculation of branch metrics,forward state metrics,backward state metrics,external information and log-likelihood ratio. Analysis of Convolutional Turbo Code decoder shows that alike the traditional turbo decoder,the eritical path of Convolutional Turbo Code decoder exists in the forward/backward state metric calculation unit,which is composed of the adder, comparator,selector and normalization logical link.However,there are not two inputs but four inputs to comparator and selector.This is the reason why the highest clock frequency of the CTC decoder is lower than one of conventional turbo decoder.The paper specially designs the comparator and abandons the normalization for state metric, for the purpose of reducing the critical path. 1I In order to reduce the decoder latency and improve the throughout,the following measures are adopted.Firstly,adopt pipeline technique,dividing the decoding process into data de-multiplexing,decoding iteration and data output.Decoding iteration Call be continuously carried out without waiting for data de-multiplexing or data output. Secondly,adjust the sub—decoding sequence.DEC2 go ahead of DEC I.it saves time,because there is no need to de-interleave the log·likelihood ratio of information bits when judge the information bits.Finally,calculate the forward state metrics and backward state metrics at the same time.By calculating the external information in advance,it reduces the decoding latency,without sacrificing the decoding performance. Keywords:CTC,FPGA,MAP,Max-log—MAP,Latency Ill 论文独创性声明 本论文是我个人在导师指导下进行的研究工作及取得的研究成果。论文中除 了特别加以标注和致谢的地方外,不包含其他人或机构已经发表或撰写过的研究 成果。其他同志对本研究的启发和所做的贡献均已在论文中做了明确的声明并表 示了谢意。 作者签名:高寻旺日期:Zo[o-5、『7 论文使用授权声明 本人完全了解上海师范大学有关保留、使用学位论文的规定,即:学校有权 保留送交论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其它手段保存论文。保密的论文在解密后遵守此 规定。 作者躲南子跌刷雠稀眺刎心『7 上海师范大学硕士学位论文 第一章绪论 第一章绪论 1.1课题背景 在Turbo码提出之前,由Reed—Solomon码、交织器、卷积码串行构成的级联 码曾被当时的人们认为纠错性能最优秀的码,被广泛的应用于深空通信和数字视 频传播。1993年C.Berrou,A.Glavieux和P.Thitimajshima在国际通信会议上 首次提出了“最接近Shannon极限的纠错编解码:Turbo码",在AWGN信道和BPSK 调制下,码率为1/2,Eb/N。为0.7dB时,采用Turbo码可以获得10畸的误比特率【11。 随后不断有人对Turbo码的原理、性能、理论分析进行研究并取得不同程度的进 展,为Turbo码的实际应用奠定基础。Turbo码被广泛应用于第三代移动通信标 准,如HSPA和LTE。高通公司推出的用于移动终端电视系统的MediaFLO技术也 采用Turbo码作为其前向纠错(Forward Error Correction,FEC)方案。Turbo 码的提出,还更新了编码理论研究的方法,现在人们更喜欢基于概率的软判决译 码方法,而不是早期基于代数的构造和译码方法。目前,Turbo码被看成1982年 TCM技术问世以来,信道编码理论与技术研究上所取得的最伟大的技术成就,具 有里程碑的意义【21。 WiMAX(全球微波互联接入),其两个主要标准IEEE 802.16d[3】和IEEE 802.16e[4】的FEC方案都支持卷积Turbo码(Convolutional Turbo Code,CTC)。 在802.16e标准中卷积Turbo码采用双二进制Turbo码,缩短了交织深度,减小 了译码时延;同时采用循环状态规则确定寄存器初始状态,不再需要像传统Turbo 码那样为了实现状态归零而产生的“尾比特’’,提高了编码效率【5】;此外,采用次 优译码算法,如MAX-LOG-MAP、SOVA算法,对译码器性能造成的影响也被减dx[6]。 编码器和译码器的硬件实现是编码理论转向实际应用的重点和难点。硬件实 现的方式主要有DSP、ASIC、FPGA。DSP最大的不足在于不能实现并行处理,译码 过程中需要计算大量的分支度量、前向状态度量、后向状态度量、外部信息,如 果采用串行处理需要消耗大量的时钟周期,不利于译码速度的提高。ASIC能实现 复杂的功能,提供优异的性能,但是开发成本高,开发周期长,并且一旦成型后 不能被修改。FPGA具有可反复配置的特点,经常用于ASIC原型验证,或者作为 新算法的物理验证平台。此外FPGA开发工具便宜,开发能由个体或小型团队完成, 一卜海师范大学硕七学位论文 第一章绪论 开发成本低周期短,随着FPGA性能的不断提高,FPGA作为产品的最终载体逐渐 增多川。为此本文基于IEEE802.16e标准对卷积Turbo码编码器和译码器的FPGA 实现进行研究。 1.2研究现状 Turboconcept是一家提供Turbo代码和相关技术IP方面领先的公司,曾先后 推出卷积Turbo码译码器IP核TCl000 DVB.RCS、TCl000 WiMAX、TC7000.LTE。 分别面向应用系统DVB.RCS、WiMAX、LTE。其中TCl000 WiMAX支持 IEEE802.16d一2004和IEEE802.16e一2005,具有数据块大小、码率、译码迭代次数 可灵活配置的优点。同时,TCl000 WiMAX内部的SISO子译码器个数也可配置, 当SISO子译码器个数为2时,吞吐量最高可达40Mbps;当SISO子译码器个数 为4时,吞吐量最高可达60Mbps;当SISO子译码器个数为8时,吞吐量最高可 达100Mbps[81。目前,FPGA供应商ALTERA和Lattice并没有自主研发CTC译 码器IP核而是间接提供Turboconcept的CTC译码器IP。 国内大型通信公司也一直致力于CTC编码器和译码器的研究并取得成果。华 为拥有专利“卷积Turbo码循环状态查找方法及装置、译码方法及装置”19】,中 兴捌有专利“卷积Turbo码译码器的等待队列控制方法及装置,,【10】,展讯拥有专 利“卷积Turbo码交织器和解交织器”f¨】。不少高校也对CTC进行研究,但主要 集中在CTC在WlMAX中的应用,硬件实现方面的研究不是很多。 1.3论文内容安排 论文内容安排如下: 第二章简要介绍CTC编码原理,之后采用直上丽下的方法对编码器进行详细 的设计,包括编码器顶层模块设计、模块划分、流程设计、子模块的具体实现。 第三章给出CTC的译码原理,并详细推导MAP译码算法和Max.109-MAP 译码算法,为译码器硬件实现提供理论基础。 第四章首先介绍了时序分析基础及时序优化的常用方法,然后对译码器的顶 层模块、流水线设计、模块划分、子模块实现进行了详细的设计。 第五章给出仿真方案并对资源消耗及性能做了详细的分析。 第六章对全文进行总结并给出进一步完善译码器的方案 2 上海师范人学硕1:学位论文 第二章Crc编码器原理及Je FPGA实现 第二章CTC编码器原理及其FPGA实现 2.1 CTC编码器原理 CTC编码器结构如图2.1所示,输入的双比特信息序列AB被分成三路,一 路经由预编码器1和编码器l生成校验比特Ylwl,另一路经由序列交织器,预 编码器2和编码器2生成校验比特Y2w2,最后一路直接作为系统比特序列输入 给子块交织器。预编码器l,编码器l和预编码器2,编码器2是完全一样的,只 是预编码器l输入的是原始序列,而预编码器2输入的是交织后的序列。系统比 特AB,校验比特Y1wI和Y2w2构成码率为l/3的母码。母码经过子块交织和删 余就形成最终的码字。 双比特信息序列AB AB~ 预编髂5器l YIWI 子 编码器l 块 删 交 ┃ 列交织器 ┃ 编码器2 I 器2 Yw2- 1.1 码器 .1 CC编码器结构 EE802.16e中CTC编码不需要像传统Turbo编码那样,在编码结束后输入 特,迫使编码器内部寄存器归零,而是采用tail—biting,预编码器就是完成该 。预编码器如图2.2所示,每次预编码之前都将内部寄存器清零,预编码时 从节点A和B输入,序列输入完成后得到寄存器组的状态DlD2D3。根据寄 组状态和帧长通过查表2.1就可得到编码器寄存器的初始状态。 -2预编码器 上海师范大学硕l:学位论文 第一二章CTC编码器原理及je FPGA实现 \DID2D3 表2.1 编码器循环状态查找表 NmDd7\ \ 000 00l 010 Oll 100 101 110 111 1 000 110 100 010 ll l 001 011 10l 2 000 Ol l 111 100 101 110 010 00I 3 000 10l Oll 110 0lO 111 00l lOO 4 Ooo 100 001 lOl llO 010 lll 0ll 5 000 010 10l lll 00l 0ll 100 110 6 000 l ll 110 00l 0l l loo 101 010 2.1.2编码器 如图2.3所示,编码之前利用上述所求的初始状态对寄存器进行初始化,编 码时序列从节点A和B逐一输入,相应的校验比特从Y和W逐一输出,图中加 法为模2加法,D表示D触发器。比较预编码器和编码器可以发现二者寄存器状 态转移链路完全~致,只是编码器比预编码器多了校验比特计算链路。 2.1.3序列交织器 图2-3编码器 序列交织分两步完成,第一步序列内交织,第二步序列间交织。 序列内交织:将输入的双比特信息序列从零丌始排序,当序号为奇数时,互 换比特信息的高低位。设输入的双比特信息序列为AB[AoBo,AjBI,...,AN.IBN.I】, 则经过序列内交织后,生成序列TEMP=[TEMPo,TEMPt,...,TEMPs.1】 =【舢Bo,BIAI,A282,B3A3'...,AN-2BN-2,BN.1AN.I】。 4 上海师范大学硕十学位论文 第_二章CTC编码器原理及je FPGA实现 序列问交织:生成排序下标序列index[indexo,indexl,...,indexN-l】,重新对序列 TEMP进行排序,重新排序后的序歹U[TEMPind“(1),TEMP砌喇2),TEMPind蹦(3),…, TEMPina瓴(N.1)】即为交织器的输出数据。其中index(j),j=0,1.,2,...,N—l计算方法【4】 如下: switch mod(j,4) case O:index(j)=mod(PO*j+1,N) case l:index(j)=mod(PO*j+1+N/2+P1,N) case 2:index(j)=mod(P0*j+l+P2,N) case 3:index(j)=mod(PO*j+l+N/2+P3,N) 参数PO,p1,p2,p3可通过查找表2—2获得。 表2-2参数po,p1,p2,p3 N P0 Pl P2 P3 ● 24 5 0 0 0 36 ll 18 O 18 48 13 24 O 24 72 ll 6 0 6 96 7 48 24 72 108 ll 54 56 2 120 13 60 0 60 144 17 74 72 2 180 ll 90 0 90 192 ll 96 48 144 216 13 108 O 108 240 13 120 60 180 2.1.4子块交织器 如图2.4所示,在进行子块交织之前需要将码率为1/3的母码划分成6个子 块(A,B,Yl,Y2,WI,W2),其中子块A和B包含母码的系统部分,Yl和 wl包含编码器l生成的校验部分,Y2和W2包含编码器2生成的校验部分。6个 子块交织是独立进行的,包含校验比特的子块将被删余。 5 一I:海帅范人学硕.1:学位论文 S曲掰嗤出 B Sub口l∞k 丌le出培v亏f 第二章CTC编码器原理及je FPGA实现 l 图24子块交织 子块交织的数据映射规则如下:交织前的数据用data pre表示,交织后的数 据用data_post表示,则data_post(i)=data__pre(p(i)),i=O,1,2,...,N—l。给定子块大小 N,参数M和J(见表2.3)的情况下,p(i)计算方法【41如下: 1)初始化i和k,i=O,k=O; 2)计算p(i): p(i)=2m(k mod J)+bit—reverse(m—bit value of floor(k/J)) 3)如果p(i)小于N,则p(i)有效,k和i都加一;否则抛弃p(i),k加一; 4)重复步骤2和3,直到所有P(i)都计算完毕。 子块交织完成后,重新组成的母码遵循如下原则,前2N个比特是交织后的 A,B子块的级连,接着的2N个比特,其偶数位放置交织后的Yl子块,奇数位放 置交织后的Y2子块,最后的2N个比特,其偶数位放置交织后的Wl子块,奇数 位放置交织后的W2子块,每块的第一个比特为偶数。 表2-3参数N,M,J 数据人小 子块人小 m J (bit) (2bit) 48 24 3 3 72 36 4 4 96 48 4 3 144 72 5 3 192 96 5 3 216 108 6 3 6 上海师范人学硕十学位论文 第-二章CTC编码器原理及je FPGA实现 240 120 6 2 288 144 6 3 360 180 6 3 384 192 6 3 432 216 6 4 480 240 7 2 2.1.5删余 IEEE802.16E支持多种码率:1/2,2/3,3/4,5/6。为了获得期望的码率,删余被 采用。当不使用HARQ的时候,删余是非常容易实现的,只需按照图2.4从左往 右逐一输出序列,序列的长度等于帧长和码率的乘积。 2.2 CTC编码器的FPGA实现 2.2.1编码器顶层模块设计 编码器项层模块端口示意图如图2.5所示,端口说明如表2.4所示。 encodertop 图2.5编码器端口示意图 编码器与外界交互行为:当编码器空闲时,encoder_busy信号为低电平,告 知上级模块可以向编码器输入数据。如果此时上级模块已经准备好待编码的数据, 将data—valid信号变成高电平,数据从data—in端口输入,并输入n_pair信号和 encoded—bits信号。编码器启动编码过程,并把encoder_busy信号置高,表明编 7 j:海师范人学顾l:学位论文 第二章CTC编码器原理及其FPGA实现 码器处于忙状态,无法再接收新的数据,要求上级模块输送完当前帧数据后停止 输送数据。当编码器完成编码,将encoder ready信号置高,告知下级模块编码器 数据准备已经好。如果下级模块做好接收数据的准备,将read encoder信号置高。 此时编码器撤销encoder ready信号,将encoded data valid信号置高,编码数据 从encoded data端E1输出,同时将encoder busy信号置低,上级模块可再次向编 码器输送数据。 表2—4编码器端口说明 名称 方向 位宽 说明 gb_clk i‘nput 1 全局时钟信号 gb_rst input l 全局复位信号 data in input l 待编码序列,AB交替输入 data—.valid in’put l 数据输入有效信号 flJair input 8 舣比特信息AB的对数,即输入序列长度的一半 encoded—.bits read——encoder input input 10 编码器输出的比特数,包含码率R信息,其中 lb 2n_pair/encoded_bits l 卜.级模块给编码器的握手信号,告知编码器输出 数据 encoder_ready output encoded——data——valid output encoded.—data encoder busy ontput output l 编码器数据准备好信号 l 编码器输出数据有效信号 8 经串并转换后的编码器输出数据 1 编码器忙标志位 2.2.2编码器功能模块划分 编码器内部按功能划分成4个模块:generate subblocks模块、subblocks RAM 模块、read subblocks模块、data buffer模块,如图2-6所示。 generate subblocks模块的主要功能是根据编码器输入数据和序列对长度生 成母码,并将母码分成6个subblock存储在subblocks RAM,也因此将该模块取 名为generate_subblocks。此外,generate_subblocks模块还要产生encoder_busy和 start rd指示信号,是整个编码器的核心。 8 f:海师范人学硕}:学位论文 第一二章CTC编码器原理及其FPGA实现 模块_sublocks subblocks RAM是存储子块数据的RAM。写操作由generate 控制,读操作由read subblocks模块控制。通过对subblocks RAM的写和读,实 现了对母码的分块和子块交织。 read subblocks模块负责产生subblocks RAM的读使能信号和读地址信号, 同时也负责实现删余。subblocks RAM的读数据就是编码后的数据,可以直接作 为编码器的最终输出数据。考虑到实际应用中,当编码器要输出数据时,后级模 块可能处于忙状态无法接收数据,故设置了数据缓存模块。数据缓存的数据位宽 为8位,故read subblocks模块还负责数据的串并转换和data buffer的写操作。 data buffer模块负责编码器与后级模块的交互。当done wt buffer信号为l 时,表明编码器待输出的数据都已经写入data buffer,将encoder ready置l告知 后级模块编码器数据准备已经好;此时如果收到read encoder信号,输出 encoded data和encoded data valid并将encoder ready信号清零。此外还要产生 buffer_empty信号,该信号是generate_subblocks模块将encoder_busy信号置零的 依据。 图2-6编码器功能模块划分 2.2.3编码器流水线设计 根据前面介绍的编码过程进行CTC编码器流水线的设计,流水线设计的目的 是使得编码器内部事件之间更有条理,更加紧凑,从而缩短编码用时。CTC编码 器流水线如图2.7所示:整个编码系统从序列输入到码字输出完毕不超过6N个 9 上海师范人学硕:t学位论文 第二章CTC编码器原理及其FPGA实现 时钟周期, N为原始序歹0长度的一半,即双比特信息序歹0的长度。 时问t .一●———2——N—————■卜●卜————N—————_一..·●————N——————■卜·●————N—————◆..■————N——————I卜 序列对AB 序列存储器 序列交织器 预编码器 编码器 予块交织器 序列输出 图2.7 CTC编码器流水线 0<t2N时,编码器输入端口连续输入单比特序列,经串并转换后得到双比特 序列对AB,AB同时写入序列存储器、序列交织器、子块交织器的存储空间段1: 预编码器初始化后加工原始序列AB,2N.1时刻预编码器输出其最后的状态,通 过查表得到编码器的初始状态S0。 2N<t<3N时,编码器以初始状态SO加工序列存储器的读出数据AB,并连续 输出校验位Y1wl,生成的YlWI保存在子块交织器的空间段2;预编码器再次初 始化后加工序列交织器的读数据,3N.1时刻得到编码器的初始状态Sl;读取子 块交织器空问段l,读数据a从编码器输出端口上输出。 3N<t<4N时,编码器以初始状态S1加工序列交织器的读数据,并连续输出 校验位Y2W2,生成的Y2W2保存在子块交织器的空间段3;读取子块交织器空间 段l,读数据b从编码器输出端口上输出;时刻4N母码已经全部生成并分别写入 子块交织器3个空间段。 4N<t<6N时,交替的读取子块交织器的空间段2和3,并输出校验位Yl和y2。 需要说明的是不同码率对应的码字长度不同,相应的序列输出时间也不同:当码 率为1/2时,序列输出时问为4N,如图2.7所示;当码率为1/3时,序列的输出 时间将达到最长为6N,7N<t<8N将交替输出校验位Wl和w2;当码率小于1/2 时,序列输出时间长度将介于2N与4N之间。 lO l:海师范人学硕}:学位论文 第二章CTC编码器原理及其FPGA实现 通过上述编码过程的分析,可以发现合理的流水线设计使得整个编码系统只 需一个预编码器和一个编码器,减小了资源的开销,而且能在4N完成母码的生 成,不影响编码进程。 2.2.4 generate_subblocks模块设计 2.2.4.1功能模块划分 generate_subblocks模块内部结构如图2.8所示。raw—data—RAM存储待编码 的数据,模块preencoder实现预编码,encoder实现RSC编码,lut—ROM和 interleaver—RAM是交织器的组成单元,模块contoUer是整个generatesubblocks 模块中枢,控制上述模块的运作,并负责产生与外部的交互信号。 data in valid data in njm盯 buffer empty C1)wt subblock 7 d缸a、vt subblock 一 addr..wt..subblofk~ q_lutrom lut ROM raw—.data—. I认M 一en wt raw 1 r 1 r 1 r 1 r 二addr wl—raw 一 一一 一data wl raw 一一 en rd raw controller 一addr rd raw data rd mw~ I pre_encoder last state —pre_encode_rst —pre encode_ab .pre_e1)code ab.—valid 1r en Wt itv— addr wt itv= 一一 一 data wt itv一 cn rd itv, addr rd jtv一 一data rd itv— JL interleaver.. I认M start rd data..yw start state encode ab — encode ab valid~ encoder 图2-8 generate_subblocks模块结构框图 2.2.4.2序列交织器设计 在CTC编码/译码过程中,交织器/解交织器扮演着重要的角色,其硬件实现 除了要考虑面积和速度外,还需要考虑时延,这是通信系统实时性的要求。编码 系统涉及序列交织器和子块交织器,二者在硬件实践上设计思想是一致的。 序列交织器主要由RAM和ROM组成,如图2-9所示。通过顺序的写RAM 1I J:海师范人学硕上学位论文 第二章CTC编码器原理及其FPGA实现 和按交织映射规则读RAM完成交织操作。RAM的写操作完成序列交织的第一步, RAM的读操作完成交织的第二步。写RAM时,写地址从0开始不断累加,当写 地址最低位为0,即数据对为偶数对时写入AB;当写地址最低位为1,即数据对 为奇数对时写入BA。 序列交织第二步涉及到求模运算,对FPGA而言求模运算是非常复杂的,没 有专门的运算电路或者嵌入式资源。故本设计采用查找表【121的方法来实现。其思 想如下:事先的,人为的(可借助MATLAB或者C等开发工具)将运算好的映 射地址存储在ROM中;交织操作时,从基地址开始顺序读取ROM。以ROM的 读数据作为RAM的读地址读取RAM,便得到交织后的序列。 FPGA内部有三种存储资源:一种是D触发器;一种是用于查找表的SRAM, 以4输入的查找表为例,其本质就是16xlbit的SRAM;最后一种是FPGA内嵌 存储器。Ii{『两者属于LE资源,适用于小型RAM;大型的存储器一般选用FPGA 内嵌存储器,因为内嵌存储器资源丰富,选择它可节省LE资源的丌销,而且内 嵌存储器经过优化的,有利于布局布线,节省布线资源。交织器的实现需要消耗 较多的存储器资源,故选用FPGA内嵌存储器。 CTC编码器支持多种不同的序列长度,要求交织器支持不同的交织长度,有 两种方法可以实现这功能:一种是配置多个ROM,每个交织长度对应着一个 ROM,使用时根据交织长度选择相应ROM的输出值作为RAM的读地址。另一 种是在同一个ROM中划分处多个存储区间,每个交织长度对应着一个存储区间, 存储区间的长度等同于交织长度,存储区间的排放没有特定的约束,本设计中依 照交织长度的大d'JJl页序划分交织区间,如图2-9所示。两种方法所需的总存储器 大小是一致的,但是消耗的内嵌RAM数目不相同。这是因为内嵌RAM的最小 丌销不是所配置存储器的大小,而是一整块RAM。以CyclonelII为例,一块M9K 的RAM大小是9Kbit,即使配置的RAM再小,也要消耗一整块RAM。本设计 支持12种序列长度,第一种方案需要消耗12个M9K RAM,第二种方案只需2 个M9K RAM,故选用第二种方案。 采用上述方案所带来的优点如下: 1)缩短了数据潜伏期; 2)缩短了运算关键路径,减小了系统最小时钟周期,增大了相应的系统最大 12 I:海师范人学硕f:学位论文 第二章CTC编码器原理及其FPGA实现 时钟频率; 3)可扩展性好,增加ROM的长度并设置相应的ROM值即可达到扩展的目 的: 4)兼容性好,序列交织器、子块交织器、序列解交织器、子块解交织器均可 由该方法实现,只是各自ROM的值不同,对应着不同的HEX文件。 缺点:查找表需要消耗较多的存储资源,是以牺牲存储资源换为代价,来换 取逻辑资源的减少和速度的提高的设计方法。 addr wt[01=0 幽2-9序列交织器 2.2.4.3控制单元设计 控制单元负责完成下列操作: 1)输入数据的串并转换:generate subblocks模块的输入数据data in是编码 器上级模块输入的待编码序列,其格式是单比特数据,而预编码器和RSC编码器 的输入是双比特序列,需要串并转换。待编码的数据交替地分配到双二进制序列 的高位和低位。 2)raw data RAM的读写:将上述串并转换得到的双二进制序列写入RAM, 当RSC编码器进行原始序列(区分于交织后的序列)的编码时,读取 raw data RAM,获得RSC编码器的输入数据。 3)lut ROM和intcrlcaver RAM的读写:具体过程见序列交织器设计。 4)产生预编码器的激励:包括预编码器复位信号、预编码器输入数据和输入 海师*^学颂f半Ⅱ论Z 第一市cTc编码器矩理艇儿FPG^实耻 使能信号。预编码是从零状态丌始的,需要局部复仇信号对预编码器进行复位, 该信号有别于令局复何信号;预编码器的两次输入数据分别由串升转换和读取 interleaver RAM获得。 5)产牛RSC编码器的激励:包括RSC编码器的起始状态信号、输入数据、 输入佳能信号。起始状忐信号根据预编码器的最后状态信号进行奄表获得。 6)subblocks RAM的写操作:将RSC编码器的输出数据1j入subblocks RAM. 存储空nU划分见于块变织器设计。 7)产生start rd信号:当data in valid信号山高电平变成低}巳平时start rd 信号为高电平,否则为零。 8)产生encoderbusy信号:当输入信号data in valid山低}乜平变成高}乜平时, 将encoder busy信号置I。当输入信号buffer_empty出低IU平变成高fn平时,将 encoder_busy信号置0。 操作流程见编码器流水线设计,其仿真波形如图2-10所示。该波形既是控制 单元的仿真波形,也是generale subblocks模块,因为generate_subblocks模块所 有输入输出都和控制单元连接。 幽2.10控制器仿真波形 衙帅m人{砸I,学位论立 2.2 4.4预编码器和RSC编码器设计 第一章CTC编码器娘理应Je FPGA宴观 预编码器和编码器设训棚对简单,下面直接给出仿真波形。随着数据的输入 预编码器状态不断更新,在pre encode ab valid的下降沿处得到预编码器的最后 状志(1ast_state=4)。预编码完成后会收到控制单元的复位脉冲进行复位,为下次 预编码做准备。现在束验证编码器起始状态的正确性,将last state=4和N=240 代入表2-1.得到编码器的起始状忐为5,与波形图start state=5吻合。编码器以 5为起始状态,住输入数掘0的作用下,状忐转变为2,并输出数据3。此后编码 器的输出数据根据encode ab和state产生。 蜡2-II 预编码器币1编码器仿真波形 2.2.5 read subbloeks模块设计 子块交织器设计: read subblocks模块对subbloeks RAM的读操作和generate_subbloeks模块对 subblocks RAM的写操作实现子块交织。于块交织器仍可采用基于查找表的实现 方法,修改ROM的HEX文件即可实现子块交彭I映射规则,不同的是RAM写数 拼时无需交换序列对。但是编码器内部有6个予块交织,如果为每个子块交织配 置一套独立的交织系统,那么需要6个查找表ROM和6个RAM.资源消耗是非 常大的。 本设计采用茈用查找表的方法,如图2一12所示。RAM配置成简单双端u类 型-可同时进行读写操作,大小为720x2。RAM内部划分成6个存储空间,用于 存储6个子块数据:0到239区间存储A和B子块,高位存放A,低位存放B; 240到479区问存储YI和w】于块;480到719区间存储Y2和w2于块。f0 4N1 上海师范大学硕士学位论文 第二章CTC编码器原理及Je FPGA实现 时段,母码AB,YlWl,Y2W2依次写入相应的存储空间,完成子块划分,[2N 6N】 时段读取子块A、B、Y卜Y2,不会发生RAM读写冲突。 RAM读地址由基地址和偏移地址相加获得。子块AB、YlWl、Y2、Ⅳ2对应的 基地址分别为0、240、480,偏移地址通过查找ROM获得。读取子块A和B是 完全独立的,从ROM的基地址开始连续读取ROM即可得到RAM读地址的偏移 地址。读取Yl和Y2是交替进行的,并且二者偏移地址是相同的,利用这一特性 可得到下述偏移地址获得方法:读取Yl时,查找ROM获得偏移地址,并保存该 地址作为下一时刻Y2的偏移地址,读Y2时不改变ROM读地址。读取WI和W2 的情况与读取Yl和Y2一致。 ROM 图2.12子块交织器 删余的实现:输入信号encoded bits表示编码器输出的比特数,将编码器输 入的序列长度2*n 除以 encoded bits 就可获得码率,所以 encoded bits 是码_pair 率的另一种表现形式。要设置编码器的码率只是输入相应的encoded bits信号即 可。应对不同的码率,read subblocks模块设置一个计数器ent,计数器会随着 subblocks RAM的读取而不断累加,当cnt=-encoded bits.1时结束读操作,实现删 余。 data buffer的写操作:将读数据进行串并转换,每转换成一个8比特数据, 写一次data buffer,写地址加一。当读操作结束时,done wt buffer信号输出一个 脉冲,告知data buffer模块写操作完成。 16 }:海师范大学硕十学位论文 第三章CTC译码算法 第三章CTC译码算法 3.1译码原理介绍 CTC译码结构仍可采用传统的二进制Turbo码译结构,只是子译码器输入的 信道软值变成了4个,同时先验信息、外部信息、信息比特对数似然比也都由1 个变成3个,信息比特的判决也不能简单的根据对数似然比的正负直接判断信息 比特为0或者1。CTC译码器如图3.1所示,主要由交织器、解交织器、SISO子 译码器构成。交织器与编码过程中用到的交织器一样,解交织器完成交织的逆过 程,SISO子译码器对应着RSC编码器,是译码器的核心。A、B、Yl、Wl、Y2、 W2为信道输入软值。译码时将{A,B,Yl,W1}和先验信息输入给予译码器l, 子译码器l完成译码后输出外部信息。交织后的外部信息作为子译码器2的先验 信息。同样,子译码器2根据输入的{A,,B’,Y2,、№)和先验信息进行译码,生 成外部信息,经过解交织后成为子译码器l的先验信息。这样软信息在两个子译 码器之间不断的进行交换和迭代,反复地进行这一过程。另外,子译码器2还能 生成信息比特的对数似然比,当迭代译码过程结束时,信息比特序列的对数似然 比进过解交织和判决,得到译码之后的双信息比特序列。 I.a Yl wl A B Y2 W2 图3-1 CTC译码框图 17 上海师范大学硕士学位论文 第三章CTC译码算法 SISO子译码器对应的译码算法主要有两类:一类是SOVA,另一类是基于 MAP算法的,主要有MAP算法、Log—MAP算法、Max—Log-MAP算法。在第二 类算法中,MAP的译码性能最优,Log-MAP算法的性能次之;但Max.Log-MAP 算法的复杂度最低,Log-MAP算法的复杂度居中。文献【2]给出了这四种译码算 法的复杂度的比较,见表3.1。 表3-1译码算法复杂度比较 操作 MAP Log-MAP Max-·Log·-MAP SOⅥ~ 求最人值 O 5x2"-2 5×2n.2 2%3n+3 加法 4x2“ 15x2%9 10x2%11 2x2%8 乘法 6x2%l 8 8 8 查表 0 5x2“-2 O O 3.2 MAP译码算法 图3-2是编码过程中的状态转移示意图,在开始MAP译码算法【13】【14】推导之 前,先结合该图给出下列符号的定义。 time t time t+l · : ● ● ● · : ● ● 奶=P \-———、,————/ r, Ig,ct 1lI,+l=q 图3-2编码器状态转移示慈图 X, : t时刻输入的双二进制信息比特,X,∈{00,01,10,1 1); X印柙’: 状态P转移到q对应的信息比特; at :t时刻的发送符号; 口∽坷’:状态P转移到q所对应的发送符号; 暾 :t时刻编码器状态; p和g:编码器状态值,p,q∈{O,1,...,7): 18 上海师范大学硕士学位论文 第三章CTC译码算法 ,: :接收端t时刻观察序列,‘={矿,r,b,∥,‘”),乞为t时刻之前观察序列, 7,r为t时刻之后观察序歹0,整个接收序列观察值由这三段构成, 厂2岛u职)u岛 (3.1) 译码器的主要任务是计算在给定整个观察序列和先验信息条件下信息比特的 的对数似然比厶(X,),i:l,2,3,其中厶(X,)定义如下: ㈣乩慧张 佟2, 在给定观察序列条件下状态转移的后验概率为: p(甲,=P,甲,+l=q I,.)=p(甲,=P,、王,,+l=g,r)/p(r) 将式(3—1)代入式(3.3)得: (3.3) p(一2 p,■+l 2 g I,.)2 p(一2 p,一+l 2 g,%,‘,岛)/p(,.) (3.4) 利用条件概率的性质可以得到 一 p(一=P,一+,=qI,.) 2 p(一2 p,一+l 2 g,毛,‘)p(岛l丫。p,一+I 2 g,%,‘)/p(,) (3.5) 根据Markov性质,t时刻之后的观察序列与t时刻之前的观察序列和状态无关, 所以式(3.5)的第二项可改写为: p(‘,I一2p,一+l 29,r<t‘)2p(‘r I一+l 29) (3.6) 进一步利用条件概率的性质和Markov性质,式(3.5)的第一式可改写为: p(一=P,一+l=g,%,,;)=p(一+l=g,‘l一=P,岛)p(■=P,■) 2 p(一+l 2 g,,:I■2 p)p(一2 P,‘t) 将式(3.6)和式(3.7)代入式(3.5)可以得到: (3—7) p(一=P,一+,=qI,)=p(一=P,气)p(一+l=g,‘I一=p)p(岛l一+I=q)/p(r) =q(p)乃(p,g)层+。(q)/p(r) (3-8) 其中口,(p)2 p(t 2 p,岛),称作前向状态度量,表示t时刻到达状态p,并且 获得t时刻之前观察序列岛的联合概率;以(p,g)2 p(一+t 2 g,,:I一2 p),称作分 支度量,表示状态从P转移到q,并获得t时刻观察序列,;的概率; 屈+-(g)2p(岛I一+t 29),称作后向状态度量,表示t+l时刻由状态q出发,获得t 19 上海师范大学顾十学位论文 第三章CTC译码算法 时刻之后观察序列厂>f的概率。 下面来推导p(X,=X I厂),为此引入符号最,Sx={(p,g):X∽坷’=X),表示 由信息比特X引起的状态转移事件(p,q)的集合,则: p(X,=X I,.)= ∑p(一=p,一+。=q I r) (p,q)∈Sx =去刖∑(p口,,杀(最p¨)以…(“舢”)屈…+“。“(。g) (3-9) 把式(3—9)代入式(3.2)得: ∑口,(p)7,(p,q)fl,+。(g) 姒x籼迭专瓦而丽 (Ipp,,ggJ)∈∈So (f3.100、) 3.2.1前向状态度量的计算 对于所有q(p),P∈{0’1’..·,7)都已知的情况下,%+l(9)计算方法如下: 口,+l(g)=p(丫+l=g,o+1)=p(丫+l=g,,;,‘,) 一+l可从不同的一转移获得,上式进一步写成: 7 口,+I(g)=∑p(一+l=g,‘,丫=p,乞) p=0 利用条件概率的性质进一步得到: 7 q+。(g)=∑p(一=p,%珍(丫+l=g,‘Iv,=p,%) p=O 利用Markov性质进一步得到: 7 q+。(g)=∑p(一=p,%归(一十l=9,‘l丫=p) 根据q(p)和以(p,g)的定义进一步得到: 7 口,+l(g)=∑口,(p)以(p,g) 产0 (3-11) 前向状态度量的计算是从编码器的起始状态顺着网格图逐级往前迭代的。如 果编码器从零状态开始,则%Q=O)=1,a:o(p≠o)=0;CTC编码不是从编码器零 状态开始的,这里假设起始状态等概率出现,a'o(p)=1/s。 J:海师范大学硕.1:学位论文 3.2.2后向状态度量的计算 第三章CTC译码算法 类似的,屈(p)的推导如下: 屈(p)=p(岛一l I一=P)=p(名,,,:l一=P) 一可从不同的一+l转移获得,上式进一步写成: 7 屈(p)=∑p(岛,‘,一+I=qlV,=p) q=0 利用条件概率的性质进一步得到 7 屈(p)=∑p(‘,一+l=gI一=p珍(岛I,;,丫+l=g,一=p) q=O 利用Markov性质进一步得到: 7 屈(p)=∑p(‘,一+l=qlv,=p汩(‰I丫¨=g) q=O 根据y《p,g)和∥…(g)的定义进一步得到: 屈(p)=∑以(p,g)屈+,(g) 920(3-12) 后向状态度量的计算是从编码器的终止状态逆着网格图逐级往后迭代的;如 果编码器采用归零技术,则风(g 2 o)=l,风(g≠o)=0。CTC采用tail—biting,编 码器终止状态不一定为零,这里假设编码器终止状态等概率出现,风(g)=1/8。 前向状态度量和后向状态度量随着网格图不断更新,值会变得越来越小,如 果不采取任何保护措施,其精度会不断损失。常被采用的归一化方法有两种,一 种是分支度量乘以某一个常系数。另一种是将前向状态度量除以同一时刻所有前 向状态度量的总和,这样同一时刻所有前向状态度量的总和为一,达到归一化的 效果;后向状态度量也做同一的归一化处理。 3.2.3分支度量的计算 信息比特的对数似然比,前向状态度量和后向状态度量的计算都包含分支度 量,下面来推导分支度量的计算公式。 ‘(p,q)=p(一+l=g,‘l一=p) =p(,;l一=P,一+l=g)p(一“=qI一=P) (3.13) 21 圭塑堕垫叁堂堡主堂垡堡;i!!;——————兰垦耋生旦匿!咝 在给定状态转移的起始状态和终止状态的情况下,上式第二项 p(一卅=gIt=p)完全由引起状态转移(p,q)事件的信息比特x‘舢’的概率决定, 即: p(一+l=g I一=p)=p(X,=X‘M’) (3.t4) LT(X,)_ln嬲扣1’2,3 下面来推导p{X,=f),f=1,2,3,根据先验信息的定义: 可以得到 p{X。=i)=p{X,=O)×exp(L7.(X,)) 根据全概率公式得 (3.t5) 丢p{Xf刊一 ,=O (IJ3· :l1u6,) p{x,=o)2瓦面丽万面面瓦而雨 由式(3—15)和式(3一16)得 而丽蔷襄篱丽丽m2一(3.17) p{X。=f)= 1+eXp曰(x,)+exp上墨(X,)+exp骂(X,) (3. ) 概率p(,;I一2 p,一+·2口)可改写成p(‘I口咿田’),其中口∽9’为状态从P转移到 q时所发送的符号,是信道转移概率,对于n维AWGN信道, 比h)=丽扫exp[_专№川,112] (3-18) 令发送符号口t=斌,n:,口;,砖、=U瓦《,厄t,厄x;,属冀、.xIa,工bl,斌,茸 为双极性,分别对应着发送码字分量A,B,Y,W,则式(3—17)可写成: p(‘㈨=丽酽1 ex《一专犯训2] _C唧l筝Ⅳ扎公州扎邗{ “eXp[等(“叫#州∥吖刊 (3-19) J=2一、厍=2、一瓜 其中C是与‘无关的常数,'’ 仃2 盯2 。将式(3—17)和式(3-19) I:海师范人学硕上学位论文 第三章CTC译码算法 代入式(3.13)便得到分支度量。 3.2.4外部信息的计算 至此已经推导出前向状态度量,后向状态度量,分量度量,现在对信息比特 的对数似然比进行整理,将式(3.17)和式(3—19)代入式(3.10)得 厶(x,)=E+睾[化8#+矿#,)Ix:,+(矿r+‘6#夕Ix:o】 +ln———∑厶——((—p—阢,——q—))—∈∈——S__生Li—=—,2——-t—5.——1y——∥—1—¨—r—t”_^—严—∥—八—H—∥(—p—,—)—一屈—、 —(—gq—)7一 ∑(圳∈So等(r2x',+‘”枕(p眦) (3.20) 式(3-20)第一项是先验信息,为了区分外部信息有时候也称作内在信息, 初始值为0,之后由另外一个子译码器提供;第二项是信息比特信道转移概率的 对数比值;第三项就是传递给另外一个子译码器的外部信息,记为g(x,)。根据 式(3.20)可以得到外部信息 彳(x,)=厶(x,)一日(x,)一丘矿 磋(x,)=厶(x,)一骂(x,)一丘矿 置(x,)。厶(x,)一骂(x,)一厶矿一t矿 (3.21) 3.2.5 MAP译码算法步骤 至此已经完全推导出前/后向状态度量、分支度量、信息比特的对数似然比、 外部信息,下面整理下MAP译码算法的步骤[14】。 1)初始化前/后向状念度量和先验概率,其中 口o(p)=Vs,P=0,l,...,7 风(g)=1/8,q=o,1'...,7 霉(x,)=0,扣1,2,3 f=0,1,...N—l 2)计算分支度量,然后分别根据式(3.11)和式(3.12)计算前/后向状态 度量; 3)将计算好的分支度量和前/后向状态度量代入式(3—10)计算信息比特对 数似然比。 4)根据信息比特对数似然比进行硬判决。 _卜海师范人学烦Ij学位论文 第二三章CTC译码算法 3.3 Max-log-MAP译码算法 虽然MAP算法译码性能出众,但大量的乘法和幂运算使得MAP详自马算法小 利于硬件实现。为此,下面引入Max.109-MAP译码算法,它以译码性能的牺牲为 代价来换取译码器复杂度的降低。 定义 彳,(p)=ln(a,(p)),Bt(g)=ln(屈(g)),r,(p,g)=ln(r,(p,g)) 下面来推导彳,+l(g),根据式(3.11)得 4+l(g)=In(a,+l(g)) ==n1ln∑瞽%p(=pO)㈤以(帆舢))]I \ / 乩(砉e州c卅嘶劫】](3-22) 为了简化计算,引入下列近似 ·n(军唧c引)≈m眇,, p23, 将式(3—23)代入式(3—22)得 4+l(g)≈吁x(彳如)+rf(p,g))(3-24) 从式(3.24)可以看出,4+-(g)的计算过程和Viterbi译码算法中幸存路径的 计算过程完全一样。为了求得4+,(q),需要找出所有能从上一时刻转移到q的路 径,相加每个路径对应的4(p)和r,(p,g),比较相加的结果并选择最大的值作为 4+l(g)。 类似地,E(g)的推导如下: E(g)=ln(fl,(p)) =tn(∑q风㈤纵p砌] \ / 乩(莩唧刚卅№砌】) ≈ma)(E+l(g)+L(p,留)(3-25)q I:海师范火学硕士学位论文 第三章CTC译码算法 从式(3—25)可以看出Bt(q)的计算也是一个加.比一选的过程,和4+·(g)唯一 不同的是它逆着网格图进行的。 C(p,g)的推导如下: f(p,g)=ln(L(p,g)) =1nc+互1 kL‘a矿+群+∥‘y+如”)+1np(Xt=-X(p,q)) (3.26) 由式(3.16)和式(3.23)得 帅cxt小1《焉篙描翟粼幺。刎茄稚27, 把式(3.27)代入式(3.26)并消去公共项lnC和max(O,冒(置),鬈(置),嚣(置)) 得 +#矿+∥‘y+¨,;”) ,x(M'=o . It(p,g)= 2 圭t(Frta+#矿+∥∥+科)+g(m一)≠o (3-28) 信思比特的对数似然比: 删乩长篇篆糍 :ln姿坐墨竺些塑:三塑!:型型 ∑(M)E品exp[4(P)+F-,(p,g)+E+l(g)】 ≈(器煞4(p)+L,g)+EI(g)一(器ax4‘(p)+C,g)+E-(g),3-29)P 叮JEJ, ‘P.)geSo 对于每个双二进制信息比特X,,共有8条状态转移路径是由其引起的,计算 这8条路径相应的4(p)+L(p,g)+E+t(g)并找出其中的最大值。信息比特的对数 似然比便是基于这些最大值计算出来的。求得对数似然比后就可以进行硬判决, 判决规则如下:如果厶(x,)+厶(x,)一厶(x,)>0,双二进制X,的高位为1,否则为 0;如果厶(xt)+厶(x,)一厶(x,)>0,双二进制X,的低位为1,否则为o。 外部信息: I:海帅范人学硕I:学位论文 第三章CTC译码算法 ㈣乩系舞糕糍 ,Z[p,q)GS,exp[A,(卅孚+孕埔l(g)】 ∑∽咖品exp[4(卅孚+华峨俐 ≈∽m班ax‘(At(卅孚+孚峨l(g)) 一∽m咖ax如(∞)+孚+罕删栅 (3.3。) 可以发现外部信息的计算独立于信息比特的对数似然比的计算,这样可以先 计算外部信息,再根据二者之『白J的关系求出对数似然比。由式(3.20)得: 厶(x,)=14+厶矿+鬈(x,) 厶(x,)=骂+丘矿+置(x,) 厶(x,)=鬈+t矿+丘矿+/4(x,)(3-31) 至此Max-log-MAP译码算法已经介绍完毕,下面来将其和Viterbi译码算法 在复杂度上做下比较。4(p)和Viterbi译码算法中幸存路径的计算量是相当的, 但是还需计算E(g),后验概率对数似然比和外部信息,所以Max.109-MAP译码 算法的计算量介于Viterbi译码算法计算量的2倍到3倍之间。另外Max-log-MAP 译码算法需罂存储4(p)和E(g).需要更名酐l存储器窄阳l。 上海师范火学硕:lj学位论文 第四章CTC译码器设计 第四章CTC译码器设计 为了方便硬件实现,本设计选用Max.Log.MAP算法作为译码算法。虽然 Max.Log-MAP译码算法不需要指数运算和对数运算,但仍然存在大量的分支度 量、前向状态度量、后向状态度量、外部信息计算,同时译码过程还要反复迭代。 面对大量的计算,如何提高译码系统吞吐量,减小时延,减小最小时钟周期成为 设计译码器首要考虑的事情。为此,在丌始译码器设计之前,先给出吞吐量、时 延、最小时钟周期的定义,并介绍改善时序的常用方法。 4.1 时序分析基础及时序优化 时延定义为从数据输入到数据输出系统所消耗的时间,在同步系统中,一般 用时钟周期来衡量。吞吐量定义为系统每个时钟周期所能处理的数据量,常用单 位为比特/秒。时延和吞吐量跟系统的时钟周期有关,同一系统,时钟周期越小, . 时延就越小,吞吐量也越大,但时钟周期不能无限度的减小,否则数据在传播过 程中会出现亚稳态。 如图4.1所示,要避免亚稳态的出现,系统的时钟周期必须满足如下要求: Tdk≥t_co+t_logic+t__net+t—su (4—1) 其中t cA)是寄存器固有的时钟输出延迟,t lo·gic是同步元件之间的组合逻辑 延迟,t net是网线延迟,t su是寄存器固有的时钟建立时间【15】。上式等号成立时 的时钟周期就是系统的最小时钟周期。 图4.1最小时钟周期计算 减小时钟周期最主要的手段就是缩短组合逻辑链路,下面介绍缩短组合逻辑 链路常用的方法。图4.2是一个3阶FIR模型,y(n)--a*x(n)+b*x(n.1)+c宰x(n.2)。 关键路径由一个乘法电路和两个加法电路组成,设乘法操作时间为Tm=10ns,加 27 I:海帅范人学硕。l:学位论文 法操作时间为Ta--1ns,则关键路径长度为Tm+2Ta=12ns。 第叫章CTC译码器设计 天键蹯行 图4-2 FIR模型 缩短关键路径最直接最有效的方法是在关键路径上添加流水线寄存器【旧,将 逻辑链路一分为二。如图4.3所示,通过在虚线L1处放置3个寄存器,使得关键 路径由原先的Tm+2Ta减小为Tm。系统输出序列y(n)保持不变,只是系统输出要 比原先晚一个时钟周期。增加寄存器的位置不是唯一的,如果不在Ll处放置寄 存器而改成在虚线L2处添加两个寄存器,则关键路径由原先的Tm+2Ta减小为 Tm+Ta。添加寄存器有个原则,数据输入到数据输出的每一条数据通路增加的寄 存器数目要一致,否则系统功能改变。图4.3在L1处放置3个寄存器,3条数据 通路都增加一个寄存器,所以系统功能保持不变;而图4-4的做法没有遵循上述 原则,输入与输出的关系变成为:y(n)=a木x(n.1)+b木x(n一2)+c宰x(n一2),系统功能发生 改变。 添加流水线寄存器能缩短关键路径,但也会给系统增加时延,这是该方法的 缺点。 图4.3 正确的寄存器添加方法 图4-4错误的寄存器添加方法 设计控制单元,常常会用到条件语句的嵌套。判断条件越复杂,嵌套的次数 越多,相应的逻辑链路就越长。当该类逻辑链路成为关键路径时,可通过改变路 28 I:海师范人学顾I:学位论文 第四章CTC译码器设计 径顺序来缩短关键路型r丌。下面通过两段小程序来说明,优化前代码: always@(posedge clk) if(conditon 1) dataout<=dataa; else if(condition2&&(data_c<8)) dataout<=data_b; else dataout<=data_c; 优化后代码: always@(posedge clk) if(((~condition 1)&conditon2)&&(data—c<8)) dataout<=data_b; else if(condition 1) dataout<=dataa; else dataout<=datac; 优化前代码对应的关键路径由比较器和两个门电路组成,如图4-5所示。通 过修改路径顺序,关键路径少了一级门电路,如图4-6所示。 eondition l 图4.5优化前的关键路径 图4-6优化后的关键路径 .卜海师范大学硕十学位论文 4.2译码器顶层模块设计 第p1J章CTC译码器设计 信号和_pairs 信号为低电平,表_busy 译码器与外界交互行为:当译码器空闲时,decoder 明上级模块可以向译码器输入数据。如果此时上级模块已经准备好待译码的数据, data in valid变成高电平,数据连续从data in端口输入,并输入ab iterative num信号。译码器启动译码过程,并将decoder_busy信号置高,表明译 码器处于忙状态,无法再接收新的数据,要求上级模块输送完当前帧数据后停止 输送数据。当译码器完成译码操作后,将decoder ready信号置高,告知下级模块 译码器已经准备好数据。如果下级模块做好接收数据的准备,将read decoder信 号置高。此时译码器撤销decoder ready信号,将decoded data valid信号置高, 译码数据连续从decoded data端口输出,同时将decoder busy信号置低,上级模 块可再次向译码器输送数据j 译码器顶层模块端口示意图及端口说明如下: decoder_top 名称 gb_clk gb_rst data in data——valid 方向 input mput input input 图4-7译码器端口示意图 表4.1译码器端口说明 位宽 说明 l 全局时钟信号 l 全局复位信号 8 待译码数据 l 数据输入有效信号 :海师范人学硕Ij学位论文 第阴章CTC译码器设计 ab_pairs iterative——num read——decoder input input input 8 数据块AB的长度 4 译码迭代次数 1 下级模块给译码器的反馈信号,告知译码器输出 数据 decoder_ready output decoded——data——valid output decoded——data decoder_busy output output l 译码器数据准备好信号 l 译码器输出数据有效信号 8 泽码后的数据 l 译码器忙标志位 4.3译码器流水线设计及功能模块划分 译码器数据处理需要经过三个阶段:数据分离(包括数据输入阶段)、迭代译 码、数据输出,如图4.8所示。如果不采用流水线技术,每处理一帧数据都要消 耗T-demulpx+T_decode+T_out,其中T_demulpx、唧ecode、功ut分别表示 数据分离、迭代译码、数据输出所消耗的时间。 数据分离 ———————'- 迭代详码 ———————'■ 数据输出 为了提高译码器吞吐量采用流水线技术,如图4.9所示。在迭代译码的同时, 分离下一帧的数据,并输出上一帧的译码数据。译码迭代处理完一帧数据后可以 不用等待数据分离和数据输出直接丌始下一帧数据的的处理。这样处理M帧数据 所消耗的时间为T_demulpx+MxT—decode+T_-out,节省时间为(M-1)×(T_demulpx 哪ut),处理的数据量越大,节省的时间也越多。 图4.9译码器流水缘 31 卜海师范大学硕士学位论文 第四章CTC译码器设计 为了实现译码器流水线运作,将译码器划分为三个模块:数据分离模块,子 译码器模块、数据缓存模块。数据分离模块负责译码器输入数据的解复用和解交 织,并存储数据。子译码器负责分离数据的Max.109.MAP译码。在译码迭代开始 之前需要存储数据分离模块的写入数据,从而释放数据分离模块。译码迭代完成 后将译码数据写入数据缓存模块。数据缓存模块负责译码器与下级模块的交互。 4.4数据分离模块设计 数据分离模块端口示意图如下: gb...elk gb_rst data in data Valid ab_pairs iterative num— 一 subdecoder_bu—sy demultiplexer ab._pairs_lock itv hum lock ~ data out_valid..。 data a data b data.yi . data y2 decoder busy.. 图4-10数据分离模块端口不意图 demultiplexer模块的功能:从译码器的接收数据data in分离出母码分量A、 B、Y1、Y2对应的接收数据data a、data b、data yl、data y2,是编码器子块形 成和子块交织的逆过程。 数据分离过程按照功能可分成两步:第一步将接收数据分成块,第二步对每 个数据块进行子块解交织。desubblock模块框图如图4.11所示。模块内部配置了 3个RAM,分别存储data—a、data—b、{data_yl,data_y2)。这样demultiplexer模块 可并行地向subdecoder模块输送数据,缩短数据传输时间。当然也可以将一个 RAM分成4个区间,存储上述4组数据,但是数据输出的时间将长达4ab pairs。 数据分块就是对接收的数据进行分类,并写入相应的RAM,同时判断是否需要 进行“补零”操作。为此控制器内部配置了个计数器cnt,当输入信号data in valid 从低电平变成高电平时从零开始计数,一直累加到4ab pairs清零。当 32 .1-海师范大学硕.1:学位论文 第pq章CTC译码器设计 1_<cnt_<ab pairs时,接收数据属于data a,将数据(一级寄存,下同)顺序写入 data a RAM;当ab pairs 时,接收数据属于 data b 时,需要判断信号_pairs+l_<cnt_<4ab ,将数据顺序.pairs+l_<cnt_<2ab 写入data b RAM;当2ab pairs data in valid 是否为高电平,如果为高电平,将接收的数据串并后写入data_yly2 RAM;如果 为低电平,说明码率大于1/2,接收的数据已经输入完毕,需要补零,将O写入 RAM。 data_yly2 itve hum lock 图4.1 1 demultiplexcr模块框图 第一步完成后,如果信号subdecoder_busy为低电平,说明subdecoder模块空 闲,demultiplexer模块进行子块解交织, 并输出数据。如果信号subdecoder busy 为高电平,demultiplexer模块必须等待, 直到信号subdecoder busy变成低电平, 可见demultiplexer模块不仅具备数据分离和解交织的功能,还具备数据缓存的功 能。子块解交织仍采用查表法,从address ROM读取数据作为RAM的读地址, 同时读取上述三个RAM便得到子块解交织后的数据。 译码器给上级模块的反馈信号decoder busy由demultiplexer模块负责生成。 当demultiplexer模块接收到数据时将信号decoder busy置高,直至信号 data out valid由高电平变成低电平,说明demultiplexer模块数据输出完毕,将信 号decoder busy置低。信号itve num lock和ab pairs lock在data in valid上升 沿锁存。 33 上海师范大学硕上学位论文 第pq章CTC详码器改计 4.5子译码器模块设计 子译码器模块输入信号完全由数据分离模块输出信号驱动。完成子译码后通 过en wt、data wt、addr wt将译码数据写入缓存模块内部的RAM,ntlm wt指示 译码数据的长度,done—wt指示写操作是否完成。标志位sub_decoder_busy告知 数据分离模块子译码器的状态。子译码器模块端口示意图如下: gb._elk.. gbrst.— ab—pairs L itv hum data——valid data ab data_y1 . data_y2.. subdecoder nUm Wt en wt data wt addr wt done wt 一 subdecoder l ‘= 图4-12子译码器模块端口不意图 4.5.1外部信息计算流程设计 减小子译码器时延关键在于外部信息计算流程的设计。传统的外部信息计算 流程后向状态度量和前向状态度量是先后进行的,如图4.13所示。设数据块AB 的长度N为240(本设计所能支持的最大长度)。05_t<240时,后向状态度量从起 始值B240开始降序递推,并保存也40,...,Bl。240<t<480时,前向状态度量从起始 值彳。丌始升序递推Al'...,A240,同时读取相应的后向状态度量,同步计算外部信 息。外部信息计算时延为N个时钟周期,整块数据处理需要2N个时钟周期。 时问t 240 240 ·■——————————■卜.一■———————————◆ 计算A—————一鱼=:!垒鲫鱼l 计 存算取B B匿l垒互塑==!鱼王I垒Ⅱ鲤互卜—匿——盈一 Le的输入————一 生芝:!鱼32 irl-算Le———一墨野:=:墨里23Q 图4.13外部信息计算流程(方案一) 34 上海师范大学硕十学位论文 第四章CTC译码器设计 为了减小外部信息计算时延,滑动窗技术经常采用,其思想如下:将一整块 数据分成M个长度为L的子块,每个子块称为一个窗口。以窗口为单位进行处理, 一个窗VI处理完成后,开始下一个窗口的处理,直到整块数据处理完成【18】【191,如 图4-14所示。窗口内部的外部信息计算流程可采用传统流程。引入滑动窗后时延 缩短为窗口长度,整块数据处理所消耗的时间周期数为N+L;后向状态度量的存 储深度由原来的N减少为L(需两片RAM轮流读写),减小了存储器资源的开销。 时蛳 兰 兰 兰 兰 _·●——————————_l卜,.一·●———————————●,卜●·●—————:—:—: ———_一, 卜.·一■——————————_.,卜· ·■———————————,◆卜 降序计算B[二]虱亘[二]二二至亚里二二1二二二三二二二工二]复回亘二二卜——————一 降升J序弘写读BB[—】—叵—[—1二_[亘二亘画二亘工二[二]匹三匠二二二[[二重三巫二[工]—二—巫一妇 升序汁算彳————{二亘互二[]塑[]二二三二工二巫亟] Yl-fiq-I-算Le 图4.14外部信息计算流程(方案二) 滑动窗能有效的减小时延,但同时也带来译码性能的降低。为此本文采用采 用并行计算前向状态度量和后向状态度量的方法,既减小了时延,又不会降低译 码性能。如图4—15所示,0<t<240时,前向状态度量和后向状态度量同时进行计 算;当递推进行到一半时,后向状态度量B12l,...,B240已经计算完成,前向状态度 量A120,...,A239将逐一计算,故可启动外部信息后半段Lel20,...,Le239的计算;当 外部信息后半段计算完毕时,分别读取相应的前向状态度量和后向状态度量进行 外部信息Ij{『半段Leo,...,Lell9的计算。该流程提前计算外部信息,时延缩短为N/2。 但是需要额外存储fji『半段前向状态度量,这是该流程最大的缺点;此外还需要同 时给前向状态度量和后向状态度量的计算提供数据,并配置两套独立的分支度量 计算单元。 上述三种方案性能对比见表4.2,每种方案都有各自的优点和缺点,方案的 选择应该根据实际需求。当容许译码性能稍微下降时,方案二是最合适的,时延 最小,而且存储器的消耗也最少;否则只能选择方案一或者方案三,此时如果对 译码时延要求比较高,且存储器充裕选择方案三;如果对译码速度没有过高的要 求,可选择方案一,复杂度低易于实现。本文选择方案三。 35 上海师范大学硕十学位论文 第pq章CTC译码器设计 时间t ·—————l—ZU——————_.-.·●—12—U———'·■——————lZ—U————◆ 递推彳 存取么 递推B 存取B Le的输入 计算Le—————互五=互丑互五盈 图4.15外部信息计算流程(方案--) 表4.2三种方案性能对比 方案一 方案二 方案三 时延 N L N/2 译码耗时 2N N+L 3N/2 么存储深度 O 0 N忽 B存储深度 N 2L N 译码性能 无损 有损 无损 复杂度 较小 较大 较人 4.5.2子译码器功能模块划分 子译码器模块功能划分如图4.16所示。data ab RAM、data yl RAM、 data 在数据输入阶段存储相应的数据,为后续译码操作提供数据源。 addr.y2 ROM包含交织地址,作用于交织和解交织。由于采用第三种译码流程, RAMitv 前向状态度量和后向状态度量同时计算,相应的计算单元都包含分量度量的计算 电路,计算的结果也都需要RAM保存。设置两个外部信息RAM,~个RAM用 于存储当前外部信息计算单元生成的外部信息,另一个RAM输出上半轮迭代的 外部信息,经交织或解交织后得到先验信息。控制单元控制上述单元并负责与外 界的交互。 }:海师范大学硕十学位论文 第阴章CTC译码器.砹计 图4.16子译码器模块功能划分 4.5.3前向状态度量计算单元设计 . 本设计将分支度量的计算包含于状态度量计算单元中,分支度量设计如下。 编码器寄存器深度为3,有8个状态;每个状态输入都有4种情况,对应4种状 态转移,故总共有32种状态转移。如果为这32种状态转移各自配置一套分支度 量计算电路,是非常浪费资源的。下面从状态度量的计算公式入手对状态度量进 行分类。 用r一∞一∥表示系统位为ab,校验位为yw的分支度量,则根据ab和yw的不 同,r—ab—yw有16种不同的计算值。又由于IEEE802.16e标准中规定的码率都大 于1/2,校验位w都被删余,f—ab一∥只剩T8种不同的计算值,r—ab一∥改写 成r—ab—Y。根据式(3.28)F—ab—y计算公式如下: r—00—0=一如勉一a一如纽一6一如细一y; r—OO一1=—如纪一a—data一6+data—y; r一10—0=data—a—data—b—data—y+嚣; r一10一1=data—a—data一6+data—y+茸; r一01—0=一如勉一a+如细一b—data—Y+骂; I'一Ol一1=一妇幻一a+如幻一6+data—Y+骂; f一11—0=data—a+如纽一b—data—y+骂; r一1l—l=data—a+data—b+data—J,+骂;(4-2) 37 上海师范人学硕J:学位论文 第pq章cTC译码器设计 可见分支度量计算只需要简单的加法和减法操作就能实现,资源消耗并不多, 为此为每一种分支度量配置一套运算电路,通过并行运算来提高运算速度。 根据式(3.24)和RSC编码规则可得到前向状态度量的递推公式: 4(O)=max{At—I(0)+r一00—0,4一I(1)+r一10—1,At—I(6)+r一01—1,4一I(7)+r一11—0) 4(1)=max{At—l(2)+r一00—1,4一l(3)+r一10—0,At—l(4)+r—Ol—O,At—l(5)+r一1 1一I) 4(2)=max{At—l(2)+r一11—1,At—l(3)+r一01—0,4一l(4)+r一10—0,At—I(5)+r一00—1) 4(3)=max{At—I(0)+r一1 1—0,4一l(1)+r一01—1,4一I(6)+r一10—1,4一I(7)+r一00一O) 4(4)=max{At—l(0)+r一10—1,At—l(1)+r一00—0,4一I(6)+r一1 1—0,4一。(7)+I’一01—1) 4(5)=max{At—I(2)+r一10—0,4一l(3)+r一00—1,At—l(4)+11—1l一1,4一l(5)+r—Ol一0) 4(6)=max{At—l(2)+r一01—0,4一I(3)+r一1l一1,At—l(4)+f一00—1,At—I(5)+r一10—0) 4(7)=max{At—I(o)+11—01—1,At—I(1)+11—1 1一o,At—I(6)+r一00—0,At—l(7)+r一10—1} (4—3) 前向状态度量的计算分两步:第一步将分支度量与前一时刻的前向状态度量 相加,四组加法操作同时进行,第二步将四组加法运算的结果进行比较求出最大 值(记作max 4)。由于下一时刻状态度量的递推需要用到当前状态度量值,所以 必须等当前念度量计算结束才能丌始下一时刻状态度量的计算。要实现前向状态 度量计算单元的流水线操作,必须在一个时钟周期内完成上述两步操作,因此加 法运算和求最大值成了该计算单元的关键路径,是提高译码系统最大时钟频率的 瓶颈。下面设计max 4计算电路。 求四个数据的最大值,最简单也最直接的做法是将数据分成两组,分别求出 两组数据的最大值,之后比较这两个数值得出四个数据的最大值,如图4.17所示。 关键路径由两个比较器和两个选择器组成。 图4-17 max一4运算电路 为了缩短max 4运算电路的关键路径,本设计采用下述计算方法:先用图4.18 所示的比较电路对四个数据进行运算,输出信号data4 select、data3 select、 38 上海师范大学硕十学位论文 第pq章CTC译码器设计 data2 select、datal select分别表示最大值为data 4、data 3、data 2、data 1,然 后根据这四个标志位从四个数据中选出最大值。显然该比较电路的运算时间要比 比较器运算时间的两倍小,数据位宽越大效果越明显。 d a a3 d a a4 d aa● d a a4 d a a2 da a4 i{lda a● da a3 da a2 da a3 lda al da a2 图4-18比较电路 为 在递推过程中,状态度量值会不断增大,钎了防止溢出,需要采取归一化处 理或者将数据位宽设置的足够大。常见的归一化处理有两种,一种是将同一时刻 的8个状态度量值都减去其中的最小值【201,另一种做法是设置一个门限值,当出 现状态度量值大于门限值时,8个状态度量值都减去一个常数,这样状态度量值 不会溢出,状态度量值之间的相对大小也不会改变【211。但是上述两种归一化处理 都会增加状态度量计算单元的逻辑链路,降低系统的最大时钟频率。在系统时钟 频率要求不高的情况下可以采用上述方法进行状态度量归一化处理,减少数据位 宽。为了尽可能的提高系统时钟频率,本设计不对状态度量值进行归一化处理, 而是对分支度量进行归一化,因为分支度量计算没有反馈,可以通过在逻辑链路 上添加寄存器来提高系统频率。但这种做法只是尽可能的减缓状态度量值增大的 速度,状态度量值仍需要不小的位宽。 前向状态度量计算单元端口示意图如下: 39 上海师范大学硕十学位论文 第四章CTC译码器设计 gD—_clK — gb_rst.— local rst data——valid.。 data a data b data_y.— 一 Ia l la 2 一 la 3 alpha alpha_en. alpha_s0.— alpha_sI.— alpha_s2.。 alpha_s3.。 alpha_s4.。 alpha_s5.— alpha_s6~ alpha_s7.。 图4.19前向状态度量计算单元端口示意图 4.5.4后向状态度量计算单元设计 在前向状态度量计算单元的架构上,修改状态度量递推方式即可实现后向状 态度量的计算。根据式(3—25)和RSC编码规则可得到后向状态度量的递推公式: E(O)=max{E+I(0)+F一00—0,E+l(3)+r—11—0,E+l(4)+r一10一l,E+I(7)+r一01一1) E(1)=ma)【{E+I(0)+r一10—1,E+I(3)+r一01—1,E+I(4)+r一00—0,E+I(7)+r—l 1—0} E(2)=max{s!+I(1)+r—oo一1,E+l(2)+f—l l—l,E+I(5)+r—10—0,E+。(6)+r—Ol一0) E(3)=max{s!+I(1)+I’一10—0,E+l(2)+r一01—0,E+-(5)+r—oO—l,E+。(6)+r—l l—1) E(4)=max{s!+l(1)+r一01—0,E+l(2)+r—10—0,E+I(5)+r—l l一1,E+l(6)+r—OO—1) E(5)=max{s!+I(1)+r一11—1,E+l(2)+r一00—1,E+I(5)+r一01—0,E+I(6)+r一10—0) E(6)=max{s!+I(O)+r—Ol一1,忍+l(3)+r—10—1,E+l(4)+r—l 1一o,E+l(7)+F一00—0) E(7)=max{S,+I(0)+r—11—0,E+I(3)+r一00—0,E+I(4)+F一01—1,E+l(7)+r一10一1) (4.4) 4.5.5外部信息计算单元设计 定义 q=max(M)鄂,川p)+丁Lcx:r/+_Lcx厂:"r/。+B,+.(砒f=。,l,2,3 根据式(3.30),分别将Dl、D2、B减去Do便得到信息比特01、10、1 1对 应的外部信息。根据RSC编码规则得: 上海师范人学硕上学位论文 第pq章CTC译码器设计 Do=max{A,(0)一data—y+E+l(O),4(2)+data—Y+E+l(1),4(5)+data一少+E+l(2), A,(7)一data—Y+Bt+l(3),At(1)一data—Y+E+l(4),A,(3)+data—Y+E+I(5), A,(4)+data—Y+Bt+l(6),A,(6)一data—y+Bt+l(7)) Dl=ma)【{4(6)+data—Y+E+l(O),4(4)一data—y+E+l(1),At(3)一data—Y+E+l(2), At(1)+data—Y+E+l(3),4(7)+data—Y+E+l(4),4(5)一data—y+E+l(5), 4(2)一data—Y+E+I(6),At(O)+data—Y+E+l(7)) D2=max{At(1)+data—y+E+I(O),4(3)一data—y+E+l(1),At(4)-data—y+E+I(2), A,(6)+data—y+E+l(3),A,(0)+data—y+E+l(4),A,(2)-data—y+E+l(5), 4(5)一data—y+E+l(6),4(7)+data—y+忍+l(7)) D3=max{A,(7)一data—y+E+l(O),A,(5)+data—y+E+l(1),4(2)+data—y+E+I(2), 4(O)一data—y+E+l(3),4(6)一data—y+骂+I(4),At(4)+data一),+E+l(5), 4(3)+data—Y+E+l(6),4(1)一data—Y+E+I(7)) (4.5) 与状态度量计算不同,上述计算过程没有反馈,故可在max 8逻辑链路上添 加流水线寄存器,如图4.20所示。 线 器 图4.20 max 8计算电路 外部信息计算单元端口示意图如下: 41 上海师范大学顾I:学位论文 第阴章CTC译码器设计 gD』IK~ gb_rst.— data valid 一 ■ data__y.— alpha_s0.— alphas!.。 alpha_s2.— Le alpha_s3.。 alpha_s4.— alpha_s5.. alpha_s6.— alpha__s7.。 DeIa SU beta sl beta s2 beta s3 beta s4 beta s5 beta s6 beta s7 le en 一 le l 一 Ie 2 一 Ie 3 图4.2l外部信息计算单元端口示意图 . 4.5.6控制单元设计 为了降低控制单元时序设计的难度,将整个迭代译码过程划分成三个进程, 再将每个进程划分成若干个事件,最后调整事件间的先后顺序。进程划分如下: 进程l:系统复位后或子译码器完成译码操作后进入该进程,等待数据输入。 数据输入时,将data—ab、data_yl、data__y2分别写入data—ab—RAM、data__ylj认M、 data__y2j认M,写地址从零丌始递增,三个RAM共用一个写地址。根据ab_pairs 信号读取addr itv ROM,将交织所需的地址写入addr RAM。写操作完成后进入 进程2。 进程2:以data y2作为信道信息的校验部分计算并存储外部信息Le2。完成 操作后进入进程3。 进程3:以data yl作为信道信息的校验部分计算并存储外部信息Lel,并判 断是否为最后一次译码迭代过程。如果是,计算外部信息的同时计算对数似然比, 并进行判决,将判决结果输出,操作完成后进入进程l等待新的数据输入;否则 完成外部信息的计算后进入进程2,开始下一轮迭代过程。先计算Le2,是为了 判决时无需对对数似然比进行解交织,如果先计算Lel,判决时需要对对数似然 比进行解交织。 进程2划分为3个事件:前向状态度量计算、后向状态度量计算、外部信息 计算。每个事件都对应一个计算单元,控制单元需要做的就是为这些计算单元提 42 I:海师范人学硕士学位论文 第pq章CTC译码器设计 供输入并保存计算结果。前向状态度量计算和后向状态度量计算同时进行,需要 两组信道信息输入、外部信息信息输入、交织地址。为此将存储信道信息和外部 信息的RAM都设置成3端口类型,一个写端口和两个读端口,两个读端口各提 供一组数据。进程1已经将交织地址写入3端口addr RAM,顺序地读取addr RAM 得到前向计算所需的交织地址,逆序地读取addr RAM得到后向计算所需的交织 地址。存储外部信息时,读取addr itv rom获得交织地址,以交织地址为写地址 存储数据,当写地址为奇数时,交换二进制序列“0l”对应的外部信息和“10”对应 的外部信息,实现解交织。 进程3划分为6个事件:前向状态度量计算、后向状态度量计算、外部信息 计算、对数似然比计算、判决、数据输出。和进程2不同的是前三个事件的数据 输入和输出存储都不需要交织或者解交织。对数似然比计算和判决分别根据式 (3.31)和判决法则进行,这里不再赘述。当进行判决时将ell wt信号置l,将 判决得到的双二进制比特作为data wt输出。addr wt和外部信息的计算顺序一致: ab_pairs/2,ab_pairs/2+1,…,ab_pais一1,0,1,…,ab_pairs/2-1。判决结束时将 ell wt信号置0停止数据输出,并输出短脉冲信号done wt,告知数据缓存模块写 操作完成。 子译码器模块和数据分离模块的交互信号subdecoder busy由控制单元负责 产生,当data valid由低电平变成高度平时将subdecoder busy信号置1,直到 addr wt等于ab subdecoder 4.6数据缓存模块设计 数据缓存模块内部配置两个RAM,前级RAM和后级RAM。前级RAM的 写操作由子译码器模块控制,当done wt信号为高电平时,说明写操作完成,从 地址零开始顺序地读取前级RAM,将读数据转换成8bit的格式写入后级RAM。 当前级RAM的读地址累计到num wt.1时,说明读操作完成,将decoder ready 信号置l。此时如果read decoder信号为高电平,从地址零丌始顺序地读取后级 RAM,输出数据。数据输出结束后将decoder ready信号置0。 数据缓存模块端口示意图如下: 信号。_busy 43 .1:海师{!I:c人学硕.I:学位论文 第pq章CTC译码器设计 gb clk 一一 一 gb_rst.— num wt en wt data wt addr wt done wt ■一 read decoder 一 ' data buf.fer decoder rea 一 decoded—da valid decoded da 一 图4-22数据缓存模块端口示意图 上海师范大学硕士学位论文 第五章仿真与验证 第五章仿真与验证 5.1仿真验证的原理与方法 RTL代码设计完成后,就可进行综合和布局布线,最后将配置文件下载到 FPGA进行板级验证。但是板级验证一般只能观测端口信号,如果要观测内部信 号,需要将内部信号设置成输出信号,并通过逐级例化成为顶层文件的输出信号, 不利于问题的定位和分析。虽然QuartuslI提供的SignalTap Logic Analyzer也支持 内部信号的在线观测,但需要消耗额外的存储器资源,观测的信号越多占用的存 储器资源就越多,在存储器资源紧张时该方法行不通。此外,每次修改代码后要 进行验证,都需要重新编译、综合、布局布线、下载,设计规模越大耗时越多, 不利于调试。因此通常在板级验证之前需要进行仿真验证。 仿真是指使用设计软件包模拟实际物理环境对已经实现的设计进行测试。仿 真可分为功能仿真和时序仿真。功能仿真不涉及具体器件的硬件特性,不考虑时 序问题,只对逻辑功能进行测试,验证设计实现的功能是否与设计的要求相符合。 时序验证在综合、布局布线后进行,它涉及到器件延迟和连线延迟,接近板级验 证【221。与板级验证相比,仿真验证具有以下优势:被测实体所需的激励更加容易 产生,测试更加全面;内部信号的观测变得直接方便,将信号添加到波形窗口即 可;先功能仿真后时序仿真,功能仿真阶段不考虑时序问题,无须进行布局布线, 节省时间。 对于规模不是很大的设计,仿真验证可采用基于仿真测试文件(Testbench) 的测试平台法。Testbench完成以下任务:例化被测试文件,为被测试文件提供激 励,以波形窗口、终端、或者文本文件的形式输出仿真结果,(如果需要的话)比 较仿真结果与期望值的差掣231。Testbench一般使用Verilog HDL或者VHDL编写, 与RTL设计不同的是,编写Testbench不受语言要可综合的约束,可使用的语言 更广,编写得更自由。 5.2仿真方案 被测文件(编码器/译码器)要正常运行,必须为被测文件提供激励,编码器 和译码器所需的激励信号分别见编码器/译码器顶层文件设计。产生激励时,每个 激励对应一个模块,模块间并行进行。其中比较特殊的激励信号是数据输入信号, .1-海师范人学硕I:学位论文 第五章仿真与验证 本设计借助simulink软件产生该信号。Simulink采用图形开发界面,用户与它的 交互接口是基于Windows的模型化图形输入的,使得用户可以把更多的精力投入 到系统模型的构建而非语言的编程上12引。同时,simulink还提供通信模块集 (communications blockset),里面包含通信仿真常用的信号源、信道模型、调制模 型、序列操作等子集。用户还可以自定义功能模块,实现模块的扩展,以适应特 殊的仿真应用。 编码器输入数据产生方法如下:调用Random Integer模块,将其参数M.ary number配置成2,输出类型配置成布尔型,这样便产生随机二进制序列,序列的长 度可通过设置仿真时间来实现。之后通过To Workspace模块将二进制序列保存到 MATLAB的workspace中,再由MATLAB将序列以文本形式输出。将文本形式 的数据导入Testbench可通过¥readmemb系统任务实现。Sreadmemb用法如下:- parameter N=240;//数据长度 reg datasource[0:N-1】;//定义数据位宽为1,深度为N的寄存器组 ¥readmemb(”encoder_data_in.txt”,datasource); 通过上述程序编码器激励源已经写入寄存器组datasource中,正确的读取 datasource便能得到编码器的输入数据。 译码器输入数据产生方法如下:借助系统任务¥fopen署ll¥display将编码器仿 真结果以文本形式输出。文本导入MATLAB的workspace后,借助From Workspace 模块将编码后的数据导入simulink。如图5.1所示,自定义map模块将二进制序 列映射成双极性符号。噪声由AWGN Channel模块提供,修改参数Eb/N0可实现 不同的信噪比,当然也可以根据需要选择不同的信道模型。自定义quantizer模块 将浮点数量化成有符号的8bit定点数。最后用Quartusll生成ROM,根据上述定 点数定制ROM的HEX文件,J下确的读取该ROM便得到译码器的输入数据。 enc。der —。ut From Workspace 1一————‘——’。。。。。。。。——’。’。———。 decoder—in● To Workspace ◆u map Y~…~一一 Embedded MAll_AB Function 1 ———。———H●_——1●_●1●●__●。●————‘。。。———_ !~——......._J ,Y quantizer u● Embedded MAll_AB Function 2 图5.1 译码器仿真数据获得方法 上海师范人学硕I:学位论文 5.3资源消耗及性能分析 第五章仿真与验证 本设计选用QuartuslI 8.OSPl作为综合、布局布线工具,选用CyclonelII系列 的EP3C120F780C7作为目标器件。编码器资源消耗情况如表5.1所示,译码器资 源消耗情况如表5.2所示。 表5-1编码器资源消耗 Device LE Memory(bit) pm EP3C 1 20F780C7 720 26496 34 表5-2译码器资源消耗 De讥ce LE Memory(bit) pm EP3C 1 20F780C7 8360 145376 35 编码器和译码器性能分析如下: 1)系统最高时钟频率 编码器系统最高时钟频率可达134.70MHz,译码器系统最高时钟频率为97.40 MHz。译码器系统时钟瓶颈由前(后)向状念度量计算单元引起,主要由于状态 度量的更新需要用到上(下)一时刻的状态度量值,在保证状态更新流水线进行 的情况下,不能通过添加流水线寄存器来分割关键路径。 2)时延 令双比特序列的长度为n ,编码器输出的比特数为 。编码 器单比特输入,则序列输入耗时.pairs pairs 码器数 (单位为时钟周期,en下co同ded);b编its2*n 据缓存模块写数据耗时encoded bits,故编码器时延为2*n pairs+encoded bits。 译码器时延由数据分离耗时、子译码器耗时、数据缓存耗时引起。其中数据 分离耗时4n__pairs,子译码器耗时n_pairs+itv_num木n__pairs宰3/2,数据缓存耗时 n_pairs,故译码器时延为6 n__pairs+itv_num*n_pairs木3/2。 3)数据吞吐量 编码器数据吞吐量(输入): 2木n—pairs奉f 2木n一刀沁+encoded—bits 在码率为1/2(encoded bits=4*n pairs),时钟频率为90Mhz时,吞吐量为 30Ⅳmit/s。 由于译码器采用流水线技术,连续处理M帧数据消耗的时钟周期数为 47 :海师范人学硕:I:学位论文 第五章仿真与验证 4枣以一彤沁+(以一pairs+豇y—Bum半n—pal木3/2)幸M+n pairs 故译码器数据吞吐量(输出): 2木n—p口泌半M乖f 5宰n—pairs+(刀一pairs+f加一Bum宰n—pairs幸3/2)宰M 在译码迭代次数保持不变的情况,M越大,时钟频率越高,吞吐量就越大。 当M取10,迭代次数取5,时钟频率为90MHz时,吞吐量为20Mbit/s。 4)支持的帧长 编/译码器支持以下序列长度:48,72,96,144,192,216,240,288,360, 384,432,480。 5)支持的码率 码率R_2*n_pair/encoded—bits,在给定n__pair时,可通过配置编码器的参数encoded_bits 实现不同的码率,但必须遵循码率大于等于1/2的规定。 I:海师范人学硕I:学位论文 第六章结论 第六章结论 本文基于IEEE802.1 6e标准,对卷积Turbo码编码器和译码器进行设计和研 究,主要完成以下几方面的工作: 1)查阅文献,认真学习CTC编码原理和译码原理,尤其是对MAP译码算 法和Max.109.MAP译码算法进行了深入学习和研究; 2)编码器系统架构设计及其Verilog代码设计; 3)译码器系统架构设计及其Verilog代码设计; 4)编写Testbench,搭建Modelsim仿真平台,进行功能仿真和时序仿真; 5)编码器和译码器的板级验证和调试。 本文设计的卷积Turbo码编码器和译码器具有系统最高时钟频率高、时延小、 吞吐量高、帧长和码率可灵活配置的优点,但同时也存在不足,即存储器资源消 耗比较多。造成的原因主要是h.fJ'/后向状念度量计算同时进行,需要提供两组状态 度量计算单元的输入,还要额外存储前向状念度量;另外,为了缩短关键路径, 状态度量没有采取归一化处理,数据位宽比较宽。可根据需求采取下列措施减少 存储器的消耗。当容许译码性能稍微的下降时,可采用滑动窗技术,减小存储器 的深度;当系统最高时钟频率要求不高时,可通过对状态度量进行归一化处理, 减小存储器的位宽。 在实际应用中,如果想进一步减小译码器的时延,提高吞吐量,可以设置多 个子译码器,通过并行处理来实现。此外,还可以引入迭代停止准则乜5¨矧,在译 码稳定的情况下停止迭代译码,减小时延。如果编码器和译码器应用于手持设备 上,降低功耗是必须考虑的,因此低功耗设计是今后研究的重点。 49 J:海师范人学硕上学位论文 参考文献 参考文献 1.Claude Berrou,Alain Glavieux and Punya Thitimajshima.“Near Shannon 1imit error—correcting coding and decoding:Turbo—codes(1)".ICC’93,1993. P1064-1070. 2.刘东华.Turbo码原理与应用技术[M].北京:电子工业出版社,2004.PIO—P11. 3.I EEE.Standard 802.1 6—2004,part 1 6:A i r i nterface for fi xed broadband wireless access systems[S],2004. 4.IEEE.Standard 802.16—2005,partl6:Air interface for fixed and mobile broadband wireless access systems[S],2005. 5.邵长虎,徐友云,张乐.WiMax系统中卷积Turbo码技术的研究[J].信息技 术.2006,(11). 6.Jeffrey G.Andrews,Arunabha Ghosh,Rias Muhamed.Fundamentals of WiMAX[M]. PRENTICE HALL,2007.P275一P277. 7.C1ive Max Maxfield.FPGAs world class designs[M].Newnes Press,2006. p2一p4. 8.A1 tera.WiMAX CTC Decoder TCl000一WiMAX[OL]. http://www.al tera.com.cn/products/ip/ampp/turboconcept/turboconcept.ht m1.2009. 9.华为技术有限公司.卷积Turbo码循环状态查找方法及装置、译码方法及装置 [P].中国.H03M13/23,CNl01409566.2009—04—5. 10.中兴通讯股份有限公司.卷积Turbo码译码器的等待队列控制方法及装备[P]. 中国.H04LI/00,CNl01453296.2009—06—10. 11.展讯通信有限公司.卷积Turbo码交织器和解交织器[P].中 国.H04LI/00,CNl01582737.2009一11—18. 12.李晶峰,王雪静,叶儿等.UWB系统中交织器低复杂度的实现[J].计算机工 程.2009,35(7). 13.Todd K.Moon.Error Correction Coding[M].New Jersey:John Wi ley& sons,2005.P588一P609. 14.Bernard Sklar.数字通信[M].第二版.徐平平,宋铁成,叶芝慧.北京:电子工业 I:海师范人学硕J二学位论文 参考文献 出版社,2008.P382一P387. 15.吴继华,王诚.Altera FPGA/CPLD设计[M].北京:人民邮电出版社,2005.p153. 16.Kesbab K.Parhi.VLSI数字信号处理系统[M].陈弘毅,白国强,吴行军.北京: 机械工业出版社,2004.P47一P51. 17.Steve Ki lts. Advanced sons,2007.P14一P16. FPGA Design[M].New Jersey:John Wi ley& 18.徐伟峰,秦东,李志勇等.滑动窗在Turbo码解码系统中的应用及改进[J].电 子学报.2000,28(9). 19.詹书荣,黄春晖.Turbo译码器滑动窗的改进及其FPGA实现[J].电力学 报.2008,23(5). 20.雷李云.Turbo码译码算法研究及其FPGA实现[D].哈尔滨:哈尔滨工程大 学,2007. 21.应晖.基于FPGA的Turbo码编译码器研究与实现[D].西安:西北工业大 学,2007. 22.华清远见嵌入式培训中心.FPGA应用开发入门与典型实例[M].第二版.北京: 人民邮电出版社,2008.P241. 23.Mujtaba Hamid.Writing Efficient Testbenches[OL].WWW.xilinx.com,2005. 24.王正林,王胜丌,陈国顺等.MATLAB/Simul ink与控制系统仿真[M].第二版.北 京:电子工出版社,2008.P49. 25.刘东华,唐朝京.基于交叉熵最小化得Turbo码迭代译码停止准则[J].国防科 技大学学报.2000,22(5). 26.蒲攀,何东健,F只彩丽.一种新的Turbo码译码迭代停止准则[J].计算机工程与 应用.2009,45(27). ,f:海师范人学硕十学位论文 致谢 致谢 感谢爸爸妈妈长期以来对我的信任和支持,没有您们的支持,我应该在为生 计而奔波,更不会有现在这样安逸的学习环境。 感谢顾美康老师对我的教诲和帮助。三年前我连PLD都没接触过,而如今我 已成一名称职的FPGA工程师,这一切都归功于老师的教导。不管多小的问题老 师都会不厌其烦的帮我解答,老师您还专门替我收集了很多学习的案例,并亲自 分析给我听,这是何等的可贵!在您的灌溉下,我茁壮成长。此外,老师您还教 会了我低调做人,高调做事的道理,这将让我受用终身。 感谢炱超、刘广宇、徐其。和你们共同开发DFT-S.GMC终端芯片是非常喻 快的,也是非常受益的。我对通信系统和数字信号处理的FPGA实现有了更深层 次的理解,对卷积Turbo码编译码器FPGA实现的重要性及研究现状有了全新的 认识。 52 卷积Turbo码编译码器FPGA实现的研究 作者: 学位授予单位: 高子旺 上海师范大学 相似文献(1条) 1.学位论文 郭丽 宽带无线系统中TPC码迭代译码研究 2006 宽带无线通信正向更高速率、更大的覆盖范围、更好的移动性方向发展,WIMAX技术的出现正好满足了人们对于无线接入的要求。信道编码技术作为 无线通信系统的关键技术之一,良好的信道编码可以有效提高系统的性能。因此研究适合于无线通信传输的信道编码技术具有重要的理论和现实意义。 自1993年法国的Berrou提出Turbo码之后,多年里学者们一直致力于能够接近香农限类似Turbo码的可迭代译码算法的研究和具体编码方面的研究。 1994年另外一种采用Turbo迭代译码方式的乘积码被R.M.Pyndiah提出,这就是Turbo乘积码(TPC),TPC码作为一种高效的信道编码技术,在码率、硬件 复杂度和译码性能方面提供了很大的灵活性。在高码率应用中(R>0.7)比卷积Turbo码(CTC)更为有效,尤其在频带受限的通信系统中,TPC码可以提供较 高的频带利用率。不仅在低信噪比情况下性能优越,而且具有很强的抗衰落、抗干扰能力,在信道条件较差的无线通信系统中具有很大的应用潜力。 本文的主要工作在于: 1)基于修正的Chase-Pyndiah译码算法,通过不同参数的大量仿真对TPC码在白高斯信道下的译码性能做了仿真研究,从这些仿真结论可以看出TPC码 具有频谱效率高,误码平层低、灵活性强、译码硬件实现复杂度低等特点,TPC码非常适合未来宽带无线通信的需要。 2)针对在IEEE802.16标准中应用很广泛的缩短TPC码做了仿真研究,缩短后的TPC码性能衰减大致为0.3dB,从而得到一些有益的结论。 3)从硬件实现的角度分析了实现的复杂度和算法的简化问题,以及各种折衷之后对硬件实现的影响,提出了一些简化方案。 4)深入研究了如何基于FPGA设计TPC码迭代译码器,提出了两个方案,对两种方案做了分析和比较。方案二实质是方案一的简化设计,在系统设计中 根据FPGA技术的特点,将整个译码器进行功能模块的划分并分别实现了各个模块,这样使整个译码器具有一定的灵活性,便于维护和升级,在硬件的设 计过程中采用Xilinx公司的ISE 8.1集成设计环境和ModelsimXE 6.0a仿真软件,从最后的仿真验证结果来看,该译码器具有良好的译码性能,在占用 55%左右的硬件资源情况下,译码速率可以达到50Mpbs,具有一定的实用价值。 本文主要特色如下: 译码器功能验证激励的建立。为了评估TPC译码器的译码性能好坏,通过改变不同信噪比下的输入激励,可以分析计算出译码器的误码率情况,经过 功能验证整个译码模块设计的功能与C程序仿真的功能是非常吻合的,从而证明了整个设计的合理性,为今后实现更实用的TPC码译码器做了一个有益的 尝试。 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1667362.aspx 授权使用:北京理工大学(北京理工大学),授权号:05d1bd07-5dff-4cf9-9779-9e9e002db45e 下载时间:2011年3月6日
更多简介内容

评论

下载专区


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); }) })