EDA课程设计——多功能数字钟

上传人:陈** 文档编号:95190212 上传时间:2022-05-24 格式:DOC 页数:18 大小:134.50KB
收藏 版权申诉 举报 下载
EDA课程设计——多功能数字钟_第1页
第1页 / 共18页
EDA课程设计——多功能数字钟_第2页
第2页 / 共18页
EDA课程设计——多功能数字钟_第3页
第3页 / 共18页
资源描述:

《EDA课程设计——多功能数字钟》由会员分享,可在线阅读,更多相关《EDA课程设计——多功能数字钟(18页珍藏版)》请在装配图网上搜索。

1、精品范文模板 可修改删除撰写人:_日 期:_哈尔滨工业大学(威海)电子学课程设计报告带有整点报时的数字钟设计与制作姓名:蒋栋栋班级: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一、课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。这

2、是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。二、课程设计基本要求掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。三、设计课题要求(1)构造一个24小时制的数字钟。要求能显示时、分、秒。(2)要求时、分、秒能各自独立的进行调整。(3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,到达0

3、0分00秒时,整点报时。整点报时声的频率应与其它的报时声频有明显区别。#设计提示(仅供参考):(1)对频率输入的考虑数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。(2)计时部分计数器设计的考虑分、秒计数器均为模60计数器。小时计数为模24计数器,同理可建一个24进制计数器的模块。(3)校时设计的考虑数字钟校准有3个控制键:时校准、分校准和秒校准。微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按

4、一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。(4)报时设计的考虑可以将高频时钟分频得到约2KHz和1KHz的音频,作为数字钟的报时频率。当电子钟显示XX:59:50时,数字钟开始报时“DO,持续一秒,而且每隔一秒报一下,直至显示XX:00:00时报“DI,持续一秒后停止。最后输出至喇叭。应调用元件库中的逻辑门建一个控制报时的模块。(5)建一个七段译码的模块因在系统可编程器件实验箱上的数码管没有经过译码,故要用AHDL语言写一个七段译码的模块,且应考虑数码管为共阳极。数码管上的点(D2、D4、D6)应置Vcc。四、课程设计所需要仪器1

5、、计算机一台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;entit

6、y fre isport(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre issignal 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;

7、begin if clkevent 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 clkevent and clk=1 then if cnt = 12499 then cnt := 0 ; data2kh

8、z = 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 data1khzevent and data1khz=1 then if sel=0 then cnt:=0; else if cnt = 499 then cnt := 0 ;data1hz = not data1hz ; else cnt := cnt +

9、1; end if; end if; end if; end process clk1hz_pro; end beh;输入模块电路图:2.2计数器模块由秒计数器,分计数器,时计数器组成了最基本的数字钟计时电路,两个六十进制计数器与二十四进制计数器组合构成。程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;entity shuzizhong isport(clk_change : in std_logic;s_en,m_en,h_en

10、:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0);end shuzizhong;architecture behav of shuzizhong issignal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=0

11、000;signal sout,mout,hout :std_logic :=0;begin-秒的60进制进制 counter_sec_l : process(clk_change,s_en) begin sl=low_rega;sh=high_rega;ml=low_regb;mh=high_regb;hl=low_regc;hh=high_regc; if clk_changeevent and clk_change=1 then if s_en=1 then if low_rega=1001 then low_rega = 0000; else low_rega = low_rega+1

12、; end if; end if; end if; end process counter_sec_l; counter_sec_h : process(clk_change,s_en,low_rega) begin if clk_changeevent and clk_change=1 then if s_en=1 then if low_rega=1001 then if high_rega =0101then high_rega = 0000; else high_rega = high_rega+1; end if; end if; end if; end if; end proces

13、s counter_sec_h; sout = 1 when low_rega=1001 and high_rega=0101 else 0; -分钟的60进制设置 counter_min_l : process(clk_change,m_en) begin if clk_changeevent and clk_change=1 then if m_en=1 then if sout=1or sel=0 then if low_regb=1001 then low_regb = 0000; else low_regb = low_regb+1; end if; end if; end if;

14、end if; end process counter_min_l; counter_min_h : process(clk_change,m_en,low_regb) begin if clk_changeevent and clk_change=1 then if sout=1or sel=0 then if m_en=1 then if low_regb=1001 then if high_regb =0101then high_regb = 0000; else high_regb = high_regb+1; end if; end if; end if; end if; end i

15、f; end process counter_min_h; mout = 1 when low_regb=1001 and high_regb=0101and sout=1 else 0; -小时的24进制设置counter_hour_l : process(clk_change,h_en) begin if clk_changeevent and clk_change=1 then if h_en=1 then if mout=1or sel=0 then if low_regc=1001or hout=1 then low_regc = 0000; else low_regc = low_

16、regc+1; end if; end if; end if; end if; end process counter_hour_l; counter_hour_h : process(clk_change,h_en,hout) begin if clk_changeevent and clk_change=1 then if mout=1or sel=0 then if h_en=1 then if hout=1 then high_regc=0000; else if low_regc=1001 then high_regc = high_regc+1; end if; end if; e

17、nd if; end if; end if; end process counter_hour_h; hout = 1 when low_regc=0011 and high_regc=0010 else 0; secout=sout;minout=mout;hourout=hout; a=high_regb&low_regb&high_rega&low_rega ; end behav;输入模块电路图:2.3控制模块分五个状态0状态正常计时,按下按键进入下一状态开始调时模式1,按下按键进入调秒模式2,按下按键进入调分模式3,按下按键进入调小时模式4.按下按键恢复正常计时模式。程序代码:lib

18、rary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_press isport( set ,mode: in std_logic; clk1khz,clk1hz: in std_logic; secout,minout: in std_logic; clk_change,clk2hz_en:out std_logic ; sel,s_ce,m_ce,h_ce:out std_logic; s_en,m_en,h_en:out std_logic ); end key_press; arc

19、hitecture beh of key_press is signal key1,key2:std_logic; signal sce_reg, mce_reg ,hce_reg:std_logic ; signal ssl,ssen,mmen,hhen:std_logic; signal con : integer range 0 to 4 :=0; -按键按下(延时) begin key_press2 : process(set,clk1khz) variable cnt :integer range 0 to 999; begin if set=0 then if clk1khzeve

20、nt and clk1khz=1then if cnt=50 and set=0 then cnt :=cnt+1; key2 = 1; else cnt:=cnt+1;key2 = 0; end if; end if; else cnt:=0; key2=0; end if; end process key_press2; key_press1 : process(mode,clk1khz) variable cnt :integer range 0 to 999; begin if mode=0 then if clk1khzevent and clk1khz=1then if cnt=5

21、0 and mode=0 then cnt :=cnt+1; key1 = 1; else cnt:=cnt+1;key1 = 0; end if; end if; else cnt:=0; key1=0; end if; end process key_press1; count : process(key1,key2) begin if key1event and key1=1 then if con=4 then con=0; else con ssl=1; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1; cl

22、k2hz_en ssl=0; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1; clk2hz_en ssl=0; sce_reg = 1;ssen =1; mce_reg = 0;mmen =0; hce_reg = 0;hhen =0; clk2hz_en ssl=0; sce_reg = 0;ssen =0; mce_reg = 1;mmen =1; hce_reg = 0;hhen =0; clk2hz_en ssl=0; sce_reg = 0;ssen =0; mce_reg = 0;mmen =0; hce

23、_reg = 1;hhen =1; clk2hz_en ssl=0; sce_reg = 0;ssen =1; mce_reg = 0;mmen =1; hce_reg = 0;hhen =1; clk2hz_en s_ce=sce_reg; m_ce=mce_reg; h_ce=hce_reg; clk_change s_ce=ssen; m_ce=mmen; h_ce=hhen; clk_change s_ce=ssen; m_ce=secout; h_ce=minout; clk_change=clk1hz; end case; end process sel_pro; sel=ssl;

24、s_en=ssen;m_en=mmen;h_en dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout dataout null; end case; end process; end ;输入模块电路图:2.5显示模块使用七段数码管显示小时、分钟与秒程序代码:library ieee;use ieee.std_logic_1164.all;entity scan isport(clk1khz : in std_

25、logic;sl,sh,ml,mh,hl,hh : in std_logic_vector(3 downto 0);clk2hz_en : in std_logic;s_ce,m_ce,h_ce : in std_logic;en_out : out std_logic_vector(7 downto 0);dataout : out std_logic_vector(3 downto 0);end scan;architecture beh of scan issignal cnt : integer range 0 to 7;signal en : std_logic_vector(7 d

26、ownto 0);signal clk2hz : std_logic; signal h_ce_reg,m_ce_reg,s_ce_reg : std_logic;begin h_ce_reg = not h_ce; m_ce_reg = not m_ce; s_ce_reg = not s_ce; cnt_pro : process(clk1khz) begin if clk1khzevent and clk1khz=1 then if cnt = 7 then cnt = 0; else cnt = cnt + 1; end if; end if; end process cnt_pro;

27、 clk2hz_pro :process(clk1khz) variable c : integer range 0 to 499 := 0; begin if clk1khzevent and clk1khz=1 then if clk2hz_en =1 then if c =499 then c := 0 ; clk2hz = not clk2hz; else c := c + 1; end if; else clk2hz dataout = sl;en dataout = sh;en dataout = ml;en dataout = mh;en dataout = hl;en data

28、out = hh;en dataout = 1010;en dataout = 1010;en null; end case; end process scan_pro; en_out c1 c1=0; end case; end process ring_bell; bs: process(c1) begin if sel=1 then if c1=1 then ring=0; else ring=1; end if; end if; end process bs; bell=ring; end zhong; 输入模块电路图:整体模块电路图六、调试中遇到的问题及解决的方法:1、编程时,经常导

29、致语法错误,如:“;”没有写上,变量类型没有预先标明,前后变量名字由于缺少一个或多一个字母而导致出错。解决办法:对照错误,认真检查程序,看哪个地方的标点,变量没有写上或标明。2、进行编译或波形仿真时,经常得到的不是预想中的结果。解决办法:将需要编译或进行仿真的实体文件置顶,经检错无误后,进行波形仿真,在仿真之前需要合理设置仿真结束时间和信号周期。3、在控制时间的显示的时候,由于变量太多多发现不能完全的控制住变量,导致显示的时候出现了乱码,数码管显示不正常解决办法:减少变量,仔细推敲,合理命名。七、心得体会一个多星期的课程设计让我受益匪浅,也让我真正明白理论与实践相结合的重要性。通过具体实践才能让自己清楚哪些知识已经掌握,哪些知识仍需巩固加强。与此同时,我也对EDA以及VHDL语言有了进一步了解,对于其结构、语法、功能等认识不少。当然,我目前所做的还仅仅只是一些基本操作,要想真正将其融会贯通还需要今后更多的学习与实践。虽然只是一个小设计,我却也从中学到了不少设计流程和一些相关问题。设计是一个十分严谨的过程,容不得随意和马虎。要想快速而高效地完成一项设计,必须先有一个清晰明了的设计思路,设想好一个整体框架,然后在此基础上,逐渐将各个部分功能进行完善。在设计的过程中,也曾遇到不少困难,但正所谓坚持就是胜利,要想取得成功,必须要有努力付出,这样所取得的结果才更有意义。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!