• 直接测频法


    module    cepin(
            clk,rst_n,
            ad_data,ad_clk,cnt_ms,
            pinlv,cepin_buffer
    );
    
    input                clk;
    input                rst_n;
    input        [9:0]    ad_data;
    output                ad_clk;
    output        [39:0]    pinlv;
    output reg    [23:0]    cepin_buffer;
    output reg    [23:0]    cnt_ms;
    assign        ad_clk =~ clk;
    
    //计数
    parameter            CE_WAN = 24'd10_000_000;
    reg                    flag_cnt;
    always @(posedge clk or negedge rst_n)
        if(!rst_n)
            cnt_ms <= 'd0;
        else if(flag_cnt)
            cnt_ms <= 'd0;
        else
            cnt_ms <= cnt_ms + 1'b1;
    //检测上升沿
    reg            [9:0]    ad_data_r;
    reg            [2:0]    state;
    reg            [23:0]    cnt_cepin;
    always @(posedge clk or negedge    rst_n)
        if(!rst_n)begin
            state <= 'd0;
            ad_data_r <= ad_data;
            cnt_cepin <= 'd0;
            cepin_buffer <= 'd0;
        end
        else
            case(state)
            3'd0:begin
                ad_data_r <= ad_data;
                if(ad_data_r < ad_data)
                    state <= 3'd1;
                else
                    state <= 3'd0;
            end
            3'd1:begin
                ad_data_r <= ad_data;
                if(ad_data_r > ad_data)
                    state <= 3'd2;
                else
                    state <= 3'd1;
            end
            3'd2:begin
                if(cnt_ms > CE_WAN)begin
                    cepin_buffer <= cnt_cepin;
                    cnt_cepin <= 'd0;
                    flag_cnt <= 1'd1;
                end
                else begin
                    cepin_buffer <= cepin_buffer;
                    cnt_cepin <= cnt_cepin + 1'b1;
                    flag_cnt <= 'd0;
                end
                state <= 3'd0;
            end
            endcase
    
    
    assign        pinlv =  5*cepin_buffer;
    //assign    pinlv = CE_P / cnt_r;
    
    endmodule

    .直接测频法:由时基信号形成闸门,对被测信号进行计数。当闸门宽度为1s时可直接从计数器读出被测信号频率。计数值存在正负一个脉冲的误差是可能的,故此法的绝对误差就是1Hz(对1s宽的闸门而言)。其相对误差则随着被测频率的升高而降低,故此法适于测高频而不适于测低频。

  • 相关阅读:
    C# 反射机制(转)
    asp.net 控件开发(三)处理标签间内容
    WCF学习(三)数据契约1
    个人的一点私事
    Asp.net 控件开发(四) 数据回传
    WCF学习 (四) 数据契约的事件
    wcf学习(一):预览
    WCF学习(二)服务契约
    css3图片3D翻转
    Javascript面向对象(一)(共有方法,私有方法,特权方法)
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/6651191.html
Copyright © 2020-2023  润新知