《数字电子时钟报告.docx》由会员分享,可在线阅读,更多相关《数字电子时钟报告.docx(18页珍藏版)》请在三一文库上搜索。
1、电子信息与电气工程学院EDA 课程设计设计题目 :专业: 电子信息工程班级:姓名:学号:数字电子时钟简介数字电子时钟是一利用数字电路来显示秒分时的计时装置,与传统的机械钟相比 ,具有走时准确 ,显示直观,无机械传动装置等优点;因而得到广泛应用。随着人们生活水平的不断改善和美化,很多场合都可以看到数字电子时钟,并且已成为人们生活中必不可少的一部分,最常见比如电子手表,电子闹钟,万年历,手机时钟 数字电子时钟设计任务本设计以 KX-DN 系列综合实验开发板系统开发实验,通过verilog 语言编写各个功能模块,并且经过精确仿真修改达到理想状态,最后连接各个功能模块组成一个完整的数字电子时钟电路。本
2、设计不仅能够精确显示时分秒(为了起到直观、简洁、美化的作用,我们用“” 区分) , 而且能通过开发板上的按键来控制改变时、分、 秒的功能,大大方便了用户的校时、校分、校秒,大大增加数字电子时钟实用性。该时钟还有一键清零(复位清零)的功能,可以防止因外界、内因而导致的时钟计数错误,然后再通过校时、校分、校秒的功能来进行调整时间。最后还能通过开发板上的蜂鸣器来进行整点报时,这一点对这个设计来说是最具人性化的。我们可以按照自己的意愿来进行调整时间报时,已达到个性化设计。、总体设计方案设计原理及思路原理图如下:数码管显示模块四选一多路选择器分频模块计数器模块24进制计数器60进制计数器60进制计数器整
3、点报时模块四选三多路选择器计数器模块去抖动模块数字钟实际上就是对1Hz的频率进行计数的计数电路。振荡器产生32768Hz的时钟信号, 经过分频器后产生512H64Hz、2Hz的脉冲信号,秒计数器计满 60后,触发分计数器, 分计数器计满60后,触发计时电路,当计满24小时后开始下一轮计数。如果计数的起始 时间与设想的有误差,可以通过调时、调分按键或复位键进行手动调时。计数器的输出经 过4选1多路选择器后以动态扫描方式送到 LE躁码管输出。由框图可知程序模块可分为消抖模块、2分频、60进制计数器、24进制计数器、4选3多路选择器、七段译码器、位选端控制器组成。整体原理图:各模块说明2.1 消抖模
4、块2.1.1 消抖模块原理按键开关是各种电子设备不可或缺的人机接口。在实际应用中,很大一部分的按键是 机械按键。在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按 键的开关,就必须对按键的抖动进行处理。为了消除机械开关的抖动,可在开关与输出端 点之间接人一个RS触发器,就能使输出端产生很清晰的阶跃信号。2.1.2消抖模块程序代码module Xiaodou (CLK, KIN,KOUT);input CLK, KIN;/output KOUT; reg KOUT;reg 3:0 KH,KL;/always (posedge CLK) beginif (!KIN) KL=KL+
5、1 ;/else KL=4b0000; end /always (posedge CLK) beginif (KIN) KH= KH+1;/else KH 4b1100) KOUT 4b0111)KOUT=1B0;/工作时钟和输入信号定义对高电平和低电平脉宽计数之寄存器。对键输入的低电平脉宽计数若出现高电平,则计数器清0同时对键输入的高电平脉宽计数若出现高电平,则计数器清0对高电平脉宽计数一旦大于12,则输出1对低电平脉宽计数若大于7,则输出0end endmodule仿真波形2.2四选一多路选择器1.1.1 四选一多路选择器原理该四选一多路选择器没有进位端,用于四选一多路选择器的输入,控制其
6、输出计时器 的计时信号。同时它也作为位选端控制器的输入,决定哪个数码管亮。四选一多路计数器采用时序逻辑电路, 从0开始计时到3后归零,重新进行开始计时1.1.2 四选一多路选择器程序代码module Zonghe(k,Q_miinutes,Q_second,Q_hour,Q);input k;input7:0 Q_second,Q_miinutes,Q_hour;output reg 31:0 Q;alwaysbeginQ31:24=Q_hour;Q23:20=4ha;Q19:12=Q_miinutes;Q11:8=4ha;Q7:0=Q_second;endendmoduleSimulatio
7、n WaveformsSimulation mode; Functi anal& Master Time Bar:Valut t15.08A 1A区A 0A 1A 015.075 ns * * Pointer:1 34 ns Inleival:-13L74 ns Strl:EnJ ps 40. 0 ns15.075 ns120.0 ns L60 0 m 200 0 nsIIITruuuuuuijirLrLruuuinrLruLrurnirn2.3 2分频2.3.1 2分频原理该模块用于产生秒计数脉冲。2分频即在每一个输入脉冲的上升沿(或下降沿)取反 即可得到。2.3.2 2 分频程序代码mod
8、ule Fenpin(clk,newclk);input clk;output reg newclk;reg24:0 enter;always (posedge elk)beginif(enter20000000) cnter=cnter+1;else cnter=0;if (enter10000000) newclk=1;else newclk=0;endendmodule2.4 六十进制计数器2.4.1 六十进制计数器原理六十进制计数器作为秒计数器和分计数器的低位,具有进位输出端和异步复位端,复 位信号为高电平有效。它要求从 0到59计数,到五十九清零重新计数。采用时序逻辑电 路。设计时应
9、考虑计数器能够进行级联。2.4.2 六十进制计数器程序代码module Count60(clrn,clk,q,j,cont);input clrn,clk,j;output reg 7:0 q;output reg cont;always (posedge c1kAjor negedgeclrn)begin if(clrn) q=1b0;else begin if(q=8b0101_1001)q=1b0;else q=q+1b1;if(q3:0=4b1010)beginq3:0=4b0;q7:4=q7:4+1b1;end if(q=8b0101_1001) cont=1;else cont=0
10、;endendendmodule仿真波形:Simulation WaveformsSimu_Li on node :Funct i onaZLN M aster T imt? B ar:15.075 n5* | * Pointei:11 51 nsIntervafc |3.57 nsSrt:End-IIJU.J pS20. I) nS40. Q ns60. Q xl-s00. Q100. 0 A3,英15 LJ815. 0T5 azA口:lk_l j A iJf_1_11_11_11_11_11_11_11_11_11_I田 i El dlA ?r灯cdX ri x 卬】X can X 【4】
11、X tsi X 集X 7j X 出X gj X伉3-dlC3A 011-dl121A 01I-JI fl 1A 1 11f gL dloA 0n _ 0 6.ClA 01 LI 水reselA 0A II12.5 二十四进制计数器(含进位端)2.5.1 二十四进制计数器(含进位端)原理该二十四进制计数器作为秒计数器和分计数器的高位,具有进位输出端和异步复位端,复位信号为高电平有效。它要求从 0到23计数,到23清零重新计数。采用时序逻辑 电路。设计时应考虑计数器能够进行级联。2.5.2 二十四进制计数器(含进位端)程序代码module count24(clrn,clk,q,j,cont);in
12、put clrn,clk,j;output reg 7:0 q;output reg cont;always (posedge c1kAj or negedge clrn)begin if(clrn) q=0;else begin if(q=h23) q=0;else q=q+1;if(q3:0=,ha)begin q3:0=0;q7:4=q7:4+1;end if(q=h23) cont=1;else cont=0;endendendmoduleimijlaticin WaveformsSimulation mod电:Functional日有-d53-d52d5l-d50日曲-d5l-dfi
13、0d*_shirstQ Master Tirne Bar:151075 ns_ P*蚓12.45 nt Interval. *263 nr S 加也Vai life15. Mk A IAh IA IA I k A2.6 四选一多路选择器2.6.1 四选一多路选择器原理四选一多路选择器通过四进制计数器的输出信号控制实现了对计数器产生的脉冲信 号的选择性输出。加入此模块是为了实现数码管的动态扫描输出。四选一多路选择器的输入是一个二位二进制数,输出是计时器、计分器、计秒器的高 位或低位。2.6.2 四选一多路选择器程序代码module Sixuanyi(k,jm,jf,js,j1,j2,j3);in
14、put k,j1,j2,j3;output reg jm,jf,js;always beginif(k=0)jm,jf,js=j1,j2,j3;else;endendmoduleSimulation WaveformsSittioltti on nod.e : Functi Dnftlter:Interval:Start:EndMaster Time Bar:15.075 ns635 ps3 pM its 40r 0事 60. m 60, its 100. p n* 12sp u 140.p m 16ctp 186115.075 ns2.7 三选一多路选择器2.7.1 三选一多路选择器原理三选
15、一多路选择器通过三进制计数器的输出信号控制实现了对计数器产生的脉冲信 号的选择性输出。加入此模块是为了实现数码管的动态扫描输出。三选一多路选择器的输入是一个三进制数,输出是计时器、计分器、计秒器的高位或 低位。2.7.2 三选一多路选择器程序代码module Sanxuanyi(clk,A1,A2,N,J1,J2,J3);input clk,A1,A2,N;output reg J1,J2,J3;always begincase (A1,A2)0:J1=N;1:J2=N;2:J3=N;default :J1=N;endcaseendendmoduleSimulation WaveformsSi
16、M-ul all du mo de : Functi Dnal电A美02.8 七段译码器2.8.1 七段译码器原理七段译码器是对输入的信号对应的位置进行编码,使其能显示出输入的数的值。本文 所介绍的译码器将小数点 dp通过位拼接符将其与计数器的计数值组合,然后一同给到译 码管,便于输出。计时器低位的小数点要求常亮,即 dp=1;计分器的低位小数点要求以 1Hz的频率闪烁,可以让它以2分频的输出为值。2.8.2 七段译码器程序代码复位信号,低要显示的32位数位选信号段码dp到a由高到module Display( clk ,rst_n,d,dig ,seg); input clk ;/20MHz
17、input rst_n ;/电平有疑input 31:0 d; /据output 7:0 dig ; /output 7:0 seg; / parameter N= 20000; / 分频系数reg clkout ;/扫描时钟reg 13:0cnt;/ 分频计数器reg 2:0 scan_cnt ; / 扫描计数器reg 3:0 disp_dat ; /每一位数码管待译码数据reg 7:0 dig;reg 7:0 seg_r;always ( posedge clk or negedge rst_n)/分频至I 1KHzbegin if (!rst_n)cnt = 0 ;elsebeginif
18、(cnt= N/2-1)beginclkout = clkout;cnt=0;endelsecnt=cnt+1b1;endendalways (posedge clkout or negedgerst_n)/ 产生扫描计数值beginif (!rst_n)scan_cnt = 0 ;elsescan_cnt = scan_cnt + 1b1;endalways ( scan_cnt,d)/8 位数码管位选择,同时送相应要显示数据begincase ( scan_cnt )3b000 : begindig= 8b0000_0001;disp_dat= d3:0;end3b001 : begind
19、ig= 8b0000_0010;disp_dat= d7:4;end3b010 : begindig= 8b0000_0100;disp_dat= d11:8;end3b011 : begindig= 8b0000_1000;disp_dat= d15:12;end3b100 : begindig= 8b0001_0000;disp_dat= d19:16;end3b101 : begindig= 8b0010_0000;disp_dat= d23:20;end3b110 : begindig= 8b0100_0000;disp_dat= d27:24;end3b111 : begindig=
20、 8b1000_0000;disp_dat= d31:28;enddefault : begindig= 8b0000_0001;disp_dat= d3:0;endendcaseendalways ( disp_dat ) / 共阳极数码管译码begincase (disp_dat)4h0: seg_r = 8hc0; /显示 04h1 : seg_r = 8hf9;/ 显示 14h2 : seg_r = 8ha4;/ 显示 24h3 : seg_r = 8hb0;/ 显示 34h4 : seg_r = 8h99;/ 显示 44h5 : seg_r = 8h92;/ 显示 54h6 : se
21、g_r = 8h82;/ 显示 64h7 : seg_r = 8hf8;/ 显示 74h8 : seg_r = 8h80;/ 显示 84h9 : seg_r = 8h90;/ 显示 94ha : seg_r = 8hbf;/ 显示 a/*4hb: seg_r = 8h83;/ 显示 b4hc : seg_r = 8hc6;/ 显示 c4hd : seg_r = 8ha1;/ 显示 d4he : seg_r = 8h86;/ 显示 e4hf : seg_r = 8h8e;/ 显示 f*/default:seg_r8hff;/ 灭endcaseendassign seg=seg_r; / 取反变成
22、共阴极段码endmodule2.9 整点报时模块2.9.1 整点报时模块程序代码module Baoshi(H,M,S,qy,ling);input 7:0 H,M,S;input qy;output ling;reg bshi;reg ling;parametera=4b0000,b=4b0001,c=4b0000,d=4b00 00,e=4b0001,f=4b0000;always(H or M or S or qy) beginif(H,M,S=24b000000010000000000010000)ling=qy;elseling=0;end endmodule2.10 综合模块2.1
23、0.1 综合模块原理综合模块采用模块例化的方法实现。2.10.2 综合模块程序代码module Zonghe(k,Q_miinutes,Q_second,Q_hour,Q);input k;input7:0 Q_second,Q_miinutes,Q_hour;output reg 31:0 Q;alwaysbeginQ31:24=Q_hour;Q23:20=4ha;Q19:12=Q_miinutes;Q11:8=4ha;Q7:0=Q_second;endendmodule2.11 计数器模块2.11.1 计数器模块程序代码module JISHU (clk,m,rst_n,v);input clk,m,rst_n;output v;reg p;always(posedge clk)beginif(!rst_n)p = 1b0;else if(!m)p = p+1b1;else if(p=1h9) p (第五版)科学出版社,2010年6月,1 386页