北华航天工业学院《EDA技术综合设计》课程设计报告报告题目:利用VHDL语言进行数字钟的设计作者所在系部:电子工程系作者所在专业:自动化作者所在班级:B08221班作者姓名:杨怀勇指导教师姓名:崔瑞雪完成时间:2010-12-22内容摘要在现今社会,动手能力的要求越来越高。而作为在校的学生,更要把握机会提高自己的动手能力。而这次的课设更是给了我们这样的一个机会,。本次EDA实验课设的题目是利用VHDL语言进行数字钟的设计。其要求设计的数字钟去有如下功能:其一,具有时,分,秒计数显示功能,其中,要求以二十四小时循环及时;其二,具有清零,调节小时,分钟功能;其三,具有整点报时功能,而且在整点报时的同时LED灯花样显示。为了达到上述功能的实现,就要求我们对可编程逻辑器件,计数器,显示器有一个初步的了解,并且,能掌握它们的工作原理。另外,更是要理解和掌握EDA的VHDL语言的编程方法,否则,编程将无法进行。3目录一,内容摘要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。1二,课程设计任务书。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。2三,设计目的及该设计的硬件要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3四,根据设计要求决定的电路原理。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4五,数字钟各模块的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5(1)顶层文本的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6(2)秒计数器的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7(3)分计数器的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8(4)小时计数器的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9(5)报警文本的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10(6)时间数据扫描分时选择模块文本的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11(7)译码器文本的设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12六,数字钟各模块连接示意图。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。13七,课设心得体会。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。144课程设计任务书课题名称利用VHDL语言进行数字钟的设计完成时间12-2指导教师崔瑞雪职称教授学生姓名杨怀勇班级B08221总体设计要求和技术要点其一,具有时,分,秒计数显示功能,其中,要求以二十四小时循环及时;其二,具有清零,调节小时,分钟功能;其三,具有整点报时功能,而且在整点报时的同时LED灯花样显示。工作内容及时间进度安排首先,对各模块编程,并且对VHDL语言编写的程序进行编译;其次,对各模块进行打包,封装;最后,将各模块连接,生成数字钟示意图,并编译,仿真,进行电路板连接及观察电路板的显示。课程设计成果1.与设计内容对应的软件程序2.课程设计报告书3.成果使用说明书4.设计工作量要求5设计目的及该设计硬件要求1,设计目的(1),掌握多位计数器相连的方法;(2),掌握十进制,六进制,二十四进制计数器的设计方法;(3),巩固多位共阴极扫描显示数码管的驱动及编码;(4),掌握扬声器的驱动;(5),掌握LED灯的花样显示;(6),掌握CPLD技术的层次化结构化设计。2,设计硬件要求主芯片EPF10K10LC84-3;8个LED显示灯;蜂蜜器;8位8段扫描共阴极数码显示管;3个按键开关(清零,调小时,调分钟)。根据设计要求决定电路原理在单一CPLD芯片EPF10K10上集成如下电路模块。1)时钟计数:秒——六十进制BCD码计数;分——六十进制BCD码计数;时——二十四进制BCD码计数;同时整个计数器有清零,调分,调时功能。在接近整数时间能提供报时信号。2)具有驱动8位8段共阴极扫描数码管的片选驱动信号输出和8段字型译码输出。3)蜂鸣器在整点时有报时驱动信号产生。64)LED灯在整点时有花样显示信号产生。数字钟各模块设计(1)顶层文本设计程序libraryieee;useieee.std_logic_1164.all;entitychock_topisport(clk,reset,setmin,sethour,clkdsp:instd_logic;speaker:outstd_logic;lamp:outstd_logic_vector(2downto0);sel:outstd_logic_vector(2downto0);a,b,c,d,e,f,g,dpout:outstd_logic);endchock_top;architectureaofchock_topisCOMPONENTsecondport(clk,reset,setmin:INSTD_LOGIC;daout:outstd_logic_vector(6downto0);enmin:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTminuteport(clk,clk1,reset,sethour:INSTD_LOGIC;enhour:OUTSTD_LOGIC;daout:outstd_logic_vector(6downto0));ENDCOMPONENT;COMPONENThourport(clk,reset:INSTD_LOGIC;daout:outstd_logic_vector(5downto0));ENDCOMPONENT;COMPONENTalertport(clk:INSTD_LOGIC;dain:instd_logic_vector(6downto0);lamp:outstd_logic_vector(2downto0);7speak:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTseltimeport(clk1,reset:INSTD_LOGIC;sec,min:instd_logic_vector(6downto0);hour:instd_logic_vector(5downto0);dp:outstd_logic;daout:outstd_logic_vector(3downto0);sel:OUTSTD_LOGIC_vector(2downto0));ENDCOMPONENT;COMPONENTdeledport(num:INSTD_LOGIC_vector(3downto0);led:outstd_logic_vector(6downto0));ENDCOMPONENT;signalenmin_re,enhour_re:std_logic;signalsecond_daout,minute_daout:std_logic_vector(6downto0);signalhour_daout:std_logic_vector(5downto0);signalseltime_daout:std_logic_vector(3downto0);signalledout:std_logic_vector(6downto0);begina=ledout(6);b=ledout(5);c=ledout(4);d=ledout(3);e=ledout(2);f=ledout(1);g=ledout(0);u1:secondportmap(reset=reset,clk=clk,setmin=setmin,enmin=enmin_re,daout=second_daout);u2:minuteportmap(clk=enmin_re,clk1=clk,reset=reset,sethour=sethour,enhour=enhour_re,daout=minute_daout);u3:hourportmap(clk=enhour_re,reset=reset,8daout=hour_daout);u4:alertportmap(clk=clk,dain=minute_daout,speak=speaker,lamp=lamp);u5:seltimeportmap(clk1=clkdsp,reset=reset,sec=second_daout,min=minute_daout,hour=hour_daout,daout=seltime_daout,dp=dpout,sel=sel);u6:deledportmap(num=seltime_daout,led=ledout);enda;(2)秒计数器文本设计程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitysecondisport(clk,reset,setmin:instd_logic;enmin:outstd_logic;daout:outstd_logic_vector(6downto0));endentitysecond;architecturefunofsecondissignalcount:std_logic_vector(6downto0);signalenmin_1,enmin_2:std_logic;begindaout=count;enmin_2=(setminandclk);enmin=(enmin_1orenmin_2);process(clk,reset,setmin)9beginif(reset='0')thencount=0000000;elsif(clk'eventandclk='1')thenif(count(3downto0)=1001)thenif(count16#60#)thenif(count=1011001)thenenmin_1='1';count=0000000;elsecount=count+7;endif;elsecount=0000000;endif;elsif(count16#60#)thencount=count+1;enmin_1='0'after100ns;elsecount=0000000;endif;endif;endprocess;endfun;(3)分计数器文本设计程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityminuteisport(clk,clk1,reset,sethour:instd_logic;enhour:outstd_logic;daout:outstd_logic_vector(6downto0));endentityminute;architecturefunofminuteissignalcount:std_logic_vector(6downto0);signalenhour_1,enhour_2:std_logic;10begindaout=count;enhour_2=(sethourandclk1);enhour=(enhour_1orenhour_2);process(clk,reset,sethour)beginif(r