2ASK在FPGA中的实现(3)

2019-07-30 13:33

endcase end

// 下面实现载波产生

always@(posedge clk) begin

if(reset) begin cnt<=2'b00; carriers<=0; end else if(en) cnt<=cnt+1; carriers<=~cnt[1]; end

assign modata=sig_S&carriers;

endmodule

程序的前面一部分是产生01信号,后面的是产生载波,然后是使01信号和载波相乘,实现了调制。

1.3.3 2ASK解调部分代码设计

module ASK_two(clk,en,reset,Kmode,carriers,pll_carriers,modata,demodata);

input clk,reset,en; input modata,carriers; input [2:0]Kmode;

output demodata,pll_carriers;

reg demodata;

Dpll u1(.fout(pll_carriers), .se(), .clk(clk), .reset(reset), .enable(en),

.Kmode(Kmode), .fin(carriers) );

always@(negedge pll_carriers) begin if(reset)

11

demodata<=0; else begin

if(!modata)

demodata<=0; else demodata<=1; end end endmodule

为了使提高解调采样数据的准确性,这里用数字锁相环Dpll对载波相位锁定后,用pll_carriers下降沿正好是在modata数据比特的中心采样,能够减少解调的误码率。(DPLL的Verilog代码作为附件放在最后面)。

1.3.4功能仿真

1)调制部分代码的功能仿真

图1-9 调制部分功能仿真

如图3-4所示,sig_S为01信号,modata为调制后的信号,观察波形,很容易可以验证仿真结果正确

2)整体的功能仿真

整体的功能仿真是通过顶层模块调用调制模块和解调模块,实现整体的仿真。

顶层模块代码如下:

module

ASK_ding(clk,reset,en,sig_S,Kmode,mo_rdy,carriers,pll_carriers,modata,demodata);

input clk,reset,en; input [2:0]Kmode; output sig_S;

12

output carriers,pll_carriers; output modata; output mo_rdy; output demodata;

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), .en(en),

.Kmode(Kmode), .reset(reset),

.carriers(carriers), .modata(modata),

.pll_carriers(pll_carriers), .demodata(demodata) );

Endmodule

对顶层模块进行仿真,结果如图3-5

图1-10 整体功能仿真

其中cnt为时钟计数器,k为调制信号计数器,sig_S为01信号,modata为已调信号,demodata为解调后信号,观察上图,可知道代码仿真正确,实现了2ASK的调制解调。

13

1.3.5 板上调试

板上调试代码如下:

module

ASK_ding_chipscope(clk,sig_S,mo_rdy,carriers,pll_carriers,modata,demodata

); input clk; output sig_S;

output carriers,pll_carriers; output modata; output mo_rdy; output demodata;

wire reset,en; wire[2:0]Kmode;

//for chipscope

wire [35:0] control0; wire [35:0] control1; wire [4:0] async_out; wire [4:0] mydata;

assign reset=async_out[0]; assign en=async_out[1];

assign Kmode[2:0]=async_out[4:2];

assign mydata[0]=sig_S; assign mydata[1]=carriers; assign mydata[2]=pll_carriers; assign mydata[3]=modata; assign mydata[4]=demodata;

ASK_ding ask(.clk(clk), .reset(reset), .en(en), .sig_S(sig_S), .Kmode(Kmode), .mo_rdy(mo_rdy), .carriers(carriers), .pll_carriers(pll_carriers), .modata(modata), .demodata(demodata) );

14

my_icon icon(.CONTROL0(control0), .CONTROL1(control1) );

my_ila ila(.CONTROL(control0), .CLK(clk), .DATA(mydata), .TRIG0(carriers) );

my_vio vio(.CONTROL(control1),

.ASYNC_OUT(async_out) ); Endmodule

板上调试需要添加三个核,icon,vio和ila,需要添加clk的引脚约束,如图1-11

图1-11 clk引脚约束

添加完约束后可以通过ise进行实现和产生bit流文件,下载到V-2板上便可进行chipscope在线调试。调试结果如下

Vio核波形

图1-12 vio核波形

这里使用vio核主要是想看各个使能端口信号的作用和做开关模拟操作。经检验,结果符合要求。

Ila核波形

图1-13 ila核波形

15


2ASK在FPGA中的实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:非同一控制下重大重组保代培训审核口径

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: