基于VHDL语言的数字时钟设计
2011-05-21李晓敏田熙燕
李晓敏,田熙燕
(河南科技学院 机电学院,河南 新乡 453003)
硬件描述语言VHDL是EDA技术的重要组成部分,也是电子设计主流硬件的描述语言之一,它具有很强的电路描述能力和建模能力,极好地反映了EDA设计的“自顶向下”的原则。而EDA技术作为硬件设计领域的先进技术已经在发展的过程中充分地显现出其优越性。利用EDA技术进行电子系统设计的最后目标,是完成专用集成电路ASIC的设计和实现[1]。与传统的设计方法相比,EDA技术可以用VHDL语言对系统进行抽象的行为与功能描述,对设计的各个阶段进行模拟验证,同时由于VHDL具有与具体电路无关的特性,使得设计者大大节省了时间,提高了效率[2]。
1 数字时钟的设计方案及框图
1.1 设计方案
系统要完成的主要功能有:
1)数字时钟按24 h制设计,由6只数码管显示小时、分钟、秒;
2)小时单元和分钟单元具有复位功能,当按下对应按键时,小时单元和分钟单元复位为00;
3)动态扫描功能,扫描输出轮流点亮各个数码管,可用来检测数码管的好坏;
由功能要求可将系统分模块实现[3]。将系统分为7个模块来实现。这7个模块分别为:
①24进制计数器;②60进制计数器;③分频器;④选择显示数据模块:其功能为将输入的六路信号(时十位﹑时个位﹑分十位﹑分个位﹑秒十位﹑秒个位)轮流选中送给七段显示译码器,即在一个时间单元内只显示一路信号的值;⑤动态扫描控制模块:其功能为控制数码管电路的亮灭,即完成对6个数码管的扫描控制功能[3];⑥七段显示译码器:完成BCD码向7段显示码的转换;⑦模六计数器:用来控制数码管的片选信号,同时作为选择显示数据模块的地址产生器。
1.2 系统的模块框图
如图1所示,采用自顶向下的设计方法[4],通过对功能框图的分析,将系统分模块来进行设计,然后再通过例化语句完成各模块间的衔接,最终实现了顶层描述,完成系统预定功能。
1.3 系统的工作流程描述
如图1,时钟系统具有一个使能端en、一个异步清零端clr以及时钟脉冲输入端clk。由6个计数器分别完成小时、分钟、秒的计时,并分别通过数据选择器的6个输入端送入选择器,数据选择器的使能端由一个模为六的计数器控制,轮流选中数据选择器的6个输入端,这样,6个输入端口的数据在数据选择器的输出端口就得到了串行轮流的输出。此输出作为七段显示译码器的字符输入端,经译码后在数码管显示电路上显示出对应字形。数码管显示电路上的6个数码管同样采用轮流点亮的方式。由于循环的速度非常快,所以肉眼看起来仍然是同时显示的感觉。
图1 数字钟模块框图Fig.1 Block diagram of digital clock model
2 各模块的设计实现
2.1 24进制计数器和60进制计数器的实现
24进制计数器的功能为完成计时电路中小时单元的计时功能[5],并且具有异步清零端clr(低电平有效)﹑使能端en(高电平有效);当数字钟处于正常计时状态时,完成小时计时,并且受分计时模块(60进制)进位输出信号的控制。程序描述如下:
library ieee;--24进制计数器VHDL语言描述
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt24 is
port(clk,clr,en:in std_logic;
co:out std_logic;
ten:buffer std_logic_vector(3 downto 0);
one:buffer std_logic_vector(3 downto 0));end cnt24;
architecture art of cnt24 is
begin
co<='1'when (ten="0010"and one="0011") else'0';
process(clk,clr)
begin
if(en='1')then
if(clr='0') then
ten<="0000";
one<="0000";
elsif(clk'event and clk='1')then
if(one=3)then
one<="0000";
if(ten=2)then
ten<="0000";
else ten<=ten+1;
end if;
else one<=one+1;
end if;
end if;
else one<="0000";ten<="0000";
end if;
end process;
end art;
程序的仿真波形如图2所示,en为使能端,co为计满标志位输出。
60进制计数器功能为完成计时电路中分单元和秒单元的计时功能,具有异步清零端clr(低电平有效)﹑使能端en(高电平有效)以及进位信号co;其程序描述与24进制计数器类似,其仿真波形如图3。
2.2 分频器的实现
分频器的功能为将输入的1 000 Hz的脉冲信号转换为1 Hz的信号送给计时电路[6],作为电路的基准脉冲信号,采用VHDL语言进行描述,并利用软件仿真。其程序描述如下:
library ieee;--分频器VHDL语言描述
use ieee.std_logic_1164.all;
entity fenpin is
port(clk:in std_logic;
q:out std_logic);
end fenpin;
图2 24进制计数器仿真波形Fig.2 The 24 binary counter simulation
图3 60进制计数器仿真波形Fig.3 The 60 binary counter simulation
architecture arc of fenpin is
begin
process(clk)
variable cnt:integer range 0 to 999;
begin
if clk’event and clk=’1’ then
if cnt<999 then
cnt:=cnt+1;
q<=’0’;
else cnt:=0;
q<=’1’;
end if;
end if;
end process;
end arc;
仿真结果如图4所示。
图4 分频器仿真波形Fig.4 The divider counter simulation
2.3 顶层电路设计
各个模块建立起来后,通过仿真无误,采用例化语句完成各个模块间的衔接,最终完成顶层电路的设计。例化语句的具体描述为:
u1:cnt24 port map (clr=>clrc,clk=>b,en=>enc,one=>c,ten=>d);--24进制计数器例化
u2:cnt60 port map (clr=>clrc,clk=>e,en=>enc,one60=>f,
ten60=>g,co60=>b);--60 进制计数器例化
u3:cnt60 port map (clr=>clrc,clk=>h,en=>enc,one60=>i,ten60=>j,co60=>e);
u4:mux24_4 port map (ones=>c,tens=>d,onem=>f,tenm=>g,oneh=>i,tenh=>j,sel=>k,bcd=>l); --选择显示数据模块例化
u5:seg7 port map(bcd=>l,segout=>shizhongout); --七段显示译码器例化
u6:scan port map(sel=>k,seg6_com=>bcd_control); --动态扫描控制模块例化
u7:sel port map(clk=>clkc,sel=>k); --译码器例化
u8:fenpin port map(clk=>clkc,q=>h); --分频器例化
以5 s时刻为例,扫描控制输出轮流点亮各个LED数码管;(11110-111101-111111-111011-110111-111111-101111-011111-11110---------)
七段显示译码器输出为 0(0111111),5(1101101),系统仿真波形如图5所示。
图5 系统级仿真波形Fig.5 The system simulation
系统的仿真结果证明,此设计能够完成既定功能,设计过程是正确的。
3 结束语
本文通过电子时钟的设计表明了VHDL设计的一般流程及其显著特点,把其下载到开发板上与其他外围电路一起构成了数字钟的硬件系统,并进行设计测试,得到了良好的效果。同时表明了EDA技术“硬件设计软件化”的特点,在设计过程中不涉及具体硬件电路,这也是电子品设计的大趋势。
[1]潘松,黄继业.EDA 技术实用教程(3)[M].北京:科学出版社,2006.
[2]艾明晶,金惠华.EDA教学实验设计实例——电子秒表电路的设计[J].仪器仪表学报,2011,22(4):141-142.AIMing-jing,JIN Hui-hua.A design example ofEDA Teaching Experiment-the design of electronic stop-watch circuit[J].Chinese Journal of Scientific Instrument,2011,22(4):141-142.
[3]徐晓玲,田亚菲,崔伟.基于EDA仿真技术的电子时钟系统设计[J].微计算机信息,2010,26(2):139-140.XU Xiao-ling,TIAN Ya-fei,CUI Wei.Electronic clock system design based on EDA simulation technology[J].Microcomputer Information ,2010,26(2):139-140.
[4]徐大诏.基于FPGA实现的数字钟设计[J].信息技术,2009(12):102-104.XU Da-zhao.Digital clock design based on FPGA[J].Information Technology, 2009(12):102-104.
[5]包本刚,朱湘萍.基于EDA技术的多功能数字时钟的ASIC设计[J].微计算机信息,2008,24(12/2):212-214.BAO Ben-gang,ZHU Xiang-ping.ASIC design of multifunctional digital clock based on EDA technology[J].Microcomputer Information 2008,24(12/2):212-214.
[6]康华光.电子技术基础:数字部分(3)[M].5 版.北京:高等教育出版社,2006.