基于verilog数字钟设计报告.docx

上传人:b****6 文档编号:7787176 上传时间:2023-01-26 格式:DOCX 页数:26 大小:22.92KB
下载 相关 举报
基于verilog数字钟设计报告.docx_第1页
第1页 / 共26页
基于verilog数字钟设计报告.docx_第2页
第2页 / 共26页
基于verilog数字钟设计报告.docx_第3页
第3页 / 共26页
基于verilog数字钟设计报告.docx_第4页
第4页 / 共26页
基于verilog数字钟设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

基于verilog数字钟设计报告.docx

《基于verilog数字钟设计报告.docx》由会员分享,可在线阅读,更多相关《基于verilog数字钟设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

基于verilog数字钟设计报告.docx

基于verilog数字钟设计报告

1、课程设计目标

1.熟悉并掌握verilog硬件描述语言

2.熟悉quartus软件开发环境

3.学会设计大中规模的数字电路,并领会其中的设计思想

二、课程设计实现的功能

(1)设计一个数码管实时显示时、分、秒的数字时钟(24小时显示模式);

(2)可以调节小时,分钟。

(3)能够进行24小时和12小时的显示切换。

(4)可以设置任意时刻闹钟,并且有开关闹钟功能。

(5)有整点报时功能,几点钟LED灯闪亮几下。

(6)有复位按键,复位后时间从零开始计时,但闹钟设置时间不变。

3、?

?

原理:

1、?

原理框?

译码显示模块

切换12进制显示

复位

分钟校正

小时校正

分频模块

计数模块

 

输出整点报时信号

到达整点

输出闹钟信号

是否到闹钟时间

设置闹钟分钟

设置闹钟小时

模式选择模块

 

 

2、各?

子模?

?

?

(1)、分?

模?

分?

模?

的作用主要是要?

得各种?

率的?

?

信?

?

入信?

?

50MHZ的信?

,要想?

得1HZ的信?

作?

秒?

?

?

?

,?

要?

50MHZ信?

分?

通?

?

?

的方式,?

?

?

?

0?

始到24999999?

,1HZ信?

取反一次,?

?

又?

0?

始,如此循?

,就可以得到1HZ?

?

信?

?

于其他信?

也是如此,只是?

?

值不一?

,得到的分?

信?

不同。

部分代?

如下:

always@(posedge_50MHZornegedgenCR)begin

if(~nCR)

begin

Q1<=32'd0;

end

