ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:358.84KB ,
资源ID:2610166      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2610166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电子钟设计EDA大作业.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

电子钟设计EDA大作业.docx

1、电子钟设计EDA大作业课程设计(论文)任务书 信息工程学院 学院通信工程专业 2011.1,2,3,4 班 一、课程设计(论文)题目 电子钟设计 二、课程设计(论文)工作自2014 年1 月 5 日起至 2014 年 1 月 11 日止。三、课程设计(论文) 地点: 华东交通大学4-410,图书馆 四、课程设计(论文)内容要求:1本课程设计的目的(1)掌握EDA技术及CPLD/FPGA的开发流程;(2)掌握自顶向下的设计思想;(3)掌握电子钟的工作原理;(4)掌握系统设计的分析方法;(5)提高学生的科技论文写作能力。 2课程设计的任务及要求1)基本要求:(1)用HDL设计一个多功能数字钟,包含

2、以下主要功能:精确计时,时间可以24小时制或12小时制显示; (2)日历:显示年月日星期;(3)能用QuartusII软件仿真; (4)把设计文件进行仿真并下载到实验箱实现功能验证。2)创新要求: 在基本要求达到后,可进行创新设计,如增加报时等、秒表功能模块。 3)课程设计论文编写要求(1)要按照书稿的规格打印誊写论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)论文装订按学校的统一要求完成4)答辩与评分标准: (1)完成系统分析:30分; (2)完成设计过程:30分; (3)完成仿真:10分;(4)完成下载:10分;(5)回答问题:20分。5)参考文献:(1)潘松,黄继业

