好文档 - 专业文书写作范文服务资料分享网站

基于verilog数字钟设计报告(完整资料).doc

天下 分享 时间: 加入收藏 我要投稿 点赞

reg co11,co22,co111,co222; always@(mode_flag)begin case (mode_flag) 4'b0001: begin

if(~BT2) co22<=_250ms; //小时调钟模式,有按键,则脉冲为250ms

else begin co22<=co2; //没有按键,正常计时

co11<=co1; end end 4'b0010: begin

if(~BT2) begin co11<=_250ms; //小时调钟模式,有按键,则脉冲为250ms

co22<=co2;end

else begin co11<=co1; //没有按键,正常计时

co22<=co2; end end 4'b0011: begin co22<=co2; co11<=co1;

if(~BT2) co222<=_250ms; // 闹钟小时设置信号

else co222<=set_co2;end 4'b0100: begin co22<=co2;

co11<=co1;

if(~BT2) co111<=_250ms; //闹钟分钟设置信号

else co111<=Vdd; end default :begin

co11<=co1;

co22<=co2; end

endcase end

endmodule

(4)、任意闹钟模块 :

一、设置闹钟:当对应于闹钟设置模式mode_flag=4'0011和4'b0100时,有设置信号输入时,则开始设置。 对应代码: module

set_naozhong(co111,co222,set_HH,set_HL,set_MH,set_ML,co2); input co111,co222; // 闹钟分钟,小时设置信号

output [3:0]set_HH,set_HL,set_MH,set_ML; //输出相应的闹钟设置时间 supply1 Vdd; output co2;

minute (co111,Vdd,set_MH,set_ML,co2); hour (co222,Vdd,set_HH,set_HL);

endmodule

二、闹钟响应:当正常计时达到闹钟设置得时间后,通过比较二者之间的时间,相等,则产生一个闹钟允许响应信号,在闹钟开关打开和闹钟允许响应信号同时满足的情况下,则产生闹钟响应信号,并送到相应的闹钟设备LED灯。如果闹钟档处于关闭状态,则不会产生闹钟响应信号。

响应代码如下: module naozhong

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

input Alarm_ctr,_1HZ;

input [3:0] set_HH,set_HL,set_MH,set_ML; input [3:0] HH24,HL24,MH24,ML24; output nao_signal; reg signal; reg nao_signal;

reg [16:0] Q; //计数,调节闹钟响应时间长度

always@(posedge _1HZ)begin

if((~signal)&&(Alarm_ctr))begin

if((set_HH==HH24)&&(set_HL==HL24)&&(set_MH==MH24)&&(set_ML==ML24))signal<=1'b1 //达到闹钟设置时间,产生闹钟允许响应信号

else signal<=1'b0;end //未达到,不产生 else if((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 else begin

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 //允许报时

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

bao_signal<=~bao_signal; // 产生报时信号

Q1<=Q1+bao_signal; //响一次计数加一

end

else if(Q1==(10*HH+HL)) //报时次数达到整点时数,终止信号

bao<=1'b0; else begin

bao_signal<=1'b0; end End

(6)、12—24小时切换模块:将24小时切换成12小时,并存入相应的寄存器。如果拨上切换显示档,则切换显示。 相应代码如下:

module hour12_24(HH24,HL24,HH12,HL12); input [3:0] HH24,HL24; output [3:0] HH12,HL12; reg [3:0] HH12,HL12;

always@(HH24 or HL24)begin if((HH24*10+HL24)<=12)

begin

HH12<=HH24; HL12<=HL24; end else

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

HH12<=4'd0;

HL12<=HL24-4'd2; end else

if(((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位二进制显示码,送入数码管显示。

代码如下:

module SEG7_LUT(oSEG1,iDIG);

input[3:0]iDIG; //输入要显示的数 output[7:0]oSEG1;

基于verilog数字钟设计报告(完整资料).doc

regco11,co22,co111,co222;always@(mode_flag)begincase(mode_flag)4'b0001:beginif(~BT2)co22<=_250ms;//小时调钟模式,有按键,则脉冲为250ms<
推荐度:
点击下载文档文档为doc格式
3gzq6346fc85bn78arf2570pk9t82300b7h
领取福利

微信扫码领取福利

微信扫码分享