***大学电工电子实验报告EDA技术基础设计报告多功能数字钟设计电子信息科学与技术年 月 日多功能数字钟设计一.任务解析用Verilog硬件描述语言设计数字钟,实现:1、具有时、分、秒计数显示功能,以二十四小时循环计时。
2、具有调节小时,分钟的功能。
3、具有整点报时同时LED灯花样显示的功能。
4、【发挥】三键(模式选择,加,减)调整,数码管闪烁指示功能。
5、【发挥】增加闹钟任意设定功能,时间精确到分。
二.方案论证第2页,共19页三.重难点解析1、模式选择键的设计//模式选择键。
有5个模式,m0为正常走钟;m1为调分;m2为调时;m3为闹钟调分;m4为闹钟调时。
module mode_key(key,clr,m);input key,clr;output [2:0]m;reg [2:0]m;always @(posedge key or negedge clr) beginif(!clr) m=0;else if(m==4) m=0;else m=m+1;endendmodule2、数字钟秒钟计数设计module cnt60_sec(clk,clr,q,c);input clk,clr;output [6:0]q;output c;reg [6:0]q;reg c;always @(posedge clk or negedge clr) beginif(!clr) begin q=0;c=0;endelse if(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;end第3页,共19页else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;endendendmodule、秒钟计数模块就是一个60的计数器,计数到59的时候清零,进位加1。
调时不需要控制秒钟,所以没有加模式选择按键。
波形仿真如下:3、数字钟分钟计数设计module cnt60_min(clk,clr,c,up,down,m,q);input clk,clr,up,down;input [2:0]m;output [6:0]q;output c;reg [6:0]q;reg c;wire clka,clkb,clkc,clkd,nclk;assign clka = clk||up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk or negedge clr) begin第4页,共19页if(!clr) begin q=0;c=0;endelse beginif((clk&&(m==0))||(up&&(m==1))) beginif(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;endelse begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;end endif(down&&(m==1)) beginif(q[3:0]==0) beginif(q[6:4]==0) begin q[6:4]=5;q[3:0]=9;endelse begin q[6:4]=q[6:4]-1; q[3:0]=9;end endelse q[3:0]=q[3:0]-1;endendendendmodule分钟计数模块也是一个60的计数器,计数到59的时候清零,进位加1。
因为要计时要控制分钟位,模块加上了模式选择按键,普通计数和加键减键按下UP加1,按下DOWN 减1都可以改变分钟的数,所以条件语句中加上了模式选择功能。
波形仿真如下:第5页,共19页4、数字钟小时计数设计module cnt24_hour(clk,clr,up,down,m,q);input clk,clr,up,down;input [2:0]m;output [5:0]q;reg [5:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka=clk||up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk or negedge clr) beginif(!clr) q=0;else beginif((clk&&(m==0))||(up&&(m==2))) beginif(q[5:4]<2) beginif(q[3:0]<9) q[3:0]=q[3:0]+1;else begin q[3:0]=0;q[5:4]=q[5:4]+1;endendelse beginif(q[3:0]<3) q[3:0]=q[3:0]+1;else q=0;end第6页,共19页endif(down&&(m==2)) beginif(q[3:0]==0) beginif(q[5:4]==0) begin q[5:4]=2; q[3:0]=3; endelse begin q[5:4]=q[5:4]-1; q[3:0]=9; endendelse begin q[5:4]=q[5:4]; q[3:0]=q[3:0]-1; endendendendendmodule小时计数模块相当于是一个24的计数器,计数到23的时候清零,进位加1。
因为要计时要控制小时位,模块加上了模式选择按键,普通计数和加键减键按下UP加1,按下DOWN减1都可以改变小时的数,所以条件语句中加上了模式选择功能。
波形仿真如下:5、数字钟闹钟调分设计module nz_Tfen(up,down,m,q);input up,down;input [2:0]m;output [6:0]q;第7页,共19页reg [6:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka = up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk ) beginif(up&&(m==3)) beginif(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) q[6:4]=0;else q[6:4]=q[6:4]+1;endelse begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];endendif(down&&(m==3)) beginif(q[3:0]==0) beginif(q[6:4]==0) begin q[6:4]=5;q[3:0]=9; endelse begin q[6:4]=q[6:4]-1; q[3:0]=9; endendelse q[3:0]=q[3:0]-1;endendendmodule第8页,共19页关于闹钟调分设计,就是在选择模式3的的情况下,按下UP加1,按下DOWN减1。
6、数字钟闹钟调时设计module nz_Tshi(up,down,m,q);input up,down;input [2:0]m;output [5:0]q;reg [5:0]q;wire clka,clkb,clkc,clkd,nclk;assign clka=up||down;LCELL AA(clka,clkb);//信号延迟LCELL BB(clkb,clkc);//信号延迟LCELL CC(clkc,clkd);//信号延迟LCELL DD(clkd,nclk);//信号延迟always @(posedge nclk ) beginif(up&&(m==4)) beginif(q[5:4]<2) beginif(q[3:0]<9) q[3:0]=q[3:0]+1;else begin q[3:0]=0;q[5:4]=q[5:4]+1;endendelse beginif(q[3:0]<3) q[3:0]=q[3:0]+1;else q=0;end第9页,共19页endif(down&&(m==4)) beginif(q[3:0]==0) beginif(q[5:4]==0) begin q[5:4]=2; q[3:0]=3;endelse begin q[5:4]=q[5:4]-1; q[3:0]=9;end endelse begin q[5:4]=q[5:4]; q[3:0]=q[3:0]-1; endendendendmodule关于闹钟调时设计,就是在选择模式4的的情况下,按下UP加1,按下DOWN减1。
7、蜂鸣器buzzer的设计module buzzer(qf,qs,qff,qss,keynz,out);input [6:0]qf;input [5:0]qs;input [6:0]qff;input [5:0]qss;input keynz;output out;reg out;always @(1) beginif(keynz)if((qff[3:0]==qf[3:0])&&(qff[6:4]==qf[6:4])&&(qss[3:0]==qs[3:0])&& (qss[5:4]==qs[5:4]))out=1;第10页,共19页else out=0;endendmodule蜂鸣器的设计,我做了一个闹钟的开关keynz,如果当闹钟开关keynz为1的时候,闹钟功能打开。
在模式3、4下调整好闹钟时间后,正常走钟的时间与闹钟设定的时间相同的时候,out输出的led灯就点亮。
8、调时间闪烁分频设计module div_clkshan(clk,ck);input clk;output ck;reg [23:0]cnt;reg ck;always @(posedge clk) beginif(cnt<10000000) cnt=cnt+1;else begincnt=0;ck=!ck;endendendmodule调时间时,对应调整的位数开始闪烁。