EDA课设—数字钟设计说明书_第1页
EDA课设—数字钟设计说明书_第2页
EDA课设—数字钟设计说明书_第3页
EDA课设—数字钟设计说明书_第4页
EDA课设—数字钟设计说明书_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录第一章 系统工作原理1第二章 程序模块分析22.1 时钟分频模块22.2 时钟运行模式模块22.3扫描数码管及蜂鸣模块42.4数码管显示模块5第三章 时序仿真7第四章 总结9参考文献9附录10基于Verilog HDL设计的多功能数字钟本文利用Verilog HDL 语言自顶向下的设计方法设计多功能数字钟, 在本文中采用Verilog HDL 语言设计多功能数字钟, 借助其功能强大的语言结构, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时达到目的, 并可以通过Verilog HDL 语言的综合工具进行相应硬件电路的生成, 突出了其作为硬件描述语言的良好的可读性、

2、可移植性和易理解等优点, 具有传统逻辑设计方法所无法比拟的优越性。此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中。第一章 系统工作原理工作原理:时钟系统由八个数码管显示组成,其中第1、2个显示的为时的高位和低位,第3个数码管显示的是分隔符“-”,第4、5个为分的高低位,第6个也为隔符“-”,第7、8个为秒的高低位。时钟工作时用到两个频率,一个是系统频率Clk,主要用来扫描数码管和分频,第二个是时钟工作频率Clk_1HZ(由Clk分频得来),按下复位键,秒分时显示清零,工作时Clk(489HZ)不断通过3-8译码器值的改变来扫描时钟的八位数码管,由于人眼分辩不出这么高的频率,所以看

3、到的是八个数码管一直同时亮着,与此同时控制端连着七段数码管的七位不断提供秒时分的高低位译码到数码管上显示,当Clk计数到244次(500ms)时,Clk_1HZ翻转一次,这样Clk_1HZ的周期就为1s整,每个Clk_1HZ的上升沿给秒的低位加1。按调时键S1进入调时模式,按下开关时程序里设置扫描到时的高低位时不显示,同时时的低位加1,松开开关时再显示出来,以此实现闪烁的功能,调分键也是同理。图1、系统原理图各个输入输出端口定义如下:Clk: 489HZ 的系统基准时钟输入。作为七段码管扫描频率。将其489分频可得到1HZ的数字钟工作频率。Rst: 系统复位信号, 低电平有效。复位后显示00-

4、00-00。S1: 调节小时信号, 低电平有效。每按下一次, 小时增加一个小时。S2: 调节分钟信号, 低电平有效。每按下一次, 分钟增加一个分钟。Spk: 输出到扬声器, 产生嘀、嗒的报时声。Sel: 七段码管扫描驱动。因为是八个七段码管,所以Sel 为三位总线。扫描频率为489HZ, 由于人眼的视觉效果, 呈现在眼前的便是整体的时-分-秒显示。Display: 七段码管显示输出。除此之外另设了几个寄存器:Clk_1HZ:1HZ的数字钟工作频率Clk_Count1:产生1Hz 时钟的分频计数器Music_Count:产生扬声器声音频率的分频计数器SECL,SECH:秒的低位和高位MINL,M

5、INH:分的低位和高位HOURL,HOURH:时的低位和高位Disp_Temp:显示存储中间量第二章 程序模块分析2.1 时钟分频模块always(posedge Clk)beginif(Clk_Count1=244) /对计数器进行判断, 以确定Clk_1HZ 信号是否反转 begin Clk_1HZ<=Clk_1HZ; Clk_Count1<=0; endelse Clk_Count1<=Clk_Count1+1;end时钟分频模块实现的功能的把系统时钟(489HZ)分频为Clk_1HZ(1HZ)提供时钟工作频率,Clk_Count1为定义的一个计数器,当计到第244次时

6、,刚好经过500ms(略有误差),Clk_1HZ翻转一次,人为制造出一个1HZ的时钟。2.2 时钟运行模式模块always(posedge Clk_1HZ or negedge Rst)if(!Rst)/系统复位 begin SECL<=0; SECH<=0; MINL<=0; MINH<=0; HOURL<=0; HOURH<=0; endelse begin if(!S1) /调节小时 begin if(HOURL=9) begin HOURL<=0; HOURH<=HOURH+1; end else begin if(HOURH=2&

7、;&HOURL=3) begin HOURL<=0; HOURH<=0; end else HOURL<=HOURL+1; end end else if(!S2) /调节分钟 begin if(MINL=9) begin MINL<=0; if(MINH=5) MINH<=0; else MINH<=MINH+1; end else MINL<=MINL+1; end else if(SECL=9) /一般运行状态 begin SECL<=0; if(SECH=5) begin SECH<=0; if(MINL=9) begin

