原创 基于FPGA的频率测量

2009-7-20 13:38 3118 10 11 分类: FPGA/CPLD

等精度测量的原理:pdfpdf


    其实很简单,就是你找一个基准,这个基准和信号在一个控制信号的控制下同时开始同时结束,然后比较一下就得到的。使用FPGA做,由于其并行可以做起来其实很简单,但是。。。我遇到的问题不这里,而是后面的通讯问题
    等精度的FPGA:
  

module fre_cnt(clk_std,clk_sig,rst_n,Gate_n,cnt_std,cnt_sig,Gate_t);
input  clk_std;
input  clk_sig;
input  rst_n;
input  Gate_n;

output Gate_t;
output [31:0]cnt_std;
output [31:0]cnt_sig;
reg    [31:0]cnt_std;
reg    [31:0]cnt_sig;
///////////////////////
reg Gate_t;
//将门控信号和输入信号的上升沿同步
always @ (posedge clk_sig or negedge rst_n)
begin
    if(!rst_n)
        Gate_t <= 1'b0;
    else
        Gate_t <= Gate_n;
end
//对clk_sig计数器计数
always @ (posedge clk_sig or negedge rst_n)
begin
     if(!rst_n)
          cnt_sig  <= 32'h00000000;
     else if(Gate_t)
          begin
               cnt_sig <= cnt_sig + 32'h00000001;
          end      
end
//对 clk_std计数
always @ (posedge clk_std or negedge rst_n)
begin
    if(!rst_n)
    begin
       cnt_std  <= 32'h00000000;
    end
    else if(Gate_t)
          begin
               cnt_std <= cnt_std + 32'h00000001;
          end
end
endmodule

其实大家都在说
点击看大图

其实综合以后的RTL是:
57dd508a-7202-41cd-9cc6-fa6657e5812d.jpg

不是计数器而是累加器
测量的结果在12HZ以上的精度可以做到10^-5,频率小于12hz的时候,信号计数器会在1个单位跳jieg变,得到的结果和实际说的早整个范围内的精度不变有差异,是本身结构的问题还是我们同步的处理上出现的问题。。。。进行中

7-20号问题补充:
问题在于我知道后面有个同步周期,在gate信号结束后需要等待信号的下周期上升沿,但是这个信号我没有相似FPGA里面做结束信号,而是使用的单片机的延时,在频率低的时候这个延时的时间不能够满足延时的需要所以出现不稳定的情况。。。。
问题并没有解决,cnt_sig计数器在整个量程范围内都有一个偶尔的跳变,并且随着频率的增加跳变的概率就增大,虽然最精度的影响还可以接受,只在最后几位跳变,但是不应该出现这种情况

 
还有一个问题需要补充,gate信号最好增加一个同步信号
always@(posedge clk_std)
begin
    Gate1 <= Gate_n;
end
always@(posedge clk_std)
begin
    Gate2 <= Gate1;
end
always@(posedge clk_std)
begin
    Gate3 <= Gate2;
end
//将门控信号和输入信号的上升沿同步
always @ (posedge clk_sig or negedge rst_n)
begin
    if(!rst_n)
        Gate_t <= 1'b0;
    else
        Gate_t <= Gate3;            
end
这样控制信号就会避免受到毛刺的干扰
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-7-20 14:30

谢谢分享
相关推荐阅读
zhangshaobing517_935512703 2011-03-21 01:28
KC24RT-300调试笔记
项目中需要使用LED驱动器,主要是为了让一串LED发出的光照一致,所以在试验中采用LED串联的方式比较好点,LED并联容易导致LED发光的 不均匀以及寿命减少。我在项目中采用金升阳公司的KC24RT-...
zhangshaobing517_935512703 2010-11-19 14:53
线程中CreateEvent和SetEvent及WaitForSingleObj
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面.CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象.EVENT有两种状态:发信...
zhangshaobing517_935512703 2010-11-15 13:29
VS2008 BEGIN
Visual Studio 2008环境与VC6.0的环境存在着比较大的区别,下面就一些小小的区别在这里做一些探讨,欢迎指教!1、如果是调试控制台程序,很多时候点击“启动调试”后是一闪而过,此时可有两...
zhangshaobing517_935512703 2010-11-01 20:38
使用MFC的数组类
 MFC的数组类支持的数组类似于C++中的常规数组,可以存放任何数据类型。C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小,数组的...
zhangshaobing517_935512703 2010-09-07 13:14
循环
 循环设计的注意的事情:(1)双重循环的跳出问题,break只挑出所在的循环,如果使用双层FOR循环,单个BREAK就不可能跳出所有的双层(2)在迭代的时候,注意起始和终止的条件,尤其是终止问题(3)...
zhangshaobing517_935512703 2010-09-02 01:09
图像处理改进
1.特征点提取的算法  标志点的提取算法对结果的影响虽然没有经过试验或者计算的推算,每1个pix的偏差对结果的影响有多大,但是不可避免的,要想获得高精度的  测量结果,高精度的提取对结果的影响还是很大...
EE直播间
更多
我要评论
1
10
关闭 站长推荐上一条 /1 下一条