资源描述:
《VHDL数字钟设计.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VHDL数字钟设计报告一、系统功能概述:1.进行一个具有‘时’、‘分’、‘秒’的十进制数计时功能,‘时’、‘分’、‘秒’各用两个数码管分别显示(小时从00~23,分、秒从00~59);2.可以进行手动校时,校分,校时完毕之后从校正点开始从新计时;3.具有定时功能,可以预设闹钟,并在预定的时间发出闹铃声;4.具有整点报时功能,即从59分50秒起,每隔2秒钟发出一次低音“嘟”的信号,连续5次,最后一次发出高音“嘀”的信号,此信号结束即达到整点。二、系统组成以及系统各部分的设计:1..⑴系统结构描述:输入输出端
2、口设置port(reset:instd_logic;----上升沿有效,用于改变工作状态sign:instd_logic;---高电平有效,用来控制校时,定时功能;clk:instd_logic;----计时脉冲;clk2:instd_logic;-----闹铃脉冲;hourmusic1:outstd_logic;hourmusic2:outstd_logic;music:outstd_logic;------闹铃端口;q5:outstd_logic_vector(3downto0);-------小时高
3、位出口;q4:outstd_logic_vector(3downto0);-------小时低位出口;q3:outstd_logic_vector(3downto0);-------分钟高位出口;q2:outstd_logic_vector(3downto0);-------分钟低位出口;q1:outstd_logic_vector(3downto0);-------秒钟高位出口;q0:outstd_logic_vector(3downto0)---------秒钟低位出口;);endclock;中间变量
4、设置signalqq5,qq4,qq3,qq2,qq1,qq0:std_logic_vector(3downto0);——用于计时,校时时‘时’、‘分’、‘秒’的对应中间变量;signalqqhh,qqhl,qqmh,qqml:std_logic_vector(3downto0);——用于定时时‘时’、‘分’、‘秒’的对应中间变量;signalqqq5,qqq4,qqq3,qqq2,qqq1,qqq0:std_logic_vector(3downto0);——用于显示时‘时’、‘分’、‘秒’的对应中间变量
5、;signalflag:std_logic_vector(2downto0);——用来标记计时,定时,校时的状态;signalmusica:std_logic;——闹铃的中间变量;signalhourmusic11,hourmusic22:std_logic;——整点报时的中间变量;signalk:std_logic;——用来控制整点报时;①计时电路:process(reset)-------------通过reset上升沿触发调整工作状态;beginif(reset'eventandreset='1')
6、thenifflag="100"then-----------若flag等于4,则清零,否则加1;flag<="000";elseflag<=flag+1;endif;endif;endprocess;process(clk,flag,sign)-------------用于计时,校时,定时;beginif(clk'eventandclk='1')thenk<=notk;-----------产生二分频,用来控制后面整点报时;ifflag="000"then------计时环节ifqq0="1001"th
7、enqq0<="0000";ifqq1="0101"thenqq1<="0000";ifqq2="1001"thenqq2<="0000";ifqq3="0101"thenqq3<="0000";ifqq4="1001"thenqq4<="0000";qq5<=qq5+1;elsifqq5="0010"andqq4="0011"thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;endif;elseqq3<=qq3+1;endif;elseqq2<=qq2+1;endif
8、;elseqq1<=qq1+1;endif;elseqq0<=qq0+1;endif;②校时电路:elsif(flag="001"andsign='1')then------校时ifqq4="1001"thenqq4<="0000";qq5<=qq5+1;elsifqq5="0010"andqq4="0011"thenqq4<="0000";qq5<="0000";elseqq4<=qq4+1;endif;elsif(flag