EDA设计论文
I、正文
1、 设计要求说明: 1、 设计一个具有校时、校分,清零,保持和整点报时功能的数 字钟。 2、 对数字钟采用层次化的方法进行设计,要求设计层次清晰、 合理;构成整个设计的功能模块既可采用原理图输入法实 现,也可采用文本输入法实现。 3、 数字钟的具体设计要求具有如下功能:1)、数字钟最大计 显示23时59分59秒;2)在数字钟正常工作进可以对数字钟 进行快速校时和校分,即拨动开关K1可对小时进行校正,拨 动开关K2对分进行校正;3)在数字钟正常工作情况下,可 以对其进行不断复位,即拨动开关K3可以使时、分、秒显示 回零;4)保持功能是要求在数字钟正常工作情况下,拨动 开关K4可以使数字钟保持原有显示,停止计时;5)整点报 时是要求数字钟在每小时整点到来前进行鸣叫,鸣叫频率在 59分53秒、55秒、57秒时为1KHz,59分59秒时为2KHz;6)要 求所有的控制开关具有去抖动功能。 4、 对设计电路进行功能仿真。 5、 将仿真双月刊的逻辑电路下载到EDA实验系统,对其功能进 行验证。 2、 方案论证: 1、实现数字钟的计时功能: 通过分析数字钟的功能,知道该设计需要一个模为24的计数器构成 小时的计数,两个模为60的计数器实现分和秒的计数,三个计数器之间 构成进位关系,即计数器为分计数器提供计数脉冲信号,分计数器为时 计数器提供脉冲信号。从全局设计考虑计数器应具有使能端和异步清零 端。可以考虑用文本输入法实现这两种不同模的计数器。
无论是用原理图法输入还是用文本输入法实现的设计,当文件编译 通过之后,均可以生成一个与其文件名相同的逻辑符号。在以后的原理 图设计中,可将该文件以一个器的形式被调用。 2、实现控制开关支抖动功能: EDA实验系统提供的开关是机械开关,机械开关在接通或断开过程 中,通常会产生一串脉冲式的振动,在电路中会相应产生一串电脉冲, 若不采取措施,往往会使逻辑电路发生误动作,为了消除这种误动作, 需要设计一个去抖动电路。该模块的设计可采用原理图输入法,也可采 用文本输入法。 3、实现数字钟的校时、校分功能: 数字钟的校时和校分功能的原理相同,设计中可加入一选择模块, 该模块既可采用原理图法也可采用文本输入法实现。下面以校分为例说 明:分计数器计数脉冲有两个不同的来源,一个是秒的进位信号,还有 一个是快速校分信号(可以是1Hz或2Hz脉冲),根据分开关的不同状态 决定关入分计数器脉冲来源,以完成正常工作或快速校分功能。 4、实现数字钟的清零、保持功能: 数字钟的这两种功能,可利用已经双月刊去抖动处理的开关去控制 实现计时功能的计数器本身所带的使能端和清零端来实现。 5、实现数字钟的报时功能 数字钟的报时功能由两部分组成,一部分的作用的选择报时的时 间,一部分的作用是选择报时的频率。根据设计要求,数字钟在59分53 秒、59分55秒、59分57秒的报时鸣叫频率是1KHz,在59分59秒的鸣叫频 率是2KHz。报时所需的鸣叫信号可由2KHz的信号源提供,然后利用一个 二分频的分频器得到1KHz的信号。 6、考虑如何将闹时设置显示出来,即当选定闹时设置时,数码管将 显示闹时时间。 7、将数字钟的名功能模块级联,生成顶层电路,实现总体设计要 求。
多功能数字时钟的设计
摘要: 本文是基于QuartusII软件以及相应的实验平台完成的多功能数字计 时器实验,使我们清楚地了解到我们身边的数字表的功能是怎样实现 的。 设计时采用了层次设计思想,功能逐级递加。实验主要包含两个主 体----时钟基本功能电路、闹钟电路。 主体一:主要涉及模60与模24计数器、动态显示控制电路、分频器 主要整点报时电路, 这些电路都是以模块封装好的,以便其他电路调用。以计数器构成 计时部件,通过分频器分出的1HZ脉冲计时,调用动态显示电路显示, 通过整点报时电路控制蜂鸣器。在计数器级联时采用内部同步外部异步 的方式,但通过简单的改变达到了同步的效果而且比同步还可靠。显示 控制时为了节约资源采用动态原理。 主体二:主要涉及模60与模24计数器、显示控制电路、比较器。以 模60与模24计数器构成定时与存储电路,调用动态显示控制电路显示。 通过比较器对闹钟时刻与实际时间进行比较,同时控制蜂鸣器鸣叫。
三、各模块设计原理: 1、分频器的设计: 系统提供的频率为48MHz。而我们需要1Hz(时钟频率)、2Hz(校 时和校分频率)、1KHz(53秒、55秒、57秒报时频率)、2KHz(59秒报 时频率)。所以需要分别对其进行48M分频,24M分频,48K分频及24K分 频。主要的设计思想是,在程序中设置具有某范围(根据分频数确定) 的变量随时钟计数,前一半计数范围内使输出为‘0’,后一半 为‘1’即可。占空比为50%。该分频器用VHDL语言描述如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fenpin1 is port(clk_in,reset : in std_logic; clk_out0,clk_out1,clk_out2,clk_out3 :out std_logic); end fenpin1; architecture structure of fenpin1 is constant count0:integer:=24000; constant count1:integer:=48000; constant count2:integer:=24000000; constant count3:integer:=48000000; begin divide_clk:process(clk_in,reset) variable n0:integer range 0 to 23999; variable n1:integer range 0 to 47999; variable n2:integer range 0 to 23999999; variable n3:integer range 0 to 47999999;
begin if (reset='1')then n0:=0; n1:=0; n2:=0; n3:=0;
clk_out0<='0'; clk_out1<='0'; clk_out2<='0'; clk_out3<='0'; elsif falling_edge(clk_in)then if(n0<(count0/2))then clk_out0<='0'; n0:=n0+1; elsif(n0<count0)then clk_out0<='1'; n0:=n0+1; else n0:=0;
3、校时(校分)模块: 校时(校分)模块相当于一个单刀双掷开关,当开关为“1”的时候 由下一级的进位作为时钟信号输入上一级的时钟输入端,当开关
五、编程下 载…………………………………………………………………………21 II、结 论……………………………………………………………………………… 22 III、参考文 献………………………………………………………………………22 IV、实验感 想…………………………………………………………………………23
IF(nreset='0')THEN qh<="0000"; ql<="0000"; ELSIF(clk 'EVENT AND clk='0')THEN if(load='1') then qh<=d(7 downto 4); ql<=d(3 downto 0); elsif(ci='1') then if(ql=9) then --将处条件更改为 “if(ql=9 or (qh=2 and ql=3)) then” 即可将该计数器变成模24计数器 ql<="0000"; if(qh=5) then qh<="0000"; else qh<=qh+1; end if; else ql<=ql+1; end if; end if; --end if_load END IF; --END IF_reset END PROCESS; END behave; 模60集成模块为: 模60仿真图形为:
关键字:层次设计 多功能数字时钟Βιβλιοθήκη 同步 整点报时 闹钟 VHDL语言
目录
I、 正 文……………………………………………………………………………… 4 一、设计要求说 明…………………………………………………………………4 二、方案论 证………………………………………………………………………4 三、各模块设计原 理………………………………………………………………6 1、分频器的设 计………………………………………………………………6 2、计时器的设 计………………………………………………………………8 3、校时(校分)模 块…………………………………………………………9 4、消颤电路模 块………………………………………………………………10 5、整点报时模 块………………………………………………………………11 6、动态显示模 块………………………………………………………………12 7、具有基本要求的数字钟的组 装……………………………………………15 8、闹钟模 块……………………………………………………………………16 四、具有闹钟功能的数字钟总装 图…………………………………………………20
end if; --2KHz if(n1<(count1/2))then clk_out1<='0'; n1:=n1+1; elsif(n1<count1)then clk_out1<='1'; n1:=n1+1; else n1:=0; end if; --1KHz
if(n2<(count2/2))then clk_out2<='0'; n2:=n2+1; elsif(n2<count2)then clk_out2<='1'; n2:=n2+1; else n2:=0; end if; --2Hz if(n3<(count3/2))then clk_out3<='0'; n3:=n3+1; elsif(n3<count3)then clk_out3<='1'; n3:=n3+1; else n3:=0; end if; --1Hz end if; end process divide_clk; end architecture structure; 分频器集成模块图为: