本项目基于VHDL语言实现了一个数字时钟的设计与仿真,涵盖计时、显示等核心功能模块,适用于FPGA平台应用。
根据多功能数字钟的功能描述,整个电路设计可以分为以下几个模块:
1. 分频模块:由于实验电路板上提供的信号只有1KHz和6MHz两种频率,而本设计需要生成1Hz、100Hz和4Hz的时钟信号。
2. 控制模块:为了实现在计时、校时、显示日历以及跑表等功能之间的切换,控制模块需产生互不冲突的控制信号,确保各个功能有序执行。
3. 计时模块:在输入1Hz的时钟信号下生成AM/PM时间信息(小时、分钟和秒)。考虑到后续需要进行手动调整计时时钟的需求,在load信号的作用下可以将校时模块设定的时间加载到初始值,并在此基础上继续正常计数。
4. 校时模块:当功能切换至该模式,通过外部按键的上升沿操作实现时间的逐位递增。每按下一次键对应数值加1的操作。
5. 万年历模块:基于来自计时模块进位输出信号(每次跳动代表一年),生成显示的日、月、年份以及星期几等信息,并且同样设有可以加载特定日期的功能,以便于后续的校正日历操作。
6. 校正日历模块:当切换至该模式下,通过外部按键上升沿实现逐位递增功能。每按一次键对应数值加1的操作。
7. 闹钟模块:与校时模块采用相同的电路结构设定闹铃时间;一旦触发信号为高电平,则启动音乐播放器并播放歌曲《两只蝴蝶》,不按下停止按钮则持续一分钟自动结束。
8. 跑表模块:以显示毫秒、秒和分钟的格式进行计时,设有stop(暂停)与reset(重置)两个按键功能。
9. 显示模块:根据控制模块输出的不同mode信号选择相应功能模块的数据,并通过译码器连接到数码管上实现数字显示。
以上简单介绍了构成电路的主要部分。接下来将给出本设计的总体模块化示意图:
10分频模块:
```vhdl
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fenpin10 is
port (clk_in:in std_logic; -- 输入时钟信号
clk_out:buffer std_logic);-- 输出时钟信号
end fenpin10;
architecture rtl of fenpin10 is
```