verilog数字钟设计FPGA.docx

上传人:b****2 文档编号:2314696 上传时间:2022-10-28 格式:DOCX 页数:18 大小:40.75KB
下载 相关 举报
verilog数字钟设计FPGA.docx_第1页
第1页 / 共18页
verilog数字钟设计FPGA.docx_第2页
第2页 / 共18页
verilog数字钟设计FPGA.docx_第3页
第3页 / 共18页
verilog数字钟设计FPGA.docx_第4页
第4页 / 共18页
verilog数字钟设计FPGA.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

verilog数字钟设计FPGA.docx

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

verilog数字钟设计FPGA.docx

verilog数字钟设计FPGA

1、课程设计目标

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

2.熟悉quartus软件开发环境

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

二、课程设计实现的功能

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

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

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

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

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

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

3、设计原理:

1、总原理框图:

 

附全部代码:

总模块:

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

分频模块:

分频模块的作用主要是要获得各种频率的时钟信号。

输入信号为50MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对50MHZ信号分频。

通过计数的方式,当计数从0开始到24999999时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ脉冲信号。

对于其他信号也是如此,只是计数值不一样,得到的分频信号不同。

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

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

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

计时模块:

秒计数:

在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

SL=4'b0;

SH=4'b0;

cnt<=8'b0;

end

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

BT2))

begin

SL=4'b0;

SH=4'b0;

cnt<=8'b0;

end

else

begin

if(cnt==8'd59)

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

moduleminute(cp,reset,MH,ML,co);

inputcp,reset;

outputco=1'b0;

output[3:

0]ML,MH;

reg[3:

0]MH,ML;

reg[7:

0]cnt;

regco;

always@(posedgecpornegedgereset)

begin

if(!

reset)

begin

ML=4'b0;

MH=4'b0;

cnt<=8'b0;

end

else

begin

if(cnt==8'd59)

begin

cnt<=8'd0;

MH<=4'd0;

ML<=4'd0;

co<=1'b1;

end

else

begin

co=1'b0;

cnt=cnt+8'd1;

ML<=cnt%10;

MH<=cnt/10;

end

end

end

endmodule

modulehour(cp,reset,HH,HL);

inputcp,reset;

output[3:

0]HL,HH;

reg[3:

0]HH,HL;

reg[7:

0]cnt;

always@(posedgecpornegedgereset)

begin

if(!

reset)

begin

HL=4'b0;

HH=4'b0;

cnt<=8'b0;

end

else

begin

if(cnt==8'd23)

begin

cnt<=8'd0;

HH<=4'd0;

HL<=4'd0;

end

else

begin

cnt=cnt+8'd1;

HL<=cnt%10;

HH<=cnt/10;

end

end

end

Endmodule

模式选择模块:

同过一个模式档按键MODE,按一下产生对应一种模式mode_flag,并且可以循环。

在不同的模式下可以进行不同的操作。

其中mode_flag=4'0000为正常显示计时,mode_flag=4'0001为小时调钟模式,mode_flag=4'00010为分钟调钟模,mode_flag=4'0011为闹钟小时设置模式,mode_flag=4'0100为闹钟分钟设置模式。

modulekey_press(_10ms,KEY,Keydone);

inputKEY,_10ms;

outputKeydone;

regdout1,dout2,dout3;

always@(posedge_10ms)

begin

dout1<=KEY;

dout2<=dout1;

dout3<=dout2;

end

assignKeydone=(dout1|dout2|dout3);

endmodule

modulemode(MODE,mode_flag);

inputMODE;

output[3:

0]mode_flag;

reg[3:

0]mode_flag;

always@(negedgeMODE)

begin

mode_flag=mode_flag+4'b1;

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

当前位置:首页 > PPT模板 > 动态背景

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

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