ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:200.48KB ,
资源ID:24568945      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24568945.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数字电子时钟报告.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数字电子时钟报告.docx

1、数字电子时钟报告电子信息与电气工程学院EDA课程设计设计题目:专业:电子信息工程班级: 姓名: 学号: 数字电子时钟简介数字电子时钟是一利用数字电路来显示秒分时的计时装置,与传统的机械钟相比,具有走时准确,显示直观,无机械传动装置等优点;因而得到广泛应用。随着人们生活水平的不断改善和美化,很多场合都可以看到数字电子时钟,并且已成为人们生活中必不可少的一部分,最常见比如电子手表,电子闹钟,万年历,手机时钟数字电子时钟设计任务本设计以KX-DN系列综合实验开发板系统开发实验,通过verilog语言编写各个功能模块,并且经过精确仿真修改达到理想状态,最后连接各个功能模块组成一个完整的数字电子时钟电路

2、。本设计不仅能够精确显示时分秒(为了起到直观、简洁、美化的作用,我们用“”区分),而且能通过开发板上的按键来控制改变时、分、秒的功能,大大方便了用户的校时、校分、校秒,大大增加数字电子时钟实用性。该时钟还有一键清零(复位清零)的功能,可以防止因外界、内因而导致的时钟计数错误,然后再通过校时、校分、校秒的功能来进行调整时间。最后还能通过开发板上的蜂鸣器来进行整点报时,这一点对这个设计来说是最具人性化的。我们可以按照自己的意愿来进行调整时间报时,已达到个性化设计。一、总体设计方案设计原理及思路原理图如下:数码管显示模块 分频模块 四选一多路选择器 计数器模块24进制计数器60进制计数器60进制计数

3、器整点报时模块 四选三多路选择器计数器模块去抖动模块数字钟实际上就是对1Hz的频率进行计数的计数电路。振荡器产生32768Hz的时钟信号,经过分频器后产生512Hz、64Hz、2Hz的脉冲信号,秒计数器计满60后,触发分计数器,分计数器计满60后,触发计时电路,当计满24小时后开始下一轮计数。如果计数的起始时间与设想的有误差,可以通过调时、调分按键或复位键进行手动调时。计数器的输出经过4选1多路选择器后以动态扫描方式送到LED数码管输出。由框图可知程序模块可分为消抖模块、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 (po

5、sedge CLK) begin if (!KIN) KL=KL+1 ; /对键输入的低电平脉宽计数 else KL=4b0000; end /若出现高电平,则计数器清0 always (posedge CLK) begin if (KIN) KH= KH+1; /同时对键输入的高电平脉宽计数 else KH 4b1100) KOUT 4b0111) KOUT=1B0; /对低电平脉宽计数若大于7,则输出0 end endmodule仿真波形:2.2四选一多路选择器2.2.1四选一多路选择器原理该四选一多路选择器没有进位端,用于四选一多路选择器的输入,控制其输出计时器的计时信号。同时它也作为位

6、选端控制器的输入,决定哪个数码管亮。四选一多路计数器采用时序逻辑电路,从0开始计时到3后归零,重新进行开始计时。2.2.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; always begin Q31:24=Q_hour; Q23:20=4ha; Q19:12=Q_miinutes; Q11:8=4ha; Q7:0=Q_second; end endmodule仿真波形2.3 2分频2.3.1

7、2分频原理该模块用于产生秒计数脉冲。2分频即在每一个输入脉冲的上升沿(或下降沿)取反即可得到。2.3.2 2分频程序代码module Fenpin(clk,newclk); input clk; output reg newclk;reg24:0 cnter; always (posedge clk) begin if(cnter20000000) cnter=cnter+1; else cnter=0; if (cnter10000000) newclk=1; else newclk=0; end endmodule仿真波形:2.4六十进制计数器2.4.1六十进制计数器原理六十进制计数器作为

8、秒计数器和分计数器的低位,具有进位输出端和异步复位端,复位信号为高电平有效。它要求从0到59计数,到五十九清零重新计数。采用时序逻辑电路。设计时应考虑计数器能够进行级联。2.4.2六十进制计数器程序代码module Count60(clrn,clk,q,j,cont); input clrn,clk,j; output reg 7:0 q; output reg cont; always (posedge clkj or negedge clrn) begin if(clrn) q=1b0; else begin if(q=8b0101_1001) q=1b0; else q=q+1b1; i

