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

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
通信系统中串行数据交织器的设计

设计原理 1、交织器原理 交织器是通信编码中抗突发干扰的一种重要手段,将突发干扰产生的分布集中的误码分散到信息数据中,以便采用纠错编码的方法进行纠错。本项目设计一个行列交织器,其框架图图如图1所示,PN码发生器模拟数据源产生串行数据,按行写入一m行n列的RAM中,写满后按列读出。为避免数据丢失,需使用两个这样的RAM交替读写。这里统一m和n都选4,即两个4╳4 RAM。 图1 串行数据交织器整体框架图 程序设计原理 本实验制作一个通信系统中的串行数据交织器,其设计原理图如图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)

文档评论(0)

000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档