VHDL实现的数字时钟设计与功能解析

4星 · 超过85%的资源 需积分: 9 23 下载量 124 浏览量 更新于2024-09-13 收藏 56KB DOC 举报
“数字时钟设计VHDL”实验旨在设计一个能够计时并显示00:00:00到23:59:59时间范围的数字时钟,具备暂停和清零功能。实验涉及到的关键技术包括VHDL编程、时钟设计以及EDA工具的使用,如QuartusII7.0。实验内容涵盖了秒脉冲发生、计数、译码显示和时钟调整四个核心部分。 实验原理详解: 1. 秒脉冲发生:时钟的精度主要取决于秒脉冲的准确性。通常,会通过分频电路将较高频率的系统时钟(例如50MHz)分频得到稳定的1Hz秒脉冲。这里采用50000000分频,设计一个计数器,其进位输出即为所需的1Hz信号。 2. 计数部分:计数器分为秒、分和时三个层次,分别是60进制的秒计数器、分计数器,以及24进制的时计数器。每个计数器都有时钟输入(clk)、复位(rst)输入,以及相应的进位和数据输出。为了实现设置时间的功能,还可以添加置数控制引脚(Set)和置数输入引脚(d0~d7)。 3. 译码显示部分:这一模块接收时分秒计数数据,并将其转换成适合数码管显示的格式。它有25个输入引脚,包括时钟信号和计数数据,以及14个输出引脚,包括8位显示码和6位数码管选通信号。译码器按照时钟信号的节奏依次选择并显示十时、时、十分、分、十秒和秒。 4. 时钟调整部分:这部分可能包括暂停和清零功能。暂停功能可以通过控制时钟输入的信号来实现,清零则可以通过复位引脚或特定的置数操作完成。 VHDL代码示例: 在VHDL中,我们可以创建一个实体`clk_1Hz`来实现1Hz时钟分频器。架构`Bhv`中,声明内部计数信号`clk_1Hz_r`和计数器变量`count`。当`sys_clk`上升沿到来时,计数器加1,当`count`达到最大值时,`clk_1Hz_r`翻转,输出1Hz的时钟信号。计数器在达到最大值后重置。 实验过程: 1. 理解数字时钟的工作原理。 2. 编写各部分的VHDL代码,如秒脉冲发生器、计数器和译码器。 3. 使用QuartusII7.0进行仿真和综合,验证设计的正确性。 4. 将设计下载到SOPC实验箱中,观察实际运行效果。 通过这个实验,学生可以深入理解数字时钟的工作机制,掌握VHDL编程技巧,以及如何利用EDA工具实现硬件逻辑设计。同时,也能提高对定时和计数器设计的理解,为更复杂的数字系统设计打下基础。
2013-09-25 上传
根据以上对于多功能数字钟的功能的描述,可以将整个的电路设计分为以下几个模块: 分频模块:由于实验电路板上所能提供的只有1Khz和6Mhz的信号,而本设计过 程的即时以及跑表模块需要1hz、100hz和4hz的时钟信号。 控制模块:为达到多动能数字钟在计时、校时、显示日历、跑表等不同的模块之间 切换,需要控制模块产生时序要不相冲突的控制信号,保证各个模块的功能有序的执行。 计时模块:在输入的1hz时钟信号,产生显示的AM、PM、时、分、秒信号,由 于要涉及到后面的校时模块,这里采用带有置数的计时模块,在load信号控制下将校时模块设定的时间转载至初始值,在初始值的基础上正常计时。 校时模块:当功能切换至校时模块时,本程序采用在外部按键的上升沿即:每按动 一次校时键对应显示相应加1。 万年历模块:在计时模块的进位输出信号(每次跳动代表一年),产生显示的年、月、 日、星期、是否闰年信号,同样类似于计时模块考虑到后面的校正日历模块,这里同样采用带有置数的计时模块,在load信号控制下将校正日历模块设定的日历转载至初始值,在初始值的基础上正常计时。 6. 校正日历模块:切换至该模块时,采用外部按键的上升沿:每按动一次校正键对应的显示相应的加1。 闹钟模块:这里采用和校时模块同样的电路设定闹钟的时间,一旦触发信号为高电 平,触发音乐播放模块,播放歌曲《两只蝴蝶》,不按停止键播放一分钟自动停止。 跑表模块:采用显示毫秒、秒、分的显示格式,并设有stop按钮和reset按钮。 9. 显示模块:采用从控制模块中出来的mode 信号为变量,跟随该信号的变化,选着不同的模块的输出信号,通过两个译码器输出数据连接到数码管显示。 以上简单的介绍了构成电路的几大模块,下面给出本设计电路的总的模块化示意图: 1)10分频模块: 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