基于FPGA的多功能数字钟设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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页

相关文档
最新文档