最新EDA数字电子设计多功能数字钟设计---副本.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateEDA数字电子设计多功能数字钟设计-副本EDA设计实验报告EDA设计实验报告多功能数字钟设计学院:自动化学号:0810190145姓名:张骞指导老师:谭雪琴完成时间:2011年5月15日多功能数字钟设计摘要:利用QuartusII软件采用模块化设计方法设计一个数字钟。通过原理图输入进行设计,取代VHDL语言设计。软件仿真调试成功后编译下载至可编程实验系统SmartSOPC中进行硬件测试。实现并充分领略硬件设计软件化的精髓。关键字:软件; 数字钟; 模块化; VHDL;Abstract:Using the QuartusII software design a digital bell with the blocking method.The design takes theory drawing instead of VHDL language.After emluating and debuging successfully,translate and edit the code.Then,download the result to the programmable SmartSOPC system and test it in hardware.Realizing the soul of designing hardware by software.Keywords:software; digital bell; blocking method; VHDL目 录一 设计内容 3二 设计要求 3二 方案论证 4总体电路图 4基本计时电路的工作原理 5附加闹钟电路的工作原理 5整个时钟原理框图 6三 基本计时电路子模块设计原理 61、脉冲发生电路 62、计时电路 103、校分校时保持清零电路144、动态译码显示电路155、报时电路186、消颤开关组电路197、基本计时电路综述21四 闹钟电路子模块设计原理 221、闹钟开关消颤及校时校分清零电路 222、闹钟与计时校时分复用电路 253、比较电路 264、2选1显示复用电路 275、报时音乐电路 286、音乐选择电路 297、音乐产生电路 30五 未实现功能的原理简述 361、秒表 362、万年历 373、模块化与接口设计 37六 程序下载、仿真与调试 38七 实验总结与感想 39一、 设计内容 设计一个数字钟,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时等功能。我们设计的电路在具有基本功能的基础上,增加了下列功能:整点报时、闹钟设置、彩铃和星期显示调节功能。二、 设计要求2.0 基本要求1、能进行正常的时、分、秒计时功能;2、分别由六个数码管显示时分秒的计时;3、K1是系统的使能开关(K1=0正常工作,K1=1时钟保持不变);4、K2是系统的清零开关(K2=0正常工作,K2=1时钟的分、秒全清零);5、K3是系统的校分开关(K3=0正常工作,K3=1时可以快速校分);6、K4是系统的校时开关(K4=0正常工作,K4=1时可以快速校时);2.1 提高部分要求1、使时钟具有整点报时功能(当时钟计到5953”时开始报时,在5953”, 5955”,5957”时报时频率为512Hz,5959”时报时频率为1KHz);2、闹表设定功能; 二、方案论证本实验在实现实验基本功能的基础上,加入了整点报时、闹钟设置、彩铃和星期显示调节功能。图1为实验功能方框图: 图1 实验方框图数字计时器基本功能是计时,因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为48MHZ,通过分频获得所需脉冲频率(1Hz,1KHz,2KHz)。为产生秒位,设计一个模60计数器,对1HZ的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。显示功能是通过数选器、译码器、码转换器和7段显示管实现的。因为实验中只用一个译码显示单元,7个7段码(6个用于显示时分秒,一个显示星期),所以通过4个7选一MUX和一个3-8译码器配合,根据计数器的信号进行数码管的动态显示。清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。校分校时功能由防抖动开关、逻辑门电路实现。其基本原理是通过逻辑门电路控制分计数器的计数脉冲,当校分校时开关断开时,计数脉冲由低位计数器提供;当按下校分校时开通时,既可以手动触发出发式开关给进位脉冲,也可以有恒定的1Hz脉冲提供恒定的进位信号,计数器在此脉冲驱动下可快速计数。为实现可靠调时,采用防抖动开关(由D触发器实现)克服开关接通或断开过程中产生的一串脉冲式振动。保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。整点报时功能可以通过组合逻辑电路实现。当计数器的各位呈现特定的电平时,可以选通特定的与门和或门,将指定的频率信号送入蜂鸣器中,实现在规定的时刻以指定频率发音报时。闹钟设定功能。闹钟只设定时和分,基本模块与正常计时电路里的校时校分电路相同。本实验中为节省按键,闹钟时间调节键复用正常调时的校时校分开关,为使设定闹铃与正常计时中调节时间按键互不影响,额外用一个闹钟使能键,按下该键后进入闹钟设定界面,此时校时校分开关用于调节闹钟时间,对正常计时没有影响,且此时7段显示码显示的是闹钟时间;恢复使能键后校分校时键用于对数字钟进行时间调节,对设定的闹钟时间没有影响。音乐产生电路。本实验中音乐是欢乐颂的前半部分,共32个节拍,5个音频。32个5个音频的频率由分频器产生,32个节拍需按照顺序产生,且要能够循环。因此用译码器循环按序选取音频,所以需要一个模5循环计数器和一个5-32译码器。译码选中位与所需的音频相与之后送入蜂鸣器产生音乐效果。闹钟报时功能。在计时电路走到设定的时间时闹铃报时功能会被启动,通过与音乐产生电路进行逻辑组合,使得在达到闹铃时,发出音乐声。闹铃关闭功能。考虑到实际情况,希望闹铃声可以被关闭,同时在关闭闹铃键恢复后,闹铃不再响,但是在下一次闹铃时间来临时闹铃可以继续工作。实验中实现此功能的需要一个触发器来实现。星期设定电路功能。星期显示功能由模7计数器构成,16时为顺序计数,星期日显示为8,即从6跳过7直接进入8,然后再由8进入1。由此可见,需要设定这样一个计数器:在一次循环计数过程中,要有两次置位,且两次所置数有所不同。三、基本计时电路子模块的设计原理1、脉冲发生电路(分频电路)脉冲发生电路将实验箱48MHz的频率分频成1Hz(供系统时钟),2Hz(快速校分、校时)以及1KHz和500KHz(供闹钟电路)。此外,报时音乐电路的闹铃音乐也需要各种频率的脉冲,将在音乐电路中讨论。模块封装:内部电路:由内部电路可知,分频电路由2分频电路、24分频电路、1000分频电路构成,其中24分频电路由3分频电路和3个2分频电路组成的8分频电路构成。以下分别讨论:1.1 2分频电路(1)模块封装:(2)内部电路:2分频电路可以由多种方法实现,此处使用D触发器实现2分频。(3)仿真波形:1.2 3分频电路(1)模块封装:(2)内部电路:3分频电路可以由多种方法实现,此处使用74160组成模3计数器实现3分频。74160由Rco给置数信号,置数0111,即7,计数7,8,9。(3)仿真波形:1.3 24分频电路(1)模块封装:(2)内部电路:24分频电路由3分频电路与8分频电路组成,其中8分频由3个2分频电路组成,在此不再讨论。(3)仿真波形:1.4 1000分频电路(1)模块封装:(2)内部电路:1000分频电路由3个模10计数器组成,其中模10计数器由74160组成,在模1000计数器末端加了一些门电路,使得输出为,即当模10计数为0000,0001,0010,0011,0100时输出为1,其他输出为0,即04为1,59为0,从而实现1:1占空比。(3)仿真波形:2、计时电路计时电路包括秒,分,时,星期四个模块,依次进位。其中,秒和分模块类似,都是一个模60计数器,只是秒模块的进位为1Hz脉冲,而分模块的时钟为秒模块的进位;时模块是一个模24计数器,而星期则是一个特殊的模7计数器。计时电路示意如下:1Hz秒个位秒十位分个位分十位时个位时十位星期2.1 秒计时模块(1)模块封装:(2)管脚说明:输入:cou60为外部的1Hz脉冲,srd为清零信号。输出:o1至o4为秒个位,o5至o8为秒十位。sjm为秒向分的进位(3)内部电路:秒计时模块的实质是一个模60计数器。如图,前一个74160为个位,后一个为十位,每当个位计数到1001时,由0变为1,将十位的置位,十位的74160计1,当十位的计数到5(0101),个位的计数到9(1001)时,正好是60,此时置位两个计数器,重新由0开始,这样就完成了模60计数。74160置位端低电平有效,因此将59时个位的,十位的,与非之后送给。在0到59之间时,=1,无效;59时,=0,计数器将被置位为0。(4)仿真波形:2.2 分计时模块(1)模块封装:(2)管脚说明:输入:cou60为外部的1Hz脉冲,mrd为清零信号。输出:o1至o4为分个位,o5至o8为分十位。mjh为分向时的进位(3)内部电路、仿真波形:与秒计时模块相同,在此不再赘述2.3 小时计时模块(1)模块封装:(2)管脚说明:输入:cou24为外部的1Hz脉冲,hrd为清零信号。输出:o1至o4为时个位,o5至o8为时十位。hjd为时向星期的进位(3)内部电路:时计时模块是一个模24计数器。模24计数器原理与模60计数器类似,个位为3,十位为2时置位为0,即将个位的,和十位的经与非门接入。(4)仿真波形:3、校分校时保持清零电路3.1 校分校时保持模块(1)模块封装:(2)管脚说明:输入:2hz为外部脉冲,用来校分时;1hz为计时脉冲;sjmi为秒计时电路输出的进位;mjhi为分计时电路输出的进位;khou为校时开关;kmin为校分开关;kbao为保持开关输出:sge为秒计时电路输入的计时脉冲;sjmo为分计时电路的输入脉冲;mjho为时计时电路的输入脉冲(3)内部电路:可见当保持开关kbao为低电平时,正常计时;为高电平时秒个位无时钟信号输入,从而整个系统处于保持状态。当校分开关kmin=1时,秒不再计时,同时屏蔽了秒向分的进位输入,使得进位脉冲为2hz,从而实现快速校分;当校时开关khou=1时,秒不再计时,同时屏蔽了分向时的进位,进位脉冲为2hz,实现快速校时。本电路校时分的时候秒计时是停止的,这样做有利于精确的校分校时,以免进位打乱已经校好的时间。但是本电路有些许缺陷,这是为了实现校时校分时电路停止计时而产生的。当校时校分开关快速来回拨动时秒计时也会相应的增加,这是由于校时校分开关的来回拨动就相当于给了一个脉冲给秒计时电路,从而使得秒计时加1。但对于实际应用时这个缺陷影响不大,因为不会有人将校分、校时开关来回的拨动,一般校分校时过程开关仅来回一次,没有什么大的影响。3.2 清零电路模块清零开关kql接至分,秒,时及星期的清零端,当其为高电平时分秒时及星期同时清零。4、动态译码显示电路4.1 动态译码显示电路原理显示电路主要由数据选择器74151、译码器74138、计数器、显示译码器7447和数码显示管组成。显示电路示意图如下:用动态扫描显示法进行数据显示,即每次只显示一位,按照一定的显示时间间隔轮流显示。每个显示位均为四位二进制数,所以需要4片数选器;要显示的位有时分秒6位(HH,HL,MH,ML,SH,SL),加上星期显示1位(w),再加上一个空位,共8位。数选器的选择信号有三位,要用一个模8循环计数器作为数选器的地址选择端,供轮流选择带显示的数据;此外,还要用一个3-8译码器74138来选择数码管(DIG位)来显示对应的数据。4.2 动态译码显示模块(1)模块封装(2)管脚说明:输入:sl,sh,ml,mh,hl,hh,w分别为秒,分,时的个位和十位以及星期的显示输出,1khz为扫描频率,kalarm1为闹钟开关。输出:en6.0控制七个数码管的使能端,a至g为数码管的七段。(3)内部电路:计数器74161设计为模8的循环计数器,其输出既作为4片74151的控制端,又作为38译码器74138的控制端。当计数器计数到某一个数值时,四片74151同时选取对应位的输入组成计时器某一位的BCD编码,接入显示译码器7447,与此同时根据计数器的数值,74138译码器也通过数码管的使能端选择对应位有效,从而在实验箱上显现数据。扫描的频率为1KHz,因为人眼的视觉停留,会感觉七个数码管同时显示。此外,电路中还增加了一个闹钟开关kalarm,使其与秒,星期的使能输出相或。采用此设计的目的是使在设定闹钟时间时,用不到的秒与星期相应位的数码管不显示。即当kalarm=0时正常显示计时情况,显示星期、时、分、秒共7位数据;当kalarm=1时显示闹钟设定时间,仅显示8位数码管的中间4位,为时、分的个位和十位。这样能更好的区分正常计时与闹钟定时两种状态,同时也使得电路不受其它位数据变化带来的干扰。5、报时电路(1)模块封装(2)管脚说明:输入:sl,sh,ml,mh分别对应秒、分个位、十位的BCD码的相应位。500hz与1khz为报时电路的两种驱动频率;输出:接蜂鸣器;(3)内部电路:当计时到5953”, 5955”,5957”时,分别发出一声较低的蜂鸣声(500hz);当计时到5959”时,发出一声较高的蜂鸣声(1khz)。需要在某时刻报时,就在时刻输出信号1作为触发信号,选通报时脉冲信号进行报时。5953”对应的四个输出分别为:0101,1001,0101, 0011;5955”对应的四个输出分别为:0101,1001,0101, 0101;5957”对应的四个输出分别为:0101,1001,0101, 0111;5959”对应的四个输出分别为:0101,1001,0101,1001;可见,报时功能选择出的高电平输出端的分十位,分个位,秒十位均是相同的,即0101,1001,0101;但秒个位是不同的,对应于0011,0101,0111,1001;但报时的频率并不相同,设是报时函数,是500hz报时函数,是1khz报时函数。均为高电平时报时。则有=+。可以将函数写为:再加上前面的分十位,分个位,秒十位的约束条件,就可以化简得到:由此可以实现报时电路,可以有多种方式来完成以上公式。6、消颤开关组电路6.1 消颤开关模块(1)模块封装(2)管脚说明:输入:ki为开关输入;2hz为消颤延时频率输出:ko为开关输出;(3)内部电路:可见消颤开关其实就是一个D触发器,利用D触发器锁存开关的动作信号,并且屏蔽抖动。6.2 消颤开关组模块(1)模块封装(2)管脚说明:输入:2hz为消颤延时频率;kbao为保持开关输入;kxin为校星期开关输入;khou校时开关输入;kmin为校分开关输入;kql为清零开关输入;输出:kbao1为保持开关输出;kxin1为校星期开关输出;khou1校时开关输出;kmin1为校分开关输出;rd为清零开关输出;(3)内部电路: 可见,消颤开关组电路即把各开关的消颤电路集合在一起。7、基本计时电路综述 基本计时电路由前面已经讨论过的脉冲发生电路模块(分频电路)、动态显示译码模块和集计时校分报时于一体的计时部分模块。计时部分模块具体如下:(1)模块封装(2)管脚说明:输入:kbao0为保持开关输入;kxin0为校星期开关输入;khou0校时开关输入;kmin0为校分开关输入;kql0为清零开关输入;1hz为秒计时频率;2hz为校分时星期脉冲以及消颤开关组脉冲;500hz、1khz为报时频率脉冲输出:sl,sh,ml,mh,hl,hh,w分别为秒、分、时、星期的BCD码的相应位,用于输出到动态显示模块显示;fengming0为报时输出,接到蜂鸣器上; (3)内部电路:其中计时校分模块为计时模块与校分模块的结合,其模块封装及内部结构如下:内部电路即为前面所讨论的部分,在此不再赘述。四、闹钟电路子模块的设计原理1、闹钟开关消颤及校时校分清零电路(1)模块封装(2)管脚说明:输入:khou0校时开关输入;kmin0为校分开关输入;kql0为清零开关输入; 2hz为校分时脉冲以及消颤开关脉冲;输出: ml,mh,hl,hh分别为分、时的BCD码的相应位,用于输出到动态显示模块显示; (3)内部电路:可见,内部电路为两部分电路的封装,下面分别讨论:1.1 闹钟消颤开关组模块(1)模块封装(2)内部电路可见,闹钟消颤开关电路与计时部分一样,在此不再讨论;1.2 闹钟校时分清零模块(1)模块封装(2)内部电路由内部电路可见,闹钟的校时分清零模块是基于计时模块的。但是没有计时部分的复杂,此处相对于计时部分做了一点改动。首先,在电路中取消了分向时的进位。这样做是为了防止当我们已经校好小时再校分的时侯,有可能产生分向时的进位,这样会改变已经校好的小时,因此有必要取消。同时在实际应用中也没有进位的必要;其次,电路中只有定时频率2hz输入,加上没有秒向分的进位问题,故不需考虑相互之间的配合,校分校时部分相互之间是独立的,从而简化了控制电路。2、闹钟与计时校时分复用电路(1)模块封装(2)管脚说明输入:khou为校时开关输入;kxin为校分开关输入;kalarm为闹钟开关;输出:halarm,malarm分别为闹钟部分的校时、校分开关信号;hclock,mclock分别为计时部分的校时、校分开关信号;kalarm1,kalarm0为闹钟信号; 设计此电路的目的是为了实现校时、校分开关的复用功能,从而节约开关。即当kalarm=0时,电路输出的为计时电路的校分、校时开关信号;当kalarm=1时,电路输出的为闹钟设定时间的校时、校分信号。本电路的实现原理简单,仅为几个与门的使用,在此不做详细介绍。3、比较电路(1)模块封装(2)管脚说明输入:alm15.0为闹钟设定的分、时的十位和个位的BCD码;nor15.0为计时电路所计的时间的分、时的十位和个位BCD码;klj为闹铃开关,用于控制闹钟到设定时间时是否响闹铃;输出:comp为时间与闹钟设定的时间的比较判断值,相同时comp为1;(3)内部电路可见比较模块就是一个由异或非门组成的16位比较器,只有当计时输出与闹钟定时输出的每一位都相同时,四与门输出的comp为高电平。另,比较电路也可以由7485等数值比较器来实现比较功能。4、2选1显示复用电路(1)模块封装(2)管脚说明输入:kalarm为闹钟开关;nml,nmh,nhl,nhh为计时部分的分、时的个位十位BCD码输出;aml,amh,ahl,ahh为闹钟部分的分、时的BCD码输出输出:xml,xmh,xhl,xhh为2选1电路输出的复用分、时BCD码;(3)内部电路由内部电路可以看出,2选1显示复用电路的实质就是16位的2选1数据选择器,数据选择器由4个4位2选1数据选择器74157组成,通过闹钟开关kalarm选择输出的数据。当kalarm=0时,输出计时电路的分、时;当kalarm=1时,输出闹钟对应的BCD码;如果在闹钟的基础上再加上其他的功能,则显示复用电路就要变成3选1或4选1的选择电路,但是基本原理是一样的。5、报时音乐电路(1)模块封装(2)管脚说明输入:zhengdianbaoshi为整点报时电路输出的报时信号;comp为比较电路输出的判断信号;yinyue为音乐选择电路输出的音乐闹铃信号;输出:fengming接蜂鸣器;(3)内部电路报时音乐电路实质为音乐信号与整点报时信号的选择电路,电路中音乐信号通过comp选择是否输入。整点报时信号当到达整点时即有效,但是由comp信号控制是否输出,当comp=0,即闹铃未响时,整点报时信号正常输出给蜂鸣器;当comp=1,即闹铃响时,若此时有整点报时信号,则无法输出到蜂鸣器;如此设计的目的是为了防止闹铃响时,整点报时会影响闹铃音乐,因为实际情况中闹钟设定在整点的情况很普遍,为了在整点闹铃响时音乐不受影响,对于整点报时信号进行了屏蔽。同理也可以使得整点时对音乐进行屏蔽,其原理一样,主要就看不同的设计需要。6、音乐选择电路(1)模块封装(2)管脚说明输入:k8为音乐切换开关;48mhz为音乐生成电路的输入频率;输出:yinyue为输出的音乐信号;(3)内部电路可见音乐选择电路十分简单,仅仅是由一个开关所进行的选择。此处仅支持两首音乐的切换,同理可以设计许多音乐的切换功能,但是由于开关不足,就需要考虑开关的复用问题,故在此仅实现2首歌的切换。由以上分析可知,音乐闹铃的关键其实在于音乐的产生,下面将对此进行分析。7、音乐产生电路7.1 VHDL语言音乐模块(1)简述由于时间关系,并未学习VHDL语言,故由VHDL语言实现的音乐是直接运用的已经编好的程序,并不是自己设计的。但是音乐的产生过程究其本质,硬件实现和VHDL实现的原理是一样的,下面将就硬件实现音乐进行深入分析。VHDL音乐在此不做讨论。实验中共运用2个VHDL语言音乐,分别为梁祝和SUNSHINE,具体的VHDL语言在报告中不再赘述。(2)模块封装(3)管脚说明输入:48mhz为音乐生成电路的输入频率;输出:spk为输出音乐;7.2 硬件实现音乐模块(1)简述无论什么音乐,其硬件实现的原理是一样的。音乐是由不同频率的音频信号送入蜂鸣器产生的,而要想获得音乐效果,首先要获得音频,因为不同的音符对应于不同的频率,这个由频率发生电路产生;其次要让音频按照乐谱顺序依次发声,这个由译码器完成;最后,要让闹铃声在每次闹铃时都从头开始循环播放,所以需要带清零功能的循环计数器用来作为译码器的输入。将依次选中的位和对应频率脉冲相与之后,使得输出按一定规律变化的一连串不同频率的组合,即为音乐。其中频率发生电路即分频器,在前面已经讨论过,实现起来相对也简单,故音乐电路的重点是译码选择。实验中共实现了2个硬件音乐,分别为只要妈妈露笑脸和欢乐颂。在此以欢乐颂为主进行介绍。(2)欢乐颂本实验中音乐是欢乐颂开头一段,共有32个音符,故需要5-32译码器。实验软件中没有可以直接使用的5-32译码器,所以用一个2-4译码器74139和4个3-8译码器构成。由于不知道音符对应的频率,又无处可查,在此仅使用2khz,1khz,500hz,250hz,125hz来表示对应音符,这实际上并不是正确的频率,但是并不影响原理的实现,仅是实现出来的音乐听起来比较奇怪而已。模块封装内部电路分别为频率发生电路和译码选择电路;1频率发生电路模块封装:内部电路:内部即为各种分频器的组合,在此不再讨论。2 模32计数器模块封装:内部电路:模32计数器用于循环选择音符,原理同模24,模60计数器。35-32译码电路模块封装:内部电路:5-32译码器由一片74139和4片74138组成。74139的两个输入端为5为位译码的高两位,输出端用于选择4片74138中的对应一片。4译码选择电路模块封装:内部电路:电路将依次选中的位和对应频率脉冲相与之后,使得输出按一定规律变化的一连串不同频率的组合。上述电路即为音乐产生电路的关键部分,由以上电路可以实现任何音乐。假设一首音乐24个音符,则只需将以上电路改为模24计数器,译码器仍可用5-32译码器,但是仅需要24个选择,而后将依次选中的位与所设计的音乐中各音符对应的频率相与输出即可。不同音乐的其实现原理是相同的。(3)另一音乐的硬件实现电路实验时用音乐实现了两个音乐,在此将另一音乐的电路图展示于此。此电路为参考别人设计所做,但由于有了相应的音符对应的频率,实现的音乐更为成功。模块封装:内部电路:其中,music1为分频电路,分频电路如下,分别为1 (96分频)、2(81分频)、3(72分频)、4(64分频)、5(54分频)、6(48分频)和7(36分频)。在此不再讨论。yinyue为选择电路,yinyue电路内部如下:由电路图可以看出,电路的基本组成是一样的,仅仅是某些具体的设定不同。五、未实现功能的原理简述1、秒表秒表的毫秒位为100进制,秒位和分位为60进制,原理与计时器相同,只是多了毫秒位需要显示计时。由于开关不够使用,故需考虑复用问题,此处并未考虑,而是把闹钟电路的音乐选择开关作为秒表的开关来设计。保持开关与清零开关可以与计时闹钟部分的复用。秒表启动开关(k8为1时开启秒表并且显示计数,k8为0时关闭秒表并切换显示正常计数电路的值);K1是秒表电路的保持开关(k1=0是秒表正常工作,k1=1时保持,显示最后的示数);K2是秒表电路的清零开关(k2=0时正常工作,k2=1时清零)。同时秒表电路还需考虑显示电路的复用问题,其实现原理与闹钟的显示原理一样,仅需实现计时、闹钟、秒表3选1复用显示功能,在此亦不做深究。另由于一共有8位数码管,故也可直接将毫秒位放在秒的后面2位,如此则不需要考虑复用显示问题。由以上分析可以看出秒表的功能实现非常的简单,要实现其关键还是开关的复用问题。2、万年历万年历可以实现有显示年月日的功能,各用两个数码管显示,年只需显示最后两位,此外还应有快速较年月日的功能。要增加万年历功能的最大障碍是开关问题,做完基本电路、闹铃和秒表电路后,已经没有开关剩下,要实现万年历最关键在于开关的复用问题。而开关的复用则需对原来已经设计好的电路进行修改,这需要花费很多时间来进行电路的调整,故并未实现。万年历需要快速校准年、月、日,还要切换数码管显示,故至少需要四个开关。此处可将基本电路和闹铃电路的校分校时校星期开关与万年历的校日、校月、校年实现复用,而数码管切换显示开关则需另找一个开关实现复用。此外,显示也需实现复用,但是由于前面的闹钟功能已经实现了显示的复用,故仅需将前面的2选1译码显示电路改为4选1译码显示,以实现计时、闹钟、万年历、秒表功能复用显示。如此多的功能,要进行切换复用,开关复用仍是个主要的问题。解决了开关问题后其他部分实现相对简单,原理是对时的输出进位进行计数。由于存在每个月的天数不同,且与闰年也有关系,故可假定每月30天。日的实现是进行模30计数;月实现模12计数,月产生的进位给年;年可用模100计数。此外,每个月的实际天数功能也可以实现,可以对月份进行设定,即对于月份进行判断,使得月为1、3、5、7、8、10、12时实现模31计数,4、6、9、11实现模30计数,而2月则对需当前的年份进行判断(此处需用4位来表示年份),首先判断是否为100的倍数,若为100的倍数,则对其判断是否能被500整除,能则为29天,不能为28天;若不为100倍数,则判断能否被4整除,能则29天,不能则28天。要完全实现以上功能需要大量的电路,虽然其原理看似简单,但是要实现则要花费大量时间,又由于我仅是一人一组,要在短短的几天内要实现比较困难。3、模块化与接口设计本次实验在刚开始实现数字钟的基本计时功能时并未考虑太多,由于电路简单就直接进行电路的设计连接工作,而并为考虑要添加功能时应如何进行,故电路一开始把所有的模块均放在了一张电路图中,并未实现模块封装设计。这直接导致后来进行闹钟功能的拓展时我发现对于原有的电路不好进行修改,很多相同功能我并未实现封装成模块导致无法重复使用,同时很多电路无法直接进行修改,因为电路的连线并未留下足够的剩余空间来进行修改。这样做直接导致后来为了实现闹钟功能我又重新进行了设计连线,以上报告中的电路即为后来重新设计的电路。相比与原来的电路有了很大的进步,但是仍然存在以下问题:(1)各功能模块设计不够合理,各模块的功能不够明确,同一功能的实现却分散在多个模块之中;(2)封装了太多的模块,有些小电路根本无需封装,以致于修改一点电路就需要对许多的模块进行更新;(3)模块的封装仍未考虑增加功能时应如何操作,并未留下相应的可扩展空间及接口。由此导致功能扩展很难操作实现。如开关的复用并未实现在某一模块中,而是把开关分散到不同的子模块电路中,由许多不同的开关功能模块和开关复用模块共同实现,这直接导致在再增加功能时开关的复用很难实现,因为需要对前面的许多电路进行相应的修改,而每一个电路修改又需修改其需要模块封装,导致“牵一发而动全身”。这不得不说是电路设计不合理和考虑不周全导致的,用编程的概念说就是可扩展性差,程序结构不够清晰。由以上问题使得我思考EDA设计也应和编程一样,需要自顶向下的设计理念,首先应明确各个模块的具体功能,然后对于每一个功能模块在进行具体设计,并在设计时应考虑到功能的扩展而事先预留接口。这样一来当需要添加某功能时仅需设计好添加功能的相应模块,并使其与所用到的各功能模块的接口相连即可。六、程序下载、仿真与调试编译好的程序经过管脚设定后即可下载到FPGA芯片来进行调试。管脚设定如下:七、实验总结与感想1、实验过程中出现的问题小结此次EDA设计的题目是多功能数字钟设计,这与上学期的电子电工综合实验做的基本相同,电子电工综合实验是利用各种芯片实际搭建电路,而这次是用程序仿真,但其原理是相同的。同时上学期的EDA设计是用Multisim来实现模拟电路仿真,当时我的阶梯波发生器做的很好,自我感觉良好。所以本以为这次实验会比较简单,但事实并非如此,Quartus软件的使用与Multisim不是很一样,同时实验中出现了很多问题也很让我头疼。首先是第二天我已经将基本功能计时附加一个星期显示功能的电路做好了,但是由于我带了笔记本电脑去,而实验调试需要用实验室的电脑,所以我把程序拷贝到U盘后在实验室电脑上进行调试修改,但成功后我本该把程序从U盘拷贝到笔记本电脑,结果我却用笔记本的旧程序覆盖了U盘,而此时实验室的电脑已经被我给关了这使得我后来从头开始设计增加了闹钟功能电路,报告中给出的电路与我一开始设计的电路并不一样。第二个问题就是计时的问题,关于究竟是用异步时钟还是同步时钟,我犹豫了很久,有人说异步的会出现冒险,计时时会出现58秒进1或59进1的情况,又有人说会出现计时加速的情况,明明1Hz的频率但是计时时会出现速度变快的情况我一开始是异步的时钟,也出现了计时加速的问题,但是后来解决了,听别人说异步时钟当电路多了以后还会出现问题,我正准备改成同步的。结果又传来有人原来异步的没问题,改成同步的却58进1,60又进1的情况最后我觉得“不管异步还是同步,只要能计时准确就是好时钟”的想法,仍使用的异步时钟。第三个问题还是开关复用的问题,这是一直使我头疼的问题,由于电路开始设计的不合理,使得我要进行修改比较困难。再加上时间不足,直接导致我没有完成秒表和万年历功能的实现。第四个问题是我觉得很神奇,其出现的原因还是在于电路之间的互相影响。出现的问题是实验中我一共有4首音乐,2首VHDL语言,2首硬件实现,但是当我把一首硬件音乐接入电路时正常计时,没有任何问题;加入另一首欢乐颂时则会出现59秒进位的问题;而加入VHDL语言梁祝时则居然计时时加速了,1Hz计时变为了2Hz的速度;最后当我用2首VHDL音乐实现一个音乐选择功能时,将音乐选择电路接入后居然计时又正常了!虽然知道电路会影响到计时部分的正常工作,但是仅仅接入的不同的音乐居然会出现如此多的情况,这的确很神奇!2、实验感想通过本次EDA实验我巩固了数字电路的有关知识,并学会了如何使用Quartus II软件。实验做完后我觉得很有成就感,不管是上学期的阶梯波、电工电子综合实验的数字钟还是这个学期的数字钟,我对完成的结果都很满意。设计、连线、仿真、调试,我都全身心投入,虽然我是一个人一组,我完成了的并