3、编著 .EDA技术实用教程 ,2005 ,科学出版社(2)徐志军,徐光辉编著 . CPLD/FPGA的开发与应用 ,电子工业出版社,2001.1(3) 6)课程设计进度安排内容 天数地点构思及收集资料 1图书馆设计与调试 3实验室撰写论文 2图书馆、实验室学生签名: 2014 年 1 月 11 日课程设计(论文)评审意见(1)设计程序(40分):优()、良()、中()、一般()、差(); (2)仿真结果(10分):优()、良()、中()、一般()、差();(3)下载结果(10分):优()、良()、中()、一般()、差();(4)回答问题(10分):优()、良()、中()、一般()、差();(5

4、)报告成绩 (30分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()评阅人:朱 路 职称: 副教授 2014 年 1 月12 日o目录目录 1绪论 2第一章 总体设计 3一、功能概述 3二、引脚功能 31、时钟输入 32、时分秒或年月日输入 33、清零输入 44、整点报时闹铃开关输入 45、时间显示模式开关输入 46、上午下午状态输出 47、时分秒、年月日、秒表显示输出 48、整点报时、闹铃声音输出 4第二章 模块分析 4一、时间显示及时间修改模块 41、TIME子模块介绍(实现功能程序代码见附录I) 52、调秒功能实现分析 5二、日历显示及日历设

5、置模块 6三、秒表模块 8四、闹铃设置模块 9五、整点报时及闹铃使能模块 10六、功能切换及显示切换模块 121、显示切换模块 122、功能切换模块 13七、各模块的整合 14第三章 硬件测试结果 15小结 16谢辞 16参考文献 16附录 17绪论本次课程设计主要介绍VHDL电子时钟的设计方法,采用的软件是MAXPLUS II。随着现代集成电路的发展,CPLD/FPGA芯片性越来越好,VHDL硬件描述语言使得我们设计一个电路只写一些代码就可以了。其实,电子时钟的设计可以采用众多方法。利用单片机我们可以设计出一个比较简单的电子时钟系统,使用它的好处是我们可以采用汇编、C语言来设计这个系统,这些

6、语言给我们提供了许多接口,这对我们编写代码带来了很大的方便。单片机设计出来的电子时钟也有它的不足之处,可扩展性差,比如说我们需要在电子时钟的基础之上添加一起其它的功能,那很可能是我们不仅仅需要把整个程序修改,甚至可能需要对硬件电路作出修改,给我们的设计带来较大的不便。利用一些组合、时序电路同样也可以设计出一个简单的电子时钟,这样做的是可能我们的花费会比较少,由于集成电路集成度的不断发展,一些芯片可能会比较廉价,但是要设计好一个电子时钟系统的话,仅仅使用一些简单的芯片来实现是比较复杂的,更关键的是,我们把电路通过这种方法设计好之后,基本上就没有了扩展性,要在原由的基础之上想发动电路几乎是不可能的

7、。本文介绍采用VHDL硬件描述语言来描述电子时钟系统解决了以上所有弊端,首先就设计简易程度来说,它会让传统的电路设计方法汗颜,我们可能仅仅几行代码就可以把一个电路设计出来,如果在传统的电路上设计,我们却可能要花费很长的时间,有时甚至可能会遗漏一些情况导致我们的电路不满足设计要求。另外一点,VHDL硬件描述语言设计出来的电路可移植性特别强,在CPLD/FPGA上设计好一电路之后,我们可以很方便地在原由的基础之上加上一些其它的电路结构,而却不对原来的电路产生任何影响。综上所述,本文将介绍利用VHDL语言设计电子时钟的设计方法,下面开始我们的设计!第一章 总体设计顶层文件一、功能概述整个系统分为六个

8、模式:时间显示模式、日历显示模式、时间设置模式、日历设置模式、秒表模式、闹铃铃设置模式。时间、日历显示模式中,除了切换模式功能键有效外其它任何键都是无效的,而时间、日历、闹铃设置模式中系统中设计所有的功能键都是有效的,秒表模式中只有切换模式和清零功能键是有效的。二、引脚功能1、时钟输入clock为1Hz频率输入时钟,soundclk1为整点报时时声音频率输入端,soundclk2为闹铃时声音频率输入端2、时分秒或年月日输入时间设置、闹铃设置模式时,clk0为调整秒的时钟,clk1为调整分的时钟,clk2为调整时的时钟;日历设置模式中,clk0为调整日的时钟,clk1为调整月的时钟,clk2为调

9、整年的时钟。3、清零输入当模式为时间设置,日历设置,闹铃设置模式时,reset为异步清零端,低电平有效。4、整点报时闹铃开关输入opensound为整点报时开关,当opensound为高电平时,整点报时功能开启;openalarm为闹铃开关,当opensound为高电平时,闹铃功能开启。5、时间显示模式开关输入Timemode为时间显示开关,当timemode为低电平时,时间显示为12进制的;为高电平时显示为24进制的。6、上午下午状态输出当timemode为低时,时间为12进制的,morningafternoon显示上下午状态,为低电平时代表为上午,为高电平时代表为下午;24进制时,morn

10、ingafternoon一直为低电平。7、时分秒、年月日、秒表显示输出q0、q1、q2、q3、q4、q5、q6、q7测试时直接接八个译码的四个引脚。8、整点报时、闹铃声音输出sound接扬声器,当只在整点报时的时候,输出soundclk1,当只在闹铃的时候,输出soundclk2,当刚好在整点报时并且有在闹铃的时候,输出soundclk2,当整点报时和闹铃都不符合条件的时候,sound为低电平。第二章 模块分析一、时间显示及时间修改模块1、TIME子模块介绍(实现功能程序代码见附录I)MODE=0时十二进制 MODE=1时二十四进制。ISC=0时,调整时间模式,此时分别调整时分秒并不影响其它的

11、,比如调整秒时由59加1变成00时分不加1;ISC=1时计时模式,此时改变CLKSECOND,CLKMINUTE,CLKHOUR将影响SECOND,MINUTE,HOUR的输出,即将进行进位。RESET=0时,时分秒清零。SECOND秒译码输出MINUTE分译码输出 HOUR时译码输出 TMODE时间进制显示译码输出(12和24) CSECOND秒溢出,CMINUTE分溢出,CODE天溢出,上升沿代表新的一天。MORNINGAFTERNOON显示上下午状态,高时代表十二进制的下午,低时代表上午或者当前显示的为24进制。2、调秒功能实现分析secondpro:process(clksecond,

12、reset)beginif reset=0 then second0=0000;second1=0000;csecondtemp=0;elsif clksecondevent and clksecond=1 then if second1=0101 and second0=1001 then second1=0000;second0=0000; if isc=1 then csecondtemp=1; else csecondtemp=0; end if; elsif second0=1001 then second1=second1+1;second0=0000;csecondtemp=0;

13、 else second0=second0+1;csecondtemp=0; end if;end if;end process;以上显示的是调秒时的进程,监测两个信号,clksecond接的是调秒按钮,reset接的是清零按钮,reset设置为异步清零。当clksecond来一个上升时,先判断信号second1(接秒显示的高位数码管)和信号second0(接秒显示的低位数码管)是否为59,如果是的话second1=second0=“0000”,在这种情况下,再判断isc是否为高,为高的话给csecondtemp一个上升沿,否则保持csecondtemp为低电平;如果为09、19、29、39或

14、49的话,second1+,second=“0000”;其它情况就只要second0+。很显然,因为如果当前模式为时间显示模式时,调整clksecond、clkminute和clkhour虽然不会产生进位,但却会改变输出的值,所以仅仅用time子模块来实现时间显示及修改模块是不够的,必须加上一定的控制模块,如图2.1所示,把time子模块改成一个符合要求的一个可直接使用的时间显示及设置模块。从图2.1可以看出,为了实现这一模式,另外设计了一个二选一选择器模块。当二选一选择器模块的EN为低电平时,CLK选择CLK1,当EN为高电平时,CLK选择CLK2。由于该子模块设计较简单,这里不再累述。按照

15、设计好电路后,该模块就能够满足设计要求,该模块的实验仿真图:可以看出,即使Hset存在时钟信号,但由于EN拉高了,hour,minute,second的值只会随时钟Clk的变化面变化,正常显示时间,即时间显示模式;即使Clk存在时钟,但由于EN拉低了,hour,minute,second的值只会随Hset、Mset、Sset的变化而变化,为时间设置模式。二、日历显示及日历设置模块CALENDAR子模块介绍(实现功能程序代码见附录II)ISC=0时,调整日历模式,此时分别调整年月日并不影响其它的,比如调整月时由12加1变成00时年不加1;ISC=1时日历显示模式,此时改变CLKDAY,CLKMO

16、NTH,CLKYEAR将影响DAY,MONTH,YEAR的输出,即将进行进位。RESET=0时,年月日清零。DAY日译码输出MONTH月译码输出 YEAR年译码输出 CDAY日溢出,CMONTH月溢出。很显然,和时间显示及设置模块类似,仅仅使用子模块CALENDAR是满足不了要求的,于是在CALENDAR的基础之上,按照时间显示及设置模块的设计方法设计成图2.21就能够满足要求。值得一提高的是,由于日历中的日期比较特殊,有28天、29天、30天甚至31天,这里的设计另外加上了一个很小的模块DAYSUM,用来求解指定年份和月份的总天数,年由YEAR的低两位输入,月由MONTH直接输入,TOTAL

17、DAY为输出天数,当TOTALDAY=“00”时代表是平年的二月份即28天,当TOTALDAY=“01”时代表是闰年的二月份即29天,当TOTALDAY=“10”时代表小月即30天,当TOTALDAY=“11”时代表大月即31天。输出TOTALDAY信号交给CALENDAR,CALENDAR利用这个输入信号对日历进位时作出判断,当TOTALDAY=“00”时,日期最多的天数就是28天,下一天来临时日期数变成新一个月的1号即显示01。功能仿真时序图:从以上图中可以看出,当为2011年02月时,无论怎样调整日期,day的输出也不会超过28天,满足设计要求。下面是一个中子模块DAY的一个进程(用来实

18、时地计算输入年份和月份的总天数):process(year,month)beginif not(yeartemp=00) and monthtemp=00000010 then totaltemp=00; elsif yeartemp=00 and monthtemp=00000010 then totaltemp=01; elsif monthtemp=00000100 or monthtemp=00000110 or monthtemp=00001001 or monthtemp=00001011 then totaltemp=10; elsif monthtemp=00000001 or

19、 monthtemp=00000011 or monthtemp=00000101 or monthtemp=00001000 or monthtemp=00001010 or monthtemp=00001100then totaltemp=11;end if;end process;要说明的是,这里判断一个年份是否为闰年的方法是有点问题的,这里把问题简化了,真正的判断方法是:能被4整除而不能被100整除。能被400整除。只要满足上面一个条件就可以判断一个年份是闰年了,这里仅仅判断一个年份能否被4整除,并没有考虑到能否被100整除,但实际上考虑到电子时钟的使用寿命和现在的年份仅仅考虑能否被4

20、整除就可以了。能被4整除的话就是闰年否则为平年,在二进制里如果一个数值能被4整除那它的低两位肯定都是“00”的。一个年份是平年还闰年只会影响二月份的总天数,其它的月份的天数都是固定的。三、秒表模块秒表功能模块相比其它模块来说较简单的,如上图所示,该模块只需要在8个10进制计数器子模块的基础之上就能够实现了,EN为计数器使能端,当EN为高电平的时候计数器有效,RESET为异步清零端,下面是一个十进制的计数器设计,即图2.31中的子模块SECOND的设计(结构体部分):architecture one of second issignal qtemp:std_logic_vector(3 down

21、to 0):=0000;signal couttemp:std_logic;beginprocess(reset,en,clk)beginif reset=0 then qtemp0);couttemp=0;elseif clkevent and clk=1 thenif en=1 thenif qtemp=1001 then qtemp=0000;couttemp=1; else qtemp=qtemp+1;couttemp=0; end if; end if;end if;end if;下面为秒表模块功能仿真图,仿真过程中让使能EN有效,RESET清零无效,从仿真图可以看出,该模块的设计满

