《VHDL课程设计》实验报告多功能数字电子钟姓名:班级:学号:指导老师:成绩:完成时间:2008年1月4日星期五完成地点:502机房一、实验目的1.学习数字系统设计的自顶向下设计法及控制器的设计。2.加深利用EDA技术实现数字系统的体会。二、实验仪器及器件1.EDA开发软件(1套)2.微机(1台)3.实验开发系统(1台)4.其他器件与材料(若干)三、实验要求及设计方案1.设计一个具有24进制计时、显示、整点报时、时间设置和闹钟功能的数字钟,要求时钟的最小分辨率时间为1s。2.数字钟的设计方案如下:系统输入:mode为计时显示和闹钟定时显示转换输入;set为校时和定时设置的时、分、秒转换输入;k为校时和定时设置的时、分、秒手动加1输入;clk为时钟信号;reset为系统复位信号。输入信号均由按键产生。系统输出:LED显示输出;蜂鸣器(bell)声音信号输出。3.多功能数字钟系统功能的具体描述如下:计时:正常工作状态下,每日按24小时计时制计时并显示,蜂鸣器逢整点报时。校时:在计时显示状态下,按下“set键”,进入“小时”校时状态,再次按下“set键”,进入“分”校时状态,继续按下“set键”,进入“秒”校时状态,第四次按下“set键”又回复到正常计时显示状态。1)“小时”校时状态:进入“小时”校时状态后,显示“小时”的数码管闪烁,每按动“k”键一次,“小时”+1,若不按动“k”键则小时数不变,一直按下“k”键则小时数一4Hz的频率递增计数。2)“分”校时状态:进入“分”校时状态后,显示“分”的数码管闪烁,每按动“k”键一次,“分”+1,若不按动“k”键则分数不变,一直按下“k”键则分数一4Hz的频率递增计数。3)“秒”校时状态:进入“秒”校时状态后,显示“秒”的数码管闪烁,每按动“k”键一次,“秒”+1,若不按动“k”键则秒数不变,一直按下“k”键则秒数一4Hz的频率递增计数。整点报时:蜂鸣器在“59”分钟的第51、53、55、57秒发出频率为512Hz的低音,在“59”秒发出频率为1024Hz的高音,结束时为整点。显示:采用8个LED数码管分别显示时、分、秒并且他们之间用“—”隔开。闹钟:闹钟定时时间到,蜂鸣器发出周期为1s的滴、滴声,持续时间为10秒;闹钟定时显示。闹钟定时设置:在闹钟显示状态下,按下“set键”,进入“小时”校时状态,再次按下“set键”,进入“分”校时状态,继续按下“set键”,进入“秒”校时状态,第四次按下“set键”又回复到闹钟显示状态。闹钟的时、分、秒设置过程和计时设置相同。计时显示和闹钟显示之间的转换:按动“mode”键,数字钟将在计时显示和闹钟定时显示之间转换。4)多功能数字钟系统结构逻辑框图如下:5)控制器的MDS图如下:s0s0s0s1s2s3s7s6s5s4mode=0mode=0set=0set=0set=0set=0set=0set=0set=0S0:显示计时时间S1:调计时的时S2:调计时的分S3:调计时的秒S4:显示闹钟时间S5:调闹钟的时S6:调闹钟的分S7:调闹钟的秒控制器setkresetclk计时校时电路显示选择控制电路动态显示电路分频器clk3f1024f4f闹钟定时比较电路蜂鸣器modeset=0四、各功能模块的源程序代码:--CONTOR模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitycontorisport(clk,k,set,reset,mode:instd_logic;chs,cht,cms,cmt,css,cst,flashh,flashm,flashs,sel_show:outstd_logic);endcontor;architecturecontor_archofcontoristypestatesis(s0,s1,s2,s3,s4,s5,s6,s7);signalcurrent_state,next_state:states;beginprocess(reset,clk,next_state)beginif(reset='1')thencurrent_state=s0;elsif(clk'eventandclk='1')thencurrent_state=next_state;endif;endprocess;process(current_state,k,set)begincasecurrent_stateiswhens0=flashh='0';flashm='0';flashs='0';cht='0';cmt='0';cst='0';chs='0';cms='0';css='0';sel_show='1';if(mode='0')thennext_state=s4;elsif(k='1'andset='0')thennext_state=s1;elsenext_state=s0;endif;whens1=flashh='1';flashm='0';flashs='0';cht='1';cmt='0';cst='0';chs='0';cms='0';css='0';sel_show='1';if(set='0')thennext_state=s2;elsenext_state=s1;endif;whens2=flashh='0';flashm='1';flashs='0';cht='0';cmt='1';cst='0';chs='0';cms='0';css='0';sel_show='1';if(set='0')thennext_state=s3;elsenext_state=s2;endif;whens3=flashh='0';flashm='0';flashs='1';cht='0';cmt='0';cst='1';chs='0';cms='0';css='0';sel_show='1';if(set='0')thennext_state=s0;elsenext_state=s3;endif;whens4=flashh='0';flashm='0';flashs='0';cht='0';cmt='0';cst='0';chs='0';cms='0';css='0';sel_show='0';if(mode='0')thennext_state=s0;elsif(k='1'andset='0')thennext_state=s5;elsenext_state=s4;endif;whens5=flashh='1';flashm='0';flashs='0';cht='0';cmt='0';cst='0';chs='1';cms='0';css='0';sel_show='0';if(set='0')thennext_state=s6;elsenext_state=s5;endif;whens6=flashh='0';flashm='1';flashs='0';cht='0';cmt='0';cst='0';chs='0';cms='1';css='0';sel_show='0';if(set='0')thennext_state=s7;elsenext_state=s6;endif;whens7=flashh='0';flashm='0';flashs='1';cht='0';cmt='0';cst='0';chs='0';cms='0';css='1';sel_show='0';If(set='0')thennext_state=s4;elsenext_state=s7;endif;endcase;endprocess;endcontor_arch;--*********************TIMER模块********************--********MUX2-1模块********libraryieee;useieee.std_logic_1164.all;entitymux2_1isport(d0,d1,en:instd_logic;sel:instd_logic;y:outstd_logic);endmux2_1;architecturemux2_1_archofmux2_1isbeginprocess(d0,d1,sel)beginif(sel='0')theny=d0;elsif(sel='1'anden='0')theny=d1;endif;endprocess;endmux2_1_arch;--*************cnt60模块*****libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt60isport(clkin:instd_logic;mh,ml:bufferstd_logic_vector(3downto0);co:bufferstd_logic);endminute;architecturecnt60xofminutecnt60isbeginprocess(clkin)beginif(rising_edge(clkin))thenif(mh=0101andml=1001)thenmh=0000;co='1';ml=0000;elsif(ml=1001)thenml=0000;mh=mh+1;co='0';elseml=ml+1;co='0';endif;endif;endprocess;endcnt60x;――*****************Time_com模块*********libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitytime_comisport(hh,mh,sh,hl,ml,k:instd_logic_vector(3downto0);chs,cms,css,f4:instd_logic;bsg,bmg,bhg,bsd,bmd,bhd:bufferstd_logic_vector(3downto0);comout:outstd_logic);endtime_com;architecturetime_comxoftime_comisbegincom:process(hh,mh,sh,hl,ml)beginif(bhg=hhandbhd=hlandbmg=mhandbmd=mlandbsg=sh)thencomout='1';elsecomout='0';endif;endprocess;set:process(f4)beginif(f4'eventandf4='1')thenif(chs='1'andk='0')thenif(bhg=0010andbhd=0011)thenbhd=0000;bhg=0000;elsif(bhd=1001)thenbhd=0000;bhg=bhg+1;elsif(bhd=0000orbhd=0001orbhd=0010orbhd=0011orbhd=0100orbhd=0101orbhd=0110orbhd=0111orbhd=1000)thenbhd=bhd+1;endif;endif;endif;endprocess;process(f4)beginif(f4'eventandf4='1')thenif(cms='1'andk='0')thenif(bmg=0101and