版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、EDA课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子1201班学号:2姓名:方雅菁指导教师:李世平设计时间:2015年1月9日11日27 / 27文档可自由编辑打印摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟。本设计采用赛林思公司的FPGA作为硬件平台、QUARTUSII作为编写程序和仿真的平台来编译程序并实现管教锁定和下载的软件平台来实现数字钟。本设计的程序用V
2、HDL语言编写,由本人独立设计完成。整体采用TOP-TO-DOWN设计思路。最顶层采用元件例化的方法,各个模块内部采用进程和状态机来设计完成。主要电路为:主控状态机模块、秒计数模块、分计数模块、时计数模块、天计数模块、月计数模块、年计数模块、星期计数模块、整点报时模块。关键词:EDA,数字钟,计数器,状态机,元件例化,FPGA,VHDL目录摘要2一、课程设计目的4二、设计内容和要求42.1实验要求42.2实验设计4三、VHDL程序设计63.1普通年、月、时、分、秒的设计(基本功能)63.2可变进制计数器(天计时)设计(基本功能)73.3主控模块设计83.4星期模块(增加功能)113.5闹钟模块
3、(增加功能)123.6整点报时的实现(增加功能)123.7上下午显示(增加功能)12四、仿真验证134.1普通计数器功能仿真134.2可变天计时功能仿真154.3主控部分功能仿真184.4整点报时功能仿真204.5闹钟功能仿真204.6星期功能仿真204.7上下午显示功能仿真214.8综合功能仿真21五、器件编程下载及设计结果245.1程序总体元件图245.2 Ucf管脚映射文件24六、总结26七、参考文献27一、 课程设计目的掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法,内容包括:l VHDL程序设计、输入在QUARTUSII平台上用VHDL描述系统的功能l 逻辑综合将源程序
4、编译后,为设计系统选择一个电路实现方案,按照这个方案进行逻辑综合和优化,生成1个电路网表文件l 功能仿真检查自己的设计是否达到和完成要求的逻辑功能l 设计实现布局、布线及配置,最后生成可以写到芯片中的目标文件l 时序仿真是适配到选定的芯片后进行的仿真,它模拟芯片的实际动作,仿真时间模型严格将门级延时计算在内,可以分析出竞争与冒险,时序仿真验证过的电路与实际电路基本上已致。l 器件编程对器件编程下载二、 设计内容和要求2.1实验要求用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,
5、第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。Up为高电平时,upclk有脉冲到达时,预置位加1.否则减1.2.2实验设计本设计采用top-down 模式设计。下面介绍一下其优点。自顶而下(TOP TO DOWN)的层次化设计方法在现代EDA设计中有着明显的优势,越来越受到设计者的欢迎。对于一个复杂的设计系统,运用层次化设计方法,使设计课题进一步细化,分块设计,条理清晰。另外,在调试时可采用逆向调试方式,即从模块调试向总体调试方向开展调试工作,使设计中出现的问题在模块级就
6、能发现,及时处理,这样就会使一个复杂的设计变得容易调试,缩短了设计时间。层次化设计方法:开始设计时,先设计出一个顶层总框图(一般称之为顶层图),该框图是由若干个具有特定功能的源模块组成。下一步是对这些不同功能的模块进行设计,产生这些模块的原理图文件或VHDL源文件。对于有些功能复杂的模块,全部使用元件库中的元器件设计仍显复杂,因此还可以将该模块继续化分为若干个功能子模块,这样就形成模块套模块的层次化设计方法。这种方法也称之为自顶向下的系统设计方法。图 1总体框图如图2-1所示,本设计实现了对年、月、日、小时、分秒的基本基本计时外,还实现了对星期的显示和基于小时下的定点报时及上下午的判断。本系统
7、由8个模块组成,其中主控模块负责各个模块之间的调度、分析计算数字钟的状态、给出相应的控制信号。各个计数器功能相似,都具有计数、输出DCB码、双向调节计数状态的功能。三、 VHDL程序设计3.1普通年、月、时、分、秒的设计(基本功能)图 2年、月、时、分、秒计时器元件图此类计数器思路一致,只需改变年月等各进制数,如年为2个100进制计时,使之能够显示到9999年;月为12进制计时,表示一年12个月;小时计时为24进制,表示一天有24个小时;同理,分秒为60进制。具体实现方法如下表表1普通年月时分秒端口实现Clk:Period:0 usOffset:1000 us当Set=0时正常计时,使用clk
8、时钟在clk时钟下正常计时Up_down_clockPeriod:0usOffset:1000us当Set=1是,使用Up_down_Clock时钟Up down端口选择预置数是加1还是-1,当为up 时加,为down时-1当预置数加1时选择up上升沿当预置数减1时选择up下降沿基本计时能够实现的功能如下:l 计数功能;l BCD输出计数状态;l 预置数可使年月时分秒加1,减1;l 计数时钟可变;l 清零功能。3.2可变进制计数器(天计时)设计(基本功能)图 3可变天计时元件图此种计数器一个可实现4种进制,现在就出现两种方法来确定计数器进制,(1):将年、月的BCD输出引到天计数器端,可让天计
9、数器自己判断自己应该处于何种进制;(2):将计算的任务交给主控制模块,天计数器模块只负责接收主控模块发回来的信息来决定计数器进制。第一种方法不仅增加了此模块设计的复杂性、增加了输入引脚数而且还增加了模块之间的耦合度,这是在层次化设计时的大忌,而第二种方法只需在此模块上添加两个引脚然后在模块内部只需根据这两个引脚来选择进制数。很显然第二种方法要优越于第一种方法。因此选择第二种方法。如图所示,可变天计时与普通计时而言多了一个sel端口,可以用来改变计时的天数,计时的天数随着年月的改变而产生变化,共有28,29,30,31天。闰年的二月有29天,平年的2月有28天,1.3.5.7.8.10.12月有
10、31天,其余月份有30天,因此,sel可以显示当前月份的天数,其余端口与普通计时一致端口设置请看表1,sel的设置如下表所示表2.sel端口的设置Sel显示数字的含义Sel=00表示天数为28天Sel=01表示天数为29天Sel=10表示天数为30天Sel=11表示天数为31天此模块能够实现的功能如下:l 计数功能;l DCB码输出计数状态功能;l 预置数可使天数加1,减1;l 计数时钟可变;l 清零功能;l 可变计数进制功能。3.3主控模块设计图 4主控模块元件图主控模块主要负责整个系统的调度,它是整个系统的核心。主控模块接收外界的输入并把相应的输入并分析响应的输入把控制信息送给各个模块。由
11、于题目要求以用set的脉冲个数来确定用户的调节状态,set脉冲个数于功能如表3所示,所以此部分应该用状态机来设计完成。状态机设计程序结构清晰易于编写和阅读。根据状态的不同来给出不同控制的信号。表3 set脉冲个数与相应功能脉冲个数功能0显示时分秒和星期1显示当前年月日2修改年份3修改月份4修改日期5修改小时6修改分7修改秒对于判断平年和闰年我采用了函数调用的方法,在WORK库里写了一个函数function judge_year这个函数的输入为年信号的位矢量,返回值为boolean型,true代表为闰年,false为平年。具体的判断方法如下:先判断年的十位和个位是不是0如果是0则为整百的年,那么
12、把千位和百位组成一个两位数a,判断a能不能被4整除,但是除法在VHDL中不可综合,所以查找资料得如下方法:将a转化成std_logic_vecotr型,然后判断它的低两位是不是0,若果是0则能被4整除则本年是闰年;若果不是整百年则按照上面方法转化成std_logic_vecotr型,同样判断是否能被4整除,如能被4整除则为闰年。函数如下:图 5判断平润年函数对于“大小月”的判断同样是在WORK库里写了个函数judge_month具体函数如下:图 6判断月数函数图 7状态转换图此模块能够实现的功能如下:l 记录set端脉冲个数并解析出用户想要调节什么然后把相应的模块设置为调节状态;l 根据年份、
13、月份的输入分析出此刻天计数器应该为几进制,并通过sel端把信号送给day_counter(天计数器);l 分析此刻八个数码管应显示的是时间还是日期并通过time_or_date给出信号以供顶层模块判断应该显示什么。3.4星期模块(增加功能)图 8星期元件图星期模块由一个7进制计数器组成,接入的时钟脉冲有天计时提供,计时到达七后自动还原为1。3.5闹钟模块(增加功能)图 9闹钟报时元件图闹钟模块的功能是如果闹钟按钮按下后,在设定时间之后蜂鸣器将自动发声。闹钟的设计其实也比较简单也是计数器自动发声一段时间无非就是延长几个时钟周期后再让cout端清零。此闹钟报时功能闹钟控制时钟由秒计时的时钟接入控制
14、,可精确到秒定时。3.6整点报时的实现(增加功能)图 10整点报时元件图整点报时即为把分钟计数器的进位输出送到整点报时引脚,是之每个小时出现一次。3.7上下午显示(增加功能)本来准备增加一个12进制显示小时数然后表示上下午表示时间,但是由于时间限制,只完成了上下午的显示,12进制未能实现。上下午显示只需在程序中加入判断语句,0-12时判断为0,12-24判断为1,表示上下午。四、 仿真验证本次数字钟采用层次化结构编写,元件例化语句实现。首先对每个子模块单独编写确保正确后,再在顶层中进行综合。4.1普通计数器功能仿真以六十进制计数器为例,其余进制仿真同理可得1. 当set=0时正常计数图 11分
15、秒正常计数2. 当set=1时,进入预置数状态1) 当up down为高电平时,预置数加1图 12加1操作2) 当up down为低电平时,预置数减1图 13减1操作3) 计数器清零(clr=0)图 14清零操作二十四进制计数器功能仿真图 15正常计时操作十二进制计数器功能仿真当set=0时正常计数图16正常计数一百进制计数器功能仿真当set=0时,正常计数图17正常计数4.2可变天计时功能仿真1. 当sel=00时,天数为28天图18天数为28正常计时图19天数为28加1操作图20天数为28减1操作2. 当sel=01时,天数为29天图21天数为29正常计时3. 当sel=10时,天数为30
16、天图22天数为30计数4. 当sel=11时,天数为31天图23天数为31计数4.3主控部分功能仿真1. 平年闰年部分验证2023年为平年,平年2月有28天图24平年2月验证2020年为闰年,2月有29天图25闰年2月验证2. 状态及转换验证图26状态及转换图由图可见l Set的第一个脉冲显示日期(time_or_date为1);l Set的第二个脉冲设置年(set_year为1);l Set的第三个脉冲设置年(set_month为1);l Set的第五个脉冲设置年(set_h为1);l Set的第六个脉冲设置年(set_m为1);l Set的第七个脉冲设置年(set_s为1);综上可知状态机
17、设计完全正确。4.4整点报时功能仿真图27整点报时4.5闹钟功能仿真假设闹钟定时为8小时图28闹钟定时4.6星期功能仿真由于时钟最小脉冲以秒计时,若要天数变化则需仿真很长时间,所以只显示出星期一图29星期显示4.7上下午显示功能仿真定义上午显示为0,下午显示为1图30上下午显示4.8综合功能仿真图31秒仿真缩小得分钟仿真图32分钟仿真缩小的小时仿真,并能够看到整点报时功能图33小时与整点报时启用set功能,第一个脉冲得到时间显示到日期显示,设初值从2020年1月1日起图34日期显示set第二个脉冲修改年份,预置数减1操作,由2020年变为2019年图35年修改set第三个脉冲修改月份,在201
18、8年时,预置加1月年图36月份修改后面的修改同理可得,下图为设置了7个脉冲后的结果图图37综合仿真五、 器件编程下载及设计结果5.1程序总体元件图图 16元件例化图5.2 Ucf管脚映射文件NET "clk" LOC = "p80" ;NET "clr" LOC = "p182" ;NET "hour_year_one<0>" LOC = "p187" ;NET "hour_year_one<1>" LOC = "p188
19、" ;NET "hour_year_one<2>" LOC = "p189" ;NET "hour_year_one<3>" LOC = "p191" ;NET "hour_year_ten<0>" LOC = "p192" ;NET "hour_year_ten<1>" LOC = "p193" ;NET "hour_year_ten<2>" L
20、OC = "p194" ;NET "hour_year_ten<3>" LOC = "p195" ;NET "minute_month_one<0>" LOC = "p173" ;NET "minute_month_one<1>" LOC = "p174" ;NET "minute_month_one<2>" LOC = "p175" ;NET "minute
21、_month_one<3>" LOC = "p176" ;NET "minute_month_ten<0>" LOC = "p178" ;NET "minute_month_ten<1>" LOC = "p179" ;NET "minute_month_ten<2>" LOC = "p180" ;NET "minute_month_ten<3>" LOC = &quo
22、t;p181" ;NET "ampm_year_hundred<0>" LOC = "p199" ;NET "ampm_year_hundred<1>" LOC = "p200" ;NET "ampm_year_hundred<2>" LOC = "p201" ;NET "ampm_year_hundred<3>" LOC = "p202" ;NET "week_yea
23、r_thousand<0>" LOC = "p203" ;NET "week_year_thousand<1>" LOC = "p204" ;NET "week_year_thousand<2>" LOC = "p205" ;NET "week_year_thousand<3>" LOC = "p206" ;NET "second_day_one<0>" LOC =
24、"p162" ;NET "second_day_one<1>" LOC = "p163" ;NET "second_day_one<2>" LOC = "p164" ;NET "second_day_one<3>" LOC = "p165" ;NET "second_day_ten<0>" LOC = "p166" ;NET "second_day_ten&l
25、t;1>" LOC = "p167" ;NET "second_day_ten<2>" LOC = "p168" ;NET "second_day_ten<3>" LOC = "p172" ;NET "set" LOC = "p77" ;NET "up_down" LOC = "p100" ;NET "up_down_clk" LOC = "p101" ;NET "zhendian" LOC = "p99" ;六、 总结本次课程设计历时3天,经过自己不断的努力独立的完成数字钟的设计,程序代码的编写、调试仿真、下载。调试中当然会遇到很多困难,但我认为遇到这些困难是好事。因为经历这些错误之后很多东西是很难忘记得。它不仅巩固了以前所学的知识,而且还能让我学习许多书本上学不到的东西,进一步加深了对EDA的理解,让我对它产生了无比浓厚的兴趣,特别是每一个模块设计完成并仿真通过的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装饰公司实习报告
- 2024深圳二手房产交易保险合同
- 2025年度城市巴士线路优化升级合同3篇
- 2024试岗期物业管理员劳动合同模板3篇
- 2024版单位借款合同范文
- 小学语文课堂学生评价体系的构建与实践
- 二零二五年度新能源储能技术合作协议补充3篇
- 二零二五年度房屋买卖合同补充协议(包含家具家电赠送)3篇
- 二零二五年度5G通信技术股权交易与回购合作协议3篇
- 2025年度安置房项目招投标代理服务合同2篇
- 高考必背120个文言实词
- 《扣件式钢管脚手架安全技术规范》JGJ130-2011
- 车辆事故私下解决协议书
- 我国工业结构调整的转型升级进程
- 数据库期末考试复习题及答案6
- 乌阿高速公路工程项目策划书
- 叙事护理学智慧树知到答案章节测试2023年中国人民解放军海军军医大学
- 汽车涂装技术(陕西国防工业职业技术学院)智慧树知到答案章节测试2023年
- 山东省东营市东营区2022-2023学年七年级上学期期末考试英语试题
- 【绿色评价】发展绿色指标评价测试六年级《英语》第一学期上册期末试卷及答案解析
- 轴系的结构设计
评论
0/150
提交评论