3、简易等精度频率计-王章蓓(打印)
数字系统设计实践 设计报告 试验名称 简易等精度频率计设计 班 级 11电信升本 学生姓名 王章蓓 学 号 113040063 完成日期 2012-05-09 书目 任务书2 一、设计任务2 二、设计要求2 三、设计说明2 正文3 一、运用方法的选择和实现3 1.1等精度频率计3 二、系统设计4 2.1程序总图4 三、系统功能、指标及调试4 3.1输入模块设计4 3.2分频器模块设计5 3.3同步电路模块设计5 3.4门控闸门计数模块设计5 3.5运算模块设计6 3.6除法器进制转化模块设计6 3.7限制输出模块设计7 四、系统模块程序8 4.1分频模块程序8 4.2寄存器模块8 4.3输出模块9 五、引脚配置10 六、系统测试11 任务书 一、 设计任务 1. 设计一个简易等精度频率计。 2. 通过7段数码管干脆显示十进制的频率限制字和输出频率。 二、 设计要求 1. 测量范围 信号方波; 幅度TTL电平; 频率1Hz1MHz。 2. 测量误差≤0.1(全量程)。 3. 闸门时间~1s,响应时间~2s。 4. 乘除运算单片机、FPGA、计算器。 5. 计算时钟频率。 三、 设计说明 1. 预置闸门闸门可由一个“与”(或“或”)逻辑门电路实现。 2. 由于D触发器有锁存功能,同步信号由D触发器实现。 3. 输入频率与时钟频率之间的转换可以调用乘除法模块实现。 正文 摘要 等精度频率计中频率的定义是周期信号在单位时间(1s)内的改变次数即周期数。假如在肯定时间间隔T内周期信号重复改变了N次,则频率可表达为f=N/T。本试验实现将需累加计数的信号即频率测量时为被测信号通过由一个“闸门”限制,并由一个“门控”信号限制闸门的开启(计数允许)与关闭(计数停止)输出一个同步信号,经计数器A计数器B计数后通过运算电路还原出原始输入信号的频率。本试验基于FPGA,通过QuartusII软件编写的等精度频率计,通过编写,画图,模拟,仿真,调试等,最终在硬件箱上实现规定范围内的随意频率的调试,并用7段数码管干脆显示。 一、运用方法的选择和实现 1.1等精度频率计 图1-1等精度频率计原理图 输入端 显示器清零端clr; 外部被测信号fx。 输出端 以十进制的形式显示被测信号的频率。 误差估计 误差与被测频率fx无关,这就是等精度测量方法。 首先将预置闸门选择为0.5hz,占空比为50。|误差|1/T*fs≤0.1,因为最大测试频率达到1Mhz,所以计算器A选择为20位,计算器B选择为14位,预闸门脉宽T为1s,fs为10KHz,可以满意最大计数值误差为0.1的要求。显示用试验开发平台上的6个数码管干脆显示(四个整数位、两个小数位)。 二、系统设计 2.1程序总图 用试验箱内部时钟作为系统时钟,频率选择为10Khz;将时钟通过预置闸门脉冲发生器产生频率为0.5hz,脉宽为1s的同步后的闸门脉冲;预置闸门脉冲发生器通过计数器来实现;同步电路采纳D触发器,闸门AB采纳与门;通过闸门A、B对输入波形和系统时钟波形进行计;计数器AB采纳带异步清零端的计数器,最终讲两计数器连入两个寄存器,在同步后的脉冲下降沿来临时将数据锁存,然后将所存的计数值Na,Nb通过LPM乘除法模块进行频率公式计算,最终将计算值干脆输出,便利视察。 三、系统功能、指标及调试 3.1输入模块设计 图3.1-1输入模块引脚 模块说明 en系统清零端,en0时系统自动清零; fx 由信号发生器产生被测的方波信号; fc 芯片外时钟发生器,依据误差要求,设定为10KHz; high_or_low 等于0时输出所得结果前八位,反之输出剩下的两位。 3.2分频器模块设计 图3.2分频器模块 模块说明 将fc作为时钟脉冲输入,仿照单片机的延时电路和计数器,Tc1/10000s,实现跳变1000次时限制输出翻转一次,从而产生脉宽为1s的门控信号。 3.3同步电路模块设计 图3.3同步电路模块 模块说明 运用同步电路模块来产生同步的闸门脉冲信号。同步电路运用D触发器形式,由于D触发器有锁存功能,因此能产生同步信号。 3.4门控闸门计数模块设计 图3.4门控闸门计数模块 模块说明 利用计数器分别求出在1s的门控信号内被测信号fx与系统时钟fc所经过的个数Nx和Nc,同步后的fx和fc分别上升沿触发两个计数器计数,等将数据存入寄存器后,两计数器延时清零,打算下一次任务。位数说明见运算模块。 3.5运算模块设计 图3.5运算模块 模块说明 基于运算公式f共计 14位。 3.6除法器进制转化模块设计 3.6-1触发器进制转化模块1 其实际模块电路为 图3.6-2触发器进制转化模块2 3.7限制输出模块设计 图3.7限制输出模块 模块说明 输出显示模块从运算模块中获得干脆显示输出六位有效数字(两位是小数部分)。 四、系统模块程序 4.1分频模块程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity a is port en,fcin std_logic; f_outout std_logic; end a; architecture behave of a is signal countinteger range 0 to 10000; signal cstd_logic; begin processen,fc begin if en0 then f_out0; count0; elsiffcevent and fc1 then ifcount10000then countcount1; else count0; cnot c; end if; end if; f_outc; end process; end behave; 4.2寄存器模块 寄存器1 library ieee; use iee