verilog数字钟课程设计_第1页
verilog数字钟课程设计_第2页
verilog数字钟课程设计_第3页
verilog数字钟课程设计_第4页
verilog数字钟课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、 课程设计报告 课程设计题目: 数字钟系统 学 号: 8 学生姓名: 刘进辉 专 业: 通信工程 班 级: 指导教师: 钟凯老师 2017年 1 月 1 日 目录1 摘要.32 概念及原理 .43 实验过程及分析.54 实验心得 .75 参考文献.76 实验代码.87 评分表.14摘要 在社会快速发展的今天,时钟在人们的生活中显得越发重要,因此设计数字钟就变得尤为重要。本文介绍一种利用verilog语言产生多功能数字钟的设计方案,不仅让大家对数字钟更为了解,而且可以为人们的生活带来便利。数字钟它具有时、分、秒的正常显示功能及调节时和分的特殊功能,此外,以24小时循环计数,具有整点报时功能,并且

2、由按键输入进行对数字钟的校时、清零功能。本文设计的数字钟方案由控制模块、计时模块、以及报时模块三大模块组成,满足所有的功能要求,并且代码是经modelsim软件编译和仿真所设计。 二概念及原理 数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路。如图所示为数字钟的一般构成框图。主要包括时间基准电路、计数器电路、控制电路。其中的控制逻辑电路是比较灵活多样的,不断完善它可以增强数字钟的功能。 数字钟应该具有的功能有:显示时分秒、整点报时、小时和分钟可调等基本功能。整个钟表的工作应该是在1Hz信号的作用下进行,

3、这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为023。 在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从059,小时他的范围是从023,所以可以均用一个4位的二进制码显示十位和个位。 对于整点报时功能,本实验设计的是当进行正点发出一个高音信号和59分50、5254、56、58秒发出一个高音信号。调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。另用外reset按键作为系统时钟复位,复位后全部显示000000。3 实验过程及分

4、析1. 功能:显示时分秒、整点报时、小时和分钟可调等基本功能。整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为023。仿真图: 由图可知:hour_g,minute_s,minute_g,second_s,second_g分别对应于时、分、秒的十和个位,显然可以正常显示并满足条件。2. 功能:对于整点报时功能,本实验设计的是当进行正点发出一个高音信号和59分50、5254、56、58秒发出一个高音信号。 仿真图: 上图可知在50、52、54、56、58秒时有一

5、个高电平脉冲信号发出低音,在正点时有一个高脉冲信号发出高音。3. 功能:调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时;S2调整分钟,每按下一次,分钟增加一分钟。另用外reset按键作为系统时钟复位,复位后全部显示000000。 仿真图: 上图可知,通过按键S1,S2控制了时和分的校准功能,并且通过reset键控制清除功能。 四实验心得 通过本次verilog的数字钟课程设计,不仅巩固了所学的相关知识,还对其有了更加深刻的认识。学东西,基本功要学的扎实,这样会给上层建筑带来难以想象的益处,就如在本次实验中的测试模块的函数调用的内置变量的摆放位置的不当,导致程序

6、无法得出自己想要的结果,还要不断的去检查,盲目的修改,耗时巨大。另有一些编程的小技巧,这点钟凯老师的功劳很大,虽然原理一样,但是用不同的方式去编写,有时会取得不一样的结果。这次实验考验的不仅是学生的基本功,而且考察学生自我学习,自我查找相关资料主动学习的能力,一路自己做下来,会收获你想象不到的东西。这或许就是能力的提高吧。在最后感谢钟凯老师的耐心解疑,学生受益匪浅。 六参考文献【1】 数字系统设计与Verilog HDL 第五版 王金明 编著 电子工业出版社【2】 刘君,常明,秦娟,基于硬件描述语言(VHDL)的数字时钟设计,天津理工大学学报,2007,第23卷第4期,40-41。【3】 王开

7、军,姜宇柏,面向CPLD/FPGA的VHDL设计,机械工业出版社,2006,28-65。 六实验代码module kongzhi_count(clk,S1,S2,reset,hour_s,hour_g,minute_s,minute_g,second_s,second_g,cout_1,cout_2,alarm_clock_low,alarm_clock_high); input clk,S1,S2,reset;output reg3:0 hour_s,hour_g,minute_s,minute_g,second_s,second_g ;output wire cout_1,cout_2;o

