EDA课程设计数字时钟

EDA课程设计数字时钟
EDA课程设计数字时钟

在系统编程技术EDA

课程设计报告

课程名称 E D A技术

日期2011年6月3日

目录

目录 0

一、设计目标和功能 (1)

二、设计方案 (1)

1、设计原理 (2)

a. 晶体振荡器 (2)

b.分频器电路 (3)

2、电路的工作原理 (4)

3、时、分、秒计数器电路 (5)

a.工作原理 (5)

b.秒计数器模块程序与仿真 (5)

c.秒表计数器电路仿真图 (6)

d.分计数器模块程序与仿真 (7)

e.分计数器电路仿真图 (8)

f.小时计数器模块程序与仿真 (8)

g.小时计数器电路仿真图 (9)

h.时、分、秒电路顶层设计 (9)

三、仿真 (11)

四、心得体会 (11)

参考文献 (12)

一、设计目标和功能

利用VHDL设计数字钟显示电路的各个模块,并使用EDA工具对各模块进行仿真验证。数字钟显示电路的设计分为下面几个模块:秒计数模块、分计数模块、小时计数模块.。完成以后把各个模块整合后,显示相应的输出状态。最后以实现一个以时、分、秒计时的数字时钟。

二、设计方案

1、设计原理

数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23时59分59秒。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。原理图如图1:

图1 数字时钟原理图

a. 晶体振荡器

晶体振荡电路是构成数字式时钟的核心,它保证了时钟走时准确及稳定。晶体振荡器它的作用是产生时间标准信号。数字钟的精度主要取决于时间标准信号的频率及其稳定度。因此,一般采用石英晶体振荡器经过分频得到这一信号。晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了

晶体振荡器电路。如图2所示晶体振荡电路框图。

图2晶体振荡电路

b.分频器电路

分频器电路将32768HZ的高频方波信号经32768次分频后得到1Hz的方波信号供秒计数器进行计数。分频器实际上也就是计数器。本次设计是运用了CD4060分频器进行分频,分频电路可提供512HZ和1024HZ的频率,在经CD4027分频器进行一分频,为此电路输送一秒脉冲。

2进制计数器我们采用CMOS管CD4013B。CD4013B其实是一个双D型触发器。它是由两个相同的、独立的数据型触发器组成。每个触发器有独立的数据、置位、复位、时钟输入和Q输出。在时钟脉冲正变化沿时预置在D输入的逻辑电平转换至Q输出。时钟置位和复位是独立的,分别通过在置位或复位线上高电平完成。

2、电路的工作原理

电路总图如图3:(电路进行了封装):

图3 电路总图

首先由分频器把原来的48MHZ的脉冲用进行分频得到1Khz、500hz、2hz、1hz 的脉冲。1hz的脉冲送到时钟计时电路秒位的clk输入口;秒位的进位信号和2hz 脉冲通过开关的选择输送到分位电路的时钟输入口,前者用于正常计时,后者由于校分时;分位的进位信号和2hz脉冲通过开关的选择输送到时位电路的时钟输入口,前者用于正常计时,后者由于校时。把三个计数器的输出输送给一个24选4的数据选择器,六组分别为秒个位、秒十位、分个位、分十位、时个位、时十位。数据选择器输入信号由一个模八的计数器提供,这个模八的计数器的输出同时送给一74138译码器。数据选择器的输出送入7447段译码器的输入口,74138的的输出由于选择显示器的位,7447的输出用于段的显示,这样就实现了动态显示。至于整点报时电路我们把要蜂鸣器响的时间通过卡诺图化简,得到最简的逻辑函数式,再把逻辑函数式通过电路实现,满足要求才把脉冲信号输送给蜂鸣器。

最后由于有三组输出信号要显示,我们通过显示模式控制开关选择要显示的状态信号。

以上的各种状态下的控制键通过模式的选择进行了复用。模式状态切换的连个按键的输入同时输送到两个LED灯,通过观察灯的状态我们就可以判断当前的模式。

3、时、分、秒计数器电路

a.工作原理

时、分、秒计数器电路有相似的地方,用两个74LS161组成一个二十四进制计数器,显示0~23时。由分计数器送来的进位脉冲送入时个位计数器,计10小时清零并向时十位计数器送进位脉冲,当十位输出为二,个位输出为四时将整个电路清零并向下一级的星期显示电路送进位脉冲。本电路也可理解为用两个74LS161组成一个一百进制计数器显示0~99,当计数到24是将整个电路清零。时、分、秒计数器都需要用译码电路和LED数码管进行译码和显示。时、分、秒计数器电路如图4所示。

图4 时、分、秒计数器电路

b.秒计数器模块程序与仿真

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity second is

