收藏 分销(赏)

通信系统中串行数据交织器的设计.doc

上传人:w****g 文档编号:10974243 上传时间:2025-06-24 格式:DOC 页数:14 大小:2.81MB 下载积分:8 金币
下载 相关 举报
通信系统中串行数据交织器的设计.doc_第1页
第1页 / 共14页
通信系统中串行数据交织器的设计.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
通信系统中串行数据交织器的设计 一、 设计原理 1、交织器原理 交织器是通信编码中抗突发干扰的一种重要手段,将突发干扰产生的分布集中的误码分散到信息数据中,以便采用纠错编码的方法进行纠错。本项目设计一个行列交织器,其框架图图如图1所示,PN码发生器模拟数据源产生串行数据,按行写入一m行n列的RAM中,写满后按列读出。为避免数据丢失,需使用两个这样的RAM交替读写。这里统一m和n都选4,即两个4╳4 RAM。 图1 串行数据交织器整体框架图 2、 程序设计原理 本实验制作一个通信系统中的串行数据交织器,其设计原理图如图1所示。程序整体由三个子模块构成:100KHz分频模块,利用FPGA上50MHz的晶振分频得到,作为产生伪随机码和读写RAM的时钟;伪随机码发生器模块,以16个数为一周期,模拟数据源产生串行数据;读写RAM模块,按行写入一4行4列的RAM中,写满后按列读出。为避免数据丢失,需使用两个这样的RAM交替读写,从而实现交织。电路图如图2所示: 图2 电路原理图 二、源程序代码 //顶层模块 module interleaver(endout,out,clk_50M); input clk_50M; output[0:0] endout,out; wire clk; wire[3:0] k; wire[0:0] pn16; divider U1(clk,clk_50M); pn U2(clk,pn16); array U3(endout,out,clk,pn16,k); endmodule //分频器 (50MHz--100KHz) module divider(clk,clk_50M); output clk; input clk_50M; reg clk; reg[23:0] cnt; always @(posedge clk_50M) begin if(cnt==249) begin cnt<=0; clk<=~clk; end else cnt<=cnt+1; //计数 end endmodule //pn16(伪随机码发生器,以16个数为一周期) module pn(clk,pn16); input clk; output[0:0] pn16; reg q0; reg q1; reg q2; reg q3; wire set1; wire SYNTHESIZED_WIRE_0; wire SYNTHESIZED_WIRE_1; assign SYNTHESIZED_WIRE_1 = 0; always@(posedge clk ) begin if (!set1) begin q0 = 1; end else begin q0 = SYNTHESIZED_WIRE_0; end end always@(posedge clk) begin begin q1 = q0; end end always@(posedge clk) begin begin q2 = q1; end end always@(posedge clk) begin begin q3 = q2; end end assign SYNTHESIZED_WIRE_0 = q3 ^ q2; assign set1 = q0 | q2 | q1 | q3 | SYNTHESIZED_WIRE_1; assign pn16 = q3; endmodule //array(使用两个数组,作为两个4╳4RAM) module array(endout,out,clk,pn16,k); input clk; input[0:0] pn16; output[0:0] out,endout; output[3:0] k; reg[3:0] k,i; reg[0:0] out,endout; reg array1[15:0]; reg array2[15:0]; reg[1:0] j,flag; initial begin i<=0; j<=0; k<=-1; flag<=0; end always@(posedge clk) begin if(k==15) begin k<=0; end else k<=k+1; if(i==15) //用循环产生4╳4数组,即4╳4 RAM begin i<=0; flag=~flag; end else i<=i+1; if(j==3) j<=0; else j<=j+1; if(!flag) begin array1[i]<=pn16; //伪随机码写入array1 out<=array2[i]; //按行读出array2中的数据给out(未交织) if(i<4) //按列读出array2中的数据给endout(交织后的) endout<=array2[0+4*j]; else if(i<8) endout<=array2[1+4*j]; else if(i<12) endout<=array2[2+4*j]; else endout<=array2[3+4*j]; end else begin array2[i]<=pn16; //伪随机码写入array2 out<=array1[i]; //按行读出array1中的数据给out(未交织) if(i<4) //按列读出array1中的数据给endout(交织后的) endout<=array1[0+4*j]; else if(i<8) endout<=array1[1+4*j]; else if(i<12) endout<=array1[2+4*j]; else endout<=array1[3+4*j]; end end endmodule 三、仿真结果 1、分屏器模块仿真结果如图3所示: 图3 分屏器模块仿真结果 2、伪随机码发生器模块仿真结果如图4所示: 图4 伪随机码发生器模块仿真结果 3、 最终仿真输出结果如图5、图6所示: 图5 第一个周期 图6 最终输出结果 仿真结果分析: 1、 如图5所示,在第一个循环周期,伪随机码写入array1,同时按行读出array2到out,按列读出array2到endout,但由于此时array2里面的单元都为0,所以在第一个周期里,输出out(未交织)和endout(交织后)都为0。 2、 如图6所示,结果为实现了交织功能。 未交织的out输出为: 0001 0011 0101 1110 0010 0110 1011 1100,即 0 0 0 1 0 0 1 0 0 0 1 1 0 1 1 0 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 交织后的endout输出为: 01 0011 0101 1110 0011 0101 1110 0010 ,即 0 0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 如此可见,endout实现了按列读出,即设计实现了交织功能。 四、实验结果 利用示波器观察交织前后的波形,如图7所示: 图7 实验结果 五、实验总结 本实验内容为制作一个通信系统中串行数据交织器。由于对Verilog和Quartus II 软件、ModuleSim仿真软件的使用较熟悉,对用Verilog HDL语言来编写程序较熟练,因此在明白实验原理后,设计的实现就感觉较上一个实验简单。 但是,此次实验也并不是如鱼得水的。实验过程中也遇到了一些小问题。起初,对此次交织器的原理不是很清楚,对其程序实现方案也不清晰。后来认真听了老师的解说,自己课后也在图书馆查阅了相关资料。经过自己的思考,最终明白了整个电路的原理。第二,刚开始搭建好电路进行观察时,示波器没有输出正确的波形。后面把DE2板和示波器表笔换了,波形就出来了,并且同时输出了交织前和交织后的波形,说明本次设计取得了成功。 通过自己课下的努力和钻研,最终较快较好地成功完成了实验,这给了我极大的兴趣和信心。从对交织器毫无预先知识的状态,到一步一步查找资料并尝试连接,确实在课下花了很多时间和心思。但看着自己制作的成果,深感一切都值得。本次实验让我深深体会到,单纯学习理论知识是不行的,只有勤于动手,将所学的知识运用到实际当中,才能真正理解和掌握知识。在接下去的学习中,我将不断完善知识面,设计更为复杂的电路。 14 / 14
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服