8、utput reg alarm_clock_low,alarm_clock_high;reg R1,R2;always (posedge clk) beginif(S1=1)beginR1=1;endelse if(S2=1)beginR2=1;endendalways (posedge clk) /秒个位显示 begin if(reset) second_g = 0; else if(second_g=9) second_g = 0; else second_g = second_g + 1; end always (posedge clk) /秒十位显示 begin if(reset) s

9、econd_s= 0; else if(second_g=9) begin if(second_s=5) second_s= 0; else second_s = second_s + 1; end end assign cout_1=(second_g=9)&(second_s=5)?1:0;always (posedge clk) /分个位显示 begin if(reset) begin minute_g = 0; end else if(R2=1) begin if(minute_g=9) minute_g = 0; else begin minute_g= minute_g+ 1; e

10、nd R2=0; end else if(cout_1) begin second_g=0; second_s=0; if(minute_g=9) minute_g = 0; else minute_g= minute_g+ 1; end end always (posedge clk) /分十位显示 begin if(reset) begin minute_s = 0; end else if(R2=1) begin if(minute_g=9) begin if(minute_s=5) minute_g = 0; else minute_s = minute_s + 1; end R2=0

11、; end else if(cout_1) begin second_g=0; second_s=0; if(minute_g=9) begin if(minute_s=5) minute_g = 0; else minute_s = minute_s + 1; end end endassign cout_2=(minute_g=9)&(minute_s=5)&(cout_1=1)|(minute_g=9)&(minute_s=5)&(S2=1)?1:0;always (posedge clk) /时个位显示 begin if(reset) begin hour_g = 0; end els

12、e if(R1=1)beginif(hour_g=9) hour_g = 0; else if(hour_s=2)&(hour_g=3) hour_g = 0; else begin hour_g = hour_g+ 1; end R1=0; end else if(cout_2) begin second_g=0; second_s=0; minute_g=0; minute_s=0; if(hour_g=9) hour_g = 0; else if(hour_s=2)&(hour_g=3) hour_g = 0; else hour_g = hour_g+ 1; end endalways

13、 (posedge clk) /时十位显示 begin if(reset) begin hour_s= 0; end else if(R1=1)beginif(hour_g=3)&(hour_s=2) hour_s = 0; else if(hour_g=9) begin hour_s = hour_s + 1; end R1=0; end else if(cout_2) begin second_g=0; second_s=0; minute_g=0; minute_s=0; if(hour_g=3)&(hour_s=2) hour_s = 0; else if(hour_g=9) hour

14、_s = hour_s + 1; end endalways (posedge clk) /低音警报begin if(!reset) begin alarm_clock_low=0; end else if(minute_g=9)&(minute_s=5) if(second_s=4)&(second_g=9)|(second_s=5)&(second_g=1)|(second_s=5)&(second_g=3)|(second_s=5)&(second_g=5)|(second_s=5)&(second_g=7) alarm_clock_low=1; else alarm_clock_low

15、=0; endalways (posedge clk) /高音警报begin if(!reset) begin alarm_clock_high=0; end else if(cout_2) alarm_clock_high=1; else alarm_clock_high=0; endEndmodulemodule clock_test(); reg clk,reset,S1,S2;wire3:0 hour_s,hour_g,minute_s,minute_g,second_s,second_g;wire cout_1,cout_2,alarm_clock_low,alarm_clock_h

16、igh;parameter cycle = 100;kongzhi_count u1(.clk(clk),.S1(S1),.S2(S2),.reset(reset),.hour_s(hour_s),.hour_g(hour_g),.minute_s(minute_s),.minute_g(minute_g),.second_s(second_s),.second_g(second_g),.cout_1(cout_1),.cout_2(cout_2),.alarm_clock_low(alarm_clock_low),.alarm_clock_high(alarm_clock_high); al

17、ways #(cycle/2) clk = clk; initialbegin clk = 0; reset = 1; S1=0; S2=0; #300 reset = 0;#100 reset = 1;#100 S1=1;#100 S1=0;#100 S2=1;#100 S2=0;#100 S1=1;#100 S1=0;#100 S2=1;#100 S2=0;endendmodule 东华理工大学课程设计评分表学生姓名:刘进辉 班级: 学号:8课程设计题目:数字钟系统项目内容满分实 评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,

温馨提示

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

评论

0/150

提交评论