资源描述:
《EDA课设―数字钟设计说明书.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、目录第一章系统工作原理1第二章程序模块分析22.1时钟分频模块22.2时钟运行模式模块22.3扫描数码管及蜂鸣模块42.4数码管显示模块5第三章时序仿真7第四章总结9参考文献9附录10基于VerilogHDL设计的多功能数字钟本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,在本文中采用VerilogHDL语言设计多功能数字钟,借助其功能强大的语言结构,简明的代码描述复杂控制逻辑设计,与工艺无关特性,在提高工作效率的同时达到目的,并可以通过VerilogHDL语言的综合工具进行相应硬件电路的生成,突出了其作为硬件描述语言的良好的可读性、可移植性和易理解等优点,
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-00-
4、00。S1:调节小时信号,低电平有效。每按下一次,小时增加一个小时。S2:调节分钟信号,低电平有效。每按下一次,分钟增加一个分钟。Spk:输出到扬声器,产生嘀、嗒的报时声。Sel:七段码管扫描驱动。因为是八个七段码管,所以Sel为三位总线。扫描频率为489HZ,由于人眼的视觉效果,呈现在眼前的便是整体的时-分-秒显示。Display:七段码管显示输出。除此之外另设了几个寄存器:Clk_1HZ:1HZ的数字钟工作频率Clk_Count1:产生1Hz时钟的分频计数器Music_Count:产生扬声器声音频率的分频计数器SECL,SECH:秒的低位和高位MINL,MINH:分的低位和
5、高位HOURL,HOURH:时的低位和高位Disp_Temp:显示存储中间量第二章程序模块分析2.1时钟分频模块always@(posedgeClk)beginif(Clk_Count1==244)//对计数器进行判断,以确定Clk_1HZ信号是否反转beginClk_1HZ<=~Clk_1HZ;Clk_Count1<=0;endelseClk_Count1<=Clk_Count1+1;end时钟分频模块实现的功能的把系统时钟(489HZ)分频为Clk_1HZ(1HZ)提供时钟工作频率,Clk_Count1为定义的一个计数器,当计到第244次时,刚好经过500ms(略有误差),
6、Clk_1HZ翻转一次,人为制造出一个1HZ的时钟。2.2时钟运行模式模块always@(posedgeClk_1HZornegedgeRst)if(!Rst)//系统复位beginSECL<=0;SECH<=0;MINL<=0;MINH<=0;HOURL<=0;HOURH<=0;endelsebeginif(!S1)//调节小时beginif(HOURL==9)beginHOURL<=0;HOURH<=HOURH+1;endelsebeginif(HOURH==2&&HOURL==3)beginHOURL<=0;HOURH<=0;endelseHOURL<=HOURL+1;e
7、ndendelseif(!S2)//调节分钟beginif(MINL==9)beginMINL<=0;if(MINH==5)MINH<=0;elseMINH<=MINH+1;endelseMINL<=MINL+1;endelseif(SECL==9)//一般运行状态beginSECL<=0;if(SECH==5)beginSECH<=0;if(MINL==9)beginMINL<=0;if(MINH==5)beginMINH<=0;if(HOURL==9)beginHOURL<=0;HOUR