EDA设计报告数字时钟.docx
《EDA设计报告数字时钟.docx》由会员分享,可在线阅读,更多相关《EDA设计报告数字时钟.docx(22页珍藏版)》请在冰点文库上搜索。
EDA设计报告数字时钟
目录
前言1
摘要2
关键词2
正文2
一、题目分析2
1、实验目的2
2、根据目的及要求确定总体方框图2
3、须完成的技术指标或功能要求2
二、设计方案和设计内容3
1、设计方案3
2、设计内容3
三、设计原理及框图细化3
1、数字钟的工作原理3
2、数字钟设计的电路原理图4
3、数字钟模块功能说明4
四、编写应用程序并仿真4
1、相关程序代码见附件。
5
2、相关仿真图如下:
5
五、全系统联调,画出整机电路图和波形图6
1、整机电路原理图画出后如图3.2。
6
2、全系统联调后的波形图和仿真图6
六、硬件测试及说明7
1、编程下载8
2、硬件调试8
七、结论9
八、课程总结9
九、参考文献10
十、附录(课题背景介绍和源程序)10
1、EDA技术10
2、VHDL的简介10
3、VHDL语言的特点10
4、VHDL的设计流程11
5、源程序代码11
前言
近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:
(1)电子器件及其技术的发展将更多地趋向于为EDA服务;
(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言VHDL的运用;(4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,数字钟作为计算机的一个组成也随之逐渐进入人们的生活,从先前的采用半导体技术实现的数字钟到现在广泛应用的采用高集成度芯片实现的数字钟。
数字钟正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对数字钟中显示电路进行编程实现。
摘要:
EDA技术在电子系统设计领域越来越普及,本设计主要利用VHDL语言在EDA平台上设计一个电子数字钟,它的计时周期为24小时,显示满刻度为24时59分59秒,另外还具有校时功能和闹钟功能。
总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频程序模块、时分秒计数和设置程序模块、比较器程序模块、三输入数据选择器程序模块、译码显示程序模块和拼接程序模块。
并且使用QUARTUS II软件进行电路波形仿真,下载到EDA实验箱进行验证。
关键词:
数字钟EDAVHDL语言
正文:
一、题目分析
1、实验目的
(1)、熟练地运用数字系统的设计方法进行数字系统设计;
(2)、能进行较复杂的数字系统设计;
(3)、按要求设计一个数字钟。
2、根据目的及要求确定总体方框图
图1.1数字钟实现原理框图
3、须完成的技术指标或功能要求
(1)、时钟计数:
完成时、分、秒的正确计时并且显示所计的数字;对秒、分
——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
(2)、时间设置:
手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
(3)、清零功能:
reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
(4)、蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
产生“滴答.滴答”的报警声音。
(5)、LED灯在时钟显示时有花样显示信号产生。
即根据进位情况,LED不停的闪烁,从而产生“花样”信号。
二、设计方案和设计内容
1、设计方案
根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:
小时采用24进制,而分钟均是采用6进制和10进制的组合。
2、设计内容
利用VHDL设计数字钟显示电路的各个模块,并使用EDA工具对各模块进行仿真验证。
数字钟显示电路的设计分为下面几个模块:
秒计数模块、分计数模块、小时计数模块.。
完成以后把各个模块整合后,显示相应的输出状态。
具有可清零、可调时,具有花样显示及整点报时的功能。
要求显示秒、分、时,显示格式如下:
图2.1显示格式
三、设计原理及框图细化
1、数字钟的工作原理
数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和一些花样显示、报时等附加功能。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,计数器、校时电路、报时电路和振荡器组成。
干电路系统由秒信号发生器、“时、分、秒、”计数器、译码器及显示器、校时电路、整点报时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
数字钟以其显示时间的直观性、走时准确性作为一种计时工具,数字钟的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。
数字钟的基本原理方框图如下:
图3.1数字钟的工作原理图
2、数字钟设计的电路原理图
图3.2进制数字钟的电路图
3、数字钟模块功能说明
自顶向下分解图
(1)、顶层模块图
Clk为1hz信号输入
Reset为清零输入
Setmin为手动调分
Sethour为手动调时
h[6.0],,h1[6.0]为小时数据输出
m[6.0],m1[6.0]为分钟数据输出
s[6.0],s1[6.0]为秒数据输出
(2)、秒模块图
Clk为1hz信号输入
Reset为清零输入
Setmin为手动调分
cmin为分进位信号
dout[6.0]为数据输出
(3)、分模块图
Clk1为1hz信号输入
Reset为清零输入
Sethour为手动调时
Clk为进位脉冲
dout[6.0]为数据输出
chour为时进位脉冲
(4)、时模块图
Clk为进位脉冲
dout[5.0]为数据输出
(5)、晶体振荡电路
(6)、分频器
四、编写应用程序并仿真
1、相关程序代码见附件。
2、相关仿真图如下:
(1)、秒表计数器电路仿真图
秒表计数器电路仿真图如图4.1:
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
图4.1秒计数器电路仿真图
(2)小时计数器电路仿真图
时计数器电路仿真图如图4.2:
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
每累计24小时,发出一个“星期脉冲”信号,该信号将被送到“星期计数器”,
图4.2小时计数器电路仿真图
(3)分计数器电路仿真图
分计数器电路仿真图如图4.3:
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
图4.3分计数器电路仿真图
(4)、译码驱动电路仿真图
译码驱动电路仿真图如图4.4:
输入BCD码,输出为共阴极数码管显示码,仿真结果正确。
图4.4译码驱动电路仿真图
五、全系统联调,画出整机电路图和波形图
1、整机电路原理图画出后如图3.2。
2、全系统联调后的波形图和仿真图
图5.1全系统联调后的波形图
图5.2全系统联调后的仿真图
六、硬件测试及说明
1、编程下载
(1)、首先将下载线把计算机的打印机口与目标板(如开发板或实验板)连接好,打开电源
(2)、下载方式设定。
选择MAX+plusIIProgrammer选项,跳出下图左侧所示的编程器窗口,然后选择OptionsHardwareSetup硬件设置选项,其窗口图中左侧所示。
在其下拉菜单中选ByteBlaster(MV)编程方式。
此编程方式对应计算机的并行口下载通道,“MV”是混合电压的意思,主要指对ALTERA的各类芯核电压(如5V、3.3V、2.5V与1.8V等)的FPGA/CPLD都能由此下载。
(3)、最后点击start按钮,进入下载模式,等待下载完成以后在试验箱上进行调试检测是否正确。
2、硬件调试
(1)、任意设置时间,让其从这一时间开始显示
图6.1设置时间
(2)、时间显示为24进制,当时间显示到大23:
59:
59后将会从00:
00:
00开始显示
图6.2数字钟为24进制显示
图6.3时间跳变到000000
七、结论
系统使用EDA技术设计了数字钟,采用硬件描述语言VHDL按模块化方式进行设计,然后进行编程,时序仿真等。
利用VHDL语言完成了数字钟的设计。
该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时。
整个系统结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
八、课程总结
经过几周EDA实验的学习,使我受益匪浅。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它增强了我对EDA设计的兴趣,更掌握了基本的电路设计流程、方法以及技巧。
这不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
具备了这些基本知识,为今后的自主学习奠定了良好的基础。
在编写时可以相互借鉴,这样可以节省一定的时间,尤其是24进制的处理上,我们采用了简单的方法即可完成多个功能的顺利实现。
本课程设计在选题和设计过程中得到了查长军老师的悉心指导,查老师多次询问课程设计进程,并多次指导我对课程设计进行修改,帮助我完善了该课程设计。
在此对查老师表示诚挚的感谢。
此次设计不足之处是不能进行定时闹钟,这是有待改进的地方,当然我们也可以在闹钟的时候采用音乐提醒,可以和乐曲硬件演奏电路设计相结合,这样数字钟的功能才算是完美。
九、参考文献
[1]谭敏、周泽华等.2012.在系统编程技术实验指导书.合肥:
合肥学院电子信息与电气工程系印制
[2]卢毅、赖杰.2001.VHDL与数字设计.北京:
科学出版社
[3]徐志军等.2000.大规模可编程逻辑器件及其应用.成都:
电子科技大学出版社
[4]StefanSjoholm,LennartLindh著,边计年,薛宏熙译.2000.用VHDL设计电子线路.北京:
清华大学出版社
[5]赵雅兴.1999.FPGA原理、设计与应用.天津:
天津大学出版社
10、附录(课题背景介绍和源程序)
1、EDA技术
EDA是电子设计自动化(ElectronicDesignAutomation)缩写,EDA是以计算机为工具,根据硬件描述语言HDL(HardwareDescriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
2、VHDL的简介
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
3、VHDL语言的特点
(1)、用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
(2)、VHDL元件的设计与工艺u无关,与工艺独立,方便工艺转换。
(3)、VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
(4)、可以进行从系统级到逻辑级的描述,即混合描述。
(5)、VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
4、VHDL的设计流程
(1)、设计规范的定义
明确这个系统有哪些设计要求,和你要想到达的目标。
(2)、采用VHDL进行设计描述
这部分包括设计规划和程序的编写。
设计规划主要包括设计方式的选择及是否进行模块划分。
设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。
最重要还是模块划分。
(3)、VHDL程序仿真
(4)、综合、优化和布局布线
综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
(5)、仿真
这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。
(6)、器件编程
5、源程序代码
(1)、译码驱动模块的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYalertIS
PORT(clk:
INSTD_LOGIC;
dain:
INSTD_LOGIC_VECTOR(6DOWNTO0);
speak:
OUTSTD_LOGIC;
lamp:
OUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDalert;
ARCHITECTUREfunOFalertIS
SIGNALcount:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALcount1:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
speaker:
PROCESS(clk)
BEGIN
--speak<=count1
(1);
IF(clk'eventandclk='1')THEN
IF(dain="0000000")THEN
speak<=count1
(1);
IF(count1>="10")THEN
count1<="00";--count1为三进制加法计数器
ELSE
count1<=count1+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSspeaker;
lamper:
PROCESS(clk)
BEGIN
IF(rising_edge(clk))THEN
IF(count<="10")THEN
IF(count="00")THEN
lamp<="001";--循环点亮三只灯
ELSIF(count="01")THEN
lamp<="010";
ELSIF(count="10")THEN
lamp<="100";
ENDIF;
count<=count+1;
ELSE
count<="00";
ENDIF;
ENDIF;
ENDPROCESSlamper;
ENDfun;
(2)、秒计数器模块的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecondIS
PORT(clk,reset,setmin:
STD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYsecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenmin_1,enmin_2:
STD_LOGIC;--enmin_1为59秒时的进位信号
BEGIN--enmin_2由clk调制后的手动调分脉冲信号串
daout<=count;
enmin_2<=(setminandclk);--setmin为手动调分控制信号,高电平有效
enmin<=(enmin_1orenmin_2);--enmin为向分进位信号
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='0')THENcount<="0000000";--若reset为0,则异步清零
ELSIF(clk'eventandclk='1')then--否则,若clk上升沿到
IF(count(3downto0)="1001")then--若个位计时恰好到"1001"即9
IF(count<16#60#)then--又若count小于16#60#,即60H
IF(count="1011001")then--又若已到59D
enmin_1<='1';count<="0000000";--则置进位为1及count复0
ELSE--未到59D
count<=count+7;--则加7,而+7=+1+6,即作"加6校正"
ENDIF;
ELSE--若count不小于16#60#(即count等于或大于16#60#)
count<="0000000";--count复0
ENDIF;--ENDIF(count<16#60#)
ELSIF(count<16#60#)then--若个位计数未到"1001"则转此句再判
count<=count+1;--若count<16#60#则count加1
enmin_1<='0'after100ns;--没有发生进位
ELSE--否则,若count不小于16#60#
count<="0000000";--则count复0
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
ENDPROCESS;
ENDfun;
(3)、分计数器模块的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(clk,clk1,reset,sethour:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALenhour_1,enhour_2:
STD_LOGIC;--enmin_1为59分时的进位信号
BEGIN--enmin_2由clk调制后的手动调时脉冲信号串
daout<=count;
enhour_2<=(sethourandclk1);--sethour为手动调时控制信号,高电平有效
enhour<=(enhour_1orenhour_2);
PROCESS(clk,reset,sethour)
BEGIN
IF(reset='0')THEN--若reset为0,则异步清零
count<="0000000";
ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9
IF(count<16#60#)THEN--又若count小于16#60#,即60
IF(count="1011001")THEN--又若已到59D
enhour_1<='1';--则置进位为1
count<="0000000";--count复0
ELSE
count<=count+7;--若count未到59D,则加7,即作"加6校正"
ENDIF;--使前面的16#60#的个位转变为8421BCD的容量
ELSE
count<="0000000";--count复0(有此句,则对无效状态电路可自启动)
ENDIF;--ENDIF(count<16#60#)
ELSIF(count<16#60#)THEN
count<=count+1;--若count<16#60#则count加1
enhour_1<='0'after100ns;--没有发生进位
ELSE
count<="0000000";--否则,若count不小于16#60#count复0
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
ENDprocess;
ENDfun;
(4)、时计数器模块的VHDL源程序
LIBRARYIEEE;
useIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhourIS
PORT(clk,reset:
INSTD_LOGIC;
daout:
outSTD_LOGIC_VECTOR(5