基于FPGA的多功能数字钟设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
***大学
电工电子实验报告
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) begin
if(!clr) m=0;
else if(m==4) m=0;
else m=m+1;
end
endmodule
2、数字钟秒钟计数设计
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) begin
if(!clr) begin q=0;c=0;end
else if(q[3:0]==9) begin q[3:0]=0;
if(q[6:4]==5) begin q[6:4]=0; c=1;end
else 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;end
end
endmodule、
秒钟计数模块就是一个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;end
else begin
if((clk&&(m==0))||(up&&(m==1))) begin
if(q[3:0]==9) begin q[3:0]=0;
if(q[6:4]==5) begin q[6:4]=0; c=1;end
else q[6:4]=q[6:4]+1;end
else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;end end
if(down&&(m==1)) begin
if(q[3:0]==0) begin
if(q[6:4]==0) begin q[6:4]=5;q[3:0]=9;end
else begin q[6:4]=q[6:4]-1; q[3:0]=9;end end
else q[3:0]=q[3:0]-1;end
end
end
endmodule
分钟计数模块也是一个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) begin
if(!clr) q=0;
else begin
if((clk&&(m==0))||(up&&(m==2))) begin
if(q[5:4]<2) begin
if(q[3:0]<9) q[3:0]=q[3:0]+1;
else begin q[3:0]=0;q[5:4]=q[5:4]+1;end
end
else begin
if(q[3:0]<3) q[3:0]=q[3:0]+1;
else q=0;end
第6页,共19页