port(clk:in std_logic;

reset:in std_logic;

setmin:in std_logic;

enmin:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity second;

architecture art of second is

signal count:std_logic_vector(6 downto 0);

signal enmin_1,enmin_2:std_logic;

begin

daout<=count;

enmin_2<=(setmin and clk);

enmin<=(enmin_1 or enmin_2);

process(clk,reset,setmin)

begin

if(reset='0')then

count<="0000000";

enmin_1<='0';

elsif(clk'event and clk='1')then

if(count(3 downto 0)="1001") then

if(count<16#60#)then

if(count="101101")then

enmin_1<='1';count<="0000000";

else

count<=count+7;

end if;

else

count<="0000000";

end if;

elsif (count<16#60#)then

count<=count+1;

enmin_1<='0';

else

count<="0000000";enmin_1<='0';

end if;

end if;

end process;

end art;

c.秒表计数器电路仿真图

秒表计数器电路仿真图如图2.4:将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。如图5:

图5 秒计数器电路仿真图

d.分计数器模块程序与仿真

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity minute is

port(clk:in std_logic;

clks:in std_logic;

reset:in std_logic;

sethour:in std_logic;

enhour:out std_logic;

daout:out std_logic_vector(6 downto 0)); end entity minute;

architecture art of minute is

signal count:std_logic_vector(6 downto 0); signal enhour_1,enhour_2:std_logic;

begin

daout<=count;

enhour_2<=(sethour and clks);

enhour<=(enhour_1 or enhour_2);

process(clk,reset,sethour)

begin

if(reset='0')then

count<="0000000";

enhour_1<='0';

elsif(clk'event and clk='1')then

if(count(3 downto 0)="1001") then

if(count<16#60#)then

if(count="101101")then

enhour_1<='1';

count<="0000000";

else

count<=count+7;

enhour_1<='0';

end if;

else

count<="0000000";

end if;

elsif (count<16#60#)then

count<=count+1;

enhour_1<='0'after 100 ns;

else

count<="0000000";enhour_1<='0';

end if;

end if;

end process;

end art;

e.分计数器电路仿真图

分计数器电路仿真图如图2.5:“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。如图6:

图6 分计数器电路仿真图

f.小时计数器模块程序与仿真

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity hour is

port(clk:in std_logic;

reset:in std_logic;

daout:out std_logic_vector(5 downto 0));

end entity hour;

architecture art of hour is

signal count:std_logic_vector(5 downto 0);

begin

daout<=count;

process(clk,reset)

begin

if(reset='0')then

count<="000000";

elsif(clk'event and clk='1')then

if(count(3 downto 0)="1001") then

if(count<16#23#)then

count<=count+7;

else

count<="000000";

end if;

elsif (count<16#23#)then

count<=count+1;

else

count<="000000";

end if;

end if;

end process;

end art;

g.小时计数器电路仿真图

时计数器电路仿真图如图7:“时计数器”采用24进制计时器,可实现对一天24小时的累计。

图7 小时计数器电路仿真图

h.时、分、秒电路顶层设计

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity second is

port(clk:in std_logic;

reset:in std_logic;

setmin:in std_logic;

enmin:out std_logic;

daout:out std_logic_vector(6 downto 0));

end entity second;

architecture art of second is

signal count:std_logic_vector(6 downto 0);

signal enmin_1,enmin_2:std_logic;

begin

daout<=count;

enmin_2<=(setmin and clk);

enmin<=(enmin_1 or enmin_2);

process(clk,reset,setmin)

begin

if(reset='0')then

count<="0000000";

enmin_1<='0';

elsif(clk'event and clk='1')then

if(count(3 downto 0)="1001") then

if(count<16#60#)then

if(count="101101")then

enmin_1<='1';count<="0000000";

else

count<=count+7;

end if;

else

count<="0000000";

end if;

elsif (count<16#60#)then

count<=count+1;

enmin_1<='0';

else

count<="0000000";enmin_1<='0';

end if;

end if;

end process;

end art;

三、仿真

首先要进行管脚的分配,选择“Assingnment—〉Pins”,总电路管脚分配如图8示:

图8 引脚分配图

管脚分配保存好后,选择“Assingnment—>Device”,点击“Device and Pin Option…”,选择“Unused Pins”页中“Reserve all unused pins:”选项中的“As input tri-stated”选项,将未用引脚设为三态输入,重新编译。点击工具栏上的(Programmer)按钮,点击“Hardware Setup”按钮,在“Currently selected hardware”中选择“ByteBlaster[LPT1]”。最后选择要下载的文件,点击“Start”即可下载程序。下载完毕即可在模拟试验箱上观察结果。

四、心得体会

通过这段时间的紧张工作,最后完成了我的设计任务——数字钟的设计与制作。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。希望学校以后多安排一些类似的实践环节,让同学们学以致用。

课程设计中要求要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C 语言)顺序执行的差别及其在电路设计上的优越性。用VHDL硬件描述语言的形

式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。

参考文献

[1] 《EDA技术实用教程》潘松,黄继业.北京:科学出版社,2006

[2] 《VHDL设计实例与仿真》姜雪松,吴钰淳,王鹰等. 北京:机械工业出版社,2007

[3] 《基于Quartus Ⅱ的FPGA/CPLD设计》李洪伟,袁斯华.北京:电子工业出版社,2006

相关主题
相关文档
最新文档