22、足设计要求,即整个显示都是十进制的(099999999依次增加)。四、闹铃设置模块闹铃设置模块元件封装图,有四个信号输入端口和32位信号输出接译码管,其中ALALARMSECOND为设置的秒,ALARMMINUTE为设置的分,ALARMHOUR为设置的时,ALARMMODE固定输出为“88”,用于区别于其它模式。RESET为异步清零端口,EN为CLKSECOND、CLKMINUTE、CLKHOUR使能端,当EN为高电平时,CLKSECOND、CLKMINUTE、CLKHOUR设置有效,如果给它们上升沿,输出将对应地改变。需要说明的是,考虑到时间显示模块中含有十二进制和二十四进制的,但这里闹铃设

23、置模块中并没有考虑到,只设置成了二十四进制的,也就是说,如果事个系统开启了闹铃功能,并且闹铃设计在12时以前,并且时间显示为十二进制的话,那么系统在上午和下午的时刻都会发生闹铃事件;而假如设置的闹铃是在12点以后,那么即闹铃了,而由于显示模式为12进制的,闹铃的声音永远也不会发出。由于课设时间有限,这里就没有在这方面加以改善了,但如果要把它开发成产品的话,这些工作不是必需要去做的,做的思想跟时间显示及设置模块中的思路一致,根据信号输入来决定输入时分秒的输入范围,从而实现真正的闹铃设置功能。下面图4.2是该模块的功能仿真图:从上图可以看出,只要reset为低,那么输出的时分秒都立刻清零,当EN为

