原创 基于FPGA的FSK调制

2008-5-12 13:56 8231 13 14 分类: FPGA/CPLD

基于FPGAFSK调制:


   点击下载

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


       至于FSK调制原理就不多说了,这里做的一个实验是二进制频移键控。发送一组码元,通过响应的键控电路监测是发1还是发0然后选择频率控制正余弦电路波形。


 


       功能仿真波形如下:(点击看大图)


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 


点击看大图


 


       可以看到,codein信号是基带码元,它发送的是1010110001,而在输出端分别用正弦和余弦进行调制。cos_outsin_out的波形与原始码元基本一致,不同码元衔接处出现较大的跳变是因为采样的频率不够高造成的。1的调制频率是0的调制频率的两倍。


 


Verilog程序:


 


module fsktop(clk,rst,en,cos_out,sin_out,rdy);


input clk;


input rst;


input en;


output[15:0] cos_out;


output[15:0] sin_out;


output rdy;


 


wire codein;//发送基带码元


wire a_en,b_en;//FSK调制频率选择使能信号


wire ce;//正余弦发生器使能信号


wire[15:0] a_fre,b_fre,fre;


wire clk_40;//主时钟的40分频信号


 


clkfenpin clkfenpin(clk,rst,clk_40);


codesource          codesource(clk_40,rst,en,codein);


coding   coding(clk,rst,codein,a_en,b_en,ce,a_fre,b_fre,fre);


a_frequency a_frequency(clk,rst,a_en,a_fre);


b_frequency        b_frequency(clk,rst,b_en,b_fre);


cos        cos(fre,clk,ce,cos_out,sin_out,rdy);


 


endmodule


 


 


module clkfenpin(clk,rst,clk_40);


input clk;


input rst;


output clk_40;


 


reg[4:0] num;


reg clk_40;


 


always @ (posedge clk)


begin


       if(rst) begin num <= 5'd0; clk_40 <= 0; end


       else


       begin


              num <= num+1;


              if(num==5'd19) begin num <= 5'd0; clk_40 <=~clk_40; end


       end


end


 


endmodule


 


 


module codesource(clk_40,rst,en,codein);


input clk_40;


input rst;


input en;


output codein;//发送基带码元


 


reg codein;


reg[15:0] source;//从高到低连续发送该16bit码元信号


reg[3:0] num;


 


always @ (posedge clk_40)


begin


       if(rst)


       begin


              source <= 16'b1010110001110010;


              codein <= 1'bx;


              num <= 4'b1111;


       end


       else if(en)


       begin


              codein <= source[num];


              num <= num-1;


       end


       else


       begin


              source <= 16'b1010110001110010;


              codein <= 1'bx;


              num <= 4'b1111;


       end


end


 


endmodule


 


 


module coding(clk,rst,codein,a_en,b_en,ce,a_fre,b_fre,fre);


input clk;


input rst;


input codein;


input[15:0]     a_fre,b_fre;


output[15:0] fre;


output a_en,b_en;


output ce;


 


reg a_en,b_en;


reg ce;


reg[15:0] fre;


 


always @ (posedge clk)


begin


       if(rst)


       begin


              a_en <= 0;


              b_en <= 0;


              ce <= 0;


              fre <= 16'd0;


       end


       else if(!codein)      //基带码元为0时,选择a_fre为输出频率


       begin


              fre <= a_fre;


              a_en <= 1;


              b_en <= 0;


              ce <= 1;


       end


       else if(codein)       //基带码元为1时,选择b_fre为输出频率


       begin


              b_en <= 1;


              a_en <= 0;


              ce <= 1;


              fre <= b_fre;


       end


       else


       begin


              a_en <= 0;


              b_en <= 0;


              ce <= 0;


              fre <= 16'd0;


       end


end


 


endmodule


 


 


module a_frequency(clk,rst,a_en,fre);


input clk;


input rst;


input a_en;


output[15:0] fre;


 


reg[15:0] fre;


 


always @ (posedge clk)


begin


       if(rst) begin fre <= 16'h9b82; end      //-pi


       else if(a_en)


       begin


              if((fre<16'h8000)&&(fre>16'h6087)) fre <= 16'h9b82;


              else fre <= fre+16'h0506;


       end


       else begin fre <= 16'h9b82; end


end


 


endmodule


 


 


module b_frequency(clk,rst,b_en,fre);


input clk;


input rst;


input b_en;


output[15:0] fre;


 


reg[15:0] fre;


 


always @ (posedge clk)


begin


       if(rst) begin fre <= 16'h9b82; end        //pi


       else if(b_en)


       begin


              if((fre<16'h8000)&&(fre>16'h6087)) fre <= 16'h9b82;


              else fre <= fre+16'h<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0a0c;  


       end


       else begin fre <= 16'h9b82; end


end


 


endmodule


 


 


调用了IP Core中的cos_sin生成函数。


 

文章评论1条评论)

登录后参与讨论

用户309505 2011-3-11 22:38

cos 函数怎么没给出来啊

用户209205 2010-4-24 21:43

特权同学你好,在EDN上得到一块FPGA的空板。但手上没有光盘中的PDF文档资料。看你什么时候有空,能不能把光盘中的文档发在EDN上。谢谢了。 《SF-EP1C开发板配套光盘文档说明》

用户1584993 2010-4-23 10:26

不用去见岳父岳母还忙着工作吧

tengjingshu_112148725 2010-4-23 09:24

特权同学工作换哪了?
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条