广州大学综合设计性实验报告册实验项目数字钟学院物理与电子工程学院年级专业班姓名Jason.P学号成绩实验地点电子楼317室指导教师宋沛《综合设计性实验》预习报告实验项目:数字钟一引言:数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,数字时钟可植入自动控制、测试等系统内部,作为系统的时钟源,可为系统提供定时信号或中断控制的时间基准,具有广泛的用途。由于数字集成电路的发展使得数字时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的单一报时功能。加入了一些诸如自动报时、定时闹钟等功能。这些都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用,有着非常现实的意义。二实验目的:进一步掌握用VerilogHDL语言编写任意进制计数器的方法,通过本次实验要充分认识到,顶层结构的设计和优化在综合设计中的重要性。三实验原理:基本原理:数字钟秒到分、分到时均为60进制,利用VerilogHDL编写模60的计数器,秒模块的CLK可从实验板上取得,秒模块的本身输出用来驱动显示秒的数码管,进位输出恰好是分模块的CLK。分模块的进位作为时模块的CLK。时模块为24进制。需要调整时间时,可以用数据选择器将正常的各个模块时钟切断取而代之的是由实验箱上的按键产生的单脉冲,从而实现调整时间的功能。闹铃时间与当前时间要共用数码管的方式显示,同样我们可以采用多位数据选择器来实现。闹铃实现可采用比较计时模块输出与闹钟设定输出完全相等时,输出控制信号使扬声器发声。四实验内容:利用前面实验所学知识,设计一数字钟并在GW48实验箱上实现。具体要求如下:1.计时可选十二进制计时和二十四进制计时;2.可手动校时,能分别进行时、分的校正;3.带闹钟功能,当计时计到闹铃时间时,发光二极管点亮,闹铃时间为1分,可用按键提前终止闹铃;4.带秒表功能;(选做)5.带日历显示,可显示月、日等。(选做)五重点问题:如何设计并实现下列技术指标的数字钟:1、能够用数码管显示当前时间的时、分、秒(时采用24小时制);2、能够通过按键调整时钟的时、分;3、能够设定闹铃时间。闹铃时间到,有声音提示;4、闹铃时间与当前时间要共用数码管的方式显示,并能用按键来切换。六参考文献:[1]潘松,黄继业,潘明.EDA技术实用教程——VerilogHDL版(第五版).北京:科学出版社,2013.11广州大学实验原始数据记录表实验项目数字钟指导教师姓名Jason.P班别学号学院物理与电子工程学院专业电子信息科学与技术实验进行时间2016年6月6日第十五周一,15:20时至17:20时;实验地点电子楼317室室温26度湿度65%天气晴原始数据记录(自行设计记录表格):小时计数模块:源代码:modulecnt_24(CLK,RST,EN,COUT,DOUT);inputCLK,EN,RST;output[7:0]DOUT;outputCOUT;reg[7:0]A;regCOUT;assignDOUT[3:0]=A%10;assignDOUT[7:4]=A/10;always@(posedgeCLKornegedgeRST)beginif(!RST)A=0;elseif(EN)beginCOUT=0;if(A23)A=A+1;elsebeginA=0;COUT=1;endendendendmodule波形分析:当EN和RST信号均为高电平时,计数器正常工作。当计满24次时,COUT输出一个进位高电平信号。分、秒计数模块:源代码:modulecnt_60(CLK,RST,EN,COUT,DOUT);inputCLK,EN,RST;output[7:0]DOUT;outputCOUT;reg[7:0]A;regCOUT;assignDOUT[3:0]=A%10;assignDOUT[7:4]=A/10;always@(posedgeCLKornegedgeRST)beginif(!RST)A=0;elseif(EN)beginCOUT=0;if(A59)A=A+1;elsebeginA=0;COUT=1;endendendendmodule仿真波形分析:当EN和RST信号均为高电平时,计数器正常工作。当计满60次时,COUT输出一个进位高电平信号。比较器模块:源代码:modulecheck(a,b,cout);input[7:0]a,b;outputcout;regcout;always@(a,b)beginif(a==b)cout=1;elsecout=0;endendmodule波形分析:当输入a和b相等时,cout输出高电平。2选1选择器模块:源代码:modulemux21(a,b,s,y);inputa,b,s;outputy;assigny={s?b:a};endmodule波形分析:输入a置为高电平,b为低电平;当s为高电平时,输出y为b的值;反之则为a的值。9选3选择器模块:modulemux168(a,b,c,d,e,f,g,h,i,k,l,m,display);input[7:0]a,b,c,d,e,f,g,h,i;input[1:0]display;output[7:0]k,l,m;reg[7:0]k,l,m;always@(*)beginif(display==2'b00)begink=a;l=b;m=c;endelseif(display==2'b01)begink=d;l=e;m=c;endelseif(display==2'b11)begink=a;l=g;m=f;endelseif(display==2'b10)begink=h;l=i;m=c;endendendmodule波形分析:display共四种状态:00,01,11,10;输入a-i分别赋值1-9,在不同的display状态下,输出k,l,m将对应不同的值。状态机模块:源代码:modulestatus(clk_key,led,hc,mc,ah,am,sm,ss,dy,dr,display);inputclk_key;output[3:0]led;outputhc,mc,ah,am,sm,ss,dy,dr;output[1:0]display;reg[3:0]led;parameter[3:0]s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8;reg[3:0]next_state;reghc,mc,ah,am,sm,ss,dy,dr;reg[3:0]cs;reg[1:0]display;always@(cs)begincase(cs)s0:beginnext_state=s1;hc=0;mc=0;ah=0;am=0;sm=0;ss=0;dy=0;dr=0;display=2'b00;ends1:beginnext_state=s2;hc=1;mc=0;ah=0;am=0;sm=0;ss=0;dy=0;dr=0;display=2'b00;ends2:beginnext_state=s3;hc=0;mc=1;ah=0;am=0;sm=0;ss=0;dy=0;dr=0;display=2'b00;ends3:beginnext_state=s4;hc=0;mc=0;ah=1;am=0;sm=0;ss=0;dy=0;dr=0;display=2'b01;ends4:beginnext_state=s5;hc=0;mc=0;ah=0;am=1;sm=0;ss=0;dy=0;dr=0;display=2'b01;ends5:beginnext_state=s6;hc=0;mc=0;ah=0;am=0;sm=1;ss=0;dy=0;dr=0;display=2'b11;ends6:beginnext_state=s7;hc=0;mc=0;ah=0;am=0;sm=0;ss=1;dy=0;dr=0;display=2'b11;ends7:beginnext_state=s8;hc=0;mc=0;ah=0;am=0;sm=0;ss=0;dy=1;dr=0;display=2'b10;ends8:beginnext_state=s0;hc=0;mc=0;ah=0;am=0;sm=0;ss=0;dy=0;dr=1;display=2'b10;endendcase;endalways@(posedgeclk_key)begincs=next_state;led[3:0]=cs;endendmodule波形分析:led输出到数码管8显示,显示所处的状态s;在4种不同的display状态下,hc(时钟),mc(分钟),ah(闹钟时钟),am(闹钟分钟),sm(定时器分钟),ss(定时器秒钟),dy(日历月份),dr(日)有不同的对应值。月计数模块:moduledata12(CLK,RST,EN,DOUT,hsend);inputCLK,EN,RST;output[7:0]DOUT;output[3:0]hsend;reg[3:0]A;assignhsend[3:0]=A;reg[7:0]DOUT;always@(*)beginif(A=9)beginDOUT[3:0]=A;DOUT[7:4]=0;endelseif(A==10)beginDOUT[3:0]=0;DOUT[7:4]=1;endelseif(A==11)beginDOUT[3:0]=1;DOUT[7:4]=1;endelseif(A==12)beginDOUT[3:0]=2;DOUT[7:4]=1;endendalways@(posedgeCLKornegedgeRST)beginif(!RST)A=1;elseif(EN)beginif(A=11)A=A+1;elseA=1;endendendmodule波形分析:当EN和RST信号均为高电平时,月计数器正常工作,从1计数到12(每一个CLK上升沿到来时计数加一),并以此方式不断循环。电路设计草图顶层电路原理图设计波形分析:key1选择模式,key2产生计数脉冲,CLK为运行时钟,CLK2为蜂鸣器时钟。如上图所示:先系统复位一次使其工作在状态s0(时钟正常计数模式),此时按下key2将不产生任何影响,并且在Press(按键8控制)为高电平情况下,speaker工作,只要置Press为低电平,speaker立即停止蜂鸣。按下key1,在CLK上升沿到来时,系统进入s1状态(设置时钟hc)在仿真中,我设置产生两次key2计数脉冲,即设置时钟为2点钟;再按下key1,在CLK上升沿到来时,系统进入s2状态(设置分钟mc),我设置产生两次计数脉冲(key2),此时完成了时间的手动设置(2:02)。波形分析:第三次按下key1,在CLK上升沿到来时,系统进入s3状态(设置闹钟时钟ah),原理同上,设为2点钟,同理将闹钟分钟am设为3,即闹钟时间为2:03。完成上述设置后,连续按下5次key1使系统进入s0状态(由于一开始预留了定时器及日历功能,故状态s5和s6是设置定时器,s7和s8是设置日历,但上述两个附加功能最后一直没能测试成功,所以进行数字钟波形仿真时跳过了这几个状态)。波形分析:系统进入s0状态后,数字钟正常工作(在每个CLK时钟上升沿到来时计数加一)。波形分析:我们设置闹钟时间为2:03,当数字钟到了这一时刻,speaker开始工作,置Press为低电平即可关掉蜂鸣器。闹钟将持续一分钟。注:此表格必须附在《实验报告》内一并交给任课老师。指导教师对学生情况记录:《综合设计性实验》实验报告实验名称:数字钟摘要:数字时钟是一种用数字电路技术实现时、分、秒计时的装置。本设计采用VHDL语言及原理图方式设计出的数字时钟具有手动校时,闹钟等功能。通过把整个设计分为多个模块依次来实现,减少了众多重复性步骤,合理化了设计过程,使得设计更加省时、快捷,提高了设计效率。一