电子钟实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件学院期末作业设计说明书
课程: EDA设计技术
题目: 多功能数字电子钟
学院: 软件学院
专业: 计算机软件
班级: 软工131班
学号: 8000113050
学生姓名: 冯嘉
指导教师: 孙丽华
第一章系统设计与分析
1.1设计目的
通过设计多功能数字电子钟,熟练掌握Verilog HDL硬件描述语言。

学会使用自顶向下的设计思想对复杂系统进行功能模块划分。

学会掌握LCD1602的使用方法,学会使用巧妙方法对按键进行消抖操作。

1.2设计内容
多功能数字电子钟的功能有:普通计时、时间校正、设置闹钟时间,开启闹钟。

时间数值通过四个数码管显示,由于开发板数码管有限,所以只能显示小时与分钟。

在闹钟模块,开发板无蜂鸣器,故采用一个LED灯表示闹钟已到时。

若闹钟未开启,则闹钟时间到,LED灯不会亮起。

时间校正,设置闹钟与开启闹钟采用三个拨码开关,对时间的设置由三个按键开关控制(两个按键用于选择要设置的单位,一个按键用于加值操作)。

另外设置一个按键用于电子钟系统的复位操作。

第二章系统功能模块介绍
根据功能将系统划分为以下几个模块:
●时间显示模块
●时间设置模块
●数码管显示模块
●按键消抖模块
●数据选择器模块
●LCD液晶屏顶层模块:
●LCD液晶屏分频模块
●LCD液晶屏主控模块
●电子钟系统顶层模块
2.1电子钟系统顶层模块
1.顶层模块主要负责对重要寄存器类型变量的赋值、判定是否开启闹钟及闹钟到时提醒、调用系统子模块。

2.系统顶层流程图
2.2时间显示模块
1.时间显示模块主要负责对是时间数值的操作,使其满足客观事实。

2.时间显示模块流程图
3.特别说明:在代码实现时,使用pre_htocflag(代表前一个时钟拨码开关状态)和htoc_flag(代表当前时钟拨码开关状态)两个标志位检测拨码开关的拔下操作,由于整个系统数据流向是循环的,在拨下的时刻将设置好的时间赋值给寄存类类型变量,这样操作不会引
起数据的不同步错误。

pre_htocflag与htoc_flag的关系如下表(检测了两个时钟):
2.4 时间设置模块
1.时间设置模块主要负责校时与设置闹钟。

2.流程图
3.特别说明:在此模块中,首先要确定是校时还是设定闹钟。

在此有两个标志timeset_flag和ctimeset_flag,二者为寄存器变量类型,默认为0。

首先判断使能端为何种功能,若为校时功能,则将此时此刻的时间赋值给设置时间寄存器并设置校时标志;若为设定闹钟,则将上次设定好的闹钟时间赋值给设置时间寄存器并设置闹钟标志。

若使能端无效,清楚两个标志量。

2.5数码管显示模块
1.数码管显示模块主要负责对将传入的数据显示到数码管上。

2.6按键消抖模块
1.按键消抖模块主要负责对按键的消抖操作。

2.流程图
3.特殊说明:可通过改变cnt最大值改善消抖情况。

2.7数据选择器模块
1.数据选择器模块主要用于对数码管显示的值进行选择。

若为校时使能或闹钟使能,则数码管显示设置数值为时间模块寄存器值;否则数
码管显示当前时间数值。

2.流程图
2.8LCD液晶屏顶层模块:
LCD液晶屏顶层模块主要负责调用液晶屏子模块完成显示。

2.9LCD液晶屏分频模块
LCD液晶屏分频模块主要负责对时钟的分频操作。

2.10LCD液晶屏主控模块
1. LCD液晶屏主控模块主要负责LCD状态的转换。

状态转换图如下:
2.流程图
第三章运行截图3.1波形仿真截图
3.2RTL视图截图
第四章源代码
源代码详见工程
第五章个人体会
在对项目进行分析时,一定要学会自顶向下的分析思想。

从顶层出发,逐步细化功能。

只有从大体上把握系统的架构,才能较高效率的完成编码。

在设计时应先确定主要模块,再在模块内部处理细节问题。

其次代码只是解决问题的方式,其中的思想才是灵魂所在,在做按键的时候遇到了按键消抖的问题,在网上查阅了很多资料,但是代码晦涩难懂,纠结了好久,最后研究了按键的原理和抖动产生的原因,发现按键的抖动只存在于按下的几十ms的时间,结合网上查阅的资料,只写了一小段代码‘屏蔽’了这段时间就解决了这个问题。

在本次设计中,我最印象深刻的是关于何时将设置的值赋值给当前时间的那一模块。

首先整个系统的设计,数据流向非常重要,稍有不慎,数据流向就会出错,因此本系统中也设计了相当多的中间变量、标志位等。

在校正时间时,是边校正边传递数据流还是校正完成后再传递数据流,很显然,后者最为合适。

那么如何才能检测到校正完成呢?在此就需要手动检测一个拨码开关由拨起到拔下的过程。

我们在设计这一块的时候,其实是每两个时钟为一个检测周期,通过检测上次拨码开关标志位与本次拨码开关标志位,得到拨码开关的状态(具体细节
看第6页表格)。

这是我认为此次设计的精妙之处。

在以往的课程实验中,我们曾采用过电路图设计,也曾通过观察状态转换图进行设计。

在这里我想说的是,对于不同的课程设计,需要采用不同的方法。

比如在本次设计中,关于电子钟的项目,由于数据流向是循环流动,故在此最好先画出电路图,弄清数据流向,合理设置中间变量。

在LCD 液晶显示屏模块,根据其特点最好采用状态机模式进行设计。

在此处只涉及到液晶屏的显示,故其状态的转变是可以预测的。

在本次大作业的设计完成过程中,感觉自己收获了很多,完成的电子钟功能虽然简单,但其内在十分复杂,我想本次设计对我来说并不仅仅是完成了一份大作业,也并不只是对EDA课程的新的领悟,更是对项目整体设计思想一个很大的飞跃。

最后感谢老师一学期以来的陪伴与指导,谢谢您,孙老师!
第六章参考资料
1.陈赜等. CPLD\FPGA与ASIC设计实践教程(第二版). 北京:
科学出版社,2005
2.本课程讲义及举例代码。

相关文档
最新文档