找回密码
 立即注册

QQ登录

只需一步,快速开始

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

FPGA采集模拟信号数据波形,51单片机显示波形

[复制链接]
跳转到指定楼层
楼主
fpga采集数据波形,51单片机显示波形,示波器


单片机源程序如下(frqent_count.v):
  1. /*==============================================
  2. *        描    述:频率计控制模块计数测试程序
  3. //==============================================*/

  4. module frqent_count(clk_b,clk_d,vavle,rst,cnt_h_out,cnt_b_out,cnt_d_out);
  5.         input rst;
  6.         input clk_b;                         
  7.         input clk_d;
  8.        
  9.         input vavle;
  10.        
  11.         output reg[31:0]     cnt_h_out;                                         //用于测量高脉宽
  12.         output reg[31:0]     cnt_b_out;                                                //标准频率计数
  13.         output reg[31:0]         cnt_d_out;                                                //待测频率计数
  14.        
  15.         reg        [31:0]        cnt_h;                                                                        //用于测量高脉宽       
  16.         reg        [31:0]        cnt_b;                                                                        //标准频率计数
  17.         reg        [31:0]        cnt_d;                                                                        //待测频率计数
  18.        
  19.         reg        start_reg;                                                                                //开始信号缓存
  20.         reg        clk_d_reg;                                                                                //待测时钟缓存
  21.        
  22.         wire start;
  23.        
  24.         /*------------------------------------------------
  25.         *        模块说明:计数允许模块
  26.         *        备          注:Start_l对于频率没有作用,只对于低电平
  27.                                  脉宽计数有作用,频率主要作用在Start
  28.         *-------------------------------------------------*/
  29.        
  30.         assign start = vavle;
  31.        
  32.        
  33.         //开始信号缓存
  34.         always@(posedge clk_b,negedge rst)
  35.         begin
  36.                 if(!rst)
  37.                 begin
  38.                         start_reg <= 1'b0;
  39.                 end
  40.                
  41.                 else
  42.                 begin
  43.                         start_reg <= start;
  44.                 end
  45.         end
  46.        
  47.         //待测信号缓存
  48.         always@(posedge clk_b, negedge rst)
  49.         begin
  50.                 if(!rst)
  51.                 begin
  52.                         clk_d_reg <= 1'b0;
  53.                 end
  54.                
  55.                 else
  56.                 begin
  57.                         clk_d_reg <= clk_d;
  58.                 end
  59.         end
  60.        
  61.         //待测时钟进行计数
  62.         always@(posedge clk_d,negedge rst)
  63.         begin
  64.                 if(!rst)
  65.                 begin
  66.                         cnt_d <= 32'b0;
  67.                 end
  68.                
  69.                 else
  70.                 begin
  71.                         if(start == 0)
  72.                                 begin
  73.                                         cnt_d <= 0;
  74.                                 end
  75.                         // 高电平触发
  76.                         else
  77.                                 begin
  78.                                         cnt_d <= cnt_d + 1'b1;
  79.                                 end
  80.                 end
  81.         end
  82.        
  83.         //标准时钟进行计数
  84.         always@(posedge clk_b,negedge rst)
  85.         begin
  86.                 if(!rst)
  87.                 begin
  88.                         cnt_b <= 0;
  89.                 end
  90.                
  91.                 else
  92.                 begin
  93.                         if(start == 0)
  94.                                 begin
  95.                                         cnt_b <= 0;
  96.                                 end
  97.                                
  98.                         else
  99.                                 begin
  100.                                         cnt_b <= cnt_b + 1'b1;
  101.                                 end
  102.                 end
  103.         end
  104.        
  105.         //高电平计数
  106.         always@(posedge clk_b, negedge rst)
  107.         begin
  108.                 if(!rst)
  109.                 begin
  110.                         cnt_h <= 0;
  111.                 end
  112.                
  113.                 else
  114.                         begin
  115.                                 if(clk_d == 0)
  116.                                 begin
  117.                                         cnt_h <= 0;
  118.                                 end
  119.                                
  120.                                 else
  121.                                 begin
  122.                                         cnt_h <= cnt_h + 1'b1;
  123.                                 end
  124.                         end
  125.         end
  126.        
  127.         //标准计数和待测计数输出
  128.         always@(posedge clk_b, negedge rst)
  129.         begin
  130.                 if(!rst)
  131.                 begin
  132.                         cnt_b_out <= 0;
  133.                         cnt_b_out <= 0;
  134.                 end
  135.                
  136.                 else
  137.                 begin
  138.                         if(start_reg && !start)
  139.                         begin
  140.                                 cnt_b_out <= cnt_b;
  141.                                 cnt_d_out <= cnt_d;
  142.                         end
  143.                        
  144.                         else
  145.                         begin
  146.                                 cnt_b_out <= cnt_b_out;
  147.                                 cnt_d_out <= cnt_d_out;
  148.                         end
  149.                 end
  150.         end
  151.        
  152.         //高电平计数输出
  153.         always@(posedge clk_b,negedge rst)
  154.         begin       
  155.                 if(!rst)
  156.                 begin
  157.                         cnt_h_out<=0;
  158.                 end
  159.                
  160.                 else
  161.                 begin
  162.                         if(clk_d_reg&&!clk_d)
  163.                         begin
  164.                                 cnt_h_out<=cnt_h;
  165.                         end
  166.                        
  167.                         else
  168.                         begin
  169.                                 cnt_h_out<=cnt_h_out;
  170.                         end
  171.                 end
  172.         end
  173.        
  174. endmodule        
  175.                
复制代码

所有资料51hei提供下载:
采集模拟信号.rar (2.39 MB, 下载次数: 51)


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

使用道具 举报

沙发
ID:326615 发表于 2018-5-10 10:44 | 只看该作者
有用,就是黑币太高了
回复

使用道具 举报

板凳
ID:326615 发表于 2018-5-10 10:45 | 只看该作者
学习学习
回复

使用道具 举报

地板
ID:229939 发表于 2018-8-6 00:45 | 只看该作者
谢谢。。。。。。。。。。。。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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