一、说明
实现平台:Quartus17.1和Modelsim SE-64 10.4
二、内容
1. 利用NCO产生调制信号和载波信号;
2. 根据AM调幅原理,产生调制度为0.5的AM调制器设计;
3. 验证AM调制信号的正确性,并改变调制度,观察波形变化情况;
4. 能够根据NCO的配置参数,实现不同载波频率和调制信号的产生,继而实现各种样式的AM信号。
三、实验原理
幅度调制是模拟调制中的重要类型,在无线通信领域有着非常经典的理论研究价值和应用背景。从实现方式上幅度调制可以分为:常规AM,抑制载波的DSB调制、单边带SSB和残留边带四种调制方式。本次实验,我们用FPGA来进行常规AM调制的数字化实现。
AM的表达式为:
其中,是直流偏置分量;
是带调制信号,使我们要传输的信息。
当时,上述表达式可写为:
其中,是调制度,一般情况下小于等于1。
是调制信号(这里是单频正弦波)的频率,
是载波频率。
根据表达式 ,建立AM的FPGA实现数学模型,如图2所示:
四、步骤
(1)设计要求
要求设计一个可变频率的正弦波产生器,主要参数为:
- 50MHz主时钟clock,低电平有效复位reset;
- 输出调制信号(正弦波)wSource,频率为1kHz,幅度3.3V,10位输出;
- 输出载波信号(正弦波)wCarr,频率为1MHz,幅度3.3V,10位输出;
- 输出AM调制信号Amsig,3.3V,12位输出
(2)设计思路
1.产生调制信号wSource。调用宏功能模块NCO,按照输入时钟50MHz,产生频率为1KHz的正弦信号输出,并命名为b1_source.v。
2.产生载波信号wCarr。调用宏功能模块NCO,按照输入时钟50MHz,产生频率为1MHz的正弦信号输出,并命名为b2_source.v。
3.计算调幅度和调制信号的乘积(对应)。调用宏功能模块LPM_MULT,调制度
=0.5,统一定标为10'b00_1111_1111,计算
和wSource的乘积。
4.计算调幅度与调制信号乘积值与1相加(对应)。
5.产生调制信号Amsig。调用宏功能模块LPM_ MULT,将载波信号wCarr与步骤4所产生的值进行相乘,得到Amsig。
(3)具体实现
1.打开quartus新建工程,首先设计顶层模块,代码如下:
module am_gen(clk,rst_n,am_sig,w_Source,w_Carrier);
input clk;
input rst_n;
output [19:0] am_sig;
output [9:0] w_Source;
output [9:0] w_Carrier;
wire [17:0] source_1k;
wire [17:0] carrier_1m;
wire outvalid_1;
wire outvalid_2;
wire [19:0] wsource_out1;
wire [10:0] wsource;
wire [19:0] am_sig_out;
b1_source u1 (
.clk (clk), // clk.clk
.reset_n (rst_n), // rst.reset_n
.clken (1'b1), // in.clken
.phi_inc_i (32'd85899), // .phi_inc_i
.fsin_o (source_1k), // out.fsin_o
.out_valid (outvalid_1) // .out_valid
);
b2_source u2 (
.clk (clk), // clk.clk
.reset_n (rst_n), // rst.reset_n
.clken (1'b1), // in.clken
.phi_inc_i (32'd85899346), // .phi_inc_i
.fsin_o (carrier_1m), // out.fsin_o
.out_valid (outvalid_2) // .out_valid
);
mult1 m1(
.dataa(10'b00_1111_1111),
.datab(source_1k[17:8]),
.result(wsource_out1)
);
assign wsource = wsource_out1[19:9] + 11'b001_1111_1111;
mult2 m2(
.dataa(wsource[10:1]),
.datab(carrier_1m[17:8]),
.result(am_sig_out)
);
assign am_sig = am_sig_out;
assign w_Source = source_1k[17:8];
assign w_Carrier = carrier_1m[17:8];
endmodule
2.调制信号wSource产生模块,NCO具体参数设计:
3.载波信号wCarr产生模块,NCO具体参数设计:
4.mult1和mult2宏功能模块LPM_ MULT参数设置:
5.程序设计完成后点击综合,只要综合完成即可进行下一步。
设计完成后可以看到RTL原理图如下所示,基本符合预期。
6.TestBench程序编写如下:
`timescale 1 ns/ 1 ns
module am_gen_vlg_tst();
reg clk;
reg rst_n;
wire [19:0] am_sig;
wire [9:0] w_Carrier;
wire [9:0] w_Source;
am_gen i1 (
.am_sig(am_sig),
.clk(clk),
.rst_n(rst_n),
.w_Carrier(w_Carrier),
.w_Source(w_Source)
);
initial
begin
clk = 0;
rst_n = 1;
#100;
rst_n = 0;
#100;
rst_n = 1;
end
always #10 clk = ~clk;
endmodule
(4)仿真结果
显示波形设置波形的format和radix,分别设置为analog和decimal
若想改变AM的频率,仅需在NCO中改变频率即可。