if(cnt == 3'b110&&k >= 3'b010) begin
// 只要k计数器超过3,就判y为1
demodata <= 1'b1; out_rdy<=1; end
k <= 3'b000; // 清空k计数器
else if(cnt == 3'b110&&k < 3'b010) begin
设置信号周期为八个时钟周期,所以时钟计数周期为8,时钟计数器为判别模块提供判别时刻,通过判别模块对k计数器的值得判别实现了解调。
demodata <= 1'b0; end end
out_rdy<=1; end
endmodule
3.2功能仿真
3.2.1 调制部分代码的功能仿真
图3-1 调制部分功能仿真
如图3-1所示,sig_S为01信号,modata为调制后的信号,观察波形,很容易可以验证仿真结果正确
11
3.2.2 整体的功能仿真
整体的功能仿真是通过顶层模块调用调制模块和解调模块,实现整体的仿真。
顶层模块代码如下: module
ASK_ding(clk,reset,en,sig_S,mo_rdy,carriers,modata,demodata,out_rdy,cnt,k);
input clk,reset,en; output sig_S; output carriers; output modata; output mo_rdy; output demodata;
output out_rdy;
output [2:0] cnt; output [2:0] k;
two_ASK U_mo ( .clk(clk), .reset(reset), .en(en), .sig_S(sig_S), .out_rdy(mo_rdy), .carriers(carriers), .modata(modata) );
ASK_two U_demo ( .clk(clk), .reset(reset), .in_rdy(mo_rdy),
12
.modata(modata), .demodata(demodata), .out_rdy(out_rdy),
endmodule
对顶层模块进行仿真,结果如图3-2
.cnt(cnt), .k(k)
);
图3-2 整体功能仿真
其中cnt为时钟计数器,k为调制信号计数器,sig_S为01信号,modata为已调信号,demodata为解调后信号,观察上图,可知道代码仿真正确,实现了2ASK的调制解调。
3.3板上调试
板上调试代码如下:
module chipscope_ask(clk,sig_S,modata,demodata); input clk;
output sig_S,modata,demodata; wire en;
wire [35:0] control0;
13
wire [35:0] control1; wire [1:0] async_out; wire [0:0] async_in; wire [2:0] mydata;
assign reset=async_out[0];
assign en=async_out[1]; assign trig0=en; assign async_in[0]=sig_S; assign mydata[0]=sig_S; assign mydata[1]=modata; assign mydata[2]=demodata; ASK_ding
u1(.clk(clk),.reset(reset),.en(en),.carriers(carriers),.sig_S(sig_S),.demodata(demodata),.cnt(cnt),.modata(modata),.mo_rdy(mo_rdy),.out_rdy(out_rdy),.k(k));
my_icon u2(.CONTROL0(control0),.CONTROL1(control1));
my_ila u3(.CONTROL(control0),.CLK(clk),.DATA(mydata), .TRIG0(trig0));
my_vio u4(.CONTROL(control1),.ASYNC_IN(async_in), .ASYNC_OUT(async_out)); endmodule
板上调试需要添加三个核,icon,vio和ila,需要添加clk的引脚约束,如图3-3
图3-3 clk引脚约束
添加完约束后可以通过ise进行实现和产生bit流文件,下载到V-2板上便可进行chipscope在线调试。调试结果如下 Vio核波形
14
图3-4 vio核波形
这里使用vio核主要是想看各个使能端口信号的作用和做开关模拟操作。经检验,结果符合要求。 Ila核波形
图3-5 ila核波形
用ila核来看信号波形,从图中可以看出,实现了2ASK信号的调制与解调。解调信号虽然有一定的延时,但结果正确。这个延时是因为判别模块的判别时刻较信号开始时刻延时5个时钟周期,所以解调信号就如图中那样。
4总结
这次做2ASK的调制解调,复习了原理,理解了代码,收获不少。在做板调时遇到了些困难,是对chipscope核的不熟悉造成的。也是因为之前做的板调太少了,这两天感觉学到好多。基本掌握chipscope的应用方法,以后板调的效率会高很多。
这次做的2ASK是数字载波的,相对于正弦载波的简单很多,没设计滤波器,乘法器什么的。感觉还是缺少些东西。
15