VHDL 数字钟
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
值增1
本数字钟只
参见有关动 态扫描的介
绍资料。
使用了Q1-Q6 数码管,但 仍设置输出 将另两个数
码管熄灭。
2
3 设计方案及原理
本文数字钟主要实现了两个功能:正常计数并显示时间和校正时间。由于校时时需要进行消除抖动并 增加相应的控制模块,需要占去较多的设计时间,而此次设计时间有限,因此本文并未实现如整点报时、 闹钟等额外功能,虽然这些电路的实现并不是很难。事实上,由于尚未专门学习 VHDL 设计的优化,在实现 以上两个功能后,实验板 CPLD 芯片上的宏单元(Macrocells)几乎用完了,因此不可能再添加其它功能模块 了。下面的图 3-1 是本文数字钟的原理框图。
4.1. 分频器 Distributer........................................................04 4.2. 去抖动电路 Debounce....................................................05 4.3 校时电路 RvsTime.........................................................08 4.4 时计数器 Counter24hour,分计数器 Counter60min,秒计数器 Counter60sec.......10 4.5 校时闪烁电路 FlashTime..................................................13 4.6 译码显示电路 Displayer....................................................15 5. 数字钟整体...................................................................16 6. 硬件测试...... ..............................................................20 7. 总结和体会、致谢.............................................................20 参考资料........................................................................21 附录............................................................................22
1
基于 VHDL 的数字钟设计
1 设计任务及要求:
设计任务 设计一台能显示时、分、秒的数字钟。具体要求如下:
(1) 由实验箱上的时钟信号经分频产生秒脉冲; (2) 计时计数器用 24 进制计时电路; (3) 能进行复位操作; (4) 可手动校时,能分别进行时、分的校正; 设计要求: (5) 采用 VHDL 语言描述系统功能,并在 QUARTUS II 工具软件中进行仿真,下载到 EDA 实验箱进行验证。 (6) 编写设计报告,要求包括方案选择、程序代码清单、调试过程、测试结果及心得体会。
2 软硬件资源分析
实验室提供了 Alter 公司的设计环境软件 Quartus II9.1 和 MAX7128 实验开发板。Quartus II 软件的
使用可以参考教材和 Internet 资源。MAX7128 CPLD 开发板是针对 CPLD 初、中级学习者设计的,帮助用 户降低学习成本和加快用户快速进入可编程逻辑器件设计开发领域,提供一个帮助用户快速开始可编程逻 辑器件学习之旅的硬件平台。该开发板提供了一片 EPM7128SLC84-15N 芯片,8 个拨码开关,8 个自由按键, 一个全局复位按键,8 个可动态扫描显示的数码管,12 个 LED 灯,一个蜂鸣器等硬件资源。在该数字钟设 计中,将用 6 个数吗管来显示时分秒(分别有十位和个位),用全局复位按键来复位时钟,用一个拨码开关
3
从上面的介绍中该数字钟的校时电路实际由两部分组成,即图中的“校时电路”和“校时闪烁电路”。
4 模块设计及仿真
数字钟的设计包括分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路和译码显示 电路。设计时,我将每一个功能模块作为一个实体单独进行设计,最后再用 VHDL 的例化语句将各个模块进 行整合,生成顶层实体 ADigCLK。
END IF; END PROCESS psec;
)THEN
4
pscan:PROCESS(div_cnt(14)) BEGIN
IF(div_cnt(14)'EVENT AND div_cnt(14) = '1')THEN scanclk<=NOT scanclk;
END IF; END PROCESS pscan;
END one;
Distributer 的管脚图如图 4-1 所示,仿真波形如图 4-2 所示。由于对 50MHz 进行仿真速度较慢,且不便于观察,故仿真进将 ori_clk 设为 1024Hz, 分频出秒时钟 secclk 为 1Hz,扫描时钟 scanclk 为 512Hz。后面在进行整个 系统仿真时也将进行同样的处理。具体做法是将程序中的数值 24 改为 8,将 14 改为 0。
该数字钟可以实现 2 个功能:计时功能和设置时间功能。
4.1 分频器 Distributer 在数字钟的设计中,采用了 EPM7128SLC84-15N 内部提供的 50MHz 全局时钟,将其分频率后产生一个接
近 1Hz 秒时钟 secclk,和一个 763Hz 左右的扫描时钟 scanclk。 值得说明的是,由于将 50MHz 精确地分频出 1Hz 将占去非常多的宏单元,因此我下面的程序只是粗
修改当前时 间值
Q1-Q8
见附录1
采用动态扫 描方法实现
时间显示
操作方式 -
备注
ALTER公司 MAX7000S系
列芯片
长按后松手 由于机械开
拨至0,校 时;拨至1, 不校时,正
常计数 每长按一 下,改变一
次结果 每长按一 下,向时或 分计时模块 输入一个脉 冲,相应数
关通常会产 生一定的抖 动,因此应 进行去抖动 操作。本数 字钟采用了 采样计数法 进行去抖动 。具体去抖 动实现方法 见去抖动模 块Debounce.
糙地分频出一个 0.745Hz 的时钟作为秒时钟。而且实验发现,所用的开发板并不是很稳定,因此即使使用 1Hz 作为秒时钟也未必能产生理想的效果。我个人认为如果要合理利用 CPLD 芯片的资源,最好能够从 I/O 口引入一个频率比 50MHz 小得多的外部时钟,这样分频就不会占用太多的宏单元,虽然我也没这样做。
自由按键
keyin[0]
自由按键
keyin[1]
seg7out和 8位数码管 select_sigo
ut
表2-1 数字钟硬件资源
开发板上的 对应CPLD芯
标号
片管脚数
功能
-
-
-
RESET
P_01Baidu Nhomakorabea
实现时钟复 位至00: 00:00
J9/1
P_33
决定是否进 行校时
K1
P_44
选择小时或 分钟校时
K2
P_45
其源代码如下所示: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY Distributer IS PORT(ori_clk:IN STD_LOGIC; --晶振时钟
复位
去
抖
动
电
复位
路
时
校 时
计 数 器
校 时 闪
译 码 显
电
烁
示
路
分进位
电
电
路
路
分 计 数 器
50MHz 时钟
秒进位
秒
计
分频器
1Hz
数 器
扫描频率
图 3-1 数字钟原理框图
该系统由“50MHz 时钟”、“分频器”、“去抖动电路”、“校时电路”、“时、分、秒”计数器、“校时闪烁 电路”和“译码显示电路”等组成。
EDA 技术及应用实验报告
题 目:基于 VHDL 的数字钟设计
学 校: 学科专业: 学 生: 学 号: 任课教师:
中南大学 生物医学工程
0405080704
完成日期: 2011 年 5 月 24 日
目录
1. 设计任务及要求...............................................................02 2. 软硬件资源分析...............................................................02 3. 设计方案及原理...............................................................03 4. 模块设计及仿真...............................................................04
scanclk: BUFFER STD_LOGIC; secclk: BUFFER STD_LOGIC); END ENTITY Distributer;
ARECHITECTURE one OF Distributer IS SIGNAL div_cnt : STD_LOGIC_VECTOR(24 DOWNTO 0); BEGIN
“50MHz 时钟”和“分频器”产生整个系统的时基信号,它直接决定计时系统的精度。 进行校时和复位时,所有按钮的输入都要经过“去抖动电路”。 “秒计数器”采用六十进制计数器,每累计 60 秒向“分计数器”进位;“分计数器”采用六十进制计 数器,每累计 60 分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24 翻 1”规律计数。 但秒进位并不直接输入给“分计数器”,分进位并不直接输入给“时计数器”,而是都先经过“校时电路”。 如果不进行校时,“校时电路”将秒进位直接输出给“分计数器”,将分进位直接输出给“时计数器”;如果 进行小时校时,“校时电路”将秒进位直接输出给“分计数器”,而将校时按键 keyin[1]的输入脉冲输出给 “时计数器”,从而修改小时数值;同理,如果进行分钟校时,“校时电路”将分进位直接输出给“时计数 器”,而将校时按键 keyin[1]的输入脉冲输出给“分计数器”,从而修改分钟数值。 任何情况下,“秒计数器”的输出直接送“译码显示电路”显示。非校时状态下,“时/分计数器”的输 出经由“校时闪烁电路”直接送“译码显示电路”显示。如果在校正小时,“分计数器”的输出以正常方式 送“译码显示电路”显示,而“时计数器”在经过“校时闪烁电路”后,其对应数码管交替点亮和熄灭, 这样使用者便可能很容易知道当前是在对小时校时;同理,如果当前正在校正分钟,则有相似的效果。
图 4-2 Distributer
图 4-3 Distributer 仿真波形
4.2 去抖动电路 Debounce 该数字钟将用到 3 个自由按键和 1 个拨码开关,故 Debounce 只对这
四个开关进行去抖,如果需要对更多的开关进行去抖,只要简单修改程 序便可实现,这里不再说明。
如右图 4-4 所示,机械开关在按下时都会一定的抖动,对应信号线 电平的变化有一个不稳定期,在读取按键状态时必须避开这个不稳定期, 以免造成误判,却去抖。本文采用了这延迟算法进行去抖。利用频率较 高的时钟(本文采用了扫描时钟 scanclk)反复读取按键状态,并利用一 个寄存器来记录当前状态出现的次数,如果当前状态与前一次读取的状 态不一样,刚将计数寄存器清零;如果当前状态与前一次读取的状态一致, 刚计数寄存器加 1。当计数寄存器达到一定值 N 时便认为按键已按下并产 生了一个电平改变。
PROCESS(ori_clk) BEGIN IF(ori_clk'EVENT AND ori_clk = '1')THEN div_cnt <= div_cnt + 1; END IF; END PROCESS;
psec:PROCESS(div_cnt(24)) BEGIN
IF(div_cnt(24)'EVENT AND div_cnt(24) = '1' secclk<=NOT secclk;
来控制是否时行校时,用一个自由按键来选择对小时或分钟进行校时,用一个自由按键来调整时间值。 MAX7128 CPLD 开发板原理图见附录 1。表 2-1 对该数字钟中用到的硬件资源进行列表说明:
硬件名称
程序中的标 识符
EPM7128SLC8 4-15N
-
全局复位按 键
key0in
拨码开关 DipSwi_in