找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3335|回复: 0
打印 上一主题 下一主题
收起左侧

DDS的AM调幅信号实现 语言为verilog

[复制链接]
跳转到指定楼层
楼主
ID:366331 发表于 2018-7-6 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
详情见附件,所用语言为verilog。
源码
  1. module AM_Sine
  2. (
  3. input clk,
  4. input [15:0]Usine_1k,
  5. input [15:0]Sine_Range,
  6. input [15:0] M,                              //调制度0.1~1,设为0~65536,最后除以65536 用位移来操作2^16次方
  7. output [15:0]AM_OUT,
  8. output [15:0]AM_Tiaozhi,
  9. output [15:0]Reg_Zai
  10. );
  11. wire [15:0]Sine_sign=Sine_Range+16'h8000;//有符号数

  12. wire [15:0]Zaibo;
  13. reg [2:0]zero=0;
  14. //assign Zaibo[15:0]=zero[0]+Sine_Range[14:0];

  15. assign Zaibo=Sine_Range>>1;

  16. reg [15:0]Reg_Zaibo=0;
  17. always @(clk)
  18. begin
  19.         if(Sine_Range[15])begin
  20.         Reg_Zaibo=Zaibo;   
  21.         end
  22.         else begin
  23.         Reg_Zaibo=32768-Zaibo; //最高位为0时是正数
  24.         end
  25. end
  26. assign Reg_Zai=Reg_Zaibo;

  27. wire [15:0]Sine_1k;
  28. assign Sine_1k=Usine_1k>>1;
  29. wire [31:0]Ma_Tiaozhi;
  30. wire [15:0]TiaoZhi;
  31. wire [15:0]M_1=65535-M;
  32. wire [15:0]constant=32768;
  33. wire [31:0]result1;
  34. wire [31:0]result2;
  35. wire [31:0]RMa_Tiaozhi;
  36. assign Ma_Tiaozhi=result1+result2;
  37. assign RMa_Tiaozhi=Ma_Tiaozhi>>16;
  38. //assign TiaoZhi[15:0]=RMa_Tiaozhi[15:0];
  39. assign TiaoZhi[15:0]=Ma_Tiaozhi[31:16];//加一个偏移



  40. assign AM_Tiaozhi=TiaoZhi;


  41. wire [31:0]AM_OUT32;
  42. wire [31:0]AM_OUT16;
  43. assign AM_OUT16=AM_OUT32>>16;
  44. wire [15:0]UAM_OUT;
  45. assign {UAM_OUT[15:0]}=Sine_Range[15]+AM_OUT16[14:0];
  46. //assign {UAM_OUT[15:0]}=AM_OUT32[31:16];
  47. //assign AM_OUT=UAM_OUT+16'h8000;
  48. //assign AM_OUT=UAM_OUT;



  49. //always @(clk)begin
  50. //RMa_Tiaozhi=Ma_Tiaozhi>>16;
  51. //end
  52. Mult16_16_clk        Mult1 (
  53.         .clock ( clk),
  54.         .dataa ( Usine_1k),       //Usine_1k--->Sine_1k
  55.         .datab ( M),
  56.         .result ( result1 )
  57.         );
  58. Mult16_16_clk        Mult2 (
  59.         .clock ( clk ),
  60.         .dataa ( constant),
  61.         .datab ( M_1 ),
  62.         .result ( result12)
  63.         );
  64. Mult16_16_clk        Mult3 (
  65.         .clock ( clk ),
  66.         .dataa ( Reg_Zaibo),  //Zaibo->Reg_Zaibo
  67.         .datab ( TiaoZhi),//Tiaozhi->Usine_1k
  68.         .result ( AM_OUT32)
  69.         );
  70. Mult_Sign        Mult4 (
  71.         .clock ( clk ),
  72.         .dataa ( test ),
  73.         .datab ( Sine_sign ),   
  74.         .result ( result_sig )
  75.         );
  76. wire [16:0]Tiaozhi_17=RMa_Tiaozhi[16:0];  
  77. //assign Tiaozhi_17=RMa_Tiaozhi[;        
  78. wire [32:0]result_sig;
  79. wire [32:0]result_sign;
  80. assign result_sign=result_sig-33'h100000000;
  81. assign {AM_OUT[15:0]}=result_sign[32:17];

  82. wire [31:0]tiao=((Usine_1k*M)+(16'h8000*M_1))>>16;
  83. wire [16:0]test=tiao[16:0];

  84. endmodule
复制代码


AM_Sine.rar

927 Bytes, 下载次数: 21, 下载积分: 黑币 -5

产生调幅信号

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表