1. 首页
  2. 文档大全

可编程逻辑器件数字钟

上传者:97****76 2022-07-14 21:58:13上传 DOC文件 841.01KB
可编程逻辑器件数字钟_第1页 可编程逻辑器件数字钟_第2页 可编程逻辑器件数字钟_第3页

《可编程逻辑器件数字钟》由会员分享,可在线阅读,更多相关《可编程逻辑器件数字钟(14页珍藏版)》请在文档大全上搜索。

1、可编程逻辑器件及其应用 一 设计要求用Verilog HDL设计一个多功能数字钟基本功能描述:1. 时钟功能:包括时、分、秒的显示;2. 定时与闹钟功能:能在设定的时间发出闹铃音;3. 校时功能:能非常方便地对小时、分钟和秒进行手动调整以校准时间;4. 整点报时功能:每逢整点,产生“嘀嘀嘀嘀-嘟”,四短一长的报时音。二 仿真环境 用Modelsim进行编译和仿真,工程文件在clocknew1文件夹中。三 结果说明 此次设计实现了数字钟的基本功能,能够进行时分秒的计时,校准,能够整点报时,在设定的时间实现响铃功能。此次设计对各种功能进行了分模块设计,记数模块中,对秒位,分位进行60位记数,小时模

2、块进行24位记数;同时在记数模块中进行校准操作;报时模块里,每逢整点前的59分56秒、59分57秒、59分58秒、59分59秒,和整点时刻,发出“嘀嘀嘀嘀-嘟”的报时声;闹钟模块里,手动对数字钟进行定时,当数字钟的时刻与定时时刻相同时,ring=1发出响铃声。在以上各个功能的模块基础上,设置top顶层模块,将以上功能综合起来实现。为了验证数字钟的功能,编写测试testench模块,输入时钟#5 clk=clk,观察各个信号输出。四 仿真结果图1仿真整体效果图图2当reset键为0时,开始计数图3 秒位计数图4 分钟计数图5 小时位计数图6 整点报时功能图7 定时响铃功能图8 校时功能,校时使能

3、键为1,停止计数,校时图9 校时使能键为0,按校好的时间继续计数五 设计代码/顶层模块module top ( /input clk,reset012,dssl,dssh,dsml,dsmh,dshl,dshh,dingshi, ksec,kmin,khour,cntsec,cntmin,cnthour, /output sl,sh,ml,mh,hl,hh,di,do,ring ); input clk; input reset012; input 3:0 dssl,dssh,dsml,dsmh,dshl,dshh; input ksec,kmin,khour; input 7:0cntsec

4、,cntmin,cnthour; input dingshi; output3:0 sl,sh,ml,mh,hl,hh; wire 3:0 sl,sh,ml,mh,hl,hh; output di,do,ring; wire di,do,ring; wire 3:0 c,d,e,f,g,j; wire a,b; /对模块立化 second my_second (.clk(clk),.reset(reset012),.sh(d),.sl(c),.co(a),.ksec(ksec),.cntsec(cntsec); minute my_minute (.reset1(reset012),.mh(f

5、),.ml(e),.clk1(a),.co1(b),.kmin(kmin),.cntmin(cntmin); hour my_hour (.reset2(reset012),.hh(j),.hl(g),.clk2(b),.khour(khour),.cnthour(cnthour); baoshi my_baoshi (.bssl(c),.bssh(d),.bsml(e),.bsmh(f),.bshl(g),.bshh(j),.di(di),.do(do); naozhong my_naozhong (.dssl(dssl),.dssh(dssh),.dsml(dsml),.dsmh(dsmh

6、),.dshl(dshl),.dshh(dshh), .clksl(c),.clksh(d),.clkml(e),.clkmh(f),.clkhl(g),.clkhh(j),.dingshi(dingshi),.ring(ring); assign sl = c;assign sh = d;assign ml = e;assign mh = f;assign hl = g;assign hh = j;endmodule /秒位计数模块module second(clk,reset,sh,sl,co,ksec,cntsec);input clk; input reset; output3:0sh

7、,sl; / 秒位输出的十位和个位reg3:0sh,sl;output co; /进位reg co;input ksec;input7:0cntsec;reg7:0cnt; /计数器/遇到时钟上升沿或置位下降沿触发always(posedge clk or negedge reset) begin if(ksec=1) begin /校准 cnt<=cntsec; end else if(reset=0) begin /复位 sl<=4'd0;sh<=4'd0;cnt<=0;end else begin /计数到60,进位 if(cnt=8'd6

8、0) beginsl<=4'd0;sh<=4'd0;cnt<=8'd0;co<=1'd1;endelse begin /小于60,继续计数cnt<=cnt+1;co<=1'd0 ;sh<=cnt/10; /十位sl<=cnt%10; /个位 endendend endmodule/分钟计数模块module minute(reset1,mh,ml,clk1,co1,kmin,cntmin);input reset1; /复位input clk1; /时钟output3:0mh,ml; / 分钟十位和个位reg

9、3:0mh,ml;output co1; /进位reg co1;input kmin;input7:0cntmin;reg7:0cnt1; /计数器/遇到时钟和复位触发always(negedge clk1 or negedge reset1) begin if(kmin=1) begin /校准 cnt1<=cntmin; end else begin if(reset1=0) begin /复位ml<=0;mh<=0;cnt1<=0; end else if(cnt1=8'd60) begin /计数到60,进位。重新计数ml<=4'd0;mh

10、<=4'd0;cnt1<=8'd0;co1<=1'd1;endelse begin /计数不到60继续cnt1<=cnt1+1;co1<=1'd0 ;mh<=cnt1/10; /十位ml<=cnt1%10; /个位endendend endmodule/小时计数模块module hour(reset2,hh,hl,clk2,khour,cnthour);input clk2; /时钟input reset2; /复位output3:0hh,hl; / ?reg3:0hh,hl;reg7:0cnt2; /计数器input


文档来源:https://www.renrendoc.com/paper/212707954.html

文档标签:

下载地址