通信系统中串行数据交织器的设计.docx
- 文档编号:8996396
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:12
- 大小:131.42KB
通信系统中串行数据交织器的设计.docx
《通信系统中串行数据交织器的设计.docx》由会员分享,可在线阅读,更多相关《通信系统中串行数据交织器的设计.docx(12页珍藏版)》请在冰豆网上搜索。
通信系统中串行数据交织器的设计
1、设计原理
1、交织器原理
交织器是通信编码中抗突发干扰的一种重要手段,将突发干扰产生的分布集中的误码分散到信息数据中,以便采用纠错编码的方法进行纠错。
本项目设计一个行列交织器,其框架图图如图1所示,PN码发生器模拟数据源产生串行数据,按行写入一m行n列的RAM中,写满后按列读出。
为避免数据丢失,需使用两个这样的RAM交替读写。
这里统一m和n都选4,即两个4╳4RAM。
图1串行数据交织器整体框架图
2、程序设计原理
本实验制作一个通信系统中的串行数据交织器,其设计原理图如图1所示。
程序整体由三个子模块构成:
100KHz分频模块,利用FPGA上50MHz的晶振分频得到,作为产生伪随机码和读写RAM的时钟;伪随机码发生器模块,以16个数为一周期,模拟数据源产生串行数据;读写RAM模块,按行写入一4行4列的RAM中,写满后按列读出。
为避免数据丢失,需使用两个这样的RAM交替读写,从而实现交织。
电路图如图2所示:
图2电路原理图
二、源程序代码
//顶层模块
moduleinterleaver(endout,out,clk_50M);
inputclk_50M;
output[0:
0]endout,out;
wireclk;
wire[3:
0]k;
wire[0:
0]pn16;
dividerU1(clk,clk_50M);
pnU2(clk,pn16);
arrayU3(endout,out,clk,pn16,k);
endmodule
//分频器(50MHz--100KHz)
moduledivider(clk,clk_50M);
outputclk;
inputclk_50M;
regclk;
reg[23:
0]cnt;
always@(posedgeclk_50M)
begin
if(cnt==249)
begin
cnt<=0;
clk<=~clk;
end
else
cnt<=cnt+1;//计数
end
endmodule
//pn16(伪随机码发生器,以16个数为一周期)
modulepn(clk,pn16);
inputclk;
output[0:
0]pn16;
regq0;
regq1;
regq2;
regq3;
wireset1;
wireSYNTHESIZED_WIRE_0;
wireSYNTHESIZED_WIRE_1;
assignSYNTHESIZED_WIRE_1=0;
always@(posedgeclk)
begin
if(!
set1)
begin
q0=1;
end
else
begin
q0=SYNTHESIZED_WIRE_0;
end
end
always@(posedgeclk)
begin
begin
q1=q0;
end
end
always@(posedgeclk)
begin
begin
q2=q1;
end
end
always@(posedgeclk)
begin
begin
q3=q2;
end
end
assignSYNTHESIZED_WIRE_0=q3^q2;
assignset1=q0|q2|q1|q3|SYNTHESIZED_WIRE_1;
assignpn16=q3;
endmodule
//array(使用两个数组,作为两个4╳4RAM)
modulearray(endout,out,clk,pn16,k);
inputclk;
input[0:
0]pn16;
output[0:
0]out,endout;
output[3:
0]k;
reg[3:
0]k,i;
reg[0:
0]out,endout;
regarray1[15:
0];
regarray2[15:
0];
reg[1:
0]j,flag;
initial
begin
i<=0;
j<=0;
k<=-1;
flag<=0;
end
always@(posedgeclk)
begin
if(k==15)
begin
k<=0;
end
else
k<=k+1;
if(i==15)//用循环产生4╳4数组,即4╳4RAM
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];
elseif(i<8)
endout<=array2[1+4*j];
elseif(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];
elseif(i<8)
endout<=array1[1+4*j];
elseif(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输出为:
00010011010111100010011010111100,即
00010010
00110110
01011011
11101100
交织后的endout输出为:
010011010111100011010111100010,即
00010011
00110101
01011110
11100010
如此可见,endout实现了按列读出,即设计实现了交织功能。
四、实验结果
利用示波器观察交织前后的波形,如图7所示:
图7实验结果
五、实验总结
本实验内容为制作一个通信系统中串行数据交织器。
由于对Verilog和QuartusII软件、ModuleSim仿真软件的使用较熟悉,对用VerilogHDL语言来编写程序较熟练,因此在明白实验原理后,设计的实现就感觉较上一个实验简单。
但是,此次实验也并不是如鱼得水的。
实验过程中也遇到了一些小问题。
起初,对此次交织器的原理不是很清楚,对其程序实现方案也不清晰。
后来认真听了老师的解说,自己课后也在图书馆查阅了相关资料。
经过自己的思考,最终明白了整个电路的原理。
第二,刚开始搭建好电路进行观察时,示波器没有输出正确的波形。
后面把DE2板和示波器表笔换了,波形就出来了,并且同时输出了交织前和交织后的波形,说明本次设计取得了成功。
通过自己课下的努力和钻研,最终较快较好地成功完成了实验,这给了我极大的兴趣和信心。
从对交织器毫无预先知识的状态,到一步一步查找资料并尝试连接,确实在课下花了很多时间和心思。
但看着自己制作的成果,深感一切都值得。
本次实验让我深深体会到,单纯学习理论知识是不行的,只有勤于动手,将所学的知识运用到实际当中,才能真正理解和掌握知识。
在接下去的学习中,我将不断完善知识面,设计更为复杂的电路。
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 系统 串行 数据 交织 设计