找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于FPGA数模转换程序

[复制链接]
跳转到指定楼层
楼主
ID:650595 发表于 2019-11-27 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于fpga数模转换源程序如下:
  1. module ad_prj(
  2.            clk       ,
  3.            rst_n     ,
  4.            key       ,
  5.            dac_mode ,
  6.            dac_clka  ,
  7.            dac_da   ,
  8.            dac_wra  ,
  9.            dac_sleep,
  10.            ad_clk    ,
  11.            ad_in      
  12.            );
  13. input             clk        ;
  14. input             rst_n      ;
  15. input [ 3-1:0]     key        ;
  16. output            dac_mode ;
  17. output            dac_clka  ;
  18. output [ 8-1:0]    dac_da    ;
  19. output            dac_wra   ;
  20. output            dac_sleep ;
  21. output            ad_clk    ;
  22. input  [8-1:0]      ad_in     ;

  23. wire    [6:0]    addr    ;
  24. reg   [7:0]      sin_data    ;
  25. reg   [16:0]    addr_tmp    ;
  26. reg   [7:0]      dac_da    ;
  27. wire             dac_sleep  ;
  28. wire             dac_wra   ;
  29. wire             dac_clka   ;
  30. wire             dac_mode ;
  31. wire             ad_clk  ;


  32. always  @(*)begin
  33.     case(addr)
  34.           0: sin_data = 8'h7F;
  35.           1: sin_data = 8'h85;
  36.           2: sin_data = 8'h8C;
  37.           3: sin_data = 8'h92;
  38.           4: sin_data = 8'h98;
  39.           5: sin_data = 8'h9E;
  40.           6: sin_data = 8'hA4;
  41.           7: sin_data = 8'hAA;
  42.           8: sin_data = 8'hB0;
  43.           9: sin_data = 8'hB6;
  44.          10: sin_data = 8'hBC;
  45.          11: sin_data = 8'hC1;
  46.          12: sin_data = 8'hC6;
  47.          13: sin_data = 8'hCB;
  48.          14: sin_data = 8'hD0;
  49.          15: sin_data = 8'hD5;
  50.          16: sin_data = 8'hDA;
  51.          17: sin_data = 8'hDE;
  52.          18: sin_data = 8'hE2;
  53.          19: sin_data = 8'hE6;
  54.          20: sin_data = 8'hEA;
  55.          21: sin_data = 8'hED;
  56.          22: sin_data = 8'hF0;
  57.          23: sin_data = 8'hF3;
  58.          24: sin_data = 8'hF5;
  59.          25: sin_data = 8'hF7;
  60.          26: sin_data = 8'hF9;
  61.          27: sin_data = 8'hFB;
  62.          28: sin_data = 8'hFC;
  63.          29: sin_data = 8'hFD;
  64.          30: sin_data = 8'hFE;
  65.          31: sin_data = 8'hFE;
  66.          32: sin_data = 8'hFE;
  67.          33: sin_data = 8'hFE;
  68.          34: sin_data = 8'hFE;
  69.          35: sin_data = 8'hFD;
  70.          36: sin_data = 8'hFC;
  71.          37: sin_data = 8'hFA;
  72.          38: sin_data = 8'hF8;
  73.          39: sin_data = 8'hF6;
  74.          40: sin_data = 8'hF4;
  75.          41: sin_data = 8'hF1;
  76.          42: sin_data = 8'hEF;
  77.          43: sin_data = 8'hEB;
  78.          44: sin_data = 8'hE8;
  79.          45: sin_data = 8'hE4;
  80.          46: sin_data = 8'hE0;
  81.          47: sin_data = 8'hDC;
  82.          48: sin_data = 8'hD8;
  83.          49: sin_data = 8'hD3;
  84.          50: sin_data = 8'hCE;
  85.          51: sin_data = 8'hC9;
  86.          52: sin_data = 8'hC4;
  87.          53: sin_data = 8'hBE;
  88.          54: sin_data = 8'hB9;
  89.          55: sin_data = 8'hB3;
  90.          56: sin_data = 8'hAD;
  91.          57: sin_data = 8'hA7;
  92.          58: sin_data = 8'hA1;
  93.          59: sin_data = 8'h9B;
  94.          60: sin_data = 8'h95;
  95.          61: sin_data = 8'h8F;
  96.          62: sin_data = 8'h89;
  97.          63: sin_data = 8'h82;
  98.          64: sin_data = 8'h7D;
  99.          65: sin_data = 8'h77;
  100.          66: sin_data = 8'h70;
  101.          67: sin_data = 8'h6A;
  102.          68: sin_data = 8'h64;
  103.          69: sin_data = 8'h5E;
  104.          70: sin_data = 8'h58;
  105.          71: sin_data = 8'h52;
  106.          72: sin_data = 8'h4C;
  107.          73: sin_data = 8'h46;
  108.          74: sin_data = 8'h41;
  109.          75: sin_data = 8'h3C;
  110.          76: sin_data = 8'h36;
  111.          77: sin_data = 8'h31;
  112.          78: sin_data = 8'h2C;
  113.          79: sin_data = 8'h28;
  114.          80: sin_data = 8'h23;
  115.          81: sin_data = 8'h1F;
  116.          82: sin_data = 8'h1B;
  117.          83: sin_data = 8'h17;
  118.          84: sin_data = 8'h14;
  119.          85: sin_data = 8'h11;
  120.          86: sin_data = 8'hE ;
  121.          87: sin_data = 8'hB ;
  122.          88: sin_data = 8'h9 ;
  123.          89: sin_data = 8'h7 ;
  124.          90: sin_data = 8'h5 ;
  125.          91: sin_data = 8'h3 ;
  126.          92: sin_data = 8'h2 ;
  127.          93: sin_data = 8'h1 ;
  128.          94: sin_data = 8'h1 ;
  129.          95: sin_data = 8'h1 ;
  130.          96: sin_data = 8'h1 ;
  131.          97: sin_data = 8'h1 ;
  132.          98: sin_data = 8'h2 ;
  133.          99: sin_data = 8'h3 ;
  134.         100: sin_data = 8'h4 ;
  135.         101: sin_data = 8'h6 ;
  136.         102: sin_data = 8'h7 ;
  137.         103: sin_data = 8'hA ;
  138.         104: sin_data = 8'hC ;
  139.         105: sin_data = 8'hF ;
  140.         106: sin_data = 8'h12;
  141.         107: sin_data = 8'h15;
  142.         108: sin_data = 8'h19;
  143.         109: sin_data = 8'h1D;
  144.         110: sin_data = 8'h21;
  145.         111: sin_data = 8'h25;
  146.         112: sin_data = 8'h2A;
  147.         113: sin_data = 8'h2E;
  148.         114: sin_data = 8'h33;
  149.         115: sin_data = 8'h38;
  150.         116: sin_data = 8'h3E;
  151.         117: sin_data = 8'h43;
  152.         118: sin_data = 8'h49;
  153.         119: sin_data = 8'h4E;
  154.         120: sin_data = 8'h54;
  155.         121: sin_data = 8'h5A;
  156.         122: sin_data = 8'h60;
  157.         123: sin_data = 8'h67;
  158.         124: sin_data = 8'h6D;
  159.         125: sin_data = 8'h73;
  160.         126: sin_data = 8'h79;
  161.         127: sin_data = 8'h7F;
  162.     endcase
  163. end

  164. always  @(posedge clk or negedge rst_n)begin
  165.     if(rst_n==1'b0)begin
  166.         addr_tmp <= 0;
  167.     end
  168.     else if(key==0) begin
  169.         addr_tmp <= addr_tmp + 262;
  170.     end
  171.     else if(key==1) begin
  172.         addr_tmp <= addr_tmp + 524;
  173.     end
  174.     else if(key==2) begin
  175.         addr_tmp <= addr_tmp + 786;
  176.     end
  177.     else if(key==3) begin
  178.         addr_tmp <= addr_tmp + 1029;
  179.     end
  180.     else if(key==4) begin
  181.         addr_tmp <= addr_tmp + 1311;
  182.     end
  183.     else if(key==5) begin
  184.         addr_tmp <= addr_tmp + 1573;
  185.     end
  186.     else if(key==6) begin
  187.         addr_tmp <= addr_tmp + 1835;
  188.     end
  189.     else begin
  190.         addr_tmp <= addr_tmp + 2097;
  191.     end
  192. end

  193. assign addr = addr_tmp >>10 ;

  194. always  @(posedge clk or negedge rst_n)begin
  195.     if(rst_n==1'b0)begin
  196.         dac_da <= 0;
  197.     end
  198.     else begin
  199.         dac_da <= 255 - sin_data;
  200.     end
  201. end

  202. assign dac_sleep = 0        ;
  203. assign dac_wra   = dac_clka ;
  204. assign dac_clka  = ~clk      ;



  205. my_pll u_my_pll(
  206.     .inclk0(clk   ) ,
  207.         .c0    (ad_clk )
  208. );



  209. endmodule
复制代码

所有资料51hei提供下载:
pIYBAFwstkCAYjLsAAAcP1b9CTw502.rar (7.06 KB, 下载次数: 4)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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