- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)
j=0;
else
j=j+1;
if(!fla
文档评论(0)