实验报告 基于FPGA的2FSK调制器的实现.docx
《实验报告 基于FPGA的2FSK调制器的实现.docx》由会员分享,可在线阅读,更多相关《实验报告 基于FPGA的2FSK调制器的实现.docx(15页珍藏版)》请在冰点文库上搜索。
实验报告基于FPGA的2FSK调制器的实现
一、设计原理
1、2FSK调制原理
2FSK信号是用载波频率的变化来表征被传信息的状态的,被调载波的频率随二进制序列0、1状态而变化,即载频为
时代表传0,载频为
时代表传1。
显然,2FSK信号完全可以看成两个分别以
和
为载频、以
和
为被传二进制序列的两种2ASK信号的合成。
2FSK信号的典型时域波形如图1所示,
图12FSK信号的典型时域波形
其一般时域数学表达式为
(10-1)
式中,
,
,
是
的反码,即
2、用FPGA实现2FSK调制器的方案
采用键控法实现2FSK,功能模块设计如图2所示。
图2用FPGA实现2FSK调制器方案
通过不同的分频器,产生频率分别为f1和f2的基频。
基带信号为“1”时,频率f1的信号通过;当基带信号为“0”时,频率f2的信号通过。
f1和f2作为正弦表的地址发生器的时钟,正弦表输出正弦波的样点数据,经过D/A数模转换,得到连续的2FSK信号。
3、程序设计原理
本实验制作一个基于FPGA的2FSK调制器,其设计原理图如图2所示。
程序整体由四个子模块构成:
正弦波形模块,采用64个点作为一个波形的数据周期,即正弦波的一个周期的波形采样为64个点;100KHz分频模块,利用FPGA上50MHz的晶振分频得到,作为正弦波形的频率f1;400KHz分频模块,利用FPGA上50MHz的晶振分频得到,作为正弦波形信号的频率f2;1Hz分频模块,利用PGA上27MHz的晶振分频得到,作为频率f1或f2的选择信号。
电路图如图3所示:
图3电路原理图
二、源程序代码
//顶层模块
moduleFSK(clk_50M,clk_27M,reset,sin_out);
inputclk_50M,clk_27M,reset;
output[7:
0]sin_out;
wireclk_100K,clk_400K,clk,flag;
divider1U1(clk_100K,reset,clk_50M);
divider2U2(clk_400K,reset,clk_50M);
select_clkU3(clk,flag,reset,clk_27M,clk_100K,clk_400K);
sinU4(clk,reset,sin_out);
endmodule
//分频器1f1(100KHz)
moduledivider1(clk_100K,reset,clk_50M);
outputclk_100K;
inputreset,clk_50M;
regclk_100K;
reg[23:
0]cnt;
always@(posedgeclk_50M)
begin
if(reset)
begin
cnt<=0;//同步复位
clk_100K<=0;
end
elseif(cnt==249)
begin
cnt<=0;
clk_100K<=~clk_100K;
end
else
cnt<=cnt+1;//计数
end
endmodule
//分屏器2f2(400kHz)
moduledivider2(clk_400K,reset,clk_50M);
outputclk_400K;
inputreset,clk_50M;
regclk_400K;
reg[23:
0]cnt;
always@(posedgeclk_50M)
begin
if(reset)
begin
cnt<=0;//同步复位
clk_400K<=0;
end
elseif(cnt==42)
begin
cnt<=0;
clk_400K<=~clk_400K;
end
else
cnt<=cnt+1;//计数
end
endmodule
//分屏器3(1Hz,用来选频)
moduleselect_clk(clk,flag,reset,clk_27M,clk_100K,clk_400K);
inputclk_100K,clk_400K,clk_27M,reset;
outputclk,flag;
regclk,flag;
reg[23:
0]cnt;
always@(posedgeclk_27M)
begin
if(reset)
begin
cnt<=0;//同步复位
flag<=0;
end
elseif(cnt==13499999)
begin
cnt<=0;
flag<=~flag;
end
else
cnt<=cnt+1;//计数
case(flag)
0:
clk<=clk_100K;//用来选择正弦信号的频率
1:
clk<=clk_400K;
endcase
end
endmodule
//正弦波形模块
modulesin(clk,reset,sin_out);
inputclk,reset;
output[7:
0]sin_out;
reg[7:
0]sin_out;
reg[6:
0]num;
always@(posedgeclkorposedgereset)
begin
if(reset)
sin_out<=0;
elseif(num==63)
num<=0;
else
num<=num+1;
case(num)
0:
sin_out<=255;
1:
sin_out<=254;
2:
sin_out<=252;
3:
sin_out<=249;
4:
sin_out<=245;
5:
sin_out<=239;
6:
sin_out<=233;
7:
sin_out<=225;
8:
sin_out<=217;
9:
sin_out<=207;
10:
sin_out<=197;
11:
sin_out<=186;
12:
sin_out<=174;
13:
sin_out<=162;
14:
sin_out<=150;
15:
sin_out<=137;
16:
sin_out<=124;
17:
sin_out<=112;
18:
sin_out<=99;
19:
sin_out<=87;
20:
sin_out<=75;
21:
sin_out<=64;
22:
sin_out<=53;
24:
sin_out<=43;
24:
sin_out<=34;
25:
sin_out<=26;
26:
sin_out<=19;
27:
sin_out<=13;
28:
sin_out<=8;
29:
sin_out<=4;
30:
sin_out<=1;
31:
sin_out<=0;
32:
sin_out<=0;
33:
sin_out<=1;
34:
sin_out<=4;
35:
sin_out<=8;
36:
sin_out<=13;
37:
sin_out<=19;
38:
sin_out<=26;
39:
sin_out<=34;
40:
sin_out<=43;
41:
sin_out<=53;
42:
sin_out<=64;
43:
sin_out<=75;
44:
sin_out<=87;
45:
sin_out<=99;
46:
sin_out<=112;
47:
sin_out<=124;
48:
sin_out<=137;
49:
sin_out<=150;
50:
sin_out<=162;
51:
sin_out<=174;
52:
sin_out<=186;
53:
sin_out<=197;
54:
sin_out<=207;
55:
sin_out<=217;
56:
sin_out<=225;
57:
sin_out<=233;
58:
sin_out<=239;
59:
sin_out<=245;
60:
sin_out<=249;
61:
sin_out<=252;
62:
sin_out<=254;
63:
sin_out<=255;
default:
sin_out<=8'bx;
endcase
end
endmodule
三、仿真结果
1、分屏器模块仿真结果如图4所示:
图4分屏器模块仿真结果
2、正弦波形模块仿真结果如图5所示:
图5正弦波形模块仿真结果
3、最终波形输出仿真结果如图6所示:
图6最终波形输出结果
4、modelsim仿真波形图如图7所示:
图7modelsim仿真波形图
四、实验结果
利用DE2上的拓展引脚,接到单片机上的数/模转换芯片DAC0832,再用示波器测试芯片的输出引脚查看波形,结果如图8和图9所示:
图8频率为f1的正弦波形
图9频率为f2的正弦波形
图10混合波形图
从以上分析可知,该设计实现了2FSK调制器的功能:
基带信号为“1”时,频率f1的信号通过;当基带信号为“0”时,频率f2的信号通过。
由此说明,实验取得了成功。
五、实验总结
本实验内容为制作一个基于FPGA的2FSK调制器。
虽然学习Verilog和QuartusII软件、ModuleSim仿真软件已有一个学期,但是此次实验过程中遇到有比较棘手的难题。
起初,对于选频功能不是很了解,不知怎样设置比较好。
通过深思和对比之后,最终我选择了用一个时钟信号来控制。
另外,此次实验遇到的最大难题就是硬件连接问题。
以前的实验都只是在QuartusII上编写实验,进行仿真观察,或者用modelsim进行仿真,这样就不用搭建实际电路,实验难度系数也就较小。
而此次实验需要将ED2输出的信号经过数/模转换,再用示波器来观察。
通过老师的提点,我对数/模转换芯片DAC0832进行了较深入的了解,并且上网查找了实验室单片机板的电路图,最终明白的整个电路的原理,因而成功搭建了电路,并输出了预期的波形。
通过自己课下的努力和钻研,最终较快较好地成功完成了实验,这给了我极大的兴趣和信心。
从一开始对搭建电路无从下手,到一步一步查找资料并尝试连接,确实在课下花了很多时间和心思。
但看着自己制作的成果,深感一切都值得。
本次实验让我深深体会到,单纯学习理论知识是不行的,只有勤于动手,将所学的知识运用到实际当中,才能真正理解和掌握知识。
在接下去的学习中,我将不断完善知识面,设计更为复杂的电路。