实验十一 数字时钟
一. 实验目的
1. 学习数字时钟的硬件设计;
二. 实验原理
一个完整的时钟应由3部分组成:秒脉冲发生器、计数显示部分和时钟调整部分。一个时钟的准
确与否主要取决于秒脉冲的精确度。为了保证计时准确,我们对48MHz系统时钟进行分频,得到
1Hz的秒脉冲。至于显示部分与LED数码管原理相同,而对于时钟调整部分可以自由发挥。本实验的
只实现暂停、清零基本功能。
因涉及到按键和显示,显示需要400Hz左右的扫描显示频率,按键需要200Hz的消抖扫描键盘频
率。故48MHz的系统时钟,先分频到400Hz,再分频到200Hz,然后分频到1Hz。
时钟就是涉及到计数器而已。需要60进制和24进制的计数器,且显示的数值是十进制。为了方便
起见,我们设计10进制和6进制的计数器组合成60进制的计数器;而24进制计数器的处理就有点小技
巧,数字电路都是二进制表示,4位组合在一起就是16进制。我们把24进制用一个8位的2进制表示,
其 高 4 位 为 小 时 的 十 位 数 , 低 4 为 为 小 时 的 个 位 数 。 一 般 情 况 下 的 计 数 器 , 个 位 数 会
0→1...→9→A→B...→F→0,循环计数,如何实现0→1...→9→0的循环计数呢?计数器本身是每个
clock,累加器加1,我们在低4位等于9时要跳变到X10,这时累加器不是加“1”而是加了“7”。累加器本
身是16进制,只不过跳过了A~F。程序的思路基本是:时钟沿到来时,先判断累加器是否为X”23”,
是即清零;不是再判断累加器的低4位是否为9,如是则累加器加7,不是则加1。同样60进制的计数器
也可以这样处理。
既然带有暂停、清零基本功能,那么计数器本身就需要带有异步reset和同步enable功能。需要说
明的是计数器的enable功能同步和异步使能其结果一样,但是在HDL语言中,在沿触发前只能有一个
if语句,故此处使用同步enable功能。一般情况下,数字电路的同步和异步是相对于时钟沿来说的,
同步复位功能就是在沿触发时,若复位有效,才进行复位,和时钟“同步”;而异步复位功能就是一旦
复位有效,就马上进行复位,和时钟沿到来与否无关。体现在HDL语言中就是复位功能的if语句在沿
触发判断语句前(异步)或后(同步)。
三. 实验步骤
1、 新建工程
新建文件夹,在该文件夹下新建工程clock。
2、 编写低层HDL文件
编写带异步复位、同步使能、带进位的10进制计数器HDL文件。
编写带异步复位、同步使能、带进位的6进制计数器HDL文件。
编写带异步复位、同步使能、带进位的24进制计数器HDL文件,实现小时显示功能。
按键消抖模块。
扫描显示模块。
分频模块。
3、 编写顶层原理图文件
编写顶层原理图文件clock,各个模块封装后的元件符号添加到该原理图文件中。
并设定为顶层文件,进行编译,如有错误,纠正直至成功为止。
4、 锁定管脚