9、f(q3:0=4b1010) begin q3:0=4b0;q7:4=q7:4+1b1; end if(q=8b0101_1001) cont=1; else cont=0; end end endmodule 仿真波形:2.5二十四进制计数器(含进位端)2.5.1二十四进制计数器(含进位端)原理该二十四进制计数器作为秒计数器和分计数器的高位, 具有进位输出端和异步复位端,复位信号为高电平有效。它要求从0到23计数,到23清零重新计数。采用时序逻辑电路。设计时应考虑计数器能够进行级联。2.5.2二十四进制计数器(含进位端)程序代码module count24(clrn,clk,q,j,cont

10、); input clrn,clk,j; output reg 7:0 q; output reg cont; always (posedge clkj 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; end end endmodule仿真波形:2.6四选一多路选择器2.6.1四选一多路选择器原理四选一多路选择器通过四进制计数器的输出信号控制实现了对

11、计数器产生的脉冲信号的选择性输出。加入此模块是为了实现数码管的动态扫描输出。四选一多路选择器的输入是一个二位二进制数,输出是计时器、计分器、计秒器的高位或低位。2.6.2四选一多路选择器程序代码module Sixuanyi(k,jm,jf,js,j1,j2,j3); input k,j1,j2,j3; output reg jm,jf,js; always begin if(k=0) jm,jf,js=j1,j2,j3; else ; end endmodule仿真波形:2.7三选一多路选择器2.7.1三选一多路选择器原理三选一多路选择器通过三进制计数器的输出信号控制实现了对计数器产生的脉冲

12、信号的选择性输出。加入此模块是为了实现数码管的动态扫描输出。三选一多路选择器的输入是一个三进制数,输出是计时器、计分器、计秒器的高位或低位。2.7.2三选一多路选择器程序代码module Sanxuanyi(clk,A1,A2,N,J1,J2,J3);input clk,A1,A2,N;output reg J1,J2,J3; always begin case (A1,A2) 0:J1=N; 1:J2=N; 2:J3=N; default :J1=N; endcase end endmodule仿真波形:2.8七段译码器2.8.1七段译码器原理七段译码器是对输入的信号对应的位置进行编码,使其

13、能显示出输入的数的值。本文所介绍的译码器将小数点dp通过位拼接符将其与计数器的计数值组合,然后一同给到译码管,便于输出。计时器低位的小数点要求常亮,即dp=1;计分器的低位小数点要求以1Hz的频率闪烁,可以让它以2分频的输出为值。2.8.2七段译码器程序代码module Display( clk ,rst_n,d,dig ,seg);input clk ; /20MHzinput rst_n ; /复位信号,低电平有效input 31:0 d; /要显示的32位数据output 7:0 dig ; /位选信号output 7:0 seg; /段码dp到a由高到低排列parameter N= 2

14、0000; /分频系数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) /分频到1KHz begin if (!rst_n) cnt = 0 ; else begin if(cnt= N/2-1) begin clkout = clkout; cnt=0; end else cnt=cnt+1b1; end endalways (

15、posedge clkout or negedge rst_n) /产生扫描计数值 begin if (!rst_n) scan_cnt = 0 ; else scan_cnt = scan_cnt + 1b1; end always ( scan_cnt,d) /8位数码管位选择,同时送相应要显示数据 begin case ( scan_cnt ) 3b000 : begin dig= 8b0000_0001; disp_dat= d3:0; end 3b001 : begin dig= 8b0000_0010; disp_dat= d7:4; end 3b010 : begin dig=

16、8b0000_0100; disp_dat= d11:8; end 3b011 : begin dig= 8b0000_1000; disp_dat= d15:12; end 3b100 : begin dig= 8b0001_0000; disp_dat= d19:16; end 3b101 : begin dig= 8b0010_0000; disp_dat= d23:20; end 3b110 : begin dig= 8b0100_0000; disp_dat= d27:24; end 3b111 : begin dig= 8b1000_0000; disp_dat= d31:28;

17、end default : begin dig= 8b0000_0001; disp_dat= d3:0; end endcase endalways ( disp_dat ) /共阳极数码管译码begin case (disp_dat) 4h0 : seg_r = 8hc0; /显示0 4h1 : seg_r = 8hf9; /显示1 4h2 : seg_r = 8ha4; /显示2 4h3 : seg_r = 8hb0; /显示3 4h4 : seg_r = 8h99; /显示4 4h5 : seg_r = 8h92; /显示5 4h6 : seg_r = 8h82; /显示6 4h7 :

18、 seg_r = 8hf8; /显示7 4h8 : seg_r = 8h80; /显示8 4h9 : seg_r = 8h90; /显示9 4ha : seg_r = 8hbf; /显示a /*4hb : seg_r = 8h83; /显示b 4hc : seg_r = 8hc6; /显示c 4hd : seg_r = 8ha1; /显示d 4he : seg_r = 8h86; /显示e 4hf : seg_r = 8h8e; /显示f*/ default: seg_r = 8hff;/灭 endcaseendassign seg=seg_r; /取反变成共阴极段码 endmodule2.9

19、整点报时模块2.9.1整点报时模块程序代码module Baoshi(H,M,S,qy,ling); input 7:0 H,M,S; input qy; output ling; reg bshi; reg ling; parameter a=4b0000,b=4b0001,c=4b0000,d=4b0000,e=4b0001,f=4b0000; always(H or M or S or qy) begin if(H,M,S=24b000000010000000000010000) ling=qy; else ling=0; endendmodule2.10综合模块2.10.1综合模块原理

20、综合模块采用模块例化的方法实现。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; always begin Q31:24=Q_hour; Q23:20=4ha; Q19:12=Q_miinutes; Q11:8=4ha; Q7:0=Q_second; end endmodule2.11计数器模块2.11.1计数器模块程序代码module JISHU (clk,m,rst_n,v); input

21、clk,m,rst_n; output v; reg p; always(posedge clk) begin if(!rst_n) p = 1b0; else if(!m) p = p+1b1; else if(p=1h9) p = 1h0; end assign v = p;endmodule三 总结3.1程序过大程序方面,由于EPM3 064 ALC44 -10芯片只有64个宏单元,编写程序时有可能导致所需的宏单元数超过提供的数量,经过分析在处理小数点的时候,直接把其作为与其它段显示一起定义成八位变量,这样就会增加芯片内存消耗,但实际要求中只用到两个小数点,所以把这个小数点单独进行操作处理,大大减少了宏单元的利用,这样才能编译成功。3.2赋值问题初次实验,第一次按键不起作用。原因是出在阻塞与非阻塞赋值上。非阻塞赋值在过程块执行完后才赋值,由于变量初始值为0,所以第一次按键变量的值并未随之改变。此时我们可以适当调整赋值顺序,将其改变为阻塞赋值。即可解决这一问题。后来我们采用了拨码开关,这个问题也顺利解决。参考文献978-7030-3878-20 潘松 黄继业 潘明.EDA技术实用教程-Verilog HDL版(第五版)科学出版社,2010年6月,1386页

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1