课程设计说明书课程:EDA技术基础题目:数字钟的设计闹钟与整点报时模块学生姓名:XXX学号201265110204班级:1203班专业:电子信息与科学指导教师:XXX2014年12月20日长沙理工大学课程设计任务书物理与电子科学学院电子信息与科学专业1203班姓名王玲课程名称EDA技术基础题目数字钟的设计长沙理工大学课程设计成绩评定表目录1数字钟设计闹钟模块基本任务要求4 2设计思想43简述闹钟模块的输入与输出54分进程描述65仿真结果与分析76简述数字钟的设计总成果107总结11参考文献13代码附件13基本任务要求:运用QuartusⅡ13.1软件平台,用VHDL语言描述并设计的闹钟模块满足可调闹钟时间,当时钟时间到达闹钟时间后会响闹铃,(由于实验室权限问题会以FPGA开发板上12个LED灯交替发光来表现);整点报时过程表现为整点的前十秒内响铃,(以FPGA开发板上一个LED灯交替发光来实现)。
设计思想:闹钟模块要以分频模块、计数器模块和译码显示模块为基础,将闹钟模块分为三个进程,一个进程用来实现调闹钟,一个进程来实现闹响闹钟(即实现LED灯交替发光),另一个进程来是实现整点报时。
(上面截图为数字钟整体编译后的RTL电路的闹钟模块)简述闹钟模块图的输入与输出:上图中的输入粗黑实线为计数器模块输出的小时、分钟的高低位和秒钟的高位(都用四位的二进制表示);输出的粗黑实线为定的闹钟时间(包括小时和分钟),将送到译码显示模块显示闹钟时间,闹钟时间与时钟都在FPGA上的数码管显示,用二选一实现交替显示。
clk和clk1都是经过分频器分出的不同频率的信号分别用于整点报时的闪灯脉冲与闹钟调时、闹响的闪灯脉冲。
AlarmEn和alarmADJ分别为控制闹钟闹响和控制闹钟调时的输入脉冲;ADJ1和ADJ2就分别为控制闹钟调小时与分钟的的输入脉冲(可与校时钟的开关共用)。
sound13为整点报时的LED灯的输入信号,其余的为闹钟闹响时的LED灯的输入信号。
分进程描述:1.调闹钟进程:先列出调闹钟进程的部分VHDL语言描述:if(alarmADJ='0')thenifclk1'eventandclk1='1'thenifADJ1='0'thenif(hour_unitcount<9)thenhour_unitcount:=hour_unitcount+1;elsehour_unitcount:="0000";hour_decadecount:=hour_decadecount+1;endif;if(hour_decadecount=2andhour_unitcount=4)thenhour_decadecount:="0000";hour_unitcount:="0000";endif;ENDIF;分析:alarmADJ为低电平且ADJ1也为低电平时,随着clk1的脉冲信号来计数,小时为24进制数,可从上面的语句中看出计数的周期为24;根据调闹钟小时的部分代码可类似的分析出调闹钟分钟的基本逻辑。
2.整点报时进程:process(clk,mh,ml,sh)variablecount1:std_logic_vector(3downto0);beginif(ml="1001"andmh="0101"andsh="0101")thenifclk'eventandclk='1'thenif(count1<1)thencount1:=count1+1;sound13<='1';elsesound13<='0';count1:="0000";endif;endif;elsesound13<='0';count1:="0000";endif;endprocess;分析:定义count1为变量来计clk脉冲的上升沿个数,sound13为LED的输入信号,mh、ml和sh分别是分钟的高位、分钟的低位和秒钟的高位,当时间的分钟与秒钟到达59:50时开始以每秒闪一次LED灯来表现整点报时,整点报时闪灯10s。
3.闹钟响铃进程:先列出调闹钟进程的部分VHDL语言描述:if(AlarmEn='0')thenif(hourl=hour2andhourh=hour1andml=min2andmh=min1)thenifclk1'eventandclk1='1'thenif(count<1)thencount:=count+1;sound1<='1';sound3<='1';sound5<='1';sound7<='1';sound9<='1';sound11 <='1;sound2<='0';sound4<='0';sound6<='0';sound8<='0';sound10<='0';sound1 2<='0';elsesound1<='0';sound3<='0';sound5<='0';sound7<='0';sound9<='0';sound11 <='0';sound2<='1';sound4<='1';sound6<='1';sound8<='1';sound10<='1';sound1 2<='1';count:="0000";endif;endif;分析:可参照整点报时进程来分析,相比整点报时进程,LED闪灯的个数增加了,且clk1的脉冲频率大于clk(即表现为LED的闪灯频率比整点报时的闪灯频率快);闹响的时间为一分钟,接到FPGA开发板上后可手动关掉闹钟。
仿真结果与分析:(以下仿真均为波形功能仿真)1.调闹钟进程的波形仿真结果截图分析:(1)仿真环境设置:仿真设置的结束时间为;输入的clk和clk1脉冲的周期分别为10ns和5ns;alarmADJ为低电平输入;ADJ1和ADJ2为高低电平交替输入;其他的输入可以不考虑。
(2)仿真内容:当alarmADJ为低电平时,调节ADJ1和ADJ2分别可以对ADJhourh、ADJhourl和ADJmh、ADJml进行调节,从上图中可看出当ADJ1为低电平时,ADJhourh和ADJhourl会自动随clk1脉冲来调节到相应的小时,当ADJ2为低电平时,ADJmh和ADJml会自动随clk1脉冲来调节到相应的分钟。
从仿真结果看出最后调出的闹钟时间为00:48。
经过整个数字钟的仿真可以知道ADJ1和ADJ2没有相关(即调节小时与调节分钟的按键互不受影响)。
小时的24进制可从上图中看出,分钟的60进制已经经过了仿真测试。
2.整点报时进程的波形仿真结果截图分析:(1)仿真环境设置:仿真设置的结束时间为;在上一个进程仿真环境中加入了小时高低位、分钟高低位和秒钟高位,即输入了几个不同的时间。
(2)仿真内容:从仿真结果中看出当输入的分钟与秒钟时间到达59:50时,sound13将随着clk的脉冲信号产生高低电平交替输出(在FPDA开发板上表现为LED闪灯)。
3.闹钟响铃进程的波形仿真结果截图分析:(1)仿真环境设置:仿真设置的结束时间为;在整点报时进程的仿真环境设置中加入00:48的输入时间,为了验证当时钟时间到达闹钟时间后的sound(1~12)的输出变化。
(3)仿真内容:从仿真结果可看出当调好闹钟时间为00:48后,当时钟时间走到00:48时,sound(1~12)将随着clk1的脉冲信号产生高低电平交替输出(在FPDA开发板上表现为LED闪灯)。
也可看出sound(1~12)中的基数与偶数灯是交替闪烁的。
4.结合其他模块后,在FPGA开发板上的仿真分析如下:开关SW17上拉后数码管显示时钟时间,下拉后显示闹钟时间;当SW17下拉显示闹钟时间后,通过按键KEY2和KEY1分别调闹钟的小时和分钟,按键按下时会自动计数,当达到预想的数值后松开按键,这时就已经订好闹钟了;开关SW16下拉后为闹钟开启模式,SW16上拉后为闹钟关闭模式,即当时钟时间到达闹钟时间后,有12个LED灯交替闪烁,会连续闪烁一分钟,中途可通过开关自动关闭闹钟(即停止闪烁)。
简述数字钟的设计总成果:整个数字钟设计分为五个模块,分别为分频模块、校时模块、计数器模块、译码器显示模块和闹钟与整点报时模块;拓展并完成了按学校作息时间打铃(打铃用LED闪灯来表现)。
电路板固定的晶振信号为50MHz,通过分频模块以分频分出分别为倍频、倍频和倍频的三个信号;倍频的信号输入给秒计时器和整点报时进程,倍频的信号输入给校时模块和调闹钟进程,倍频输入给打铃模块,分频模块为数字钟的基础模块。
通过较时模块与计数器模块后的时钟信号分别为小时的高低位、分钟的高低位和秒钟的高低位(都是有四位的二进制数表示),秒的低位直接由译码器显示模块输出到数码管显示;小时的高低位、分钟的高低位和秒钟的高位还要接到闹钟与整点报时模块,然后再通过译码器显示模块输出到数码管显示,时钟显示与闹钟显示通过二选一来实现。
拓展的打铃模块也需要小时的高低位、分钟的高低位和秒钟的高位的输入,来实现到达打铃时间后LED灯会闪烁10s。
(其中闹钟与整点报时模块【调闹钟进程与整点报时进程】和打铃模块用到的LED灯均没有联系)。