8、MINL<=0; if(MINH=5) begin MINH<=0; if(HOURL=9) begin HOURL<=0; HOURH<=HOURH+1; end else if(HOURH=2&&HOURL=3) begin HOURL<=0; HOURH<=0; end else HOURL<=HOURL+1; end else MINH<=MINH+1; end else MINL<=MINL+1; end else SECH<=SECH+1; end else SECL<=SECL+1;end此模块描述

9、的是时钟运行的几种形式,复位之后时分秒的高低位全给赋0,开始计数,按下S1键后,进入调时模式,按下一次加1,再根据各种情况判断是否进位等,同理按下S2键后进入调分模式,什么都不按下的情况下就是一般运行状态,先从秒开始判断,9秒时秒低位给0,高位进1,59秒时秒的高低位全给0,分的低位加1,还有9分59秒、59分59秒的情况等等,完全列举出了时钟运行的各种可能,按情况处理。2.3扫描数码管及蜂鸣模块always(posedge Clk) begin Music_Count<=Music_Count+1; Sel<=Sel+1; /扫描累加 if(MINH=5&&MIN

10、L=9&&SECH=5) /在59 分50 秒开始提示 begin if(SECL%2)=0) /在偶数秒开始发声 Spk<=Music_Count2; /嘀 else Spk<=0; end else if(MINH=0&&MINL=0&&SECH=0&&SECL=0) Spk<=Music_Count1; /嗒 else Spk<=0; end此模块的功能是给3-8译码器一个扫描频率为Clk的三位输入,经3-8译码器输出后扫描八个数码管,蜂鸣器实现的是整点报时功能。2.4数码管显示模块always(Se

11、l) /三种扫描方式 begin if(!S1) begin case(Sel) 3'b111:Disp_Temp=4'b1111; 3'b110:Disp_Temp=4'b1111; 3'b101:Disp_Temp=4'b1010; 3'b100:Disp_Temp=MINH; 3'b011:Disp_Temp=MINL; 3'b010:Disp_Temp=4'b1010; 3'b001:Disp_Temp=SECH; 3'b000:Disp_Temp=SECL; endcase end els

12、e if(!S2) begin case(Sel) 3'b111:Disp_Temp=HOURH; 3'b110:Disp_Temp=HOURL; 3'b101:Disp_Temp=4'b1010; 3'b100:Disp_Temp=4'b1111; 3'b011:Disp_Temp=4'b1111; 3'b010:Disp_Temp=4'b1010; 3'b001:Disp_Temp=SECH; 3'b000:Disp_Temp=SECL; endcase end else begin case(

13、Sel) 3'b111:Disp_Temp=HOURH; 3'b110:Disp_Temp=HOURL; 3'b101:Disp_Temp=4'b1010; 3'b100:Disp_Temp=MINH; 3'b011:Disp_Temp=MINL; 3'b010:Disp_Temp=4'b1010; 3'b001:Disp_Temp=SECH; 3'b000:Disp_Temp=SECL; endcase end endalways(Disp_Temp) /数码管显示转换 begin case(Disp_Temp)

14、 4'b0000:Display=7'b0111111; /0 4'b0001:Display=7'b0000110; /1 4'b0010:Display=7'b1011011; /2 4'b0011:Display=7'b1001111; /3 4'b0100:Display=7'b1100110; /4 4'b0101:Display=7'b1101101; /5 4'b0110:Display=7'b1111101; /6 4'b0111:Display=7'

15、b0000111; /7 4'b1000:Display=7'b1111111; /8 4'b1001:Display=7'b1101111; /9 4'b1010:Display=7'b1000000; /- default:Display=7'b0000000; /全灭 endcase end此模块实现的是数码管的显示,分三种模式,第1种,调时模式,由于调节时钟的对应的位需要实现闪烁功能,所时按下调时(分)键时对应的时(分)位必须暗下去,等键松开时再回归一般状态,即所有数码管都亮,按下时按相应位暗下去是通过扫描到相应位时让数码管不显示

16、实现的。第三章 时序仿真程序编译通过后,进行了一下仿真,设置Clk为2周期为2ms(近似489HZ),End Time设了100s,仿真结果如下图。图2 仿真结果图在Rst复位端为从低变到高开始计时,计时Clk489次后秒的低位进1,这里由于244次Clk上升沿后Clk_1HZ才翻转,故Clk太密集观察困难,秒的低位到9以后秒高位进1,同理到分以及时,由于如果结束时间设得太长,仿真结果出来得太慢,此处只设了100s,下图为放大后结果,计时Clk489次后秒的低位进1。图3 1秒跳变放大图下图为数码管显示放大后的仿真图,可以看到,Sel为000时,系统扫描到的是秒的低位,显示为Display:0

