- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字系统设计报告--数字频率计设计
一、实验目的
了解时序电路设计的一般方法
了解利用可编程器件和VHDL语言进行数字系统开发的方法
掌握数字频率计的设计。
二、实验原理
本次实验要求设计一个数字频率计,频率测量范围为1Hz~50MHz,采用100MHz的基准时钟。刷新时间不大于2秒(最长2秒刷新一次频率显示)。功能示意框图如图3-1:
图3-1 数字频率计功能示意图
本次实验要求设计一个数字频率计,对输入频率进行测量。根据实验的要求,频率测量的范围为1Hz~50MHz,跨度较大,考虑到若完全输出至少需要8位,位数较多,因此可考虑分档显示,用三到四位显示数值,一位显示档位。
本实验要实现一个数字频率计,核心部分是要实现一个脉冲计数器,对输入脉冲进行计数,然后再转化输出。由于需要测量的最小频率为1Hz,可以考虑使用一个频率为0.5Hz的门控信号,让它在高电平期间计数被测信号的上升沿,对于0.5Hz的门控信号而言,它的每个高电平持续时间为1秒,被测信号上升沿的数目即为待测信号的频率。
考虑本次实验的基准时钟为100MHz,因此必须分频到0.5Hz才能完成计数被测信号上升沿的功能,因此要让基准时钟通过加一个分频器以得到0.5Hz的门控信号。
题目指标要求刷新时间不大于2秒,可以在前次计数结束后,即门控信号为低电平期间将计数值清零,计数器停止计数。当门控信号的上升沿来时,计数器进入下一次计数,这样刷新时间为2秒,符合设计要求。
对于显示模块的实现,由实验版的电路图中看可发现在控制数码管显示只有一个4511去控制,则一次只能显示一个数码,因此如何实现多位的显示,是本模块实现的关键。
实验电路图如下:
三、源程序代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity corma is
port(
clr,sig,door:in std_logic;
alm:out std_logic;
m3,m2,m1,m0,dang_out:out std_logic_vector(3 downto 0)
);
end entity;
architecture behav of corma is
signal q3,q2,q1,q0,dang:std_logic_vector(3 downto 0);
begin
process(sig,door) --主程序部分,实现对待测频率的测量
variable c0,c1,c2,c3,c4,c5,c6:std_logic_vector(3 downto 0);
variable x:std_logic;
begin
if(rising_edge(sig))then
if(door=1)then
if c01001 then
c0:=c0+1;
else
c0:=0000;
if c11001 then
c1:=c1+1;
else
c1:=0000;
if c21001 then
c2:=c2+1;
else
c2:=0000;
if c31001 then
c3:=c3+1;
else
c3:=0000;
if c41001 then
c4:=c4+1;
else
c4:=0000;
if c51001 then
c5:=c5+1;
else
c5:=0000;
if c61001 then
c6:=c6+1;
else
c6:=0000;
alm=1;
end if;
end if;
end if;
end if;
end if;
end if;
end if;
else
if clr=0 then
alm=0;
end if;
c0:=0000;--Q低电平清零
c1:=0000;
c2:=0000;
c3:=0000;
c4:=0000;
c5:=0000;
c6:=0000; end if;
if c6/=0000 then
q3=c
文档评论(0)