24、低电平时,即使用户试图修改时分秒,时分秒输出的值也不会发生改变。闹铃功能模块代码实现见附录III。五、整点报时及闹铃使能模块 在时间显示模块中加上了一个NEWHOUR输出,当当前时间为整点时,NEWHOUR输出高电平并保持一分钟,其它时刻NEWHOUR都是低电平,将此信号接到模块SOUNDEVENT中的NEWHOUR输入,模块SOUNDEVENT就能够据此来判断是否送出整点报时信号了,这里另外加了一个OPENSOUND输入信号,用来识别用户是否开启整点报时功能,当OPENSOUND为高电平时代表开启了,这里的时间输入分别来自时间显示模块及闹铃设置模块中的时间输出,同样地这里加上了OPENALA

25、RAM信号,用来识别用户是否开启了闹铃功能。当开启了整点报时功能并且满足要求时SOUNDOUT输出高电平,其它情况输出低电平;当开启了闹铃功能并且条件满足的时ALARAMOUT输出高电平,其它情况输出低电平。在设计过程中,考虑到扬声器只有一个,而却要实现两种不同频率的声音,这里另外加上了一个SOUND模块,用于控制输出声音的频率,如图5.2所示,CLK1,CLK2分别接两个不同频率的声音信号,在硬件测试过程中,接到两个不同频率的时钟信号代替即可,SEL1.0接到模块SOUNDEVENT中的SOUNDOUT和ALARAM,SOUND模块其实是一个选择器,下面是它的实现代码:LIBRARY IEE