17、111111,即显示0,以此类推,Sel为001时,扫描到的是秒的高位,010时为分隔符“-”直到111时的高位,此处全部显示为零,因为计数还未到达1秒。图4 数码管显示放大图功能仿真结束后, 利用综合工具对Verilog HDL源码进行综合, 生成网表文件, 再根据该网表文件和所选可编程逻辑器件FPGA 进行优化、布局布线, 然后进行布线后仿真, 最后生成FPGA 码流文件, 把该文件输入可编程逻辑器件即可制成实际数字电路,最后在实验箱上运行正常,所有功能均能实现。第四章 总结此次EDA课设是大学阶段最后的一个课程设计,所以本人也尽全力在有限的时间内把数字钟的基本功能都实现了,在付出了汗水的

18、同时也得到了很多的收获,熟悉了设计流程,加强了设计理念,当然最重要的还是提高了动手能力,虽不敢说程序全是原创吧,但也确实加入了很多思考,付出了不少汗水,但是在此之余由于时间等各方面所限,程序完成的也不是尽如人意,比如设置时和分的按键缺少一个防抖的功能,这就导致有时按下调节键时没有反应(键盘抖动造成的),按下时间长点就没问题,写程序的时候没有考虑到这一步,导致最后程序也不好改,这是要我要吸取的教训,也算是增加了一点微薄的经验吧。最后还要感谢武老师和乔老师,学期末还一直不辞辛苦耐心地指导我们,让我们基本都顺利地完成了大学最后一个课设。参考文献1来清民. 基于CAN 总线的多功能大型粮仓远程监测系统

19、J微计算机信息,2005,7:51- 532Bhasker J. A Verilog HDL Primer . Allentown(PA): Star Galaxy Press,1997附录module clock(Clk,Rst,S1,S2,Display,Sel,Spk);input Clk; /489HZ 时钟输入input Rst; /复位输入input S1; /小时调节输入input S2; /分钟调节输入output Spk; /扬声器输出output2:0 Sel; /七段码管扫描驱动output6:0 Display; /七段码管显示输出reg Spk;reg2:0 Sel;

20、reg6:0 Display;reg10:0Clk_Count1; /产生1Hz 时钟的分频计数器 reg Clk_1HZ;reg2:0 Music_Count; /产生扬声器声音频率的分频计数器reg3:0 SECL,SECH;reg3:0 MINL,MINH;reg3:0 HOURL,HOURH;reg3:0 Disp_Temp;always(posedge Clk)beginif(Clk_Count1=244) /对计数器进行判断, 以确定Clk_1HZ 信号是否反转 begin Clk_1HZ<=Clk_1HZ; Clk_Count1<=0; endelse Clk_Cou

21、nt1<=Clk_Count1+1;endalways(posedge Clk_1HZ or negedge Rst)if(!Rst)/系统复位 begin SECL<=0; SECH<=0; MINL<=0; MINH<=0; HOURL<=0; HOURH<=0; endelse begin if(!S1) /调节小时 begin if(HOURL=9) begin HOURL<=0; HOURH<=HOURH+1; end else begin if(HOURH=2&&HOURL=3) begin HOURL<=

22、0; HOURH<=0; end else HOURL<=HOURL+1; end end else if(!S2) /调节分钟 begin if(MINL=9) begin MINL<=0; if(MINH=5) MINH<=0; else MINH<=MINH+1; end else MINL<=MINL+1; end else if(SECL=9) /一般运行状态 begin SECL<=0; if(SECH=5) begin SECH<=0; if(MINL=9) begin MINL<=0; if(MINH=5) begin MI

23、NH<=0; if(HOURL=9) begin HOURL<=0; HOURH<=HOURH+1; end else if(HOURH=2&&HOURL=3) begin HOURL<=0; HOURH<=0; end else HOURL<=HOURL+1; end else MINH<=MINH+1; end else MINL<=MINL+1; end else SECH<=SECH+1; end else SECL<=SECL+1;endalways(posedge Clk) begin Music_Coun

24、t<=Music_Count+1; Sel<=Sel+1; /扫描累加 if(MINH=5&&MINL=9&&SECH=5) /在59 分50 秒开始提示 begin if(SECL%2)=0) /在偶数秒开始发声 Spk<=Music_Count2; /嘀 else Spk<=0; end else if(MINH=0&&MINL=0&&SECH=0&&SECL=0) Spk<=Music_Count1; /嗒 else Spk<=0; endalways(Sel) /三种扫描

25、方式 begin if(!S1) begin case(Sel) 3'b111:Disp_Temp=4'b1111; 3'b110:Disp_Temp=4'b1111; 3'b101:Disp_Temp=4'b1010; 3'b100:Disp_Temp=MINH; 3'b011:Disp_Temp=MINL; 3'b010:Disp_Temp=4'b1010; 3'b001:Disp_Temp=SECH; 3'b000:Disp_Temp=SECL; endcase end else if(!S2) begin case(Sel) 3'b111:Disp_Temp=HOURH; 3'b110:Disp_Temp=HOURL; 3'b101:Disp_Temp=4'b1010; 3'b100:Disp_Temp=4'b1111; 3'b011:Disp_Temp=4'b1111; 3'b010:Disp_Temp=4'b1010; 3'b001:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论