elseif(Q1>=32'd24999999)

begin

Q1<=32'd0;

_1HZ=~_1HZ;

end

elsebegin

Q1<=Q1+1'd1;

end

(2)、?

?

模?

秒?

?

在1HZ?

?

下?

行秒?

?

,?

?

?

?

到59秒后,在下一?

?

?

?

?

?

0,并?

出一?

?

?

信?

,可供下面分?

?

?

作?

?

入?

?

信?

?

?

分?

?

?

在?

入?

?

下,分?

?

始?

?

,?

?

?

?

到59后,在下一?

?

?

?

?

?

0,并?

出一?

?

?

,供小?

?

?

的?

入?

?

新?

小?

?

?

?

?

信?

?

?

?

,?

?

加1,?

到23后在下一?

?

?

的作用下清零,?

新?

?

如果有复位信?

,?

?

分秒全部清零。

部分代?

如下:

modulesecond(cp,reset,mode_flag,BT2,SH,SL,co);

inputcp,reset,BT2;

input[3:

0]mode_flag;

outputco=1'b0;//?

出?

?

信?

regco;

output[3:

0]SL,SH;//?

出秒?

?

的十位、各位

reg[3:

0]SH,SL;

reg[7:

0]cnt;

always@(posedgecpornegedgereset)

begin

if(!

reset)begin//有复位,清零

cnt<=8'd0;

SH<=4'd0;

SL<=4'd0;end

elseif((mode_flag==4'b0010)&&(!

BT2))begin//如果分?

?

?

,秒清零

cnt<=8'd0;

SH<=4'd0;

SL<=4'd0;end

if(cnt==8'd59)//?

?

?

到59,下一?

?

?

下?

新?

?

begin

cnt<=8'd0;

SH<=4'd0;

SL<=4'd0;

co<=1'b1;

end

else

begin

co=1'b0;

cnt=cnt+8'd1;

SL<=cnt%10;//秒十位

SH<=cnt/10;//秒各位

end

end

end

endmodule

分?

?

和小?

?

?

代?

和上述?

似,不再?

出。

secondu4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1);

minuteu5(co11,reset,MH24,ML24,co2);

houru6(co22,reset,HH24,HL24);

(3)、模式?

?

模?

同?

一?

模式?

按?

MODE,按一下?

生?

?

一种模式mode_flag,并且可以循?

在不同的模式下可以?

行不同的操作。

其中mode_flag=4'0000?

正常?

示?

?

,mode_flag=4'0001?

小?

?

?

模式,mode_flag=4'00010?

分?

?

?

模,mode_flag=4'0011?

?

?

小?

?

置模式,mode_flag=4'0100?

?

?

分?

?

置模式。

模式?

生:

modulemode(MODE,mode_flag);

inputMODE;

output[3:

0]mode_flag;

reg[3:

0]mode_flag;

always@(negedgeMODE)begin//如果?

?

到有按?

按下

mode_flag=mode_flag+4'b1;//模式值加1

if(mode_flag==4'b0101)//到最后一?

模式后返回第一的模式

mode_flag=2'b0;nd

Endmodule

模式?

?

modulemode_choose(mode_flag,BT2,_250ms,co1,co2,set_co2,co11,co22,co111,co222);

input[3:

0]mode_flag;//?

入模式方式,?

?

?

?

操作

inputBT2,_250ms,co1,co2,set_co2;//?

?

按?

,?

?

信?

,正常?

?

分?

?

?

信?

,正常?

?

小?

?

?

信?

,?

?

?

置分?

?

位信?

outputco11,co22,co111,co222;//分?

?

?

信?

,小?

?

?

信?

,?

?

?

置分?

?

?

信?

,?

?

?

置小?

?

?

信?

supply1Vdd;

regco11,co22,co111,co222;

always@(mode_flag)begin

case(mode_flag)

4'b0001:

begin

if(~BT2)co22<=_250ms;//小?

?

?

模式,有按?

,?

?

?

?

250ms

elsebeginco22<=co2;//?

有按?

,正常?

?

co11<=co1;end

end

4'b0010:

begin

if(~BT2)beginco11<=_250ms;//小?

?

?

模式,有按?

,?

?

?

?

250ms

co22<=co2;end

elsebeginco11<=co1;//?

有按?

,正常?

?

co22<=co2;end

end

4'b0011:

beginco22<=co2;

co11<=co1;

if(~BT2)co222<=_250ms;//?

?

小?

?

置信?

elseco222<=set_co2;end

4'b0100:

beginco22<=co2;

co11<=co1;

if(~BT2)co111<=_250ms;//?

?

分?

?

置信?

elseco111<=Vdd;end

default:

begin

co11<=co1;

co22<=co2;end

endcase

end

endmodule

(4)、任意?

?

模?

一、?

置?

?

?

?

?

于?

?

?

置模式mode_flag=4'0011和4'b0100?

,有?

置信?

?

入?

,?

?

始?

置。

?

?

代?

moduleset_naozhong(co111,co222,set_HH,set_HL,set_MH,set_ML,co2);

inputco111,co222;//?

?

分?

,小?

?

置信?

output[3:

0]set_HH,set_HL,set_MH,set_ML;//?

出相?

的?

?

?

置?

?

supply1Vdd;

outputco2;

minute(co111,Vdd,set_MH,set_ML,co2);

hour(co222,Vdd,set_HH,set_HL);

endmodule

二、?

?

?

?

?

正常?

?

?

到?

?

?

置得?

?

后,通?

比?

二者之?

的?

?

,相等,?

?

生一?

?

?

允?

?

?

信?

,在?

?

?

?

打?

和?

?

允?

?

?

信?

同?

?

足的情?

下,?

?

生?

?

?

?

信?

,并送到相?

的?

?

?

?

LED?

如果?

?

?

?

于?

?

?

?

,?

不?

?

生?

?

?

?

信?

?

?

代?

如下:

modulenaozhong(Alarm_ctr,_1HZ,set_HH,set_HL,set_MH,set_ML,HH24,HL24,MH24,ML24,nao_signal);

inputAlarm_ctr,_1HZ;

input[3:

0]set_HH,set_HL,set_MH,set_ML;

input[3:

0]HH24,HL24,MH24,ML24;

outputnao_signal;

regsignal;

regnao_signal;

reg[16:

0]Q;//?

?

,?

?

?

?

?

?

?

?

?

always@(posedge_1HZ)begin

if((~signal)&&(Alarm_ctr))beginif((set_HH==HH24)&&(set_HL==HL24)&&(set_MH==MH24)&&(set_ML==ML24))signal<=1'b1//?

到?

?

?

置?

?

,?

生?

?

允?

?

?

信?

elsesignal<=1'b0;end//未?

到,不?

elseif((signal)&&(Alarm_ctr))begin//?

?

?

?

打?

和?

?

允?

?

?

信?

同?

?

nao_signal<=~nao_signal;//?

生?

?

?

?

信?

Q=Q+nao_signal;

if(Q>=8'd720)begin//?

?

?

?

完?

,?

?

?

?

允?

?

?

信?

Q<=16'b0;

signal<=1'b0;end

end

elsebegin

signal<=1'b0;

nao_signal<=1'b0;end

end

endmodule

 

(5)、整?

?

?

模?

?

?

分?

和秒?

?

?

是否都?

到了59,然后再下一?

秒?

?

的作用下?

出整?

?

?

信?

,送到LED。

并?

始?

?

,?

?

?

到?

?

信?

?

?

次?

后,?

止?

?

信?

部分代?

如下:

always@(posedge_500ms)begin

if(((SH*10+SL)==8'd59)&&((MH*10+ML)==8'd59))begin

Q1<=7'b0;

bao<=1'b1;end//允?

?

?

elseif((Q1<10*HH+HL)&&(bao))begin

bao_signal<=~bao_signal;//?

生?

?

信?

Q1<=Q1+bao_signal;//?

一次?

?

加一

end

elseif(Q1==(10*HH+HL))//?

?

次?

?

到整?

?

?

,?

止信?

bao<=1'b0;

else

begin

bao_signal<=1'b0;

end

End

(6)、12—24小?

切?

模?

?

24小?

切?

成12小?

,并存入相?

的寄存器。

如果?

上切?

?

示?

,?

切?

?

示。

相?

代?

如下:

modulehour12_24(HH24,HL24,HH12,HL12);

input[3:

0]HH24,HL24;

output[3:

0]HH12,HL12;

reg[3:

0]HH12,HL12;

always@(HH24orHL24)begin

if((HH24*10+HL24)<=12)

begin

HH12<=HH24;

HL12<=HL24;

end

elseif(((HH24*10+HL24)>=13)&&((HH24*10+HL24)<=19))

begin

HH12<=4'd0;

HL12<=HL24-4'd2;

end

elseif(((HH24*10+HL24)>=19)&&((HH24*10+HL24)<=21))

begin

HH12<=4'd0;

HL12<=HL24+4'd8;

end

else

begin

HH12<=HH24-4'd1;

HL12<=HL24-4'd2;

end

end

endmodule

(7)、?

?

?

示模?

一、?

?

管?

示:

通?

?

入?

?

的4位十?

制?

,?

用case?

句?

?

?

出相?

的8位二?

制?

示?

,送入?

?

管?

示。

代?

如下:

moduleSEG7_LUT(oSEG1,iDIG);

input[3:

0]iDIG;//?

入要?

示的?

output[7:

0]oSEG1;

reg[7:

0]oSEG;

wire[7:

0]oSEG1;

always@(iDIG)

begin

case(iDIG)

4'h0:

oSEG=8'b00111111;

4'h1:

oSEG=8'b00000110;

4'h2:

oSEG=8'b01011011;

4'h3:

oSEG=8'b01001111;

4'h4:

oSEG=8'b01100110;

4'h5:

oSEG=8'b01101101;

4'h6:

oSEG=8'b01111101;

4'h7:

oSEG=8'b00000111;

4'h8:

oSEG=8'b01111111;

4'h9:

oSEG=8'b01101111;

endcase

end

assignoSEG1=~oSEG;//由于是共?

极?

?

管,低?

平?

示,所以取反

Endmodule

二、LED?

示:

moduledisplay_LED(s_out,s_int);

input[3:

0]s_int;

output[3:

0]s_out;

reg[3:

0]s_out;

wire[3:

0]s_out1;

always@(s_int)

begin

case(s_int)

4'h0:

s_out=4'b0000;

4'h1:

s_out=4'b0001;

4'h2:

s_out=4'b0010;

4'h3:

s_out=4'b0011;

4'h4:

s_out=4'b0100;

4'h5:

s_out=4'b0101;

4'h6:

s_out=4'b0110;

4'h7:

s_out=4'b0111;

4'h8:

s_out=4'b1000;

4'h9:

s_out=4'b1001;

endcase

end

assigns_out1=~s_out;

Endmodule

 

?

?

?

程常?

?

?

(1)要注意?

?

程序的?

程中begin和end配?

?

?

,?

似于C?

言中的括?

匹配?

?

,在?

?

?

?

模?

?

?

?

不通?

,最后?

查出是缺少一?

end?

束符?

,?

修改后?

?

通?

(2)VerilogHDL?

言?

?

?

的?

法?

?

在最初的?

?

模?

的程序?

?

中,?

小?

、分?

的?

?

信?

放在了另外的一?

always?

句?

中,?

?

?

法通?

,?

查?

?

料,在VerilogHDL?

言的?

?

中?

?

注意不同的always?

句?

不可以?

同一?

?

量?

行操作,即一?

?

量不可以?

?

?

?

always?

句?

操作。

?

?

小?

和分?

?

?

信?

的操作与?

?

放在同一?

?

句?

中,?

?

通?

(3)?

?

管?

?

始?

?

示于?

?

?

?

不一?

,主要是由?

?

?

?

造成的原因。

?

?

管一?

始不?

化,?

明?

?

?

有?

行,是由于分?

的?

入?

?

信?

?

?

引起。

心得体?

?

次的?

程?

?

?

束了,在?

次的?

?

中我?

?

了很多?

西。

首先是?

VerilogHDL?

言的?

?

思想有了深入理解,?

?

种自?

向下的?

?

理念?

用于?

?

中,?

?

多功能?

字?

,突出了VerilogHDL作?

硬件描述?

言的良好可?

性和可移植性,?

上?

期所?

的而理?

知?

有了深刻的理解。

其次是?

VerilogHDL?

言的?

法熟悉,在?

次的?

程?

?

中,我?

?

到很多VerilogHDL?

言的?

法知?

,比如在?

?

不同的?

句?

中不能?

同一?

?

量?

行操作,比如在用VerilogHDL?

言中?

?

程序?

要注意begin和end?

句的匹配?

?

,在使用VerilogHDL?

言?

不可以使用中文注?

等等。

?

于?

种?

言的?

?

也有了很大的?

助。

最后是?

?

作品?

的?

?

?

?

和?

?

思想,在?

?

不同的系?

方案?

要?

合考?

,?

?

最优方案。

各?

模?

的?

?

也要考?

?

合情?

而制定出最符合?

?

情?

的?

?

方案,方案?

要?

行?

比、?

?

,最?

确定。

在?

次的?

程?

?

中我不?

?

?

到有?

程序?

?

以及?

?

方面的?

?

思?

,?

系?

功能的?

?

也有了?

?

深入的了解,?

各模?

的?

?

等也?

?

到不少?

西,?

之,?

?

次?

?

中?

到很多?

西,也?

固了我的理?

?

?

附代?

?

模?

moduleclock(clk,reset,MODE,Alarm_ctr,BT2,H12_24,DSH,DSL,DMH,DML,DHH,DHL,dian,bao_signal,nao_signal);

inputclk;//50MHz

inputreset,MODE,Alarm_ctr,BT2,H12_24;//复位?

,模式?

?

按?

,?

?

?

?

?

,?

?

按?

,12—24小?

切?

?

output[7:

0]DMH,DML,DHH,DHL;//4?

?

?

管?

示?

入信?

outputdian,bao_signal,nao_signal;//?

分?

隔?

,?

?

信?

?

?

信?

output[3:

0]DSH,DSL;//秒?

?

出信?

wire[3:

0]SH,SL,MH,ML,HH,HL;

wire[3:

0]LED_mode;

wire[3:

0]HH12,HL12,HH24,HL24,MH24,ML24,SH24,SL24;

wire[3:

0]set_HH,set_HL,set_MH,set_ML;

wire_1HZ,_10ms,_250ms,_500ms;

wireKeydone1;

wireKeydone2;

wireco1,co11,co111,co2,co22,co222,set_co2;

wire[3:

0]mode_flag;

assigndian=1'b0;

devide_fu1(_1HZ,_10ms,_250ms,_500ms,reset,clk);//分?

,得到4种不同?

率的?

?

信?

key_pressu2(_10ms,MODE,Keydone1);//模式?

按?

去抖?

key_pressu20(_10ms,BT2,Keydone2);//?

?

按?

去除抖?

modeu3(Keydone1,mode_flag);//通?

模式按?

?

生不同模式

secondu4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1);//秒?

?

minuteu5(co11,reset,MH24,ML24,co2);//分?

?

houru6(co22,reset,HH24,HL24);//小?

?

?

SEG7_LUTu7(DML,ML);//4?

?

?

管?

SEG7_LUTu8(DMH,MH);

SEG7_LUTu9(DHL,HL);

SEG7_LUTu10(DHH,HH);

display_LEDu11(DSL,SL);//LED?

?

示秒或模式?

display_LEDu12(DSH,SH);

mode_chooseu13(mode_flag,Keydone2,_250ms,co1,co2,set_co2,co11,co22,co111,co222);//?

?

模式?

行不同操作

hour12_24u14(HH24,HL24,HH12,HL12);//12--24小?

切?

boshiu15(HH,HL,MH,ML,SH,SL,_1HZ,bao_signal);//整?

?

?

set_naozhongu16(co111,co222,set_HH,set_HL,set_MH,set_ML,set_co2);//?

置?

?

?

?

Naozhongu17(Alarm_ctr,_500ms,set_HH,set_HL,set_MH,set_ML,HH24,HL24,MH24,ML24,nao_signal);//任意?

?

?

?

LUT_modeu18(mode_flag,H12_24,HH12,HL12,HH24,HL24,MH24,ML24,set_HH,set_HL,set_MH,set_ML,MH,ML,HH,HL);//通?

模式?

?

?

?

管?

LED_modeu19(mode_flag,SH24,SL24,SH,SL);模式?

?

LED?

?

Endmodule

分?

模?

moduledevide_f(_1HZ,_10ms,_250ms,_500ms,nCR,_50MHZ);

input_50MHZ,nCR;

output_1HZ,_10ms,_250ms,_500ms;

reg_1HZ,_10ms,_250ms,_500ms;

reg[31:

0]Q1,Q2,Q3,Q4;

always@(posedge_50MHZornegedgenCR)begin

if(~nCR)

begin

Q1<=32'd0;

Q2<=32'd0;

Q3<=32'd0;

Q4<=32'd0;

end

elseif(Q1>=32'd24999999)

begin

Q1<=32'd0;

_1HZ=~_1HZ;

end

elseif(Q2>=32'd249999)

begin

Q2<=32'd0;

_10ms=~_10ms;

end

elseif(Q4>=32'd6299999)

begin

Q4<=32'd0;

_250ms=~_250ms;

end

elseif(Q3>=32'd12499999)

begin

Q3<=32'd0;

_500ms=~_500ms;

end

elsebegin

Q1<=Q1+1'd1;

Q2<=Q2+1'd1;

Q3<=Q3+1'd1;

Q4<=Q4+1'd1;

end

end

endmodule

?

?

模?

modulesecond(cp,reset,mode_flag,BT2,SH,SL,co);

inputcp,reset,BT2;

input[3:

0]mode_flag;

outputco=1'b0;

regco;

output[3:

0]SL,SH;

reg[3:

0]SH,SL;

reg[7:

0]cnt;

always@(posedgecpornegedgereset)

begin

if(!

reset)

begin

SL=4'b0;

SH=4'b0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1