基于eda数字时钟设计课程设计论文.docx
《基于eda数字时钟设计课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于eda数字时钟设计课程设计论文.docx(24页珍藏版)》请在冰豆网上搜索。
基于eda数字时钟设计课程设计论文
西安建筑科技大学课程设计(论文)任务书
专业班级:
学生姓名:
指导教师(签名):
一、课程设计(论文)题目
数字时钟设计
二、本次课程设计(论文)应达到的目的
培养自己逻辑设计能力和采用EDA方法进行设计的思想。
三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)
1.设计一个具有时,分,秒,计数显示功能并以24小时循环计时和清零,调节小时、分钟功能及整点报时功能,整点报时的同时LED灯花样显示的数字时钟。
2.完成全部流程:
设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、时序仿真、下载验证等。
四、应收集的资料及主要参考文献
[1]潘松.EDA技术与VHDL(第4版).北京:
清华大学出版社,2013.80~86.
[2]阎石.数字电子技术基础.北京:
高等教育出版社,1998.46~54.
[3]谭会生.EDA技术及应用.西安:
西安电子科技大学出版社,2001.187~196.
[4]潘松,王国栋.基于EDA技术CPLD/FPGA应用前景.北京:
清华大学出版社,1993.35~74.
[5]邢建平,曾繁泰.VHDL程序设计教程.北京:
清华大学出版社,2005.38~47.
5、审核批准意见
教研室主任(签字)
摘要
日常生活中数字时钟非常常见,而数字时钟设计的实现方法有很多种,比如可以用单片机实现,也可以通过画电路控制原理图实现。
但是本次课程设计利用EAD技术实现,利用QuartusII软件设计一个数字时钟,进行电路设计和仿真调试,实现了计时,校时,清零,显示和整点报时等多种基本功能,并下载到实验仪器进行调试和验证。
在本次课程设计的过程中,根据设计要求和所要达到的目的,利用QuartusⅡ软件成功仿真出了数字时钟的各个信号状态的波形,并且在得到仿真波形的同时给出了分析结果。
关键词:
数字时钟,VHDL,QuartusⅡ,仿真波形
Abstract
Digitalclockindailylifeisverycommon,andtherealizationofdigitalclockdesignmethodhasmanykinds,suchascanbeachievedwithasinglechip,canalsobeachievedbydrawingcircuitcontrolschematic.Butthecurriculumdesignusingeadtechnologydesign,usingQuartusIIsoftwaretodesignadigitalclock,anddebugthecircuitdesignandsimulation,hasrealizedthetime,school,school,clear,keepandthewholepointtimekeepingandotherbasicfunctions,anddownloadtoexperimentinstrumenttestingandverification.Inthecurriculumdesignprocess,accordingtothedesignrequirementsandtoachievethepurposeof,usingQuartusIIsoftwaresimulationwaveformsofthedigitalclockofeachstateofthesignallamp,andgetwaveformsimulationandanalysisresultisgiven.
Keywords:
Digitalclock,VHDL,QuartusII,simulationwaveforms
目录
一.绪论1
二.数字时钟设计原理2
2.1QuartusⅡ软件介绍2
2.2数字时钟设计原理2
三.设计要求和目的4
3.1设计要求4
3.2设计目的4
四.电路设计方案分析5
4.1数字时钟总体设计状态图5
4.2数字时钟总设计电路图6
4.3方案论证分析6
4.4子模块电路设计原理6
4.4.1时、分、秒计数显示电路原理7
4.4.2数码管扫描片选驱动模块14
4.4.3整点报时驱动电路18
4.4.4按键抖动消除电路模块20
五.综合仿真测试过程及结果23
5.1全程综合与编译23
5.2仿真测试23
5.3仿真波形图24
六.总结27
参考文献28
一.绪论
人类社会已进入到高度发达的信息化社会。
信息化社会的发展离不开电子信息产品开发技术、产品品质的提高和进步。
电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。
实现这种进步的主要原因就是电子设计技术和电子制造技术的发展,其核心就是电子设计自动化(EDA,ElectronicsDesignAutomation)技术,EDA技术的发展和推广应用又极大地推动了电子信息产业的发展。
为保证电子系统设计的速度和质量,适应“第一时间推出产品”的设计要求,EDA技术正逐渐成为不可缺少的一项先进技术和重要工具。
目前,在国内电子技术教学和产业界的技术推广中已形成“EDA热”,完全可以说,掌握EDA技术是电子信息类专业学生、工程技术人员所必备的基本能力和技能。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。
数字钟的设计方法有许多种,例如,可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机/FPGA来实现电子钟等等。
这些方法都各有其特点,其中利用EDA技术实现的电子钟具有编程灵活,并便于功能的扩展。
EDA技术是用于电子产品设计中比较先进的技术,可以代替设计者完成电子系统设计中的大部分工作,而且可以直接从程序中修改错误及系统功能而不需要硬件电路的指示,及缩短了研发周期,又大大节约了成本,受到了电子工程师的青睐。
因此,本设计中采用了EDA技术,应用目前广泛应用的VHDL硬件描述语言,实现数字时钟的设计,利用QuartusⅡ集成开发环境进行综合、仿真、完成系统的控制作用。
二.数字时钟设计原理
2.1QuartusⅡ软件介绍
本次设计主要用的是QuartusⅡ仿真软件,在该软件里创建工程,编写VHDL语言,编译成功后并仿真出波形的,下面主要介绍一下QuartusⅡ软件。
QuartusII是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。
QuartusII软件支持原理图文件或VHDL语言文件的输入,在本次设计中主要是用的VHDL语言文件输入。
QuartusII可以产生并识别EDIF网表文件、VHDL网表文件和VerilogHDL网表文件,为其它EDA工具提供了方便的接口;可以在QuartusII集成环境中自动运行其它EDA工具。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
QuartusII软件的开发流程可概括为以下几步:
设计输入、设计编译、设计定时分析、设计仿真和器件编程下载。
本次课程设计由于硬件设施原因只做到仿真波形这儿。
2.2数字时钟设计原理
主要原理是将第一全局时钟CLK1的跳线器接1Hz,第二全局时钟CLK2的跳线器接1024Hz,第三全局时钟CLK3的跳线器接32768Hz。
拨位开关KD1为清0控制开关(高电平有效),KD2、KD3分别为小时调节,分钟调节允许端(低电平允许调节,高电平禁止调节/正常计时)。
按键K2、K3分别为小时调节、分钟调节按键(仅当KD2、KD3为低电平允许调节时有效),只能加调节。
数码管SM6-SM1分别显示小时,分钟,秒。
当数字时钟计时至**h59min51s时,扬声器开始鸣叫报时。
其中,51s、53s、55s、57s为低音,59s为高音。
LED1-LED9在51s-59s时依次闪烁。
在QuartusII软件中测试出仿真波形,并进行观测分析,最后再进行的结果分析。
3.设计要求和目的
3.1设计要求
本次设计一个数字时钟主要具有以下功能:
1.时,分,秒,计数显示功能,以24小时循环计时。
2.清零,调节小时、分钟功能。
3.整点报时功能,整点报时的同时LED灯花样显示。
3.2设计目的
完成一个数字时钟设计,按照课程设计的具体要求,综合运用在EDA中学到的逻辑知识,通过查阅各种资料和文献,能够设计出具体的方案去实现,在整个设计的过程中,要求培养自己的逻辑设计能力和采用EDA方法进行设计的思想;掌握CPLD/FPGA器件的开发应用,掌握QuartusⅡ软件的应用,会用该软件进行仿真测试和时序波形图的仿真。
图3-1数字时钟示意图
四.电路设计方案分析
4.1数字时钟总体设计状态图
根据总体设计要求,经过分析知道,数字时钟具有:
时,分,秒,计数显示功能,以24小时循环计时;清零,调节小时、分钟功能,所以状态图如图4-2所示:
图4-1数字时钟工作状态图
4.2数字时钟总设计电路图
图4-2数字时钟总设计电路图
4.3方案论证分析
根据总体上的设计思路画出状态图后,下边画具体的流程图就比较清晰了,根据状态图我们组按照这个大体上的思路和方案一步步的编写程序,程序编好后开始编译并调试错误,直到编译完全成功后才测试仿真波形,观察波形,经过认真分析,得到了我们最终要实现的数字时钟。
4.4子模块电路设计原理
将各个程序进行顶层设计并进行封装后连接实验电路图,编译程序直至没有错误后便开始下边的仿真波形测试和结果分析。
4.4.1时、分、秒计数显示电路原理
时、分、秒计数显示电路以24h转换计时,其中second模块为60进制BCD码技术电路,实现秒计时功能;minute模块为60进制BCD码技术电路,实现分计时电路;HOUR模块为24进制BCD码计数电路,实现小时计时功能。
整个计数器具有清0、调分和调时的功能。
(1)秒计时器模块:
给一个秒脉信号,显示秒钟。
封装图:
图4-3秒计时器封装图
VHDL程序:
LIBBARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecondIS
PORT(reset,clk,clk2,setmin:
INSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
enmin:
OUT_STD_LOGIC);
ENDsecond;
ARCHITECTUREBEHAVOFsecondIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCOUNTER:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCARRY_OUT1:
STD_LOGIC:
SIGNALCARRY_OUT2:
STD_LOGIC;
BEGIN
P1:
PROCESS(reset,clk)
BEGIN
IF(reset='0')RHEN
COUNT<="0000";
COUNTER<="0000";
ELSIF(clk'EVENTANDclk='1')THEN
IF()COUNTER<5)THEN
IF(COUNT=9)THEN
COUNT<="0000";
COUNTER<=COUNTER+1;
ELSE
COUNT<=COUNT+1;
ENDIF;
CARRY_OUT1<='0';
ELSE
IF(COUNT=9)THEN
COUNT<="0000";
COUNTER<="0000";
CARRY_PUT<='1';
ELSE
COUNT<=COUNT+1;
CARRY_OUT1<='0';
ENDIF;
ENDIF;
ENDIF;
IF(clk2'EVENTANDclk2='1')THEN
enmin<=CARRY_OUT1ORsetmin;
ENDIF;
ENDPROCESS;
daout(7DOWNTO4)<=COUNTER;
daout(3DOWNTO0)<=COUNT;
ENDBEHAV;
(2)分计时器模块:
给一个分脉冲信号,显示分钟。
封装图:
图4-4分计时器封装图
VHDL程序:
LIBBARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(reset,clk,clk2,setopur:
INSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
enhour:
OUT_STD_LOGIC);
ENDminute;
ARCHITECTUREBEHAVOFminuteIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCOUNTER:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCARRY_OUT1:
STD_LOGIC:
SIGNALCARRY_OUT2:
STD_LOGIC;
SIGNALSETHOUR1:
STD_LOGIC;
BEGIN
P1:
PROCESS(reset,clk)
BEGIN
IF(reset='0')RHEN
COUNT<="0000";
COUNTER<="0000";
ELSIF(clk'EVENTANDclk='1')THEN
IF(COUNTER<5)THEN
IF(COUNT=9)THEN
COUNT<="0000";
COUNTER<=COUNTER+1;
ELSE
COUNT<=COUNT+1;
ENDIF;
CARRY_OUT1<='0';
ELSE
IF(COUNT=9)THEN
COUNT<="0000";
COUNTER<="0000";
CARRY_PUT<='1';
ELSE
COUNT<=COUNT+1;
CARRY_OUT1<='0';
ENDIF;
ENDIF;
ENDIF;
IF(clk2'EVENTANDclk2='1')THEN
SETHOUR1<=SETHOUR;
ENDIF;
ENDPROCESS;
P2:
PROCESS(clk)
BEGIN
IF(clk'EVENTANDclk='0')THEN
IF(COUNTER=0)THEN
IF(COUNT=0)THEN
CARRY_OUT2<='0';
ENDIF;
ELSE
CARRY_OUT2<='1';
ENDIF;
ENDIF;
ENDPROCESS;
daout(7DOWNTO4)<=COUNTER;
daout(3DOWNTO0)<=COUNT;
enhour<=(CARRY_OUT1ANDCARRY_OUT2)ORSETHOUR1;
ENDBEHAV
(3)时计时器模块:
给一个时脉冲信号,显示小时。
封装图:
图4-5时计时器封装图
VHDL程序:
LIBBARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYHOURIS
PORT(reset,clk:
INSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDHOUR
ARCHITECTUREBEHAVOFHOURIS
SIGNALCOUNT:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCOUNTER:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P1:
PROCESS(reset,clk)
BEGIN
IF(reset='0')RHEN
COUNT<="0000";
COUNTER<="0000";
ELSIF(clk'EVENTANDclk='1')THEN
IF(COUNTER<2)THEN
IF(COUNT=9)THEN
COUNT<="0000";
COUNTER<=COUNTER+1;
ELSE
COUNT<=COUNT+1;
ENDIF;
ELSE
IF(COUNT=3)THEN
COUNT<="0000";
COUNTER<="0000";
ELSE
COUNT<=COUNT+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
daout(7DOWNTO4)<=COUNTER;
daout(3DOWNTO0)<=COUNT;
ENDBEHAV
4.4.2数码管扫描片选驱动模块
数码管扫描片选驱动模块有8位7段共阴极扫描数码管的片选驱动信号输出和7段码输出。
SELTINE模块产生8为数码管的扫描驱动信号sel[2..0]和时钟显示数据(动态显示)daout[3..0]。
EDLED模块则为数码显示时钟数据的7段译码电路。
(1)数码管扫描片选驱动模块
封装图:
图4-6数码管扫描片选模块
VHDL程序:
LIBBARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSELTIMEIS
PORT(ckdsp:
INSTD_LOGIC;
reset:
INSTD_LOGIC;
second:
INSTD_LOGIC_VECTOR(7DOWNTO0);
mintue:
INSTD_LOGIC_VECTOR(7DOWNTO0);
hour:
INSTD_LOGIC_VECTOR(7DOWNTO0);
daout:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
sel:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDSELTIME;
ARCHITECTUREBEHAVOFSELTIMEIS
SIGNALSEC:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(reset,ckdsp)
BEGIN
IF(reset='0')RHEN
sec<="0000";
COUNTER<="0000";
ELSIF(ckdsp'EVENTANDckdsp='1')THEN
IF(sec="101")THEN
sec<="0000";
ELSE
sec<=sec+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(sec,second,mintue,hour)
BEGIN
CASEsecIS
WHEN"000"=>daout<=second(3DOWNTO0);
WHEN"001"=>daout<=second(7DOWNTO4);
WHEN"010"=>daout<=minute(3DOWNTO0);
WHEN"011"=>daout<=minute(7DOWNTO4);
WHEN"100"=>daout<=HOUR(3DOWNTO0);
WHEN"101"=>daout<=HOUR(7DOWNTO4);
WHENOTHERS=>daout<="XXXX";
ENDCASE;
ENDPROCESS;
sel<=SEC;
ENDBEHAV;
(2)7段译码电路模块:
给一个时间脉冲信号,在屏幕上显示时间。
封装图:
图4-77段译码模块封装图
VHDL程序:
LIBBARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDELEDIS
PORT(s:
INSTD_LOGIC_VECTOR(3DOWNTO0);
A,B,C,D,E,F,G,H:
OUTSTD_LOGIC);
ENDDELED;
ARCHITECTUREBEHAVOFDELEDIS
SIGNALDATA:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDOUT:
STD_LOGIC_VECTOR(7DOWNTO0);
BEIGN
DATA<=s;
PROCESS(DATA)
BEGIN
CASEDATAIS
WHEN"0000"=>DOUT<="00111111";
WHEN"0001"=>DOUT<="00000110";
WHEN"0010"=>DOUT<="01011011";
WHEN"0011"=>DOUT<="01001111";
WHEN"0100"=>DOUT<="01100110";
WHEN"0101"=>DOUT<="01101101";
WHEN"0110"=>DOUT<="01111101";
WHEN"0111"=>DOUT<="00000111";
WHEN"1000"=>DOUT<="01111111";
WHEN"1001"=>DOUT<="01101111";
WHEN"1010"=>DOUT<="01110111";
WHEN"1011"=>DOUT<="01111100";
WHEN"1100"=>DOUT<="00111001";
WHEN"1101"=>DOUT<="01011110";
WHEN"1110"=>DOUT<="01111001";
WHEN"1111"=>DOUT<="01110001";
WHENOTHERS=>DOUT<="00000000";
ENDCASE;
ENDPROCESS;
H<=DOUT(7);
G<=DOUT(6);
F<=DOUT(5);
E<=DOUT(4);
D<=DOUT(3);
C<=DOUT
(2);
B<=DOUT
(1);
A<=DOUT(0);
ENDBEHAV;
4.4.3整点报时驱动电路
扬声器在整点报时有报时驱动信号产生,以及LED灯根据设计的要求在正在时有花样显示信号产生。
ALERT