FPGA实现多进制FSK的调制解调Word文件下载.docx
- 文档编号:14857420
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:12
- 大小:16.49KB
FPGA实现多进制FSK的调制解调Word文件下载.docx
《FPGA实现多进制FSK的调制解调Word文件下载.docx》由会员分享,可在线阅读,更多相关《FPGA实现多进制FSK的调制解调Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
modulediv16(
reg[3:
div=0;
divout=div[3];
//4bit计数器,实现16分频
//该模块为64分频器,降低时钟速率
modulediv64(
//输入输出端口列表
//输入输出端口说明
reg[5:
//数据类型定义
divout=div[5];
//6bit计数器,用作分频
//该模块实现128分频
modulediv128(
reg[6:
divout=div[6];
//7bit计数器,实现128分频
//该模块实现1024分频器
modulediv1024(
clk_m);
outputclk_m;
//端口定义
reg[9:
regclk_m;
clk_m=div[9];
//10bit计数器,实现1024分频
//该模块为数字锁相环
moduledpll(
clk,//clock
rzcd,//codeinputdoubleedgedetection
bsyn);
//lockedclock
inputclk;
inputrzcd;
outputbsyn;
regbps;
regbsyn;
reg[1:
0]pre;
//edgedetection
0]preset;
//countsetting
0]count;
//count
///////////////////////////////////////////////////////
//edgedetection
pre[1]=pre[0];
pre[0]=rzcd;
if(pre==2'
b01||pre==2'
b10)
bps=1;
else
bps=0;
//formbitsyn-pluse
always@(posedgeclk)begin
if(count==0)
count=preset;
count=count-1;
if(count<
=11&
count>
=4)
bsyn=1;
bsyn=0;
//modifypresetvalue
if(bps==1)
if(count<
'
b0100)
preset='
b1001;
elseif(count>
b0111;
elseif(count=='
b1000;
Endmodule
//该模块产生f1载波
modulef1_zaibo(
f1,
out);
inputf1;
output[7:
0]out;
reg[7:
0]count;
0]q1;
initial
count=0;
always@(posedgef1)
count=count+1;
out=q1[7:
0];
//4bit计数器,产生rom表地址
rom16
U1(.address(count[3:
0]),
.inclock(f1),
.q(q1));
//调用rom表,产生载波
//该模块产生f2载波
modulef2_zaibo(
f2,
inputf2;
0]q2;
always@(posedgef2)
out=q2[7:
.inclock(f2),
.q(q2));
//该模块实现低通滤波
modulelpf(clk,in,out);
inputin;
outputout;
reg[16:
0]q;
regout;
reg[4:
0]add;
q[16:
1]=q[15:
q[0]=in;
add=q[0]+q[1]+q[2]+q[3]+q[4]+q[5]+q[6]+q[7]+q[8]+q[9]+q[10]+q[11]+q[12]+q[13]+q[14]+q[15]+q[16];
//做相关运算
if(add<
17)
out=0;
//滤波
else
out=1;
//该模块实现5阶伪随机序列信号
modulem5
(
mout);
outputmout;
0]cnt;
regmout;
wire[4:
0]d;
assignd[3:
0]=cnt[4:
1];
//赋值语句,将寄存器输出赋值给d触发器输入
assignd[4]=cnt[2]^cnt[0];
//赋值语句,实现生成多项式g(x)=x^5+x^2+1
parametermo=5'
b10000;
//参数定义
if(cnt==0)
cnt=mo;
//避免全零
cnt[4:
0]=d[4:
//5阶移位寄存器
mout=cnt[0];
//该模块对载波f1和载波f2进行选择
modulemux(q1,q2,out,m);
input[7:
inputm;
always@(q1orq2)
case({m})
1'
b1:
b0:
//2选1数据选择器
endcase
//该模块完成A/D采样
modulemx7821(clk,
din,
dout,
rd);
0]din;
0]dout;
outputrd;
regrd;
0]cot;
wire[3:
assigncount=cot[3:
//赋值语句
cot=cot+1;
//实现16进制计数器
if(count==0||count==1||count==2||count==3||count==4||count==5||count==6||count==7)
begin
rd=1;
//根据A/D时序图,产生读信号,送给A/D芯片
end
rd=0;
if(count>
=12)
dout=din;
//根据A/D时序图,在后4个时钟A/D芯片输出8bit数据
//该模块对输出码元进行判决,得到最后的输出数据
modulepj(clk,in,out);
always@(negedgeclk)
out=in;
//按符号数据输出
//该模块实现脉冲展宽
modulepulse(clk,in,out);
reg[15:
always@(posedgeclk)
q[15:
1]=q[14:
if(q[15:
0]==0)
out=0;
out=1;
//脉冲展宽16个输入时钟周期
//rom表,调用载波采样点,一个载波周期采样16个点
modulerom16(
address,
inclock,
q);
input[3:
0]address;
inputinclock;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 实现 多进制 FSK 调制 解调
![提示](https://static.bdocx.com/images/bang_tan.gif)