EDA课程设计——多功能数字钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
哈尔滨工业大学(威海)
电子学课程设计报告带有整点报时的数字钟设计与制作
姓名: 蒋栋栋
班级: 0802503
学号: 080250331
指导教师: 井岩
目录
一、课程设计的性质、目的和任务 (3)
二、课程设计基本要求 (3)
三、设计课题要求 (3)
四、课程设计所需要仪器 (4)
五、设计步骤 (4)
1、整体设计框图 (4)
2、各个模块的设计与仿真 (4)
2.1分频模块 (4)
2.2计数器模块 (6)
2.3控制模块 (10)
2.4数码管分配 (13)
2.5显示模块 (14)
2.6报时模块 (16)
六、调试中遇到的问题及解决的方法 (18)
七、心得体会 (18)
一、课程设计的性质、目的和任务
创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
二、课程设计基本要求
掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。
三、设计课题要求
(1)构造一个24小时制的数字钟。要求能显示时、分、秒。
(2)要求时、分、秒能各自独立的进行调整。
(3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。整点报时声的频率应与其它的报时声频有明显区别。
#设计提示(仅供参考):
(1)对频率输入的考虑
数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。
(2)计时部分计数器设计的考虑
分、秒计数器均为模60计数器。
小时计数为模24计数器,同理可建一个24进制计数器的模块。
(3)校时设计的考虑
数字钟校准有3个控制键:时校准、分校准和秒校准。
微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。
(4)报时设计的考虑
可以将高频时钟分频得到约2KHz和1KHz的音频,作为数字钟的报时频率。当电子钟显示XX:59:50时,数字钟开始报时“DO",持续一秒,而且每隔一秒报一下,直至显示XX:00:00时报“DI",持续一秒后停止。最后输出至喇叭。应调用元件库中的逻辑门建一个控制报时的模块。
(5)建一个七段译码的模块
因在系统可编程器件实验箱上的数码管没有经过译码,故要用AHDL语言写一个七段译码的模块,且应考虑数码管为共阳极。数码管上的点(D2、D4、D6)应置Vcc。
四、课程设计所需要仪器
1、计算机一台
2、quartusⅡ软件
3、FPGA开发板
五、设计步骤
1、模块介绍
(1)分频模块:产生1Hz、1KHz、2KHz频率
(2)计数器模块:生成60进制、24进制计数器
(3)控制模块:按键控制、按键消抖
(4)显示模块:7段数码管显示器,分别显示小时、分钟、秒
(5)报时模块:进行整点报时
2、各个模块的设计与仿真
2.1分频模块
CLK晶振频率50MHZ,分成2KHZ,1KHZ,1HZ的信号。基准1HZ信号作为时钟计时的秒计数时钟信号;分频的1KHZ,2KHZ信号用于报时电路的不同声讯。
程序代码:
library ieee;
use ieee.std_logic_1164.all;
entity fre is
port(
clk ,sel: in std_logic;
clk1hz,clk1khz,clk2khz:out std_logic);
end fre;
architecture beh of fre is
signal data1khz,data2khz,data1hz : std_logic := '0';
begin
clk1hz <= data1hz;
clk1khz <= data1khz;
clk2khz <= data2khz;
clk1khz_pro : process(clk) --产生1khz信号 variable cnt : integer range 0 to 24999;
begin
if clk'event and clk='1' then
if cnt = 24999 then
cnt := 0 ; data1khz <= not data1khz;
else
cnt := cnt + 1;
end if;
end if;
end process clk1khz_pro;
clk2khz_pro : process(clk) --产生2khz信号 variable cnt : integer range 0 to 12499;
begin
if clk'event and clk='1' then
if cnt = 12499 then
cnt := 0 ; data2khz <= not data2khz;
else
cnt := cnt + 1;
end if;
end if;
end process clk2khz_pro;
clk1hz_pro : process(data1khz) --产生1hz 信号 variable cnt : integer range 0 to 499;
begin
if data1khz'event and data1khz='1' then
if sel='0' then cnt:=0;
else if cnt = 499 then
cnt := 0 ;data1hz <= not data1hz ;
else
cnt := cnt + 1;
end if;
end if;
end if;
end process clk1hz_pro;
end beh;
输入模块电路图: