苏州科技学院EDA电子综合设计院系:电子与信息工程专业:电子信息工程班级:学号:姓名:苏州科技学院EDA电子综合设计1第一部分:设计说明1、设计任务设计一款数字电子时钟,具体要求如下:1:输入条件:50MHz时钟,2个输入按键;2:功能实现:具有显示时、分、秒功能;采用LED数码管显示;具有闹钟与对时功能,对时精确到分,闹钟设置与对时采用按键作为输入信号。3:采用altera公司的quartusII软件进行编程与仿真,设计语言可以选择VerilogHDL或VHDL。2、目的与意义训练综合运用学过的数字电子技术、数字系统设计技术(HDL硬件设计)和计算机编程及电路相关基本知识,培养独立设计比较复杂数字系统设计能力。通过综合设计,力争掌握使用EDA工具设计数字系统电路的基本方法,包括原理方案的确定、详细设计中的编程与仿真等一系列过程,为以后进行工程实践问题的研究打下设计基础。时钟,自从它发明的那天起,就成为人类的朋友,但随着社会的进步,科技的的发展,人们对它的功能又提出了新的要求,怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现代社会,守时已不仅关系到一个人的职业生涯,还成了衡量一个人道德的标准。时钟为人们提供了科学利用时间规律的依据,然而,普通的机械钟表与半机械钟表对于忙碌的生活显然早已不太适应,设计一款高精度数字时钟势在必行。本课题将通过对目前市场上的数字电子钟的研究,利用EDA技术设计一款高精度数字式电子钟,使人们可以得到精确时间显示,帮助人们合理安排时间,方便人们的生活。苏州科技学院EDA电子综合设计2第二部分原理方案设计1、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示。能够利用按键实现“较时”、“较分”功能,随时对数码管的显示进行校正和校对。数字中系统主要由系统时钟,三个功能按键(mode,turn,change),FPGA,数码管和蜂鸣器部分组成。2、设计原理框图图2.2分频模块计时模块闹钟模块显示模块控制模块蜂鸣器数码管Clk苏州科技学院EDA电子综合设计3第三部分详细设计过程3.1、关于模式信号mode选择各个功能显示的构思:考虑到使用mode按键产生0、1信号在正常时间显示、调节时间功能、调节闹钟功能和跑表功能这四个功能之间的转换。所以mode信号的作用主要体现在控制模块(1)和显示模块中,虽然计时模块中也用到mode信号,但是它只是turn信号将秒信号清零的辅助作用,保证只有在m=0(即普通时钟显示)下turn信号清零功能才起作用,在校时功能下只能是分、小时的切换和跑表下的暂停功能。a、在控制模块下的作用:在控制模块下,其实mode和turn信号的作用更像2-4译码器的功能,将change数字上加信号按不同的mode和turn分成四个信号,分别是count1(时间显示下的分信号)、counta(时间显示下的小时信号)、count2(闹铃显示下的分信号)、countb(闹铃显示下的小时信号)。b、在显示模块下的作用:同在控制模块下的作用。只是将turn信号选出的小时和分钟在同一个mode下一起送至数码管显示。3.2、关于时间调整和闹铃时间调整中数字上加的原理:对于这个问题,我们要考虑两种情况,首先是时间调整的情况:因为在时间调整下,数字的上加不仅受到change信号的作用(即人工调时),还受本身在1Hz信号下计时而随时发生的累加。而闹铃时间调整不存在这种情况,因为闹铃下的时间数字发生上加只可能人工调节(change信号作用下)的结果。a、时间调整下的上加:由于在控制模块(2)下又设置了快加的功能,所以有三部分信号对上加起作用,一是快加下的numXclk,表示以原始时钟的速率上加,二是慢加下的change具体到各模块、各位的count1或counta,三是秒信号记到9向分信号的进位。b、闹铃时间调整下的上加:该部分原理同上,只是少了低位记到9向高位的进位。所以只有两部分组成,一是快加下的numXclk,表示以原始时钟的速率上加,二是慢加下的change具体到各模块、各位的count2或countb。苏州科技学院EDA电子综合设计43.3分频模块3.3.1模块功能输入一个频率为50MHz的CLK,利用计数器分出1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。3.3.2模块设计思想对系统的时钟50MHZ进行分频,设置不同长度的计数值,当系统时钟clk有变化时计数器开始计数,当计数到某个值时输出一个信号,计数值不同输出信号的周期也就不同,从而实现了对系统时钟进行不同的分频,产生不同频率的信号。3.3.3模块设计流程图如下计数分频2HZ500HZ1HZ50MHz图3.1分频流程由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法。代码如下://fenpin苏州科技学院EDA电子综合设计5modulefenpin(clk,clk_1Hz,clk_100Hz,clk_1k);outputclk_1Hz,clk_100Hz,clk_1k;inputclk;regclk_1Hz=0,clk_3=0,clk_1=0,clk_2=0,clk_1k=0;reg[6:0]cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;wireclk_100Hz;always@(posedgeclk)beginif(cnt1156/2-1)/////////////////////////////////////////////156分频,生成1MHz信号begincnt1=cnt1+1;endelsebegincnt1=0;clk_1=~clk_1;endendalways@(posedgeclk_1)if(cnt2156/2-1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2=cnt2+1;endelsebegincnt2=0;clk_2=~clk_2;endalways@(posedgeclk_2)if(cnt510/2-1)/////////////////////////////////////////10分频,生成1kHz标准信号begincnt5=cnt5+1;endelsebegincnt5=0;clk_1k=~clk_1k;endalways@(posedgeclk_2)苏州科技学院EDA电子综合设计6if(cnt3100/2-1)//////////////////////////////////////////100分频,生成100Hz信号begincnt3=cnt3+1;endelsebegincnt3=0;clk_3=~clk_3;endassignclk_100Hz=clk_3;always@(posedgeclk_3)if(cnt4100/2-1)/////////////////////////////////////////100分频,生成1Hz标准信号begincnt4=cnt4+1;endelsebegincnt4=0;clk_1Hz=~clk_1Hz;endendmodule3.4计时模块3.4.1模块功能描述输入引脚是功能选择模块的输出timemode、分频模块的输出clk1Hz和按键脉冲信号plus,输出引脚是时间的时、分、秒。3.4.2模块设计思想本模块是为系统提供控制信号的模块,通过输入信号的脉冲,改变输出信号的不同状态,不同状态表示不同的工作模式。3.4.3模块设计流程首先判断工作模式,如果timemode是01处于校分模式,当按键脉冲到了,分加一。如果timemode是10处于校时模式,当按键脉冲到了,时加一。其他值(timemode=00)处于正常模式,保持正常的计时功能。3.4.4设计关键知识点苏州科技学院EDA电子综合设计7图3.2模60和模24模块代码如下://jishimodulejishi(clk,clk_1Hz,turn,////turn:接按键,在手动校时功能时,选择是调整小时,还是分钟;若长时间按住该键,还可使秒信号清零,用于精确调时mode,count1,counta,sec1,min1,hour1,num3,num4);inputclk,clk_1Hz,turn,num3,num4;inputmode;inputcount1,counta;output[7:0]sec1,min1;output[7:0]hour1;wireclk_1Hz,ct1,cta,turn,num3,num4;reg[7:0]sec1=0,min1=0;reg[7:0]hour1=0;reg[1:0]m;wirecount1,counta;regminclk,hclk;always@(posedgemode)//mode信号控制系统在三种功能间转换beginif(m==4)m=0;elsem=m+1;end/////秒钟计时模块//////always@(posedgeclk_1Hz)if((sec1==8'h59)|turn&(!m))///////若长时间按住该键,还可使秒信号清零,用于精确调时。beginsec1=0;//按住“turn”按键一段时间,秒信号可清零,该功能用于手动精确调时if(!(turn&(!m)))minclk=1;///产生进位endelsebegin苏州科技学院EDA电子综合设计8if(sec1[3:0]==4'b1001)beginsec1[3:0]=4'b0000;sec1[7:4]=sec1[7:4]+1;endelsesec1[3:0]=sec1[3:0]+1;minclk=0;end////////分钟计时模?///assignm_clk=minclk||count1;/////m_clk产生进位或校正改变assignct1=(num3&clk)|(!num3&m_clk);//ct1用于计时、校时中的分钟计数always@(posedgect1)beginif(min1==8'h59)beginmin1=0;hclk=1;endelsebeginif(min1[3:0]==9)beginmin1[3:0]=0;min1[7:4]=min1[7:4]+1;endelsemin1[3:0]=min1[3:0]+1;hclk=0;endend////////小时计时模块///assignh_clk=hclk||counta;//////h_clk产生进位或校正改变assigncta=(num4&clk)|(!num4&h_clk);//cta用于计时、校时中的小时计数always@(posedgecta)if(hour1==8'h23)hour1=0;elseif(hour1[3:0]==9)beginhour1[7:4]=hour1[7:4]+1;hour1[3:0]=0;endelsehour1[3:0]=hour1[3:0]+1;endmodule3.5闹钟模块3.5.1模块功能描述实现给定时间的闹铃功能。3.5.2模块设计思想程序中的语句ifm1=0101andm0=1001ands1=0101thenifs0=0001ors0=0011ors0=0101ors0=0111即是实现闹铃功能的程序,改变数值即可改变闹铃时间。3.5.3模块设计流程苏州科技学院EDA电子综合设计9图3.5.3闹铃模块结构图3.5.4设计关键知识点VHDL语言语法、60进制、24进制的加法。//AlarmmoduleAlarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);inputclk,n