美文网首页菜鸟工程师成长之路
基于FPGA的等精度数字频率计设计

基于FPGA的等精度数字频率计设计

作者: 言丶武 | 来源:发表于2017-04-25 21:24 被阅读100次
    Paste_Image.png

    从原理图我们可以看到,当en变化时,实际闸门信号finish(start)待检测到待测频率上升沿时才会变化,这就保证了在闸门信号内,我们测量的是待测频率的整数倍。

    代码如下:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    use ieee.std_logic_arith.all;
    
    entity frequency is
    port(
         bclk:in std_logic; --输入标准频率
          tclk:in std_logic;  --输入待测频率
          reset:in std_logic;  --高电平复位
          en:in std_logic;     --门限信号
          finish:out std_logic;   --结束计数信号,下降沿结束
          dataout:out std_logic_vector(127 downto 0));
          end frequency;
          
        architecture behav of frequency is
        signal start :std_logic:='0';
        
         signal bzq:std_logic_vector(31 downto 0);     --标准频率计数
         signal tsq:std_logic_vector(31 downto 0);    --待测频率计数
         signal mkh:std_logic_vector(31 downto 0);     --高电平计数
         signal mkl:std_logic_vector(31 downto 0);   --低电平计数
        
        begin
        
            dataout<=bzq&tsq&mkh&mkl;      --128位数据输出
                 
    STAET:   process(tclk,reset)
                begin
              if reset='1' then start<='0';
              elsif tclk'event and tclk='1' then
              start<=en;
              end if;
              end process;
                
                finish<=start;
            
    BZH:  process(bclk,reset)
            begin
            if reset='1' then bzq<=(others=>'0');
           elsif bclk'event and bclk='1' then
          if start='1' then bzq<=bzq+1;
           end if;
           end if;
          end process;
    
    TCH:  process(tclk,reset)
            begin
            if reset='1' then tsq<=(others=>'0');
           elsif tclk'event and tclk='1' then
          if start='1' then tsq<=tsq+1;
        end if;
        end if;
    end process;
    
    
    MKH1:   process(bclk,reset,start,tclk)
           begin
             if reset='1' then
             mkh<=(others=>'0');
             mkl<=(others=>'0');
             else
              if start='1' then
              if bclk'event and bclk='1' then
               if tclk='1' then mkh<=mkh+1;
                else mkl<=mkl+1;
                end if;
                end if;
                end if;
                end if;
                end process;
                
                end behav;
    

    相关文章

      网友评论

        本文标题:基于FPGA的等精度数字频率计设计

        本文链接:https://www.haomeiwen.com/subject/hdrbzttx.html