




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、vhdl数字时钟设计数字时钟设计1、功能介绍1)具有时、分、秒计数显示功能,以24小时循环计时2)时钟计数显示时有LED灯的花样显示。3)具有调节小时、分钟及清零的功能。4)具有整点报时功能。2、总体方框图3、性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分60进制计数,即从0到59循环计数,时钟一一24进制计数,即从0至U23循环计数,并且在数码管上显示数值。2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7与键4进行任意的调整用为我们用的时钟信号均就是1HZ的,所以每LED灯变化一次就
2、来一个脉冲,即计数一次。3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答、滴答”的报警声音。5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。二、选择方案1、方案选择方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整与一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均就是采用6进制
3、与10进制的组合。方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整与一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟与秒均60进制。终上所述,考虑到试验时的简单性,故我选择了方案二。三、细化框图根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:时调整分调整花样显示分显示时显示控制单元LED显示整点报时四、编写程序、仿真与分析1、秒计数器1)VHDL语言描述程序见附录2)秒计数器的仿真波形图Mas'er I iM
4、e Har:17S25ns U Pointer 3DL52ut Irter*ai:3O5us Starttnd:elkresetdais'llB BB B IH C组 71 us 31 35 us 30 93 g 31.63 us32.27 us 32 rLnjTrLnnjULrLnnruWLnrLrwuwLnjPWCrJVL3)波形分析利用60进制计数器完成 个时钟脉冲则产生进位输出00到59的循环计数功能,当秒计数至59时,再来一,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。因为这种60进制的VHD印言就是很好写的,它并不复杂,再说我们必
5、须要学会这些基本的硬件语言的描写。2、分钟计数器1)VHDL语言描述程序见附录2)分钟计数器的仿真波形图3)波形分析小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。3、小时计数器1)VHDL语言描述程序见附录2)小时计数器的仿真波形图Kas'er Time Ear:17 825 Hi Pointer11.35 us hletvat11.83 us Starl:Enc:Value s 17.8311. us12.2S ux1Z.92 ui13. 55 "resetrLrLn njTrLn rLnnjn rLrLrLn rLrLrLn rLr
6、LruTHdauKit3)波形分析小时计数模块利用24进制计数器,通过分钟的进位信号的输入可实现从00到23的循环计数。4、整点报时报警模块1)VHDL语言描述程序见附录2)整点报时模块仿真波形图1)波形分析由图知对于整点报时模块,当分钟计数至59时来一个时钟脉冲则产生一个进位信号,分钟计数到00,此时产生报警信号持续一分钟。当有时钟脉冲时lamp显示灯就闪烁轮续点亮。五、全系统联调1、数字时钟系统原理图2、数字时钟系统波形图仿真六、附录(源程序)1、小时计数器VHDL语言源程序(底层文件)LIBRARYIEEE;useIEEE、STD_LOGIC_1164ALL;USEIEEE、STD_LO
7、GIC_UNSIGNEDALL;ENTITYhourISPORT(clk,reset:INSTD_LOGIC;daout:outSTD_LOGIC_VECTOR(5DOWNTO0);ENDENTITYhour;ARCHITECTUREfunOFhourISSIGNALcount:STD_LOGIC_VECTOR(5DOWNTO0);BEGINdaout<=count;PROCESS(clk,reset)BEGINIF(reset='0')THEN count<="000000”;ELSIF(clk'event and clk='1'
8、)THENIF(count(3 DOWNTO 0)="1001")THENIF(count<16#23#)THENcount<=count+7;elsecount<="000000”;END IF;ELSIF (count<16#23#)THEN count<=count+1;ELSEcount<="000000”;END IF;END IF(count(3 DOWNTO 0)=END IF;END IF(reset=END PROCESS;若reset=0,则异步清零否则,若clk上升沿到若个位计时恰好到“1001”
9、即923进制若到23D则复0若未到 23D,则count进1否则清零1001” )0')ENDfun;2、分钟计数器VHDL语言源程序(底层文件)LIBRARYIEEE;USEIEEE、STD_LOGIC_1164、ALL;USEIEEE、STD_LOGIC_UNSIGNE、DALL;ENTITYminuteISPORT(clk,clk1,reset,sethour:INSTD_LOGIC;enhour:OUTSTD_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0);ENDENTITYminute;ARCHITECTUREfunOFminuteISSI
10、GNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenhour_1,enhour_2:STD_LOGIC;enmin_1为59分时的进位信号BEGINenmin_2由clk调制后的手动调时脉冲信号串daout<=count;enhour_2<=(sethourandclk1);sethour为手动调时控制信号,高电平有效enhour<=(enhour_1orenhour_2);PROCESS(clk,reset,sethour)BEGINIF(reset='0')THEN若reset为0,则异步清零count<=&qu
11、ot;0000000"ELSIF(clk'eventandclk='1')THEN否则,若clk上升沿到IF(count(3DOWNTO0)="1001")THEN若个位计时恰好到“1001”即9IF(count<16#60#)THEN又若count小于16#60#,即60IF(count="1011001")THEN又若已到59Denhour_1<='1'则置进位为1count<="0000000"count复0ELSEcount<=count+7;若coun
12、t未到59D,则加7,即作“加6校正”ENDIF;使前面的16#60#的个位转变为8421BCD的容量ELSEcount<="0000000"count复0(有此句,则对无效状态电路可自启动ENDIF;ENDIF(count<16#60#)ELSIF(count<16#60#)THENcount<=count+1;若count<16#60#则count加1enhour_1<='0'after100ns;没有发生进位ELSEcount<="0000000"否则,若count不小于16#60#coun
13、t复0ENDIF;ENDIF(count(3DOWNTO0)=“1001”)ENDIF;ENDIF(reset=0)ENDprocess;ENDfun;3、秒钟计数器VHDL语言源程序(底层文件)LIBRARYIEEE;USEIEEE、STD_LOGIC_1164、ALL;USEIEEE、STD_LOGIC_UNSIGNE、DALL;ENTITYsecondISPORT(clk,reset,setmin:STD_LOGIC;enmin:OUTSTD_LOGIC;daout:OUTSTD_LOGIC_VECTOR(6DOWNTO0);ENDENTITYsecond;ARCHITECTUREfun
14、OFsecondISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);SIGNALenmin_1,enmin_2:STD_LOGIC;enmin_1为59秒时的进位信号BEGINenmin_2由clk调制后的手动调分脉冲信号串daout<=count;enmin_2<=(setminandclk);setmin为手动调分控制信号,高电平有效enmin<=(enmin_1orenmin_2);enmin为向分进位信号PROCESS(clk,reset,setmin)BEGINIF(reset='0')THENcount<=&qu
15、ot;0000000"ELSIF(clk'eventandclk='1')thenIF(count(3downto0)="1001")thenIF(count<16#60#)then又若IF(count="1011001")then又若已到enmin_1<='1'count<="0000000"ELSE未到59D若reset为0,则异步清零否则,若clk上升沿到若个位计时恰好到“1001”即count小于16#60#,即60H59D则置进位为1及count复0coun
16、t<="0000000"END IF;ELSIF(count<16#60#)then count<=count+1;enmin_1<='0'after 100 ns;ELSEcount<="0000000"END IF;END IF;count<=count+7;则加7,而+7=+1+6,即作“加6校正”ENDIF;ELSE若count不小于16#60#(即count等于或大于16#60#)count复0ENDIF(count<16#60#)若个位计数未到“1001”则转此句再判若count<
17、;16#60#则count加1没有发生进位,若count不小于16#60#count复0ENDIF(count(3DOWNTO0)=“1001”)ENDIF(reset=0)ENDPROCESS;ENDfun;4、整点报时报警模块VHDL语言源程序(底层文件)LIBRARYIEEE;USEIEEE、STD_LOGIC_1164、ALL;USEIEEE、STD_LOGIC_UNSIGNE、DALL;ENTITYalertISPORT(clk:INSTD_LOGIC;dain:INSTD_LOGIC_VECTOR(6DOWNTO0);speak:OUTSTD_LOGIC;lamp:OUTSTD_L
18、OGIC_VECTOR(2DOWNTO0);ENDalert;ARCHITECTUREfunOFalertISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALcount1:STD_LOGIC_VECTOR(1DOWNTO0);BEGINspeaker:PROCESS(clk)BEGINspeak<=count1(1);IF(clk'eventandclk='1')THENIF(dain="0000000")THENIF(count1>="10")THENcount1<="00"count1为三进制加法计数器ELSEcount1<=count1+1;ENDIF;ENDIF;ENDIF;ENDPROCESSspeaker;lamper:PROCESS(clk)BEGINIF(rising_edge(clk)TH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年广告设计师调研技巧试题及答案
- 广告设计师考试时尚与广告的结合试题及答案
- 关于纺织行业未来发展的考试试题及答案
- 基本卫生法规试题及答案
- 服装导购考试题及答案
- 提高纺织品检验员考试通过率试题及答案
- 广告设计师考试品牌差异化策略试题及答案
- 湖北省电赛试题及答案
- 童年小学生试题及答案
- 广告设计师需掌握的核心概念试题及答案
- 急性ST段抬高型心肌梗死溶栓治疗专家共识2024解读
- 服务消费券发放的精细化实施方案
- 2025年国家电力安全知识竞赛题库及答案(共50题)
- 团结协作青春展新姿
- 给幼儿园讲医疗知识
- 2024年共青团入团考试题库及答案
- 2024年《BIM技术介绍》课件
- 核心素养视域下小学道德与法治生活化教学策略探究
- 人教版八年级下《生命.生态.安全》教案
- 有理数的加减混合运算教学设计 人教版
- 中职学生心理健康教育专题讲座
评论
0/150
提交评论