1 / 20
文档名称:

基于fpga数字频率计 (可测占空比).doc

格式:doc   大小:23KB   页数:20页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于fpga数字频率计 (可测占空比).doc

上传人:wz_198614 2017/6/5 文件大小:23 KB

下载得到文件列表

基于fpga数字频率计 (可测占空比).doc

文档介绍

文档介绍:------------------------------------------------------------------------------------------------ ——————————————————————————————————————基于 FPGA 数字频率计( 可测占空比) VHDL 课程设计报告——基于 FPGA 的数字频率计姓名: 学号: 班级: 目录 1 设计原理………………………………………………….1 2 功能设计…………………………………………………..1 3 系统总体框图…………………………………………… 1 4 各功能块设计说明…………………………………….2 5 实验结果…………………………………………………… 14 6 结论分析…………………………………………………….15 一、设计原理频计的基本原理是用一个频率稳定度高的频率源作为基准时钟, 对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数, 即闸门时间为 1s。闸门时间可以根据需要取值, 大于或小于 1s 都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长, 则每测一次频率的间隔就越长。闸门时间越短, 测得的频率值刷新就越快,但测得的频率精度就受影响。一般取 1s 作为闸门时间,此测量方法称为直接测频法。由于闸门时间通常不是待测信号的整数倍, 这种方法的计数值也会产生最大为±1 个脉冲误差。进一步分析测量------------------------------------------------------------------------------------------------ ——————————————————————————————————————准确度: 设待测信号脉冲周期为 Tx, 频率为 Fx, 当测量时间为 T=1s 时, 测量相对误差为 Tx/T=Tx=1/Fx 。由此可知直接测频法的测量准确度与信号的频率有关: 当待测信号频率较高时, 测量准确度也较高, 反之测量准确度也较低。二、功能设计 1 、测量范围: 1HZ--------99MHZ ,测量精度± 1HZ 。 2 、测量结果高 4 位与低 4 位进行分页显示。当超过 9999HZ 时,系统亮灯提示超出低 4 位显示范围,可通过按键进行高低 4 位结果的显示切换。高4 位显示时, 伴有小数点位的点亮,提示已成功切换到高 4 位。 3 、测量所测信号的占空比。能够快速测出输入待测信号的占空比, 并且通过按键, 切换到占空比显示状态。 4 、内置自测信号由内部时钟产生三个特定时钟,以供自身测试功能是否正常。三、系统总体框图系统总框图四、各功能块设计说明 1 、时钟发生器通过对 50MH Z 的晶振时钟进行 50M 的分频, 等到一个 1H Z 信号。再通过此信号, 通过 2 分频, 得到一个 的信号, 从而得到高电平为1 秒的闸门控制信号 en 来控制计数器的计数时间. 再通过对 en求------------------------------------------------------------------------------------------------ ——————————————————————————————————————反, 等到锁存信号 load. 而清零信号 clr 则通过en与 1H Z 信号共同产生. 同时对 50MHZ 信号进行 500 分频, 一个两位的 std_logic_vector (1 downto 0) 信号在分频信号的驱动下不断加‘1’, 等到“ 00”、“ 01”、“ 10”、“ 11”四种片选信号, 对应 4 个数码管, 从而驱动数码管的动态扫描显示。时钟发生器的代码如下: library ieee; use ; use ; use ; entity clock is port(clk0:in std_logic; load,en,clr:out std_logic; pian:buffer std_logic_vector(1 downto 0) ); end entity clock; architecture run of clock is signal en1,en2,en3:std_logic; begin onehz:process(clk0) -- 产生 1HZ 信号 t:integer range 0 to 50000000; variable x:std_logic; ----