1、8 16采用测频原理的数字频率计 设计要求 采用测频法 设计一个4位十进制数字显示的数字频率计 其测量的范围为1 9999KHz 测频法的测量原理 在确定的闸门时间Tw内 记录被测信号的变化周期数 或脉冲个数 Nx 则被测信号的频率为 fx Nx Tw 这种方法的计数值会产生 1个字误差 测试精度与计数器中记录的数值Nx有关 测频法的测量原理图 系统组成 系统包含输入模块 FPGA模块 显示模块 输入模块包括基准时钟 复位信号和被测信号 FPGA模块是系统的核心部分 其包括分频 7位十进制计数器 数据处理和动态译码 分频部分的作用是对基准时钟进行分频 得到一个闸门信号 作为7位十进制计数器的使
2、能信号 数据处理部分作用 取7位十进制计数器的有效高4位数据 送入动态显示译码部分进行显示译码 显示模块用数码管显示 数字频率计系统组成方框图 数字频率计VHDL程序与仿真 电路符号 频率计的VHDL程序 文件名 plj vhd 功能 具有4位显示 能自动根据7位十进制计数的结果 自动选择高4位有 效数据的频率计 高4位进行动态显示 小数点表示是千位 即KHz 最后修改日期 2004 4 9 libraryieee useieee std logic 1164 all useieee std logic unsigned all entitypljisport start instd logi
3、c 复位信号clk instd logic 系统时钟clk1 instd logic 被测信号yy1 outstd logic vector 7downto0 八段码w1 outstd logic vector 3downto0 数码管位选信号endplj 接下页 architecturebehavofPLjissignalb1 b2 b3 b4 b5 b6 b7 std logic vector 3downto0 十进制计数器signalbcd std logic vector 3downto0 BCD码寄存器signalq integerrange0to49999999 秒分频系数sign
4、alqq integerrange0to499999 动态扫描分频系数signalen bclk std logic 使能信号 有效被测信号signalsss std logic vector 3downto0 小数点signalbcd0 bcd1 bcd2 bcd3 std logic vector 3downto0 寄存7位十位计数器中有效的高4位数据begin 接下页 second process clk 此进程产生一个持续时间为一秒的的闸门信号beginifstart 1 thenq 0 elsifclk eventandclk 1 thenifq 49999999thenq q 1
5、elseq 49999999 endif endif ifq 49999999andstart 0 thenen 1 elseen 0 endif endprocess and2 process en clk1 此进程得到7位十进制计数器的计数脉冲beginbclk clk1anden endprocess 接下页 com process start bclk 此进程完成对被测信号计脉冲数beginifstart 1 then 复位b1 0000 b2 0000 b3 0000 b4 0000 b5 0000 b6 0000 b7 0000 elsifbclk eventandbclk 1 t
6、henifb1 1001 thenb1 0000 此IF语句完成个位十进制计数ifb2 1001 thenb2 0000 此IF语句完成百位十进制计数ifb3 1001 thenb3 0000 此IF语句完成千位十进制计数ifb4 1001 thenb4 0000 此IF语句完成万位十进制计数ifb5 1001 THENb5 0000 此IF语句完成十万位十进制计数ifb6 1001 thenb6 0000 此IF语句完成百万位十进制计数ifb7 1001 thenb7 0000 此IF语句完成千万位十进制计数elseb7 b7 1 endif elseb6 b6 1 endif elseb5
7、 b5 1 endif elseb4 b4 1 endif elseb3 b3 1 endif elseb2 b2 1 endif elseb1 b1 1 endif endif endprocess 接下页 process clk 此进程把7位十进制计数器有效的高4位数据送如bcd0 3 并得到小数点信息beginifrising edge clk thenifen 0 thenifb7 0000 thenbcd3 0000 thenbcd3 0000 thenbcd3 b5 bcd2 b4 bcd1 b3 bcd0 b2 sss 1011 elsebcd3 b4 bcd2 b3 bcd1
8、b2 bcd0 b1 sss 1111 endif endif endif endprocess 接下页 weixuan process clk 此进程完成数据的动态显示beginifclk eventandclk 1 thenifqq 99999thenqq qq 1 bcd bcd3 w1 0111 ifsss 0111 thenyy1 0 0 elseyy1 0 1 endif elsifqq 199999thenqq qq 1 bcd bcd2 w1 1011 ifsss 1011 thenyy1 0 0 elseyy1 0 1 endif elsifqq 299999thenqq q
9、q 1 bcd bcd1 w1 1101 ifsss 1101 thenyy1 0 0 elseyy1 0 1 endif elsifqq 399999thenqq qq 1 bcd bcd0 w1 1110 ifsss 1110 thenyy1 0 0 elseyy1 0 1 endif elseqq 0 endif endif endprocess 接下页 m0 process bcd 译码begincasebcdiswhen 0000 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 yy1 7downto1 1111111 endcase endprocess endbehav 频率计仿真 1 频率计仿真全图2 频率计仿真 开始计数部分3 频率计仿真 结束结束 动态显示部分4 频率计仿真 复位 重新测频部分注 仿真中秒分频为50K 动态显示的分频系数也相应调小 1 频率计仿真全图 2 频率计仿真 开始计数部分 3 频率计仿真 结束结束 动态显示部分 4 频率计仿真 复位 重新测频部分