求多功能数字钟verilog的代码

多功能数字钟
功能描述:采用可综合的代码风格编写一个带闹钟功能的数字钟,具体功能描述见接口
说明。
提交内容:模块代码,完整测试代码,综合报告,设计报告。
接口说明:
类型 名称 位宽 描述 备注
input Clk 1 标准时钟信号,其频率为100Hz;
input Rst_n 1 复位信号,低有效,要求复位后自动从00:00启动计时功能维持有效至少 3秒才复位
input Mode 2 功能控制信号
00:仅计时功能 01:计时和闹钟功能
10:手动校时功能 11:手动设置闹钟
input Turn 1 接按键,在手动校时功能时,选择是调整小时,
还是分钟;若长时间按住该键,还可使秒信号清零,用于
精确调时;长按指高电平维持至少2s
input Change 1 接按键,手动调整时,每按一次,计数器加 1;如果长按,则连续快速加1,用于快速调时和定时;长按指高电平维持至少2s
output Hour, 8 此三信号分别输出并显示时、分、秒信号,分别接七段数码管。要求在校时的时候,当前调整的部分以0.5 秒的时间频率闪烁显示
output Min,Sec 8
output Alert 1 输出到扬声器的信号,用于产生闹铃音,高有效
output LD_alert 1 指示是否设启动了闹钟功能;高电平有效

一、 各输入、输出信号引脚说明:
CLK:时钟信号
RST:系统复位信号,低电平有效。时钟复位后为:00 00 00。
EN:暂停信号,低电平有效,按下该键,数字时钟暂停。
S1:调节小时信号,低电平有效。每按下一次,小时增加一个小时。
S2:调节分钟信号,低电平有效。每按下一次,分钟增加一个分钟。
skp:输出到扬声器,在每个小时的59分50秒到0分10秒之间将会产生报警声音。
HOURH,HOURL,MINH,MINL,SECH,SECL:分别对应小时、分钟、秒钟的十位和个位。

二、 Verilog HDL编写的数字时钟程序:
module clock(CLK,RST,EN,S1,S2,spk,HOURH,HOURL,MINH,MINL,SECH,SECL);
input CLK,RST,EN,S1,S2;
output spk;
output[3:0] HOURH,HOURL,MINH,MINL,SECH,SECL;
reg spk;
reg[3:0] SECL,SECH,MINL,MINH,HOURL,HOURH;

always @(posedge CLK or negedge RST)
if(!RST) begin SECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0; end
//系统复位
else if(EN) //EN为低电平时时钟暂停
begin
if(!S1) //调节小时
begin
if(HOURL==9) begin HOURL<=0; HOURH<=HOURH+1; end
else
begin
if(HOURH==2&&HOURL==3) begin HOURL<=0;HOURH<=0; end
else HOURL<=HOURL+1;
end
end
else if(!S2) //调节分钟
begin
if(MINL==9)
begin
MINL<=0;
if(MINH==5) MINH<=0;
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end

else if(SECL==9) //时钟正常跳动状态
begin
SECL<=0;
if(SECH==5)
begin
SECH<=0;
if(MINL==9)
begin
MINL<=0;
if(MINH==5)
begin
MINH<=0;
if(HOURL==9) begin HOURL<=0;HOURH<=HOURH+1;end
else if(HOURH==2&&HOURL==3) begin HOURL<=0; HOURH<=0;end
else HOURL<=HOURL+1;
end
else MINH<=MINH+1;
end
else MINL<=MINL+1;
end
else SECH<=SECH+1;
end

else SECL<=SECL+1;
end
else
begin
HOURH<=HOURH;
HOURL<=HOURL;
MINH<=MINH;
MINL<=MINL;
SECH<=SECH;
SECL<=SECL;
end

always @(posedge CLK) //产生报警声音模块
begin
if(MINH==5&&MINL==9&&SECH==5) begin spk<=CLK;end
else if(MINH==0&&MINL==0&&SECH==0) spk<=CLK;
else spk<=0;
end
endmodule
温馨提示:答案为网友推荐,仅供参考
相似回答