《EDA课程设计报告(共26页).docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告(共26页).docx(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上EDA课程设计报告设计题目:用VHDL语言实现数字钟的设计班级:电子1201班学号:姓名:方雅菁指导教师:李世平设计时间:2015年1月9日11日专心-专注-专业摘要数字钟是一种用数字电路技术实现时、分、秒计时的钟表。与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟。本设计采用赛林思公司的FPGA作为硬件平台、QUARTUSII作为编写程序和仿真的平台来编译程序并实现管教锁定和下载的软件平台来实现数字钟。本设计的
2、程序用VHDL语言编写,由本人独立设计完成。整体采用TOP-TO-DOWN设计思路。最顶层采用元件例化的方法,各个模块内部采用进程和状态机来设计完成。主要电路为:主控状态机模块、秒计数模块、分计数模块、时计数模块、天计数模块、月计数模块、年计数模块、星期计数模块、整点报时模块。关键词:EDA,数字钟,计数器,状态机,元件例化,FPGA,VHDL目录一、 课程设计目的掌握利用可编程逻辑器件和EDA设计工具进行电子系统设计的方法,内容包括:l VHDL程序设计、输入在QUARTUSII平台上用VHDL描述系统的功能l 逻辑综合将源程序编译后,为设计系统选择一个电路实现方案,按照这个方案进行逻辑综合
3、和优化,生成1个电路网表文件l 功能仿真检查自己的设计是否达到和完成要求的逻辑功能l 设计实现布局、布线及配置,最后生成可以写到芯片中的目标文件l 时序仿真是适配到选定的芯片后进行的仿真,它模拟芯片的实际动作,仿真时间模型严格将门级延时计算在内,可以分析出竞争与冒险,时序仿真验证过的电路与实际电路基本上已致。l 器件编程对器件编程下载二、 设计内容和要求2.1实验要求用VHDL语言实现数字钟的设计,要求设计实现一个具有带预置数的数字钟,具有显示年月日时分秒的功能。用6个数码管显示时分秒,set按钮产生第一个脉冲时,显示切换年月日,第2个脉冲到来时可预置年份,第3个脉冲到来时可预置月份,依次第4
4、、5、6、7个脉冲到来时分别可预置日期、时、分、秒,第 8个脉冲到来后预置结束,正常工作,显示的是时分秒。Up为高电平时,upclk有脉冲到达时,预置位加1.否则减1.2.2实验设计本设计采用top-down 模式设计。下面介绍一下其优点。自顶而下(TOP TO DOWN)的层次化设计方法在现代EDA设计中有着明显的优势,越来越受到设计者的欢迎。对于一个复杂的设计系统,运用层次化设计方法,使设计课题进一步细化,分块设计,条理清晰。另外,在调试时可采用逆向调试方式,即从模块调试向总体调试方向开展调试工作,使设计中出现的问题在模块级就能发现,及时处理,这样就会使一个复杂的设计变得容易调试,缩短了设
5、计时间。层次化设计方法:开始设计时,先设计出一个顶层总框图(一般称之为顶层图),该框图是由若干个具有特定功能的源模块组成。下一步是对这些不同功能的模块进行设计,产生这些模块的原理图文件或VHDL源文件。对于有些功能复杂的模块,全部使用元件库中的元器件设计仍显复杂,因此还可以将该模块继续化分为若干个功能子模块,这样就形成模块套模块的层次化设计方法。这种方法也称之为自顶向下的系统设计方法。图 1总体框图如图2-1所示,本设计实现了对年、月、日、小时、分秒的基本基本计时外,还实现了对星期的显示和基于小时下的定点报时及上下午的判断。本系统由8个模块组成,其中主控模块负责各个模块之间的调度、分析计算数字
6、钟的状态、给出相应的控制信号。各个计数器功能相似,都具有计数、输出DCB码、双向调节计数状态的功能。三、 VHDL程序设计3.1普通年、月、时、分、秒的设计(基本功能)图 2年、月、时、分、秒计时器元件图此类计数器思路一致,只需改变年月等各进制数,如年为2个100进制计时,使之能够显示到9999年;月为12进制计时,表示一年12个月;小时计时为24进制,表示一天有24个小时;同理,分秒为60进制。具体实现方法如下表表1普通年月时分秒端口实现Clk:Period:0 usOffset:1000 us当Set=0时正常计时,使用clk时钟在clk时钟下正常计时Up_down_clockPeriod
7、: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输出引到天计数器端,可让天计数器自己判断自己应该处于何种进制;(2):将计算的任务交给主控制
8、模块,天计数器模块只负责接收主控模块发回来的信息来决定计数器进制。第一种方法不仅增加了此模块设计的复杂性、增加了输入引脚数而且还增加了模块之间的耦合度,这是在层次化设计时的大忌,而第二种方法只需在此模块上添加两个引脚然后在模块内部只需根据这两个引脚来选择进制数。很显然第二种方法要优越于第一种方法。因此选择第二种方法。如图所示,可变天计时与普通计时而言多了一个sel端口,可以用来改变计时的天数,计时的天数随着年月的改变而产生变化,共有28,29,30,31天。闰年的二月有29天,平年的2月有28天,1.3.5.7.8.10.12月有31天,其余月份有30天,因此,sel可以显示当前月份的天数,其
9、余端口与普通计时一致端口设置请看表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主控模块元件图主控模块主要负责整个系统的调度,它是整个系统的核心。主控模块接收外界的输入并把相应的输入并分析响应的输入把控制信息送给各个模块。由于题目要求以用set的脉冲个数来确定用户的调节状态,set脉冲个
10、数于功能如表3所示,所以此部分应该用状态机来设计完成。状态机设计程序结构清晰易于编写和阅读。根据状态的不同来给出不同控制的信号。表3 set脉冲个数与相应功能脉冲个数功能0显示时分秒和星期1显示当前年月日2修改年份3修改月份4修改日期5修改小时6修改分7修改秒对于判断平年和闰年我采用了函数调用的方法,在WORK库里写了一个函数function judge_year这个函数的输入为年信号的位矢量,返回值为boolean型,true代表为闰年,false为平年。具体的判断方法如下:先判断年的十位和个位是不是0如果是0则为整百的年,那么把千位和百位组成一个两位数a,判断a能不能被4整除,但是除法在V
11、HDL中不可综合,所以查找资料得如下方法:将a转化成std_logic_vecotr型,然后判断它的低两位是不是0,若果是0则能被4整除则本年是闰年;若果不是整百年则按照上面方法转化成std_logic_vecotr型,同样判断是否能被4整除,如能被4整除则为闰年。函数如下:图 5判断平润年函数对于“大小月”的判断同样是在WORK库里写了个函数judge_month具体函数如下:图 6判断月数函数图 7状态转换图此模块能够实现的功能如下:l 记录set端脉冲个数并解析出用户想要调节什么然后把相应的模块设置为调节状态;l 根据年份、月份的输入分析出此刻天计数器应该为几进制,并通过sel端把信号送
12、给day_counter(天计数器);l 分析此刻八个数码管应显示的是时间还是日期并通过time_or_date给出信号以供顶层模块判断应该显示什么。3.4星期模块(增加功能)图 8星期元件图星期模块由一个7进制计数器组成,接入的时钟脉冲有天计时提供,计时到达七后自动还原为1。3.5闹钟模块(增加功能)图 9闹钟报时元件图闹钟模块的功能是如果闹钟按钮按下后,在设定时间之后蜂鸣器将自动发声。闹钟的设计其实也比较简单也是计数器自动发声一段时间无非就是延长几个时钟周期后再让cout端清零。此闹钟报时功能闹钟控制时钟由秒计时的时钟接入控制,可精确到秒定时。3.6整点报时的实现(增加功能)图 10整点报
13、时元件图整点报时即为把分钟计数器的进位输出送到整点报时引脚,是之每个小时出现一次。3.7上下午显示(增加功能)本来准备增加一个12进制显示小时数然后表示上下午表示时间,但是由于时间限制,只完成了上下午的显示,12进制未能实现。上下午显示只需在程序中加入判断语句,0-12时判断为0,12-24判断为1,表示上下午。四、 仿真验证本次数字钟采用层次化结构编写,元件例化语句实现。首先对每个子模块单独编写确保正确后,再在顶层中进行综合。4.1普通计数器功能仿真以六十进制计数器为例,其余进制仿真同理可得1. 当set=0时正常计数图 11分秒正常计数2. 当set=1时,进入预置数状态1) 当up do
14、wn为高电平时,预置数加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天图22天数为30计数4. 当sel=11时,天数为31天图23
15、天数为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);综上可知状态机设计完全正确。4.4整点报时功能仿真图27整点报时4.5闹钟功能
16、仿真假设闹钟定时为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第三个脉冲修改月份,在2018年时,预置加1月年图36月份修改后面的修改同理可得,下图为设置
17、了7个脉冲后的结果图图37综合仿真五、 器件编程下载及设计结果5.1程序总体元件图图 16元件例化图5.2 Ucf管脚映射文件NET clk LOC = p80 ;NET clr LOC = p182 ;NET hour_year_one LOC = p187 ;NET hour_year_one LOC = p188 ;NET hour_year_one LOC = p189 ;NET hour_year_one LOC = p191 ;NET hour_year_ten LOC = p192 ;NET hour_year_ten LOC = p193 ;NET hour_year_ten
18、LOC = p194 ;NET hour_year_ten LOC = p195 ;NET minute_month_one LOC = p173 ;NET minute_month_one LOC = p174 ;NET minute_month_one LOC = p175 ;NET minute_month_one LOC = p176 ;NET minute_month_ten LOC = p178 ;NET minute_month_ten LOC = p179 ;NET minute_month_ten LOC = p180 ;NET minute_month_ten LOC =
19、p181 ;NET ampm_year_hundred LOC = p199 ;NET ampm_year_hundred LOC = p200 ;NET ampm_year_hundred LOC = p201 ;NET ampm_year_hundred LOC = p202 ;NET week_year_thousand LOC = p203 ;NET week_year_thousand LOC = p204 ;NET week_year_thousand LOC = p205 ;NET week_year_thousand LOC = p206 ;NET second_day_one
20、 LOC = p162 ;NET second_day_one LOC = p163 ;NET second_day_one LOC = p164 ;NET second_day_one LOC = p165 ;NET second_day_ten LOC = p166 ;NET second_day_ten LOC = p167 ;NET second_day_ten LOC = p168 ;NET second_day_ten LOC = p172 ;NET set LOC = p77 ;NET up_down LOC = p100 ;NET up_down_clk LOC = p101
21、;NET zhendian LOC = p99 ;六、 总结本次课程设计历时3天,经过自己不断的努力独立的完成数字钟的设计,程序代码的编写、调试仿真、下载。调试中当然会遇到很多困难,但我认为遇到这些困难是好事。因为经历这些错误之后很多东西是很难忘记得。它不仅巩固了以前所学的知识,而且还能让我学习许多书本上学不到的东西,进一步加深了对EDA的理解,让我对它产生了无比浓厚的兴趣,特别是每一个模块设计完成并仿真通过的时候那种快乐是发自内心的。此次收获最大的就是模块化设计给我带来的好处。模块化设计的方法结构清晰,容易差错。以前写一些小程序还看不出它的优点,反而觉得模块化很麻烦,一个程序见那么多源文件麻
22、烦。一但程序比较大时就体现出来了它的优势。班里很多同学都是用进程写的,我认为这是不可取的。进程都放在一个源文件里出现错误是很难找到的。而模块化设计就不一样了,当程序出现错误时可以分块去查每一模块是否正常,缩短了查找错误的时间。另外一点就是程序中信号的初值问题,开始写完整个程序时仿真都通过了,下到板子里就是不好使,有些计数的地方就是不对,这个问题困扰了我半天。经过反复思考和模块仿真后确定是初值问题,把信号都赋上相应的初值后程序正常了。再一个问题就是变成是马虎的问题,在程序写完下到板子后出现了奇怪的问题,天计数器模块居然能记到90多,由于用模块化设计所以很容易就找到了错误的关键的地方天计数器。回去
23、一查程序,果然计数器的计数范围由于马虎写错了,改完之后重新编译下到板子后好使了。还有一点特别大的收获,就是用VHDL编程要时刻与硬件结合起来,自己编出来的程序,应该知道最后能综合出来什么样的电路。班上有的同学在设计时怎么综合都综合不过去,然后就开始抱怨综合器垃圾,后来我去看他的程序,至少套了8层if而且很多if里都判断了上升沿,心里暗笑哪有这样强大的触发器呀,一看就是数字电路没学好。最后的收获就是要刻苦才能得到收获。课设那几天每天都是我们几个同学最后走我想那几天真的是全心全意的投入了进去。感谢老师这个学期来对我们指导。七、 参考文献1李景华,杜玉远.可编程逻辑器件与EDA技术.沈阳:东北大学出版社,20002Pedroni,V.A.VHDL数字电路教程.北京:电子工业出版社,20053 曲伟建. EDA技术在数字电子电路设计中的应用J. 电测与仪表. 2004(05)4 林若波. 基于VHDL的有限状态机电路设计J. 中国水运(理论版). 2007(09)5 康华光电子技术基础(数字部分)M北 京:高等教育出版社,2001