柜台上的纸张
数字频率计是现代电子技术领域的重要测量工具之一,在其他许多领域也有着广泛的应用。数字频率计记录在指定的参考时间内测量的脉冲数,将它们转换成频率并以数字形式显示出来。数字频率计用于测量信号(方波、正弦波或其他周期信号)的频率,并以十进制数字显示。具有精度高、测量速度快、读数直观、使用方便等优点。
用VHDL语言实现的一个例子如下:
-项目名称:恒精度频率计
-目标设备:FPGA或CPLD
-修订版0.01 -文件已创建
-备注:clk -系统工作时钟,2MHz。
-系统复位信号,高电平有效。
- FX是要测试的信号。
-频率nx是待测信号的计数值。
- freqns是标准信号的计数值。
- freq是待测信号的频率。
-
-
图书馆IEEE
使用IEEE。STD_LOGIC_1164。所有;
使用IEEE。STD_LOGIC_ARITH。所有;
使用IEEE。STD_LOGIC_UNSIGNED所有;
-
实体频率计是
generic(clk_freq:整数:= 2000000);-系统工作时钟频率
port(clk:in STD _ LOGIC;
复位:在STD_LOGIC中;
Fx:在STD_LOGIC中;-待测量的信号
freq ns:out natural;
freq NX:out natural);
-Freq:out natural);
终点频率计;
-
频率计的结构行为是
-
信号开始:STD _ LOGIC-当该信号为高电平时,计数器开始计数。
信号CTRL:STD _ LOGIC;- CTRL信号是由待测信号和选通信号产生的计数器启动信号。
信号CNTx:自然;-测试中的信号计数器
信号CNT:自然;-标准信号计数器
-
开始
- *************************************** -
-产生一个选通信号,高电平有效。
GateCtrl : process(clk)
-
变量CNT0:整数范围0到2 _ 097 _ 152;门控信号计数器
-
开始
如果上升沿(clk ),则
如果reset='1 ',则
CNT 0:= 0;
其他
CNT 0:= CNT 0+1;
结束if;
-
如果reset='1 ',则
开始& lt= '0';
elsif CNT0 & lt(clk_freq*3/4)那么
开始& lt= '1';
其他
开始& lt= '0';
结束if;
结束if;
结束进程GateCtrl
- *************************************** -
-产生CTRL信号,由被测信号和选通信号产生的计数器启动信号。
CtrlGen:进程(Fx)
开始
如果上升沿(Fx ),则
如果reset='1 ',则
CTRL & lt= '0';
其他
CTRL & lt=开始;
结束if;
结束if;
结束进程CtrlGen
- *************************************** -
-使用两个计数器分别对标准信号clk和待测信号进行计数。
-
-计数标准信号,在CTRL高电平期间有效。
计数:进程(时钟)
开始
如果上升沿(clk ),则
如果reset='1 ',则
CNTs & lt= 0;
elsif CTRL='1 '然后
CNTs & lt= CNTs+1;
其他
CNTs & lt= 0;
结束if;
结束if;
结束进程计数;
-
-待测量的计数信号,在CTRL高电平期间有效。
CountX:进程(Fx)
开始
如果上升沿(Fx ),则
如果reset='1 ',则
CNTx & lt= 0;
elsif CTRL='1 '然后
CNTx & lt= CNTx+1;
其他
CNTx & lt= 0;
结束if;
结束if;
结束进程CountX
- *************************************** -
- CTRL下降沿将输出技术结果和测量值。
计数:流程(CTRL)
开始
如果下降沿(CTRL)则
如果reset='1 ',则
FreqNs & lt= 0;
FreqNx & lt= 0;
-Freq & lt;= 0;
其他
FreqNs & lt= CNTs
FreqNx & lt= CNTx
-Freq & lt;=(clk _ freq/CNTs * CNTx);
结束if;
结束if;
结束进程计数;
结束行为;
下面是为上述模块编写的测试平台,已经通过Modelsim下的仿真。因为数据量大,建议不要用Altera和ISE仿真。
-
图书馆ieee
使用IEEE . STD _ logic _ 1164。所有;
使用IEEE . STD _ logic _ unsigned . all;
使用ieee.numeric_std。所有;
实体tb是
终结TB;
tb的架构行为是
-被测装置的部件声明(UUT)
分量频率计
端口(
clk:在std_logic中;
复位:在std_logic中;
Fx:在std_logic中;
freq ns:OUT natural;
freq NX:OUT natural;
频率:超越自然
);
末端组件;
-输入
信号clk:STD _ logic:= ' 0 ';
信号复位:STD _ logic:= ' 1 ';
信号Fx:STD _ logic:= ' 0 ';
-产出
信号频率:自然;
信号FreqNx:自然;
-信号频率:自然;
-时钟周期定义
常数clk_period:时间:= 500ns
开始
-实例化被测单元(UUT)
uut:频率计端口映射(
clk = & gtclk,
reset = & gt重置,
Fx = & gt外汇,
FreqNs = >频率,
FreqNx = & gtFreqNx,
- Freq = >频率
);
-时钟流程定义
clk_process:进程
开始
clk & lt= '0';
等待clk _ period/2;
clk & lt= '1';
等待clk _ period/2;
结束进程;
-产生待测量的信号
Fx_process:进程
开始
Fx & lt= '0';
等待2 * clk _ period
Fx & lt= '1';
等待2 * clk _ period
结束进程;
刺激过程
进程进程
开始
-保持复位状态100毫秒。
等待clk _ period * 10;
重置& lt= '0';
-在此插入刺激
等等;
结束进程;
结束;
参考原理M/T频率测量方法。