Quartus II9.0 进行的EDA频率计设计
1、频率计的测量范围为1MHz,量程分10KHz、100KHz和1000KHz三档(最大读数分别为9.99KHz、99.9KHz、999KHz)。
2、当读数大于999时,频率计处于超量程状态。此时显示器发出溢出指示(最高位显示F,其余各位不显示数字),下一次测量时,量程自动增大一档。读数小于000时,频率计处于欠量程状态。下次测量时,量程减小一档。
3、要求实现溢出报警功能。即当频率高于999KHz时,频率计处于超量程状态,产生一报警信号,点亮LED灯,从而实现溢出报警功能。
4、用记忆显示方式,即计数过程中不显示数据,待计数过程结束后,显示计数结果,并将此显示结果保持到下一次计数结束。显示时间应不小于1秒,小数点位置随量程变更自动移位。
2. 系统总体设计
本设计采用的是直接测频率的方法。即测频率法就是在一定的时间间隔内TW内,得到这个周期信号重复变化的次数NX,则被测频率可表示为FX=NX/TW。
频率计的系统设计可以分为计频基准时钟模块、自动换档模块、4位10进制计数模块锁存模块、译码显示模块。
计频基准时钟模块:
以1kHZ为基准,产生三个不同占比的0.5Hz脉冲信号其高电平时间分别为1s、0.1s、0.01s,分别用以测量频率在0~9.99KHz、0~99.9KHz、0~999KHz的频率。
自动换档模块:
先以最低档位测量,溢出时下一次计数自动切换高档位,计数不满“000”下一次自动切换到低档位。计数溢出999khz时,发出警报。
四位10进制计数模块锁存模块:
四位十进制计数,档位基准信号为高电平时,开始计数,低电平时锁存输出计数结果的前三位,计数器清零。当溢出或计数不满时,输出换挡信号。计数刷新频率为0.5Hz。
译码显示模块:
将计数器输出的结果按位译成7段显示数码管对应数字码,根据所选档位信号设置小数点位置。刷新频率为
系统框图(可打印)
3. 系统详细设计
3.1 计频基准时钟模块设计
该模块的电路框图
各输入输出引脚的定义及作用
Clk:为基准时钟信号,选用1kHz时钟信号
F0:根据clk分频出的0.5Hz高电平为1s的计频信号,用以0~9.99kHz档计频。
F1:根据clk分频出的0.5Hz高电平为0.1s的计频信号,用以0~99.9kHz档计频。
F2:根据clk分频出的0.5Hz高电平为0.01s的计频信号,用以0~999kHz档计频。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity dw is port(clk:in std_logic;
f0:out std_logic;
f1:out std_logic;
f2:out std_logic);
end dw;
architecture body_dw of dw is
begin
process(clk) --clk选用1kHz时钟信号
variable ct:integer range 0 to 2000;
begin
if clk'event and clk='1'then --分频周期为2s的脉冲
ct:=ct+1;
if ct=2000 then ct:=0;
end if;
if ct<1000 then f0<='1';
elsif ct<2000 then f0<='0'; --f0为0.5Hz高电平为1s
end if;
if ct<100 then f1<='1';
elsif ct<2000 then f1<='0'; --f1为0.5Hz高电平为0.1s
end if;
if ct