基于VHDL的数字闹钟设计 联系客服

发布时间 : 星期一 文章基于VHDL的数字闹钟设计更新完毕开始阅读

入方法都支持,如 Active-HDL。MAX+plusII 图形输入方式只支持电路原理图描述和波形描述两种。电路原理图方式描述比较直观和高效,对综 合软件的要求不高。一般大都使用成熟的 IP 核和中小规模集成电路所搭成的现 成电路,整体放到一片可编程逻辑器件的内部去,所以硬件工作速度和芯片利用 率很高,但是但项目很大的时候,该方法就显得有些繁琐;状态机描述主要用来 设计基于状态机思想的时序电路。在图形的方式下定义好各个工作状态,然后在 各个状态上输入转换条件以及相应的输入输出,最后生成 HDL 语言描述,送去综 合软件综合到可编程逻辑器件的内部。由于状态机到 HDL 语言有一种标准的对应 描述方式,所以这种输入方式最后所能达到的工作速度和芯片利用率主要取决于 综合软件;波形描述方式是基于真值表的一种图形输入方式,直接描述输入与输 出的波形关系。这种输入方式最后所能达到的工作速度和芯片利用率也是主要取 决于综合软件。

2.3 FPGA 设计流程

一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个 较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现, 这就是 TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛 采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以 在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优 化的网络表, 使工艺转化变得轻而易举。

9

3 总体设计思想

3.1 基本原理

数字闹钟电路的基本结构由两个60进制计数和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的技术时钟CLK为HZ的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒得计时结果通过6个数码管来动态显示。因此,通过模式选择信号KEY1、KEY2控制数字钟的工作状态,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位,分的进位;当数字闹钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,驱动扬声器,持续1分钟。

3.2 设计框图

系统框图主要分为三部分:

第一部分为精准秒脉冲产生电路,这里我们采用频率为32.768KHz的标准晶振搭成精准的秒脉冲产生电路,为电子钟提供精准的秒脉冲输入。

第二部分为FPGA核心控制电路,主要由型号为EP3C25E144C8N的芯片经过编程以后,向译码显示电路提供控制信号。

第三部分为译码显示电路,由4片74LS47驱动4个7段数码管,在核心控制电路输出的控制信号的控制下,显示相应的时、分、秒。具体框图如下图3-1所示。

精 准 秒 脉 冲 产 生 电 路 FPGA 核 心 控 制 电 路 译 码 显 示 电 路

图3-1 系统框图

10

4 设计步骤和调试过程

4.1 总体设计电路

该数字钟可以实现3个功能:计时功能、定点报时功能和重置时间功能,因此有3个子模块:计时、报时(speak)、重置时间(sd1,sd2)。其中计时模块有4部分构成:秒计时器(s1)、分计时器(m1)、时计时器(h1)。秒计时器(s1)是由一个60进制的计数器构成的。clk为驱动秒计时器的时钟,s1为秒计时器的输出。分计时器(m1)是由一个60进制的计数器构成的,s1为驱动分计时器工作的时钟;m1为分计时器的输出;时计时器(h1)是由一个24进制的计数器构成的, m1为驱动时计时器工作的时钟,h1为时计时器的输出;

报时模块(speak)的功能是定时到时,speak输出高电平,并且持续一段时间。

(1) 秒脉冲产生电路

如下图4-1所示,由32.768KHz的晶振产生经过CD4060分频产生精准的秒脉冲。

图4-1秒脉冲产生电路

(2) FPGA核心控制电路

对EP1K30TC144-3进行编程,输出控制信号。

FPGA 控 制 芯片 EP1K30TC144-3 图4-2 FPGA核心控制电路

(3) 译码显示电路

如图4-3,由CD4511驱动7段数码管进行显示。

11

图4-3 译码显示电路

4.2 模块设计和相应模块程序

(1)分计时器(second1) -----------------------分钟十位

m110:process(clk,min2,sec1,sec2,md1,md2) begin

if clk'event and clk='1' then

if (min1=\then

min1<=\

elsif min1=\min1<=\

elsif (min2=\

or (min2=\end if;

end if;--end if; end process m110;

-----------------------分钟个位 m220:process(clk,sec1,sec2,md1,md2) begin

if clk'event and clk='1' then

12