EDA 数字钟实验报告.doc_第1页
EDA 数字钟实验报告.doc_第2页
EDA 数字钟实验报告.doc_第3页
EDA 数字钟实验报告.doc_第4页
EDA 数字钟实验报告.doc_第5页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南 京 理 工 大 学EDA实验报告作 者:李隽学 号:0810210206学院(系):电子工程与光电技术学院专 业:电子信息工程指导教师: 蒋立平、花汉兵 2011 年 05 月 02日摘要利用QuartusII 7.0软件采用模块化设计方法设计一个数字钟。采用原理图和VHDL语言相结合的设计。软件仿真调试成功后编译下载至可编程实验系统SmartSOPC中进行硬件测试,实现并充分领略硬件设计软件化的精髓。关键词:QuartusII; 数字钟; 模块化; 原理图; VHDL; 可编程; 硬件Abstract Using the QuartusII software design a digital bell with the blocking method. The design takes schematic and VHDL language. After simulating and debugging successfully, translate and edit the code. Then, download the result to the programmable SmartSOPC system and test it in hardware. And Realize the soul of designing hardware by software.Keywords: QuartusII; digital bell; blocking method; schematic; VHDL; programmable; hardware目 录摘要 21设计要求 42工作原理 43子模块部分 5 3.1 脉冲发生电路 5 3.1.1 2分频模块 6 3.1.2 24分频模块 7 3.1.3 1000分频模块 7 3.2 计时模块 8 3.2.1 秒计时9 3.2.2分计时9 3.2.3 时计时93.3 控制电路10 3.4 动态显示模块 11 3.5 报时电路 12 3.6 音乐模块14 4. 扩展模块 22 5. 引脚封装 266实验中出现的问题及相应调试 277实验总结 278. 实验心得 289. 参考文献 281 设计要求1. 设计一个具有校时,校分,清零,保持和整点报时功能的数字钟;2. 数字钟的具体设计要求具有如下功能:(1) 数字钟最大计时显示23小时59分59秒;(2) 保持功能是要求在数字钟正常工作情况下,拨动开关K1为0可以使得数字钟保持原有显示,停止计时; (3) 在数字钟正常工作情况下,可以对其进行不断电复位,即拨动开关K2为0可以使得时、分、秒显示回零;(4) 在数字钟正常工作时可以对数字钟进行快速校时和校分。即拨动开关K3可以对分钟进行校正,拨动开关K4对小时进行校正;(5) 整点报时是要求数字钟在每小时整点到来进行鸣叫,鸣叫频率是在59分51秒、53秒、55秒、57秒时为500Hz,59分59秒时为1kHz;3. 在以上所述的基本功能的基础上,设计闹钟功能:闹钟功能是通过开关切换显示至闹钟界面,利用闹钟校时和校分,对闹钟时间设定,并且不影响数字钟计时,当计时到闹钟设定时间蜂鸣器播放乐乐曲;4. 对设计电路进行功能仿真,对其进行验证;2 工作原理总体来说,数字计时器可以由脉冲发生电路(即分频电路),计时电路,译码显示电路和控制电路等几部分构成,其中控制电路包含清零,校时和保持电路。基本部分的原理框图如下: 脉冲发生电路 校分校时电路 清零电路 闹钟设定模块 报时电路 译码显示电路 计时电路其中,脉冲发生电路将试验箱提供的48Mhz的频率分成电路所需要的频率;计时电路与动态显示电路相连,将时间显示在六个七段数码管上,并且驱动蜂鸣器整点报时;清零电路作用时,系统的分秒时同时归零;较分电路对时、分提供快速校时。闹钟设定模块时,闹钟只需设定闹钟的时和分,基本模块与正常计时电路里的校时校分电路相同。当设定的闹钟时间与时钟时间相同时,闹钟报时功能被启动,蜂鸣器将发出由VHDL语言编写的音乐。闹钟音乐经过1分钟后自动停止。3.1 脉冲发生电路脉冲发生电路将实验箱48MHZ的频率分频成1hz(供系统时钟),2hz(快速较分及音乐发生器)以及1khz和500hz(供闹钟电路)。模块封装:内部电路:由内部设计图可见,脉冲发生电路是由若干子模块搭建而成,分别为1000分频,2分频和24分频。3.1.1 2分频模块封装:内部电路:仿真波形:3.1.2 24分频模块封装:内部电路:由于时钟的小时模块也是模24的,所以在这里我将24分频与模24计数器的功能同时实现,由output24o口接74160十位的2q0实现24分频功能(占空比约为10:14),而1q3.0与2q3.0总线口实现模24计数器功能。仿真波形:3.1.3 1000分频模块封装:内部电路:为了提高占空比,我采用了74160百位的QC端作为输出,占空比约为4:6。仿真波形:3.2 计时电路计时电路包括秒,分,时三个模块,依次进位。其中,秒和分的模块类似,都是一个模六十计数器,只是秒模块的进位为1hz脉冲,而分模块的时钟为秒模块的进位;时模块是一个模24计数器。总体电路:3.2.1 秒计时模块模块封装:内部电路:其中impulsec为外部脉冲,clr为清零信号,1q3.0和2q3.0分别为秒钟的个位和十位,rco为秒钟向分钟的进位符号。仿真波形:3.2.2 分计时模块分计时模块同秒计时模块完全相同,在此不再赘述。3.2.3 时计时模块时计时模块已在3.1.2 24分频中有所介绍,在此不再赘述。总体时分秒计时仿真波形如下:3.3 控制电路模块封装:内部电路:其中k1为保持开关,向上拨则保持;k2为清零开关,向上拨则清零;k3为校分开关,向下拨则以2hz快速校分;k4为校时开关,向下拨则以2hz快速校分。输出enp接秒钟脉冲端;clr接时分秒清零端;mche接分脉冲端;hche接时脉冲端。由于采用的是开关控制时钟模式,需要在开关后接消颤开关,防止电路抖动。加上时分秒模块后,整体的控制电路如下所示。模块封装:内部电路:3.4 动态显示模块模块封装:内部电路:其中,sl3.0, sh3.0, ml3.0, mh3.0, hl3.0, hh3.0分别为秒的个、十位,分的个、十位及时的个、十位的编码输出,oaog为数码管的七段,p5.0控制6个数码管的使能端。计数器74160设计为模6的循环,其输出既作为4片74151的控制端,又作为38译码器74138的控制端。因为只有一片BCD译码器7447,所以当计数器到某一个数值时,四片74151同时选取对应位的一个输入组成计时器某一位的BCD编码接入显示译码器7447,与此同时根据计数器的数值,74138译码器也从六个显示管的使能端选择对应位有效,从而在实验箱上显现一个有效数据。扫描的频率为1KHz,因为人眼视觉停留的原因,会感觉六个数码管同时显示。3.5 报时电路模块模块封装:因为报时电路不需要用到小时部分,所以输入端只有分和秒的编码输出端,output端为500hz或1000hz的声音,接到蜂鸣器上。报时电路内部采用VHDL语言编写,代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity buzz is port(sl:in std_logic_vector(3 downto 0); sh:in std_logic_vector(3 downto 0); ml:in std_logic_vector(3 downto 0); mh:in std_logic_vector(3 downto 0); cl500:in std_logic; cl1k:in std_logic; output:out std_logic);end buzz;ARCHITECTURE behave of buzz isbegin process(sl) begin if(ml=9 and mh=5 and sh=5)then -59:53 or 59:55 or 59:57 if(sl=3 or sl=5 or sl=7)then output=cl500; -500hz elsif(sl=9)then -59:59 output=cl1k; -1000hz else output=0; end if; else output=0; end if; end process;end behave;至此,我完成了时钟的基本部分的设计,将以上的模块组装在一起,就形成了其基本功能,可以保持、清零、校分和校时,并能在整点报时。整体电路如下所示:3.6 音乐模块整体模块封装:其中48m接时钟频率48Mhz,buzz接蜂鸣器。内部电路亦采用VHDL语言编写,这里我自己写了一小段音乐,代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity jinglbell is port( inclk:in std_logic; spk:buffer std_logic; co0:out std_logic; co1:out std_logic; co2:out std_logic; co3:out std_logic; co4:out std_logic; co5:out std_logic; co6:out std_logic; co7:out std_logic); end jinglbell ;architecture behave of jinglbell is signal tone : std_logic_vector(10 downto 0); signal tone_count : std_logic_vector(10 downto 0); signal tone_index : integer range 0 to 15; signal clk10_count : std_logic_vector(17 downto 0); signal time : integer range 0 to 150; signal clk : std_logic; signal clk10 : std_logic; begin PROCESS(inclk) variable cnt1 : INTEGER RANGE 0 TO 23; BEGIN IF inclk=1 AND inclkevent THEN -determine the rhythm IF cnt1=11 THEN cnt1:=0; ELSE IF cnt16 THEN clk=1; ELSE clk=0; END IF; cnt1:=cnt1+1; END IF; END IF; END PROCESS; process(clk) begin if(clkevent and clk=1) then clk10_count=clk10_count+1; if(clk10_count=16#3fff#) then clk10=not clk10; end if; end if; end process; process(clk10) begin if(clk10event and clk10=1) then if(time=90) then time=0; else timetone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_indextone_index=0; end case; if(tone_index=1)then -control the LEDsco0=1; else co0=0; end if; if(tone_index=2)thenco1=1; else co1=0; end if; if(tone_index=3)thenco2=1; else co2=0; end if; if(tone_index=4)thenco3=1; else co3=0; end if; if(tone_index=5)thenco4=1; else co4=0; end if; if(tone_index=6)thenco5=1; else co5=0; end if; if(tone_index=7)thenco6=1; else co6=0; end if; if(tone_index=8)thenco7=1; else co7tonetonetonetonetonetonetonetonetonetone=11111111111; -others:no output end case; end process; process(clk) -control the frequence of the speaker begin if(clkevent and clk=1) then if(tone_count=16#7ff#) then tone_count=tone; if(tone2047) then spk=not spk; end if; else tone_count=tone_count+1; end if; end if; end process;end behave;这里可以看出用VHDL语言编写音乐模块的可修改性比用器件连接要大许多,可以随时根据自己喜好通过修改tone_index来改变曲调,编写曲子。这里我还编写了一段程序,控制8个LED灯根据不同的乐音亮灯。由于音乐模块和整点报时模块需要共用蜂鸣器,因此我加了一个开关控制音乐的响起,并加了一个或门来复用蜂鸣器。整点报时模块和音乐模块的电路如下图:自此本次实验我的整体电路设计完成,电路总图如下:4 扩展模块由于时间问题,原本预想的闹钟功能没有实现。设想闹钟和时钟分别计时,通过开关K6和K7调整时分、开关K8控制显示器显示正常时钟计时和闹钟固定显示,编写一个比较器程序来比较当前时钟显示与所定闹钟时间是否相同,相同则输出正脉冲与音乐发生器脉冲相与,音乐发生器发出音乐。音乐一分钟后自动停止。同时比较器完成向显示模块输入当前模式的小时和分钟功能。闹钟设时模块封装如下:其内部与时钟控制模块相类似,只是将时钟控制模块的K1和K2置为1,在此不做赘述。比较器的模块封装如下:比较器程序如下所示:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alarm is port(cha:in std_logic; aml:in std_logic_vector(3 downto 0); -alarm minutes & hours amh:in std_logic_vector(3 downto 0); ahl:in std_logic_vector(3 downto 0); ahh:in std_logic_vector(3 downto 0); ml:in std_logic_vector(3 downto 0); -clock minutes & hours mh:in std_logic_vector(3 downto 0); hl:in std_logic_vector(3 downto 0); hh:in std_logic_vector(3 downto 0); mlo:out std_logic_vector(3 downto 0); -output minutes & hours mho:out std_logic_vector(3 downto 0); hlo:out std_logic_vector(3 downto 0); hho:out std_logic_vector(3 downto 0); output:out std_logic);end alarm;ARCHITECTURE behave of alarm is signal ml0:std_logic_vector(3 downto 0); -the previous clock minutes & hours signal mh0:std_logic_vector(3 downto 0); signal hl0:std_logic_vector(3 downto 0); signal hh0:std_logic_vector(3 downto 0); signal ml1:std_logic_vector(3 downto 0); -the previous alarm minutes & hours signal mh1:std_logic_vector(3 downto 0); signal hl1:std_logic_vector(3 downto 0); signal hh1:std_logic_vector(3 downto 0); begin process(ml) begin ml0=0000; mh0=0000; hl0=0000; hh0=0000; ml1=0000; mh1=0000; hl1=0000; hh1=0000; if(hl=ahl and hh=ahh and ml=aml and mh=amh)then output=1; else output=0; end if; if(cha=0)then mlo=ml1; ml1=aml; mho=mh1; mh1=amh; hlo=hl1; hl1=ahl; hho=hh1; hh1=ahh; else mlo=ml0; ml0=ml; mho=mh0; mh0=mh; hlo=hl0; hl0=hl; hho=hh0; hh0=hh; end if; end process;end behave;其中输出mlo、mho、hlo和hho分别接显示电路的ml、mh、hl和hh,output与钟频相与后接音乐模块的inclk。加上闹钟模块后的电路总图如下:5 引脚封装6 实验中的问题及解决方法1、关于24分频一开始是想用3个2分频和1个3分频的电路组合形成24分频电路,实际效果也不错。后来当大家在一起讨论24分频的方法时,发现很多人用了74160来实现。我在思考了两种不同方法的时延性和复杂度后,决定采用74160的方法,并且由于小时计时也是采用模24计数器,我对这个24分频电路赋予了两个作用,即:24分频和小时计时。考虑到占空比的问题,我最终选择了十位的最低位作为分频输出。2、关于控制电路如何和时分秒计时系统结合的问题一开始时考虑将控制电路直接和整体23时59分59秒的模块相连,以控制其清零和保持。但校分和校时就无法通过整体来控制了。在咨询了一些人后我将小时、分钟和秒钟模块分开,并重新排列了控制电路,使之可以分别控制校分校时,并能同时执行保持与清零状态。3、关于音乐模块与闹钟模块复用蜂鸣器的问题开始时音乐模块与闹钟模块永远不能共存。若音乐能响则整

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论