verilog数字钟设计FPGA
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、课程设计目标
1. 熟悉并掌握verilog 硬件描述语言
;
是
总模块:
module
clock(clk,reset,MODE,Alarm_ctr,BT2,H12_24,DSH,DSL,DMH,DML,DHH,DHL,dian,bao _signal,nao_signal);
input clk;//50MHz
input reset,MODE,Alarm_ctr,BT2,H12_24;//复位键,模式选择按钮,闹钟开关档,调节按钮,12—24小时切换档 output [7:0]DMH,DML,DHH,DHL; //4个数码管显示输入信号
output dian,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;
wire Keydone1;
wire Keydone2;
wire co1,co11,co111,co2,co22,co222,set_co2;
wire [3:0]mode_flag;
assign dian=1'b0;
devide_f u1(_1HZ,_10ms,_250ms,_500ms,reset,clk); //分频,得到4种不同频率的时钟信号
key_press u2(_10ms,MODE,Keydone1); //模式档按钮去抖动
key_press u20(_10ms,BT2,Keydone2); //调节按钮去除抖动
mode u3(Keydone1,mode_flag); //通过模式按钮产生不同模式second u4(_1HZ,reset,mode_flag,Keydone2,SH24,SL24,co1); //秒计时
minute u5(co11,reset,MH24,ML24,co2); //分计时
hour u6(co22,reset,HH24,HL24); //小时计时
SEG7_LUT u7(DML,ML); //4个数码管显示
SEG7_LUT u8(DMH,MH);
SEG7_LUT u9(DHL,HL);
SEG7_LUT u10(DHH,HH);
display_LED u11(DSL,SL); //LED灯显示秒或模式灯
display_LED u12(DSH,SH);
mode_choose
u13(mode_flag,Keydone2,_250ms,co1,co2,set_co2,co11,co22,co111,co222); //选择模式进行不同操作
hour12_24 u14(HH24,HL24,HH12,HL12); //12--24小时切换
boshi u15(HH,HL,MH,ML,SH,SL,_1HZ,bao_signal); //整点报时
set_naozhong u16(co111,co222,set_HH,set_HL,set_MH,set_ML,set_co2); //设置闹钟时间
Naozhong
u17(Alarm_ctr,_500ms,set_HH,set_HL,set_MH,set_ML,HH24,HL24,MH24,ML24,nao_s ignal); //任意闹钟响应
LUT_mode
u18(mode_flag,H12_24,HH12,HL12,HH24,HL24,MH24,ML24,set_HH,set_HL,set_MH,se t_ML,MH,ML,HH,HL);//通过模式选择数码管显示
LED_mode u19(mode_flag,SH24,SL24,SH,SL); 模式选择LED灯显示
Endmodule
分频模块:
分频模块的作用主要是要获得各种频率的时钟信号。输入信号为50MHZ的信号,要想获得1HZ的信号作为秒脉冲计时,则要对50MHZ信号分频。通过计数的方式,当计数从0开始到24 999999时,1HZ信号取反一次,计数又从0开始,如此循环,就可以得到1HZ 脉冲信号。对于其他信号也是如此,只是计数值不一样,得到的分频信号不同。
module devide_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 _50MHZ or negedge nCR)begin
if(~nCR)
begin
Q1<=32'd0;
Q2<=32'd0;
Q3<=32'd0;
Q4<=32'd0;
end
begin
Q1<=32'd0;
_1HZ=~_1HZ;
end
else if(Q2>=32'd249999) begin
Q2<=32'd0;
_10ms=~_10ms;
end
else if(Q4>=32'd6299999) begin
Q4<=32'd0;
_250ms=~_250ms;