子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1s。闸门时间可以根据需要取值,大于或小于1S都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1s作为闸门时间。
数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图1. 1所示。
待测信号 计数器 锁存器 译码驱动电路 数码管显示 测频控制信号发生器 图1.1 原理框图
1.5 设计功能
四位十进制数字频率计用四组七段译码显示的数字频率计,其频率测量范围为1Hz~10kHz。采用记忆显示的方法,即在测量过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束,显示时间不少于1秒。
第二章 数字频率计系统分析
2.1数字频率计的设计任务及要求
设计一个四位十进制的数字频率计,要求具有以下功能: (1) 测量范围:1Hz~10kHz。 (2) 测量误差?1%。 (3) 响应时间?15s。 (4) 显示时间不少于1s。
(5) 具有记忆显示的功能,即在测量的过程中不刷新数据,等数据过程结束后才显示测量结果,给出待测信号的频率值,并保存到下一次测量结束。
2.2 模块的划分
根据系统设计要求,系统设计采用自顶向下的设计方法,系统的组成框图如图3. 1所示,包括时基产生与测频时序控制电路模块,以及待测信号脉冲计数电路模块和锁存与译码显示控制电路模块。
3
待测信号F_IN z1[0:6] EN 标准时钟 q[0:15] 时基产生与测频时序控制电路 待测信号 脉冲计 数电路 锁存与译码显示电路 z2[0:6] z3[0:6] z4[0:6] LOCK CLR CLK 图3.1 数字频率计的组成框图
(1) 时基产生与测频时序控制电路模块
时基产生与测频时序控制电路的主要产生计数允许信号EN、清零信号CCLR和锁存信号LOCK。 (2) 待测信号脉冲计数电路模块
待测信号脉冲计数电路是对待测脉冲信号的频率进行测量,它可由4个十进制加法计数器组成,其中EN为计数选通控制信号,CLR为计数器清零信号。在计数器清零信号CLR清零后,当计数选通控制信号EN有效时,开始对待测信号进行计数。如果计数选通控制信号EN的宽度为1s,那么计数结果就为待测信号的频率;如果计数选通信号EN的宽度为100ms,那么待测信号的频率等于计数结果
?10。
(3) 锁存与译码显示控制电路模块
锁存与译码显示控制电路用于实现记忆显示,在测量过程中不刷新新的数据,直到测量过程结束后,锁存显示测量结果,并且保存到下一次测量结束。
锁存与译码显示电路的功能是对四位BCD码进行锁存,并转换为对应的4组七段码,用于驱动数码管。
2.3设计分析
采用VHDL语言设计一个复杂的电路系统,运用自顶向下的设计思想,将系统按功能逐层分割的层次化设计方法进行设计。在顶层对内部各功能块的连接关系和对外的接口关系进行了描述,而功能块的逻辑功能和具体实现形式则由下一层模块来描述。各功能模块采用VHDL语言来描述。
第三章 各功能模块基于VHDL的设计
3.1 时基产生与测频时序控制电路模块的VHDL源程序
程序ctrl.vhd
4
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL IS
PORT(CLK: IN STD_LOGIC; -系统时钟 LOCK: OUT STD_LOGIC; -锁存信号 EN: OUT STD_LOGIC; -计数允许信号 CLR: OUT STD_LOGIC); -清零信号 END;
ARCHITECTURE ART OF CTRL IS
SIGNAL Q: STD_LOGIC_VECTOR(3 DOWNTO 0); -定义变量 BEGIN
PROCESS(CLK) BEGIN
IF(CLK'EVENT AND CLK='1')THEN -检测时钟上升沿 IF Q=\
Q<=\ -计数大于15,清零 ELSE
Q<=Q+'1'; -允许计数 END IF; END IF;
EN<=NOT Q(3);
LOCK<=Q(3) AND NOT(Q(2)) AND Q(1); CLR<=Q(3) AND Q(2) AND NOT(Q(1)); END PROCESS; END ART;
程序主要讲述了由时钟信号产生计数允许信号、清零信号和锁存信号,而且限定了响应时间为不超过15s。
3.2 待测信号脉冲计数电路模块的VHDL源程序
3.2.1 十进制加法计数器的VHDL源程序
程序cb10.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CB10 IS
PORT(CLK,EN,CLR: IN STD_LOGIC;
COUNT10: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -计数输 信号
END CB10;
ARCHITECTURE ART OF CB10 IS -结构体 BEGIN
5
PROCESS(CLK,CLR,EN) BEGIN
IF CLR='1' THEN
COUNT10<=\ -计数器清零
ELSIF RISING_EDGE(CLK) THEN -检测时钟上升沿 IF(EN='1') THEN -检测是否允许计数 IF COUNT10=\
COUNT10<=\ -计数值满9清零 ELSE
COUNT10<=COUNT10+'1'; -允许计数 END IF; END IF; END IF; END PROCESS; END ART;
程序主要讲述了十进制加法计数器的使用,在符合了一定的标准以后十进制的使用,在计数器满9后清零。
3.2.2待测信号脉冲计数器的VHDL源程序
程序count.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COUNT IS
PORT(CLK: IN STD_LOGIC; -待测时钟信号 EN: IN STD_LOGIC; -计数选通控制信号 CLR: IN STD_LOGIC; -计数器清零信号
QA,QB,QC,QD: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -结果输出信号 END;
ARCHITECTURE ART OF COUNT IS
COMPONENT CB10 -元件CB10引用说明语句 PORT(CLK,EN,CLR: IN STD_LOGIC;
COUNT10: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); -计数输出信号 END COMPONENT;
SIGNAL CLK2: STD_LOGIC; SIGNAL CLK3: STD_LOGIC; SIGNAL CLK4: STD_LOGIC; BEGIN
CLK2<=NOT QA(3); CLK3<=NOT QB(3); CLK4<=NOT QC(3);
U1:CB10 PORT MAP(CLK,EN,CLR,QA); -元件引用例示 U2:CB10 PORT MAP(CLK2,EN,CLR,QB); -元件引用例示
6
U3:CB10 PORT MAP(CLK3,EN,CLR,QC); -元件引用例示 U4:CB10 PORT MAP(CLK4,EN,CLR,QD); -元件引用例示 END ART;
3.3 锁存与译码显示控制电路模块的VHDL源程序
3.3.1 译码显示电路的VHDL源程序
程序bcd7.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY BCD7 IS
PORT(BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -BCD输入信号 LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); -七段译码输出信号 END;
ARCHITECTURE ART OF BCD7 IS BEGIN
LED<=\ -对照七段字形显示译码器真值表 \ \ \ \ \ \ \ \ \ \END ART;
程序主要讲述了七段译码器的显示问题,对应的给出了信号输入过程中七段译码器的各种显示。
3.3.2 锁存与译码显示控制模块的VHDL源程序
程序lock.vhd LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY LOCK IS
PORT(LOCK: IN STD_LOGIC;
QA,QB,QC,QD: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LEDA,LEDB,LEDC,LEDD: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));-频率 计数输出 END;
ARCHITECTURE ART OF LOCK IS
SIGNAL QAL,QBL,QCL,QDL: STD_LOGIC_VECTOR(3 DOWNTO 0);
7