基于verilogHDL的数字时钟

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*****

顶层模块信号定义:

clk : 基准时钟信号输入;

keysel : 校时状态/正常计时状态选择键输入;

key_s : 校秒信号选择键输入;

key_m : 校分信号选择键输入;

key_h : 校时信号选择键输入;

keyclr : 计时清零键;

keyen : 计时开始键;

buzzout : 声响输出;

sled : 4位数码管段码输出;

sl : 4位数码管位码输出;

seg : 单个数码管输出;

********************************************************* ******/

module

clock(clk,keysel,key_s,key_m,key_h,keyen,keyclr,sled,sl,seg,buzzout);

output[7:0] sled;

output[3:0] sl;

output[7:0] seg;

output buzzout;

input clk;

input keysel,key_s,key_m,key_h,keyen,keyclr;

reg[24:0] count;

wire[23:0] min;

wire sec;

wire sec_s,sec_m,sec_h,sec_narmal;

divclk Q1(clk,sec_narmal,sec_s,sec_m,sec_h);

modify

Q2(clk,keysel,key_s,key_m,key_h,sec,sec_narmal,sec_s,sec_m,sec_h);

counttime Q3(sec,keyclr,keyen,min);

display Q4(clk,sec,min,sled,sl,seg);

music Q5(clk,min,buzzout,sec_narmal);

endmodule

*****

分频模块信号定义:

clk : 基准时钟信号输入;

sec_narmal : 周期为1的信号输出;

sec_s : 周期为0.5s的信号输出;

sec_m : 周期为0.05s的信号输出;

sec_h : 周期为0.0005s的信号输出;

********************************************************* ******/

module divclk(clk,sec_narmal,sec_s,sec_m,sec_h);

input clk;

output sec_narmal,sec_s,sec_m,sec_h;

reg[23:0] count1;

reg[22:0] count2;

reg[19:0] count3;

reg[12:0] count4;

reg sec_narmal,sec_s,sec_m,sec_h;

always@(negedge clk)

begin

count1=count1+1'b1;

if(count1==24'd1*******)

begin

count1=24'h0;

sec_narmal=~sec_narmal;

end

end

always@(negedge clk)

begin

count2=count2+1'b1;

if(count2==23'd6000000)

begin

count2=23'h0;

sec_s=~sec_s;

end

end

always@(negedge clk)

begin

count3=count3+1'b1;

if(count3==20'd600000)

begin

count3=20'h0;

sec_m=~sec_m;

end

end

always@(negedge clk)

begin

count4=count4+1'b1;

if(count4==13'd6000)

begin

count4=13'h0;

sec_h=~sec_h;

end

end

endmodule

/********************************************************* *****

计时处理模块信号定义:

sec : 计时信号输入;

keyclr : 计时清零键;

keyen : 计时开始键;

min : 计时结果输出;

********************************************************* ******/

module counttime(sec,keyclr,keyen,min);

input sec;

input keyclr,keyen;

output[23:0] min;

reg[23:0] min;

always@(posedge sec)

begin

if(!keyclr)

begin

min=24'h0;

end

else

if(!keyen)

begin

min=min+1'b1;

if(min[3:0]==4'ha)

begin

min[3:0]=4'h0;

min[7:4]=min[7:4]+1'b1;

if(min[7:4]==4'h6)

begin

min[7:4]=4'h0;

min[11:8]=min[11:8]+1'b1;

if(min[11:8]==4'ha)

begin

min[11:8]=4'h0;

min[15:12]=min[15:12]+1'b1;

if(min[15:12]==4'h6)

begin

min[15:12]=4'h0;

min[19:16]=min[19:16]+1'b1;

if(min[19:16]==4'ha)

begin

min[19:16]=4'h0;

min[23:20]=min[23:20]+1'b1;

end

if(min[23:16]==8'h24)

min[23:16]=0;

end

end

end

end

end

相关文档
最新文档