找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于Quartus II的数字直接频率合成器DDS Verilog源代码

[复制链接]
跳转到指定楼层
楼主
基于Quartus II 的
(EDA课程设计)数字直接频率合成器DDS
工程文件大小15.9MB


源码:
  1. module DDS_hzh(clk,keyin,switchin,wavevalue,sm_db0,sm_db1,sm_db2,sm_db3,led,hexdd,DW);
  2.      input clk;
  3.      input [2:0] keyin;
  4.      input switchin;
  5.      input [4:0] DW;   
  6.      wire [9:0] address;
  7.      output [9:0] wavevalue;
  8.      wire [1:0] wavemode;
  9.      wire [31:0] length;//change 32
  10.      wire [2:0] keyout;
  11.      output  [3:0] hexdd;
  12.      output  [6:0] sm_db0;
  13.      output  [6:0] sm_db1;
  14.      output  [6:0] sm_db2;
  15.      output  [6:0] sm_db3;
  16.      output  [2:0] led;
  17.    key U1(clk,keyin,keyout);
  18.    control U2(clk,keyout,switchin,length,wavemode,DW);
  19.    counter U3(clk,length,address);
  20.    shumaguan U4(clk,length,sm_db0,sm_db1,sm_db2,sm_db3,led,hexdd);
  21.    boxing U5(address,clk,wavemode,wavevalue);
  22. endmodule

  23. module boxing(address,clk,wavemode,wavevalue);
  24.        input clk;
  25.        input [9:0] address;
  26.        input [1:0] wavemode;
  27.        output [9:0] wavevalue;
  28.        reg [9:0] wavevalue;
  29.        wire [9:0] wavevalue1,wavevalue2,wavevalue3;
  30.        sin M1(address,clk,wavevalue1);
  31.        fangbo M2(address,clk,wavevalue2);
  32.        sanjiao M3(address,clk,wavevalue3);
  33.        always@(posedge clk)
  34.        case(wavemode)
  35.        2'b01:wavevalue= wavevalue1;
  36.        2'b10:wavevalue= wavevalue2;
  37.        2'b11:wavevalue= wavevalue3;
  38.        endcase
  39. endmodule

  40. module counter(clk,fre_word,address);
  41.   input clk;
  42.   output reg [9:0] address;
  43.   input [31:0] fre_word;
  44.   reg[31:0] phaseadder;
  45.   always@(posedge clk)
  46.     begin
  47.          phaseadder= phaseadder+ fre_word;
  48.          address= phaseadder[31:22];
  49.     end
  50. endmodule



  51. module control(clk,keyin,switchin,length,wavemode,DW);//changed
  52.   input [2:0] keyin;
  53.   input clk;
  54.   input [4:0] DW;
  55.   input switchin;
  56.   output reg [31:0] length;
  57.   output reg [1:0] wavemode;
  58.   reg [31:0]fredata;
  59.   reg [2:0]key;
  60.   reg switch;
  61.   integer single_state= 1;
  62.   reg [32:0] single_frc;
  63.   
  64.   always@(posedge clk)
  65.   begin
  66.     key=keyin;
  67.     switch=switchin;
  68.         if(DW == 5'b00001) begin
  69.                         single_frc = 32'd286;
  70.                         end
  71.         else if(DW == 5'b00010) begin
  72.                         single_frc = 32'd28633;
  73.                         end
  74.         else if(DW == 5'b00100) begin
  75.                         single_frc = 32'd286331;
  76.                         end
  77.         else if(DW == 5'b01000) begin
  78.                         single_frc = 32'd2863311;
  79.                         end
  80.         else if(DW == 5'b10000) begin
  81.                         single_frc = 32'd28633115;
  82.                         end
  83.         else begin single_frc = 32'd28; end;                                                                               
  84.     case(key)
  85.      3'b001:begin
  86.             length= 32'd28633; //1kHz
  87.             wavemode= 2'b01;//sin
  88.             end
  89.      3'b010:begin
  90.             case(single_state)
  91.             1:wavemode= 2'b01;//sin
  92.             2:wavemode= 2'b10;//fangbo
  93.             3:wavemode= 2'b11;//sanjiaobo
  94.             default:
  95.             begin
  96.             wavemode=2'b01;
  97.             single_state= 0;
  98.             end
  99.             endcase
  100.             single_state= single_state+1;
  101.             end

  102.       3'b100:begin
  103.             if(switch==1)
  104.             begin
  105.                                 length= length - single_frc;
  106.                                 /*case(single_frc)
  107.                                 1:length= length- 32'd286;//-10Hz
  108.                                 2:length= length- 32'd28633;//-1kHz
  109.                                 3:length= length- 32'd286331;//-10kHz
  110.                                 4:length= length- 32'd2863311;//-100kHz
  111.                                 5:length= length- 32'd28633115;//-1MHz
  112.                                 default:length= length- 0;
  113.                                 endcase*/
  114.             end
  115.             else
  116.             begin
  117.                                 length = length + single_frc;
  118.                                 /*case(single_frc)
  119.                                 1:length= length+ 32'd286;//+10Hz
  120.                                 2:length= length+ 32'd28633;//+1kHz
  121.                                 3:length= length+ 32'd286331;//+10kHz
  122.                                 4:length= length+ 32'd2863311;//+100kHz
  123.                                 5:length= length+ 32'd28633115;//+1MHz
  124.                                 default:length= length+ 0;
  125.                                 endcase*/
  126.                         end
  127.         end
  128.     endcase
  129. end
  130. endmodule   
  131.             

  132. module shumaguan(clk,length,sm_db0,sm_db1,sm_db2,sm_db3,led,hexdd);//changed
  133.   input clk;
  134.   output reg [6:0] sm_db0;
  135.   output reg [6:0] sm_db1;
  136.   output reg [6:0] sm_db2;
  137.   output reg [6:0] sm_db3;
  138.   output reg [2:0] led;
  139.   output reg [3:0] hexdd;
  140.   input   [31:0] length;
  141.   
  142.   parameter seg0=7'h40,
  143.             seg1=7'h79,
  144.             seg2=7'h24,
  145.             seg3=7'h30,
  146.             seg4=7'h19,
  147.             seg5=7'h12,
  148.             seg6=7'h02,
  149.             seg7=7'h78,
  150.             seg8=7'h00,
  151.             seg9=7'h10;
  152.             
  153.    
  154.    reg [17:0] temp= 18'd34925;
  155.    reg [47:0] AA;
  156.    reg [31:0] fre;
  157.    reg [3:0] A1,A2,A3,A4,A5,A6,A7;

  158.    always@(posedge clk)
  159.      begin
  160.         AA= length*temp;
  161.         fre= AA/24'd1000000;
  162.         A1=(fre/24'd1000000);
  163.         A2=(fre/24'd100000)%4'd10;
  164.         A3=(fre/24'd10000)%4'd10;
  165.         A4=(fre/24'd1000)%4'd10;
  166.         A5=(fre/24'd100)%4'd10;
  167.         A6=(fre/24'd10)%4'd10;
  168.         A7=fre%4'd10;

  169.         if(A1!=4'd0)
  170.            begin
  171.                    led =3'b100;
  172.            if(A1<4'd10)
  173.            begin
  174.             hexdd = 4'b0111;
  175.             case(A1)
  176.                4'd1:  sm_db0 <= seg1;
  177.                4'd2:  sm_db0 <= seg2;
  178.                4'd3:  sm_db0 <= seg3;
  179.                4'd4:  sm_db0 <= seg4;
  180.                4'd5:  sm_db0 <= seg5;
  181.                4'd6:  sm_db0 <= seg6;
  182.                4'd7:  sm_db0 <= seg7;
  183.                4'd8:  sm_db0 <= seg8;
  184.                4'd9:  sm_db0 <= seg9;   
  185.                default:  ;
  186.             endcase
  187.                
  188.             case(A2)
  189.                4'd0:  sm_db1 <= seg0;
  190.                4'd1:  sm_db1 <= seg1;
  191.                4'd2:  sm_db1 <= seg2;
  192.                4'd3:  sm_db1 <= seg3;
  193.                4'd4:  sm_db1 <= seg4;
  194.                4'd5:  sm_db1 <= seg5;
  195.                4'd6:  sm_db1 <= seg6;
  196.                4'd7:  sm_db1 <= seg7;
  197.                4'd8:  sm_db1 <= seg8;
  198.                4'd9:  sm_db1 <= seg9;   
  199.                default:  ;
  200.              endcase
  201.                
  202.              case(A3)
  203.                4'd0:  sm_db2 <= seg0;
  204.                4'd1:  sm_db2 <= seg1;
  205.                4'd2:  sm_db2 <= seg2;
  206.                4'd3:  sm_db2 <= seg3;
  207.                4'd4:  sm_db2 <= seg4;
  208.                4'd5:  sm_db2 <= seg5;
  209.                4'd6:  sm_db2 <= seg6;
  210.                4'd7:  sm_db2 <= seg7;
  211.                4'd8:  sm_db2 <= seg8;
  212.                4'd9:  sm_db2 <= seg9;   
  213.                default:  ;
  214.              endcase
  215.                
  216.               case(A4)
  217.                4'd0:  sm_db3 <= seg0;
  218.                4'd1:  sm_db3 <= seg1;
  219.                4'd2:  sm_db3 <= seg2;
  220.                4'd3:  sm_db3 <= seg3;
  221.                4'd4:  sm_db3 <= seg4;
  222.                4'd5:  sm_db3 <= seg5;
  223.                4'd6:  sm_db3 <= seg6;
  224.                4'd7:  sm_db3 <= seg7;
  225.                4'd8:  sm_db3 <= seg8;
  226.                4'd9:  sm_db3 <= seg9;   
  227.                default:  ;
  228.               endcase
  229.            end
  230.            else
  231.            begin
  232.                         hexdd <= 4'b1011;
  233.                    case(A1/10)
  234.                            4'd1:  sm_db0 <= seg1;
  235.                4'd2:  sm_db0 <= seg2;
  236.                4'd3:  sm_db0 <= seg3;
  237.                4'd4:  sm_db0 <= seg4;
  238.                4'd5:  sm_db0 <= seg5;
  239.                4'd6:  sm_db0 <= seg6;
  240.                4'd7:  sm_db0 <= seg7;
  241.                4'd8:  sm_db0 <= seg8;
  242.                4'd9:  sm_db0 <= seg9;   
  243.                default:  ;
  244.             endcase
  245.             case(A1%10)
  246.                        4'd0:  sm_db1 <= seg0;
  247.                4'd1:  sm_db1 <= seg1;
  248.                4'd2:  sm_db1 <= seg2;
  249.                4'd3:  sm_db1 <= seg3;
  250.                4'd4:  sm_db1 <= seg4;
  251.                4'd5:  sm_db1 <= seg5;
  252.                4'd6:  sm_db1 <= seg6;
  253.                4'd7:  sm_db1 <= seg7;
  254.                4'd8:  sm_db1 <= seg8;
  255.                4'd9:  sm_db1 <= seg9;
  256.                default:  ;
复制代码

全部资料51hei下载地址:
DDS_successful.rar (16 MB, 下载次数: 41)


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

使用道具 举报

沙发
ID:506429 发表于 2019-4-7 19:19 | 只看该作者
大佬,怎么编译不了啊
回复

使用道具 举报

板凳
ID:636476 发表于 2019-12-9 21:40 | 只看该作者
实现功能是什么啊??
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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