VHDL课程设计之交织解交织器
课程设计交织器解交织器
交织器/解交织器设计卷积交织: 交织深度I=12,形成相互交迭的误码保护数据包,以抵抗信道中突发的干扰。
1.请设计一个交织器和解交织器,完成二进制比特流的交织/解交织功能。
2.设计测试基准,验证设计的功能是否正确。
3.请依指定接脚设定输、出入脚位,脚位定义如先前公布之软、硬体规格所示。
4.评分标准为尽量满足公平原则起见,评分标准如下:计分优先序:功能正确>使用资源>缴件时间>创意5.缴件规格缴件规格如下:a.设计完成之程式档与原始设定,包含所有的原始程式如.v档,b.编译完且可下载之binary file(二进位档),此binary file应完成所有设计,并能“直接下载”至原型电路板上,验证“功能正确性”。
c.文件说明:请附上一说明文件解释其设计方式、程式内容、编译设定与其它资料等,愈详尽愈好,除了能增加上述文件撰写之分数外,亦可帮助老师检查小组之作品,间接增加其它评审项目之分数。
文件说明档可为word档或是pdf档,不接收其它格式。
6.上交需知:a.请另建一新目录,将以上各项需要缴交的档案复制至此新目录下,并以winzip 将此目录压缩成一个档案。
档名命名方式如下:组别 .zip组长或小组名.zip(小组组别)_上传流水号.zip若上传完毕后,发现档案有误需要修改,则请修改“流水号”部分再上传如:组长或小组名_002.zip(第二次上传)组长或小组名_003.zip(第三次上传,等等..以此类推)b文件说明档:本档即上述之文件说明,请依上述说明撰写。
其档名命名方式如上述为:组长或小组名_说明书.zip若上传完毕后,发现档案有误需要修改,则请修改“流水号”部分再上传如:组长或小组名_说明书002.zip(第二次上传)组长或小组名_说明书003.zip(第三次上传,等等..以此类推)c读我档:readme_xxx.txt请附上一读我档简单说明上述档案,档案格式为ASCII 档式。
Turbo码交织器的VHDL设计
Turbo 码交织器的VHDL 设计赵 华,殷奎喜,柯 炜,宋文娟(南京师范大学物理科学与技术学院 江苏南京 210097)摘 要:介绍了T u rbo 码和交织技术,以及交织技术在T u rbo 码中的重要作用。
并提出了一种交织器电路的设计思路,在这种设计下,各种不同类型的交织器具有相同的电路复杂度。
根据此设计思路,用V HDL 语言的编程设计了交织器的电路,并给出了仿真结果。
关键词:交织器;T u rbo 码;V HDL ;数字电路中图分类号:TN 91913+3 文献标识码:B 文章编号:1004373X (2003)0704203I n terleaver D esign of Turbo codes by VHDLZHAO H ua ,Y I N Ku ix i ,KE W ei ,SON G W en juan(Co llege of Physics Science and Techno l ogy ,N anjing N o r m alU niversity ,N anjing ,210097,Ch ina )Abstract :In troduces the T u rbo code and in terleave techno logy and the i m po rtan t u sage of in terleave in tu rbo codes 1It p ropo s 2es a k ind of design m ethod of in terleaver circu it 1T h is design m akes each k ind of in terleave have the sam e comp lex ity 1A t last it de 2sign s the circu it by V HDL ,and gives their si m u lati on resu lt 1Keywords :in terleaver ;T u rbo code ;V HDL ;digital circu it收稿日期:200301191 Turbo 码和交织技术介绍法国人C 1B errou 等人在1993年提出了T u rbo码[1],他在低信噪比下表现出了近Shannon 限的性能,其性能超过了其他编码方法。
一种新Turbo码交织器的VHDL设计_熊兴隆
收稿日期:2005-08-17;修回日期:2005-12-26基金项目:国家自然科学基金资助项目(60272049);天津市重点实验室开放基金资助项目作者简介:熊兴隆(1962-),男,陕西户县人,高级工程师,学士,研究方向为数字通信、并行信号处理、DSP/FPGA开发与应用.C.Berrou等学者1993年提出的Turbo码[1]具有接近Shannon极限的优异的误比特率(BER)性能。
Turbo码一经提出就被编码界专家认为是近几年来最令人兴奋和最具潜力的重大发展。
Turbo码与以往所有编码不同之处在于它巧妙地将卷积码和交织器结合在一起,通过交织器的作用,达到接近随机编码的目的。
同时,它采用迭代译码来逼近最大似然译码,使得译码复杂性大大降低。
因此,无论是WCDMA还是CDMA2000都将其作为候选的信道编码方案并且列为3G的核心技术之一。
Turbo码编码器的结构如图1所示,它是由两个递归的系统卷积码编码器通过一个交织器并行连接组成的。
信息序列XK一路直接输入到RSC编码器1中,另一路经过交织器交织后再输入到RSC编码器2中,两个编码器通常是相同的,编码后的校验位经过删余操作,可以得到不同编码效率的码字。
交织器在Turbo码的性能中起到了关键作用,它最大可能地置乱输入信息序列的顺序,降低了输入/输出数据的相关性,使得邻近码元同时被噪声淹没的可能性大大减小,从而增强了抗突发噪声的能力。
交织器增大了校验码重,尤其是改善了低码重输入信息序列的输出校验码重,从而增大了码的最小自由距离,提高了纠错能力。
交织器的设计是Turbo码设计中的一个重要方面,不同交织器对于Turbo码性能有着不同的影响。
本文分析比较了几种交织算法的特点之后提出一种隔行写入螺旋式交织方案,采用VHDL语言编程设计了交织器的电路,并给出了仿真结果。
一种新Turbo码交织器的VHDL设计熊兴隆(中国民用航空学院天津市智能信号与图像处理重点实验室,天津300300)摘要:介绍了Turbo码和交织技术,分析了几种常用交织算法的特点。
基于VHDL卷积交织器的设计与实现
( 尔 滨 师 范大 学 ) 哈
【 摘要 】 研 究 交织 的原 理 , 出 了一 种 V D 提 H L来 实现 D C I 准 中的 卷积 交 O SS标 织 器的 方案 , 并且在 Moe i E6 1 dl m S .d环境 下进行 功能仿 真 , 方法 具有 实现 简单 和 S 该
的突 发错误 分 散开 来 , 长 串的 比特 差 错 变成 短 使 串差错 , 得误码 在可 纠错 的范 围之 内 , 而对 其 使 从 纠正 , 大大 降低 了突发 错误 导致 的危 害 , 而充分 从 发挥 纠错 编码 的作用 .
步 输 出对应 支路 经 延 时 的数 据. 积 交 织 每条 支 卷 路 符号 数据 的延 时节 拍 为 d =( 一1 MB, =1 i i ) i , 2 … , 解 交 织器 的延 时 数 与 交 织 器 相 反 , , . 即第
占用资 源 少等优 点 . 关键词 :D C I ; 口 R M; O SS 双 A 卷积 交织
期. 交织 器 的输 出端按 输 人 端 的工 作 节 拍 分别 同
0 引 言
在数字通信系统 中, 传输信道 因受到各种干 扰而 性 能下降 , 使传输 的信号受 到影 响而 出错 . 为 了提 高数据 的抗 干扰 能 力 和传 输 的可靠 性 , 般 一 对数 据进 行纠 错 编码 . 纠错 编 码 能 纠正 信 道 中发 生 的随机 离散错 误 , 对 于 由噪 声 、 扰和信 道衰 但 干 落等 引起 的突 发 差错 或 群 发 错 误 则 是 没 有 效 果 的. 常采 用 纠错 码 结合 交 织 技术 的前 向纠错 技 通 术 ( E 方 案对付 突发 错误 . F C) 纠错 编码进 行交 织 , 即将 编码数 据 按 照一 定 的 规则 打 乱 , 得数 据 序 使 列 的相关性 减 弱 , 收端加 入解 交织器 , 接 使信道 中
交织与解解交织
交织与解解交织
我们知道编码的意义是通过加入冗余位信息的方法,从而在接收端能够发现和纠正由于信道影响而产生的随机错码。
那么如果信码在信道中传输时由于信道或者认为的影响而使一段连续的码元产生大量错误,由于编码长度的有限,通过编码的方法是无法达到纠错的功能的,这就需要我们通过其它方法来解决。
目前比较常用的方法是交织(In terleav e)。
交织本质上是一个将数据序列“扰乱”的过程,这里的“扰乱”实际上是按照一定的人为方式进行重新排列,交织主要由交织器完成。
它的逆过程就是解交织,将重排过的序列恢复到原来的序列顺序。
可以理解的是通过交织以后,原来可能出现的大量连续错误被分散开,成为随机错误,而随机错误我们可以通过编码来解决。
交织器/解交织器的加入将大大提高系统的纠错能力。
但是随之而来的是增加了传输延时,降低了信码的传输效率。
这是因为信号的打乱一般是通过矩阵的读入和读出采用不同的方式而实现的,这样必然带来时间上的损失,而且不同的交织方法对信号的“扰乱”程度是不同的,如果“扰乱”的程度不够的话将得不到很好的交织效果。
所以,高“扰乱”低硬件复杂度和低延时成为设计交织器的关键。
这里我们介绍两种比较常用的交织器的设计。
数字视频广播系统中交织器与解交织器的FPGA实现
在发射端 ,将要发射的输入数据通过交织器 , 其顺序被打乱 ,使得数据序列 的相关性被大大减 弱, 这样做 的突出优点就是可以很好地降低突发性 错误 的危害。而在接收端通过相反 的处理把数据恢
据延迟下 , 卷积交织所需 的存储器 比矩 阵交织减少 半 , 以一般 采用 卷积 交织 。 所
摘要 : 本文首先介绍了交织解交织的基本原理 , 并针对数字视频广播 系统提 出了优化 方案, 着重 分 析 了其 工作原 理及 各组 成模 块 的具体设 计 , 采用 V r g HL编 写程序 , 后用 F G 以 实现 。 e io D l 最 PA加
关键 词 : 字视 频广播 数 交织 解 交织 FG PA
维普资讯
…
…
…
…
…
…
…
…
…
…
…
・
・
集成电s 用 … … … … … ・ n 照 … … … … … …・ ; 摩
A pplcat o i
数 字视 频 广播 系统 中交织 器 与解 交织器 的 F G P A实现
周 加铳
( 同济大学通信软件及专用集成电路设计 中心 2 09) 002
地面数字视频广播中内交织器与解内交织器设计
一
V个 比特交织器 的输 出构成 了一个 V 比特 字
源消耗少 , 稳定性高 , 具有 良好的性能 。
织器的输出组成每符号 v比特字的符号流 , 经过符 号交织后送到星座映射模块。解内交织原理与 内交 织相同 , 只是流程正好相反 , 本文接下来只讨论 内交
织 原理 。
2 内交织解 内交织原 理
所谓交织 , 就是在发送端通过交织器 , 将输人数
_ l j器
制技术 。 能有效抵抗多径干扰 , 在世界各 国得到十分 广泛的应用。 V — D B T为应对传输过程中由于信道噪 声及各种差错事件而引发 的随机错 误和突发错误 , 采用内外码级联的先进信道编码及交织技术 。与一
图 1 D B T系 统 内 交 织 原 理 图 V—
l ● ^ . ^… 、● ,
…
^; m ^ ^ ^ ^ ^
维普资讯
衄 arC C 成i 巾Itr h集e路 iedu ng i 国ac n 电t t
的输入序列为
Be=( 0b 1 , b 15 () b , ,, …, 2) b2 ( ) 1
1 H() (+2 o 2 3 3 = w 4)m d 16 W I l 乩() (+ 1 o 2 4 w =w 2)m d 16 I H () (+4 o 2 5 sw=w 8)m d 16
3 1符号解 交织设 计方案 .
由上文分析可知:内交织与解 内交织的实质就
是将输入数据块 的顺序打乱后再输 出。其最简单的
设 计
●— — — — — — — __J
l
分接器后 , 先进行 V路 16比特块交织 , 2 再进行 N 一 个 V比特字的符号块交织 , 最后输 出到星座映射 电
设计报告--014---交织—解交织的FPGA设计与实现
交织/解交织的FPGA设计与实现一.交织与解交织器的设计方案任意交织器的的交织与解交织的过程都可以总结为:交织是按顺序地址读入输入数据,按交织地址输出数据,即顺序写入,交织读出;解交织是按交织地址输入数据,按顺序地址读出数据,即:交织写入、顺序读出。
设计中利用一个存储器存储交织地址,这样做一方面在实现不同的交织器时。
图1 交织与解交织原理框图图1电路图的电路是由ROM模块、计数器、RAM模块和二选一选择器四个部分组成。
ROM模块用来存放交织地址;计数器用来产生顺序地址;RAM模块作随机存储器,用来输入输出数据;二选一数据选择器起地址过滤作用,当需要顺序的地址的时候,计数器的输出直接送到RAM地址总线;当需要交织地址时,计数器的输出直接送到ROM地址总线,再将ROM读出的交织地址作ROM 的地址线。
图中的交织与解交织控制信号是用来选择控制交织与解交织的过程;读信号和写信号对RAM模块进行读写控制[12]。
二.交织器各子模块的设计1.计数器模块计数器模块的作用是:为选择器提供顺序地址,为只读存储器提供顺序地址和读写控制信号。
只读存储器中存放着交织地址,但这并不是说只读存储器的输入输出方式是交织的,它的输出元素是交织的。
图2所示为计数器模块:图2 计数器模块上面的模块是由程序实现的程序的代码(见附录),上图中clk是时钟信号,clr是清零信号,ena是使能信号,q就是输出。
输出显示的是0-15这16位的数字。
主要的作用就是读顺序地址的,和后面的那个交织地址能够对应起来。
图3所示的是计数器模块的功能仿真波形:图3 计数器模块的功能仿真波形图3仿真波形中的clk,clr,ena,q,cout与图2中的是一样的。
当clk为时钟信号,clr是复位信号当clr为高电平的时候q的输出就为0,ena为使能信号,cout在q从0到15输出后出现一个高电平,在15的地方显示高电平。
2.选择器模块选择器主要就是起选择作用的,起到了地址过滤的作用,当需要顺序地址的时候计数器就直接读出来送到RAM的总线上去,然后按照输入的正常顺序读出来。
块交织及解交织实验报告
块交织及解交织实验报告一、引言块交织及解交织是一种常见的信息编码技术,用于在传输和存储过程中提高数据可靠性和稳定性。
本实验旨在研究块交织及解交织的原理和应用,并通过实际操作和数据分析来验证其有效性。
二、实验设计1. 实验材料:编码器、解码器、发送信号源、接收信号源。
2. 实验步骤:(1) 将发送信号源的数据输入编码器,进行块交织编码。
(2) 将编码后的数据通过信道传输。
(3) 接收端对传输后的数据进行解交织处理。
(4) 将解交织后的数据输入解码器,进行解码操作。
(5) 对解码后的数据与原始信号进行比较,分析误码率等指标。
三、实验结果1. 编码器设计:编码器采用块交织技术,将输入数据按照一定的块大小进行分块,并按照特定的规则进行交织操作。
交织后的数据可以提高数据的连续性和稳定性,减小传输中的突发错误。
2. 解码器设计:解码器对接收到的数据进行解交织处理,按照与编码器相同的规则进行解交织操作。
解交织后的数据可以恢复出原始信号,提高数据的可靠性和完整性。
3. 数据传输和分析:将编码器输出的数据通过信道传输到接收端,接收端对数据进行解交织处理后输入解码器进行解码。
通过比较解码器输出的数据与原始信号,可以得到误码率等指标,进一步评估块交织及解交织的效果。
四、实验分析通过实验数据的分析,可以得出以下结论:1. 块交织技术可以有效提高数据传输的可靠性和稳定性,减小误码率。
2. 解交织技术可以恢复出原始信号,提高数据的完整性和可靠性。
3. 块交织及解交织的效果与块大小、交织规则等参数有关,需要根据具体情况进行调整和优化。
五、实验总结本实验通过对块交织及解交织的原理和应用进行研究和实际操作,验证了其在数据传输和存储中的有效性。
块交织技术可以提高数据的可靠性和稳定性,解交织技术可以恢复出原始信号。
在实际应用中,可以根据具体情况选择合适的块大小和交织规则,以达到更好的效果。
六、展望块交织及解交织技术在通信和存储领域具有广泛的应用前景。
交织器解交织器设计说明文档
交织器与解交织器的Verilog设计0 引言在数字通信中由于信道固有的噪声特性以及衰落特性,信息在有干扰信道传输时不可避免的会发生差错。
为了提高通信系统信息传输的可靠性,一般采用纠错编码技术来提高通信系统抗干扰能力。
但是当信道发生突发差错时,会造成连续的错误,超过纠错码的纠错能力。
交织技术作为一项改善通信系统性能的方式,将数据按照一定的规则打乱,把原先连续的差错分散开来,使突发性错误转化为随机性错误,能够提高通信系统抗突发差错的能力和降低译码复杂度。
VHDL作为一种硬件设计时采用的标准语言,降低设计FPGA的难度,使整个系统的设计和调试周期缩短。
本设计利用FPGA实现交织,能大大缩减电路的体积,提高电路的稳定性。
1 卷积交织和解交织的原理交织过程可算作一个编码过程,他把经过纠错编码的数据进行一定的排列组合,提高原有纠错编码的纠突发错误的能力。
数字通信中一般采取的同步交织有 2 种:(1) 块交织也叫矩阵行列转置法。
可以表述为一个二维存储器阵列 ( N × B ) 。
交织过程是数据先按行写入,再按列读出;解交织过程则相反,是数据先按列写入,再按行读出。
块交织结构简单, 但数据延时时间长而且所需的存储器比较大。
(2) 卷积交织交织器的输入端的输入符号数据按顺序分别进入 B 条支路延时器, 每一路延时不同的符号周期。
第一路无延时,第二路延时M个符号周期,第三路延时2M个符号周期,…,第B路延时( B - 1 )M 个符号周期。
交织器的输出端按输入端的工作节拍分别同步输出对应支路经延时的数据。
卷积交织每条支路符号数据的延时节拍为 di = ( i - 1)M B , i = 1, 2, …, B 。
解交织器的延时数与交织器相反。
图1 卷积交织器和解交织器原理图在仔细对比块交织和卷积交织两种方法之后,考虑到缩短延时和减小器件体积,小组决定采用卷积交织的方法来设计。
然而实现卷积交织的延时方法有多种,一是采用移位寄存器法,直接利用FIFO实现每条支路的延时,这种方法实现简单,但是当B与M值较大时,需要消耗大量的寄存器(图2所示);二是利用RAM来实现移位寄存器的功能,通过控制读/写地址来实现每条支路延迟。
交织器
基于FPGA的交织器设计与实现3利用FPGA实现交织器交织器的FPGA(Field·Programmable Gate Array )实现主要有2种方法:一种是利用VHDL语言,直接描述交织规则;另一种是采用查表法,实现交织法则.前者是采用VHDL语言直接对要交织的信号行为进行描述,通过设计输入、功能仿真、综合布局布线、时序仿真就可以得到交织器的FPGA实现;后者是直接将交织地址存放在内部RAM上,当要交织时,以顺序地址直接读取交织地址,并作译码输出.2种实现方式各有优点.利用VHDL语言,直接描述交织规则的方式易于实现,占用FPGA片内资源比较少,而且,当用于实现对称交织器时,交织和解交织相同,可以省去解交织的设计过程;当交织规则较复杂时,交织速度较慢,会严重影响编码器和译码器的编译码速率.查表法实现交织速度特别快,不会影响编译码速率;但当交织长度变大时,占用的硬件资源也将会随之增加.实际应用一般用查表法.以CCSDS给出的交织器实现规则为例,采用Matlab计算交织结果,建立交织列表来实现交织器.具体实现方式为:ROM存放交织地址,计数器产生顺序地址,RAM作随机存储器.存储时,需顺序地址,计数器的输出直接送到RAM地址总线,作为数据存储的地址;输出时,需交织地址,计数器的输出直接送到ROM地址总线,再将ROM读出的交织地址作RAM的地址线,从RAM中读出数据.结构框图如图3所示.we为RAM的读写控制线,选择器由we状态选择RAM的读写地址.当we =1时,选择顺序地址,向RAM中写人数据;we=0时,选择交织地址,从RAM中读出数据.仅给出交织深度为16的交织器仿真过程,其他交织器改变交织深度和交织列表即可.仿真程序为:4仿真结果交织器的硬件设计中,重点考虑的是控制信号和地址信号同步的实现.选择Actel公司的Cyclone系列中的EPIC3TIOOC6 FPGA芯片作为目标芯片.该芯片布线能力强,适合电子系统自动化中芯片设计的可编程器件验证;逻辑计算能力强,适合于完成时序较多的逻辑电路.按照图3的结构框图,用VHDL语言实现交织器.其时序关系如图4所示.图中仅给出交织深度为16的交织器仿真结果,其他交织器改变交织深度和交织列表即可.由图4可以看出:输人数据1100100100110110;交织列表:顺序列表变为4,11 ,12,3,2,9,10,1,8,15,16, 7,6,13,14,5;经交织后输出数据为0110100111000011.经检验,交织结果符合交织列表.仿真结果表明:在输人串行数据的码速率不大于223.51 MHz /s时,编码器可以正常工作,功能正确;大于223.51 MHz/s时,编码器内部由于延迟和竞争问题,电路无法正常工作.交织器不仅用于编码器,也用于译码器.译码器中的交织器与编码中的交织器有所不同,编码中的交织器的输入和存储数据的宽度为1 bit,由于译码器大多采用软输入、软输出的译码方式,所以译码数据宽度较大,译码中的交织器的输人和存储数据的宽度与译码数据宽度相同.译码器中还应用了解交织器,其结构与交织器相同,只是交织列表不同.5结语提出了利用FPGA实现交织器的方法,通过对数字系统中常用的交织器的性能仿真分析,证明了交织器对数字通信系统中的重要作用,提出了2种交织器的实现方式,并证明了算法的可行性和有效性,为以后实现完整的Turbo码编译码系统作了技术储备.。
交织器VHDL源程序
交织器VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;USE IEEE.STD_LOGIC_ARITH.all;ENTITY countern ISGENERIC(N:INTEGER:=16);PORT(clr,ena,clk :in STD_LOGIC;q: BUFFER INTEGER RANGE 0 TO n-1 ; --输出顺序地址cout: OUT STD_LOGIC ); --进位信号END countern; ARCHITECTURE rtl OF countern ISBEGINPROCESS(clk,clr)BEGINIF clr='1' THENq<=0;ELSEIF clk='1' AND clk'EVENT THENIF ena='1' THENIF q=q'high THENq<=0;ELSEq<=q+1;END IF;END IF;END IF;END IF;IF q=q'high THENcout<='1';ELSEcout<='0';END IF;END PROCESS;END rtl;--选择器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux2 ISGENERIC(N:INTEGER:=16);port(d0: IN STD_LOGIC_VECTOR(7 DOWNTO 0); d1:IN INTEGER RANGE 0 TO N-1;SEL:IN STD_LOGIC;yout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) END mux2;ARCHITECTURE if_march OF mux2 isBEGINPROCESS(d0,d1,sel)BEGINIF(sel='1')THENyout<=CONV_STD_LOGIC_VECTOR(d1,8); ELSEyout<=d0;END IF;END PROCESS;END if_march;--只读存储器ROM模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rom_16_8 isGENERIC(N:INTEGER:=16);PORT( addr : IN INTEGER RANGE 0 TO N-1;clk: IN STD_LOGIC;data: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END rom_16_8;ARCHITECTURE rtl OF rom_16_8 ISSUBTYPE rom_word IS STD_LOGIC_VECTOR(7 DOWNTO 0); TYPE rom_table IS ARRAY(0 TO 15)OF rom_word; CONSTANt rom:rom_table:=rom_table'(rom_word'("00000000"),rom_word'("00000100"),rom_word'("00001000"),rom_word'("00001100"),rom_word'("00000001"),rom_word'("00000101"),rom_word'("00001001"),rom_word'("00001101"),rom_word'("00000010"),rom_word'("00000110"),rom_word'("00001010"),rom_word'("00001110"),rom_word'("00000011"),rom_word'("00000111"),rom_word'("00001011"),rom_word'("00001111"));PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENdata<=rom(addr);END IF;END PROCESS;END rtl;--读写存储器RAM模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ram_16_8 ISPORT(ad:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --地址线,用来选择读和写单元地址clk:IN STD_LOGIC;di:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --输入数据do:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --输出数据wr_en: IN STD_LOGIC:='0'; --写信号rd_en: IN STD_LOGIC:='0'); --读信号END ram_16_8;ARCHITECTURE rtl OF ram_16_8 ISSUBTYPE ram_word IS STD_LOGIC_VECTOR(7 DOWNTO 0);TYPE ram_table IS ARRAY(0 TO 15) OF ram_word;SIGNAL ram:ram_table:=ram_table'(ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"),ram_word'("00000000"));BEGINPROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENIF rd_en='1' THENdo<=ram(CONV_INTEGER(ad));END IF;IF wr_en='1' THENram(CONV_INTEGER(ad))<=di;END IF;END IF;END PROCESS;END rtl;--交织器顶层模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY top ISGENERIC(N:INTEGER:=16);PORT (clk: IN STD_LOGIC;clr: IN STD_LOGIC;ena: IN STD_LOGIC;di: IN STD_LOGIC_VECTOR(7 DOWNTO 0); do: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);); END top;ARCHITECTURE rtl OF top ISCOMPONENT counternPORT(clr,ena,clk :IN STD_LOGIC;q: BUFFER INTEGER RANGE 0 TO N-1 :=0;cout: OUT STD_LOGIC );END COMPONENT;COMPONENT ROM_16_8PORT(addr : IN INTEGER RANGE 0 TO N-1;clk: IN STD_LOGIC;data: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;COMPONENT mux2PORT( d0: IN STD_LOGIC_VECTOR(7 DOWNTO 0);d1:IN INTEGER RANGE 0 TO N-1;sel:IN STD_LOGIC;yout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT;COMPONENT ram_16_8PORT(ad:IN STD_LOGIC_VECTOR(7 DOWNTO 0);clk:IN STD_LOGIC;di: IN STD_LOGIC_VECTOR(7 DOWNTO 0);do:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); wr_en: IN STD_LOGIC:='0';rd_en: IN STD_LOGIC:='0');END COMPONENT;SIGNAL qs:INTEGER RANGE 0 TO N-1:=0;SIGNAL ds:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL ys:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL cout: STD_LOGIC;SIGNAL wr_en:STD_LOGIC:='0';SIGNAL rd_en:STD_LOGIC:='0';SIGNAL sel: STD_LOGIC:='1';ct:counternPORT MAP(clk=>clk,clr=>clr,ena=>ena,cout=>cout,q=>qs);rom:ROM_16_8PORT MAP(clk=>clk,addr=>qs,data=>ds);mux:mux2PORT MAP(d1=>qs,d0=>ds,sel=>sel,yout=>ys);ram:ram_16_8PORT MAP(clk=>clk,do=>do,di=>di,wr_en=>wr_en,rd_en=>rd_en,ad=>ys);PROCESS(cout)BEGINIF cout'EVENT AND cout='0' THEN sel<=NOT sel;END IF;IF sel='1' THENwr_en<='1';rd_en<='1';END IF;END PROCESS; END rtl;。
一种新Turbo码交织器的VHDL设计
t e d sg i g t i o h u h f c mb n d i tre v r T e a to a d sg e h cr u t o h it r a e h e inn r n f t o g t o o ie n el a e . h u h r h s e i n d t e i i f t e n e l v r a c e
一
种新 T ro码交织器的 VHD ub L设计
熊 兴 隆
f 国 民用 航 空学 院 天 津 市 智 能信 号 与 图 像 处 理 重 点 实验 室 。 津 3 0 0 ) 中 天 0 3 0
摘 要 : 绍了 T ro 介 ub 码和 交织技术 , 分析 了几种 常用交织算法的特点。根据组合 交织器的设计思路 , 出了隔行写入 螺 提
w t v r i p e ne rt i uth rw r ecit n l g a e V 1 i ey h h S e d it a d cr i a ae d sr i a u g ( HD i i uai e ut h g g e c d po n )w t s l o rsl . h m tn s K y w r s it la e ;T r o c d ;v r h h se d i e rt i uth rw r ecit n l g a e V D ) c a n l e o d : e e v r ub o e ey i p e n g e cr i ad a d sr i a u g ( H L ; h n e nr g t a d c e po n
奋 和最 具潜 力的重 大 发展 。 ub T ro码 与 以往所有 编码 不 而 增大 了码 的最 小 自由距 离 。提 高 了纠错 能 力 。交织 ub 同之处 在 于它 巧妙 地将 卷 积 码 和 交织 器 结 合 在 一起 , 器 的设 计 是 T ro码设 计 中的一 个 重要 方 面 ,不 同交 通 过交 织器 的 作用 , 到接 近随机 编 码 的 目的 。同时 , 织 器对 于 T ro码性 能有 着不 同的影 响 。 本文 分析 比 达 ub
交织器
《数字系统设计》课程设计题目:交织器解交织器一、实验任务卷积交织: 交织深度I=12 ,形成相互交迭的误码保护数据包,以抵抗信道中突发的干扰。
二、实验要求1. 请设计一个交织器和解交织器,完成二进制比特流的交织/ 解交织功能。
2. 设计测试基准,验证设计的功能是否正确。
三、设计卷积交织器目的在数字传输系统中,因为存在噪声,信道衰落等干扰因素,会使传输的信号发生错误,产生误码。
虽然数字信号的传输为了防止误码而会进行信道编码,增加传输码的冗余,例如增加监督位等来克服信号在信道传输过程中的错误,但这种检错纠错能力是有限的。
例如当出现突发错误,出现大片误码时,这时信道的纠错是无能为力的。
而卷积交织器可以将原来的信息码打乱,这时尽管出现大面积突发性错误,这些可以通过解交织器来进行分散,从而将大面积的错误较为平均地分散到不同的码段,利于信道纠错的实现。
四、卷积交织的原理卷积交织的原理其实是利用了延时的原理。
例如总延时是T,交织器延时t1,解交织器延时为t2,则有T=t1+t2.本次设计的交织器的交织深度为12,故交织器总共有12路,要进行卷积处理的数据分别循环的进入每一路,每一路延时不同的时间而后输出。
不难想象,如果每一路都延时相同的时间,输入序列肯定跟输出序列一模一样,但交织器因为每一路延时的时间不同,从而将序列打乱了,看上去会很乱,例如你输入1,2,3,4…….20,输出就是1,0,0,0,…..13…….25…..。
那么经过交织器处理后打乱的数据如何恢复原状呢?很简单,因为每一个数据的总延时都是T,如果一个数据A在交织器中延时了t1,那么数据A只需在解交织器中延时T-t1即可。
五、设计过程1.设计思路以上讨论的是交织器与解交织器的算法,那么在硬件电路上如何实现呢?由上讨论,交织器与解交织器都是利用了延时来实现的,而在硬件上实现延时一种很自然的想法就是利用移位寄存器来实现,延时T只需要T级的移位寄存器,在每个时钟的到来,将数据移位,例如数据‘1’经过5级的移位寄存器,经过5个时钟后,数据就经历了寄存器每个寄存单元而输出。
EDA课程设计
EDA应用技术课程设计设计题目:基于VHDL的交织编码器设计院系:电子与信息工程学院班级:电子11-2班姓名:学号:指导教师:一、一、设计任务和要求1.任务:基于VHDL的交织编码器设计2.要求:要有完整的设计过程与代码,清楚的说明其原理二、题目分析交织编码的目的是把一个较长的突发差错离散成随机差错,再用纠正随机差错的编码(FEC)技术消除随机差错。
交织深度越大,则离散度越大,抗突发差错能力也就越强。
但交织深度越大,交织编码处理时间越长,从而造成数据传输时延增大,也就是说,交织编码是以时间为代价的。
因此,交织编码属于时间隐分集。
在实际移动通信环境下的衰落,将造成数字信号传输的突发性差错。
利用交织编码技术可离散并纠正这种突发性差错,改善移动通信的传输特性。
三、设计过程及原理1.交织编码器工作原理信道编码中采用交织技术,可打乱码字比特之间的相关性,将信道中传输过程中的成群突发错误转换为随机错误,从而提高整个通信系统的可靠性。
交织编码根据交织方式的不同,可分为线性交织、卷积交织和伪随机交织。
其中线性交织编码是一种比较常见的形式。
所谓线性交织编码器,是指把纠错编码器输出信号均匀分成m个码组,每个码组由n段数据构成,这样就构成一个n×m的矩阵。
这里把这个矩阵称为交织矩阵。
如图1所示,数据以a11,a12,…,a1n,a21,a22,…,a2n,…,aij,…,am1,am2,…,amn(i=1,2,…,m;j=1,2,…,n)的顺序进入交织矩阵,交织处理后以a11,n21,…,am1,a12,a22,…,am2,…,a1n,a2n,…,amn的顺序从交织矩阵中送出,这样就完成对数据的交织编码。
还可以按照其他顺序从交织矩阵中读出数据,不管采用哪种方式,其最终目的都是把输入数据的次序打乱。
如果aij只包含1个数据比特,称为按比特交织;如果aij包含多个数据比特,则称为按字交织。
接收端的交织译码同交织编码过程相类似。
利用FPGA技术实现数字通信中的交织器和解交织器
-) 中 构 造 计 数 器 的 方 式 来 直 接 产 生 。 下 面 介 绍 一 下 地 址 序 列 的 产 生 方 法 。 将 ## 位 地 址 分 成 两 部 分 : 高 + 位和底 < 位, 在物理实现上构造 + 位和 < 位计数器各
一个, 然后级联起来。 对于交织器的读地址序列, 具体 实现时, 用 数 据 输 入 时 钟 18=80>?7@ 驱 动 + 位 计 数 器 计 数, + 位计数器记满同步清 " 时产生脉冲驱动 < 位计 数器计数, < 位 计 数 器 计 到 !#< 后 同 步 清 " 。交 织 器 的 写地址序列产生稍复杂, 但同样可用两计数器的级联 产生。 解交织器的最小时延问器, 数据缓冲区的读相 对于写必须有一个延时, 这个延时即为交织器和解交 织器的时延。为了尽量减小系统的时延, 应使交织器 和解交织器的时延降至最小。 则每个缓冲区 首先分析交织器, 设数据周期为 !, 单 元 的 读 或 写 地 址 的 保 持 时 间 也 为 ! 。考 察 图 ! 模 型 中 从 第 A 行 的 交 错 后 的 第 一 个 元 素 ) 到 第 A B# 行 的 元素 * 所用的时间, 若 按 写 操 作 进 行 需 !#C D ! , 按读 操 作 进 行 需 E !< D < B # F ! G !!5 ! H !#C ! 。 这 表 明 若 读 、 写 同时从 " 地址开始, 则缓冲区那的每个存储单元的写 操作都在读操作之前, 从而保证每个读出的数据都有 效。这里对于交错所产生的左下角区域元素, 交织器
《电子技术应用》!""" 年第 #" 期
四通工控 %&’ 软起动器经销商((#() )$)$)#** )$)$)#*+
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数字系统设计》课程设计
学院:电子与信息学院
专业班级:通信工程4班
学号:201130301443
姓名:李腾辉(队长)
李怡龙黄永结罗依
课设名称:卷积交织器与解交织器的VHDL
设计
日期:2013.12.18
卷积交织器与解交织器的VHDL设计
和FPGA实现
李腾辉、李怡龙、黄永结、罗依
(华南理工大学电子与信息学院信息工程2011级)
0引言
在数字通信系统中,传输信道因受到各种干扰而性能下降,使传输的信号受到影响而出错。
为了提高数据的抗干扰能力和传输的可靠性,一般对数据进行纠错编码。
纠错编码能纠正信道中发生的随机离散错误,但对于由脉冲干扰和信道衰落等引起的突发错误或群发错误,将超过纠错码的纠错能力,交织技术作为一项改善通信系统性能的方式,将数据按照一定的规则打乱,把原先连续的差错分散开来,使突发性错误转化为随机性错误,能够提高通信系统抗突发差错的能力和降低译码复杂度。
VHDL作为一种硬件设计时采用的标准语言,降低设计FPGA的难度,使整个系统的设计和调试周期缩短。
本设计利用FPGA实现交织,能大大缩减电路的体积,提高电路的稳定性。
1卷积交织和解交织的原理
交织过程可算作一个编码过程,他把经过纠错编码的数据进行一定的排列组合,提高原有纠错编码的纠突发错误的能力。
数字通信中一般采取的同步交织有2种:
(1)块交织
也叫矩阵行列转置法。
可以表述为一个二维存储器阵列(N×B)。
交织过程是数据先按行写入,再按列读出;解交织过程则相反,是数据先按列写入,再按行读出。
块交织结构简单,但数据延时时间长而且所需的存储器比较大。
(2)卷积交织
交织器的输入端的输入符号数据按顺序分别进入B条支路延时器,每一路延时不同的符号周期。
第一路无延时,第二路延时M个符号周期,第三路延时2M个符号周期,…,第B路延时(B-1)M个符号周期。
交织器的输出端按输入端的工作节拍分别同步输出对应支路经延时的数据。
卷积交织每条支路符号数据的延时节拍为di=(i-1)M B,i=1,
2,…,B。
解交织器的延时数与交织器相反。
图1卷积交织器和解交织器原理图
在仔细对比块交织和卷积交织两种方法之后,考虑到缩短延时和减小器件体积,小组决定采用卷积交织的方法来设计。
然而实现卷积交织的延时方法有多种,一是采用移位寄存器法,直接利用FIFO实现每条支路的延时,这种方法实现简单,但是当B与M值较大时,需要消耗大量的寄存器(图2所示);二是利用RAM来实现移位寄存器的功能,通过控制读/写地址来实现每条支路延迟。
在做课程设计的过程,我们考虑过第一种方法,因为其设计思路和做法都相对简单,但是当需要较大的延时数时,移位寄存器变得很大,占用了大量的编译时间和芯片空间,实际中并不可取。
我们最终采用了RAM来实现移位,合理地设计读写地址按规律变化,即可实现所要的延时。
下面将阐述设计细节。
2卷积交织器和解交织器的VHDL设计
设计要求,交织深度B=12,M=17,即有12条数据通路。
本小组采用RAM来实现输入数据的时延,按照一定的读写地址规律同时读写RAM中
的存储单元。
实现框图如图4
其中输入的数据为16位的顺序循环序列,循环范围0--1000,方便观察仿真结果;读写使能控制信号受时钟的上升沿控制;Flag端口是通道0的标志,使输入数据直接输出。
本设计中的关键点是RAM地址的分配和读写地址的产生。
所谓RAM 移位法是把RAM地址分给12支路,每一支路对RAM存储单元的读写实现类似于对移位寄存器的操作。
为了使所用资源最优化,采用电路计算得到读写地址。
交织器各通道的写地址如下图所示,而读地址则在写地址的数值上加1,通过计算可以知道,第0通道无延时;第1通道延时17*1个时钟周期;第2通道延时17*2个时钟周期......依此类推,第11通道延时17*11个时钟周期。
总共所需存储单元数为1+18+....+188=1134,相应的要用到地址总线为11b。
也就是说要用到2k的RAM。
图5.交织器写地址
总结为数学计算公式,设第i通道的基地址为bi(base address),尾地址为ci,各通道的变址为ai,则RAM的读写地址的变化规律为:
第i通道读地址:rd_add=ai+bi;
第i通道写地址:wr_add=ai+bi-1;当ai≠0
wr_add=ci;当ai=0;
解交织器则与此相反,RAM写地址如下
图6.解交织器写地址
生成上述的读写地址的实现框图如下所示
图7.读写地址产生的逻辑框图
以上所述讲解了读写生成器的实现思路,可以说成功实现这个模块,交织器就基本做完了。
下面再简单阐述一下RAM的实现过程,原本可以使用Quartus自带的RAM模块,但考虑到课程设计的学习性质,决定自己实现一个RAM。
从上述分析可知,我们需要2个2K*16的RAM模块,一个用于存储交织器输出的数据,一个用于存储解交织器的输出数据。
实现的方法也很简单,构造一个2048*16的二维数组,16位的地址通过conv_integer从std_logic_vector[15..0]转为integer,作为数组的下标,这样就把数据存入了数组对应的存储单元,实现了RAM的功能。
最后从全局的角度看下我们设计的整个交织\解交织的系统,系统框图
如下
3设计仿真结果
通过”seq.vhd”、”w_r_addcreat.vhd”、”ram.vhd”、”decode_add_creat.vhd”这4个文件生成5个模块电路,在quartus 中连接好后,再将图形文件转化成一个vhd 文件”inter.vhd”,然后在ModelSim 中进行仿真,仿真波形如下所示
图9.交织器输出读、写地址
从仿真结果可以看到交织器写地址依次输出0、1、19、54、106、175、261、364、484、621、775、946、0、2、20、55......一直这样循环重复下去,而读地址则滞后一位(第0通道除外)
,与设计初衷一致。
图8.
交织\解交织系统总体框图
图10.0-1000顺序序列发生
上图为顺序序列的仿真结果,可以看到,seq_out输出从0数到1000反复循环,这样设置的目的是便宜观察解交织器的输出结果,可以推想到若输入的序列是随机的,解交织器也可以同样地还原出来。
图11.解交织器输出读、写地址
从仿真结果可以看到解交织器写地址依次输出0、188、359、513、650、770、873、959、1028、1080、1115、1133、1、189....一直这样循环重复下去,而读地址则滞后一位,与设计初衷一致。
图12.交织\解交织数据输出(初始图)
图13.交织\解交织数据输出(解交织有数据输出)
从交织\解交织输出数据波形图可以看出,在交织器RAM数据未填充完成前,解交织出的数据都是随机的,然后在延时12*(12-1)*17=2244个时钟周期之后,解交织出正确的数据。
仿真结果与设计初衷一致。
至此,设计和仿真都完成了。
4课程设计总结
经过小组队长的组织协调和各成员积极配合,我们的课程设计在进行了3天的努力攻关之后,终于圆满地达到了所有技术指标。
我们从不知交织器为何物到最终设计出来,期间遇到过无数的挑战和烦恼。
举个例子,在写vhd程序的时候,由于分不清variable和signal的区别,我在定义的时候都是随便用的,结果就是编译虽然通过了,但仿真时出现许多莫名其妙的时序错误,本来判断好一个信号将被赋值却不知为何要等到下个时钟才能做出判断,这个问题曾纠结了我们队半天之久。
由于不知道问题出在哪,队长决定从头把VHDL的课本看一遍,在翻到讲述信号的章节时,一句话让队长我恍然大悟,”信号幅值有延迟,信号的赋值在进程结束后才生效”,我欣喜若狂,立马把程序重新写了一遍,顺利地解决了这个时序错乱的问题。
还有我在用Quartus编译时发现他对RAM的编译速度实在太慢,在查询相关资料后发现Quartus的编译过程中还要对程序进行综合,生成各种门电路,RAM由于写得较大,门电路很多,编译效率自然很低。
由于我们现在只处于仿真的初级过程,于是决定更换ModelSim进行编译,果不其然,速度快了很多。
后期我们又联合地使用两个工具,利用Quartus的强大自动生成vhd文件,画图等,利用ModelSim强大的仿真能力进行功能仿真,很好地运用了Altera公司的两大利器。
像这样的遇到问题-->解决问题的过程还有很多,但不管怎样,我们终于克服了重重困难障碍,完美实现了交织\解交织器的功能,对数字系统设计的流程有了进一步的了解。
通过这一次VHDL课程设计,我们提高了查阅资料、小组合作分工、共同排艰克难的能力,将课上所学知识运用到了实际,可谓收获良多。
最后感谢姜老师和实验课师兄的指导帮助,感谢你们的辛勤付出,希望我们小组的课程设计可以得到你们的认可,谢谢。
附上完整工程下载地址:
/s/1eoP1W(密码:队长姓名小写拼音)。