26、E;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sound isport(clk1,clk2:in std_logic;sel:in std_logic_vector(1 downto 0);cout:out std_logic);END ENTITY sound;architecture one of sound isbeginprocess(sel,clk1,clk2)beginif sel= 00 then cout=0;elsif sel=01 then cout=clk1;elsif sel=1

27、0 then cout=clk2;elsif sel=11 then cout=clk2;end if;end process;end architecture one;下表为输入输出关系表:sel值00011011cout输出0clk1clk2clk2模块SOUNDEVENT功能仿真图:当把当前时间和闹铃设置的时间都设置成00点23分02秒时,并且openalarm为高时,alarmout将输出高电平。六、功能切换及显示切换模块1、显示切换模块整个系统分为时间显示,日历显示,时间设置,日历设置,秒表,闹铃设置共六个模式,但它的可视化部分都是用同样的八个译码管,所以在功能切换的时候,就要根据不

28、同的模式来显示对应模块中的输出内容。虽然这里有六个模式,但由于在前面的设计过程中,时间显示模块和时间设置模块是做在一个模块里的,日历显示和日历设置模块做在一个模块里,所以所以这里的显示切换只需要做一个四选一的选择器就可以了。这里显示切换模块用到了八个MUX41,MUX41为四选一选择器,程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux41 IS PORT(a,b,c,d:in std_logic_vector(3 downto 0);q:out std_logic

29、_vector(3 downto 0);sel:in std_logic_vector(1 downto 0);END ENTITY mux41;ARCHITECTURE ONE OF mux41 ISBEGINprocess(sel,a,b,c,d)begin if sel=00 then q=a;elsif sel=01 then q=b;elsif sel=10 then q=c;elsif sel=11 then q=d;end if;end process;END ARCHITECTURE ONE;通过上述程序代码可知,当sel=00时,q输出为a,当sel=01时,q输出为b,当s

30、el=10时,q输出为c,当sel=10时,q输出为d。这在后面的功能切换模块中会用来这些信号。2、功能切换模块所示的CONTROL模块为总个系统的管理模块,用于调度各个模块的正常工作运行。其中SET、TIMEMODE、RESET、CLK0、CLK1、CLK2为输入信号,其它的全部为输出信号,各输出信号分别接到各个模块的使能端、清零端、设置端等。这个管理模块用到状态机的思想,其中SET的状态控制着整个系统的有序进行,给以SET不间断的时钟信号,状态机的状态在各个状态之间循环。此状态机的状态切换示意图:功能切换模块实现代码见附录IV。七、各模块的整合设计好各个模块之后,通过控制管理模块就可以把整个系统综合到一个电路中了,各个模块的连接关系:整个系统的功能仿真图:一启动程序,显示的是时间显示模式,给MODECHANGE一个上升沿后进入日历显示模式,再给一个上升沿进入时间设置模式,图中设置为05点24分46秒,再给一个上升沿进入日历设置模式,图中设置为2011年06月

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2