基于VHDL的数字电子时钟的设计

时间:2022-10-20 03:34:25

基于VHDL的数字电子时钟的设计

摘要:介绍了利用VHDL硬件描述语言结合ISE软件和ModelSIM仿真软件进行计时的结果。通过该例可以为其他电路的设计提供一定的借鉴作用。

关键词:VHDL 数字钟 FPGA

中图分类号:TN6 文献标识码:A 文章编号:1007-3973(2010) 08-058-02

近十年来随着超大规模集成电路和软件技术的快速发展,使数字系统集成到一片集成电路内成为可能,Xilinx等公司都推出了非常好的CPLD和FPGA产品,并为这些产品的设计配备了设计、下载软件,这些软件除了支持图形方式设计数字系统外,还支持设计许多种数字系统的设计语言,使数字系统设计起来更加容易,可以说数字电子技术的设计进入了一个新时代。在这样一个大背景下,熟练掌握相关功能模块的开发就成为设计者必备的一部分知识。

1电子时钟的总体设计

电子时钟是电子设计中用来显示时间的一种装置。本设计采用自顶向下( Top-to-Down)的设计方法,将数字电子时钟分四个子模块和一个顶层模块。子模块包括一个10进制计数器,一个10进制计数器,一个24进制计数器和一个LED七段数码显示模块。然后将各个子模块再细分为更小的功能块,直到最后能用VHDL语言进行描述为止。当各个模块都描述完成并仿真确认无误后,再采用元件例化,将各个元件一层一层的例化连接起来,直到最后完成系统设计。

秒钟和分钟的高位只能计数到6,低位可以计数到10,如60秒,60分钟,而小时最大计数到24。时、分、秒的计时结果采用六个数码管动态显示。

数字电子钟逻辑框图如图所示。

图1数字电子钟逻辑框图

2选择石英晶体振荡器的理由

由于通常要求数字钟的脉冲源的频率要十分稳定、准确度高,因此要采用石英晶体振荡器,其他的多谐振荡器难以满足要求。石英晶体不但频率特性稳定,而且品质因数很高,有极好的选频特性。一般情况下,晶振频率越高,准确度越高,但所用的分频级数越多,耗电量就越大,成本就越高,在选择晶体时应综合考虑。

3计时器的设计

计数器的设计,以触发器为单元电路,根据进制按有权码或无权码来编码,采用有条件反馈原理来构成。例如:秒钟和分钟采用60进制计数器 。60进制计数器个位采用10进制计数器,十位采用6进制计数器,个位的计数脉冲计到9清零,并向十位计数器进位。时钟采用24进制计数器,时钟的计数脉冲计到23清零。

这样设计不仅适合人们的计数习惯,而且有利于显示相同的数字。

以下是10进制计数器counter10子模块的VHDL语言的程序代码。Counter6子模块的程序代码与此类似,我们在这里就不再列举了。由于文章篇幅的关系,24进制计数器的程序代码也不在这里列举了。

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter10 is

port(clk:in std_logic;

reset:in std_logic;

din:in std_logic_vector(3 downto 0);

dout: out std_logic_vector(3 downto 0);

c:out std_logic);

end counter10;

architecture Behavioral of counter10 is

signal count:std_logic_vector(3 downto 0);

begin

dout

process(clk,reset,din)

begin

count

c

elsif rising_edge(clk) then

if count="1001" then

count

c

else

count

c

end if;

end if;

end process;

end Behavioral;

counter10子模块在ModelSim下的仿真波形如图2所示:

图2counter10仿真波形

4LED七段数码显示模块的设计

LED七段数码显示模块通过译码,将秒、分、时的高低位数字分别译成LED七段数码管上对应的高低电平,然后输出七段值。

7段数码显示器由7个显示码管组成,4个输入信号d0,d1,d2,d3来表示000-1111,即表示十六进制中的0-F;同时它有7个输出信号,分别用a,b,c,d,e,f,g来表示,决定可发光二极管的状态。图3表示的是七段数码管的7个输出信号a,b,c,d,e,f,g与可发光二极管的对应关系。

图3 七段数码管输入输出示意图

若该数码管为共阳数码管,当某位为0时,表示这位所在的数码管发光;如为1,则表示不发光;共阴数码管则正好相反。

从7段数码显示器的原理可以知道,7段数码显示器用4个输入信号对应16个输出信号,并且一个输入信号只能对应一个唯一的输出。从这点出发,很容易想到前面所学的译码器电路,事实上,7段数码显示器的显示就是调用了一个4-16线译码器。下面列出共阳数码管的真值表。

共阳极7段数码管真值表

以下是LED七段数码管显示模块的程序代码。

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity decoder is

port(din:in std_logic_vector(3 downto 0);

dout:out std_logic_vector(6 downto 0));

end decoder;

architecture Behavioral of decoder is

begin

process(din)

begin

case din is

when"0000"=>dout

when"0001"=>dout

when"0010"=>dout

when"0011"=>dout

when"0100"=>dout

when"0101"=>dout

when"0110"=>dout

when"0111"=>dout

when"1000"=>dout

when"1001"=>dout

when others=>dout

end case;

end process;

end Behavioral;

5结束语

将顶层文件进行编译,仿真,管脚锁定,再编译,然后将编译生成的可下载文件下载到实验箱的FPGA芯片中。最终可以看到时、分、秒正常显示。

参考文献:

[1]谈世哲.基于Xilinx ISE的FPGA/CPLD设计与应用[M].北京:电子工业出版社,2009.

[2]沈涛. Xilinx FPGA/CPLD初级教程[M]. 西安:西安电子科技大学出版社, 2009.

[3]Kleitz,W,.vhdl数字电子学[M]. 北京:希望电子出版社, 2008.

上一篇:浅析Linux与Windows的区别 下一篇:交通信号联动管理优化方案