基于verilog数字钟设计报告.docx
- 文档编号:7787176
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:26
- 大小:22.92KB
基于verilog数字钟设计报告.docx
《基于verilog数字钟设计报告.docx》由会员分享,可在线阅读,更多相关《基于verilog数字钟设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
基于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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 verilog 数字 设计 报告