基于FPGA的数字电子钟的设计与实现
基于FPGA的数字电子钟的设计与实现
期末到了,希望能帮到需要的同学。进入我的主页我发了资源的!
- 系统顶层模块设计
(1) 系统功能要求
能实现秒、分钟、小时的计数,计数结果清晰稳定的显示在6位的七段数码管上。
扩展功能:手动校时、校分,闹钟,整点报时,秒表,暂停和调频。
(2) 设计思路
利用数字电子技术、FPGA等技术、设计并实现一个基于FPGA的数字电子时钟的基本功能。实验所需时钟信号为50MHz、1KHz和1Hz,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和秒计数器完成,校时模块完成时分秒的校正。
扩展功能信号由mode_select模块选择,其中校时和秒表功能经mode_select由sw[2]控制,时钟和闹钟由mode_select由sw[3]控制.整点报时和闹钟为一个模块比较时钟和设置时间即可实现闹钟功能。暂停由sw[0]控制,调频由sw[4]控制。
(3) 设计结果(电路)
图1 系统顶层电路图
图2 系统顶层电路图(整点报时和闹钟部分)
- 分频模块电路设计及仿真
(1) 模块功能:将50MHz的时钟信号分频得到1KHz、500Hz和1Hz三个频率。
(2) 设计思路:分频器用74390芯片设计,一个74390芯片最大可实现100分频,经一个或多个74390芯片可将50MHz分频为任意频率的信号。
(3) 设计结果(电路)
图3 分频器模块电路图
(4) 测试结果:连接好电路和完成引脚锁定后,把程序下载到FPGA实验平台上。将1KHz接到蜂鸣器上,蜂鸣器一直叫;将1Hz接到LED灯上,LED灯有规律的重复亮灭。
- 计时模块设计及仿真
3.1 分、秒计时模块(模60计数)
(1) 模块功能(计数、进位):实现模60计数功能,使秒和分在60时实现异步清零并向下一位进位。
(2) 设计思路:先用74390是实现模100功能,然后将2QB和2QC相与后连接到进位端和两个清零端。当2QB和2QC同时为1时即逻辑上的60时清零。
(3) 设计结果(电路):
图 4 模60计数电路图
(4) 仿真测试
图5 模60计数仿真测试
3.2 小时计时模块(模24计数)
(1) 模块功能:实现模24计数功能,使时在24时异步清零。
(2) 设计思路:还是在74390实现了模100的基础上将1QC和2QB相与后连接到进位端和两个清零端。
(3) 设计结果(电路)
图6 模24计数电路图
(4) 仿真测试
图7 模24计数仿真测试
- 数码管动态显示模块
模块功能描述及设计
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。所谓动态扫描显示即轮流向各位数码管送出字形码,尽管实际上各位数码管并非同时点亮,但只要扫描速度足够快,利用发光二极管的余晖和人眼视觉暂留作用,使人感觉各位数码管同时在显示。
4.1 扫描模块m6
(1) 模块功能:实现000-101的计数,选择选择六位数码管中的一位显示。
(2) 设计思路:利用74390芯片实现,将1QB和1QC相与后接到清零端。
(3) 设计结果(电路)
图8 扫描模块电路图
(4) 仿真测试
图9 扫描模块仿真测试
4.2 位选模块dig_select
(1) 模块功能:选择数码管显示位
(2) 设计思路:利用74138译码器,将输入信号每个状态与一位数码管对应,在达到相应状态时对应相应的一位数码管显示。
(3) 设计结果(电路)
图10 位选模块dig_select电路图
(4) 仿真测试
图11 位选模块dig_select仿真测试
4.3 段选模块seg_select
(1) 模块功能:该模块是从6组输入信号(hour_shi[3…0], hour_ge[3…0], min_shi[3…0], min_ge[3…0], sec_shi[3…0], sec_ge[3…0])中选择一组输出code[3…0],由m[2…0]控制选择
(2) 设计思路:使用4片74151进行数据选择,其中74151的ABC端接入模6的二进制数频率为1KHz。
(3) 设计结果(电路)
图12 段选seg_select电路图
(4) 仿真测试
图13 段选模块seg_select仿真测试
4.4 译码模块decoder
(1) 模块功能:7448为共阴极数码管译码器,可将4位8421BCD码译为七位段码,驱动数码管以十进制数形式显示数字字形。
(2) 设计思路: seg_select的code[3…0]接入7448的ABCD,最后将seg[6…0]输出。
(3) 设计结果(电路)
图14 译码模块decoder电路
(4) 仿真测试
图15 译码模块仿真测试
- 其他扩展功能
5.1 校时校分模块
(1) 模块功能:校时校分,可调整小时和分钟
(2) 设计思路:先将时间暂停,利用两个74151做的选择器将时钟的小时和分钟信号换到由按键控制,其中按键后要加入防抖模块,即可实现按一下增1。
(3) 设计结构(电路)
图16 校时校分模块
5.2 闹钟模块
(1) 模块功能:当时间到达提前设置的时间点时,蜂鸣器即叫一分钟(中途可由开关Sw[5]关闭)。
(2) 设计思路:此模块部分与校时模块类似,设置时间也可由两个模60和一个模24以及按键控制,而设置时间与时钟需要一个时间比较模块来确定时间是否到达设置值。比较模块内部是将小时和分钟信号与设置值通过同或门进行比较。当所有同或门输出高电平时则蜂鸣器响,直到时钟与设置的时分不一致时停止。
(3) 设计结果(电路)
图17 闹钟模块(闹钟设置)
图18 闹钟模块(时钟比较)
5.3 秒表模块
(1) 模块功能:实现从零到一个小时的计时可精确到毫秒。
(2) 设计思路:将1KHz的时钟信号先接入一个模10分频,然后经过一个模100分频器和两个模60分频器,将模100的输出到秒的个位和十位,再将两个模60的输出接到分和时的个位和十位。
(3) 设计结果(电路)
图19 秒表模块
5.4 整点报时模块
(1) 模块功能:到达整点时蜂鸣器叫一秒钟。
(2) 设计思路:将秒的个位和十位以及分的个位和十位与低电平经过同或门输出。当全部同或门输出高电平时蜂鸣器叫一秒钟。
(3) 设计结果(电路)
图20 整点报时模块
5.5 暂停模块
(1) 模块功能:时钟暂停。
(2) 设计思路:将sw[0]置高电平即把1Hz时钟信号换为低电平即可切断时钟信号。
(3) 设计结果(电路)
图21 暂停模块
5.6 调频模块
(1) 模块功能:可切换1Hz和1KHz信号给时钟。
(2) 设计思路:直接将1Hz和1KHz时钟信号选择器即可。
(3) 设计结果(电路)
图22 调频模块