EDA数字时钟的设计.docx
- 文档编号:3600158
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:116.91KB
EDA数字时钟的设计.docx
《EDA数字时钟的设计.docx》由会员分享,可在线阅读,更多相关《EDA数字时钟的设计.docx(15页珍藏版)》请在冰豆网上搜索。
EDA数字时钟的设计
摘要系统使用EDA技术设计了数字钟,采用硬件描述语言VHDL按模块化方式进行设计,然后进行编程,时序仿真等。
利用VHDL语言完成了数字钟的设计。
该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时。
整个系统结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。
关键字数字钟;EDA;VHDL;
目录
1引言4
1.1课题的背景、目的4
1.2设计的内容5
2EDA、VHDL简介5
2.1EDA技术5
2.2硬件描述语言——VHDL5
VHDL的简介5
VHDL语言的特点6
VHDL的设计流程6
3数字钟设计7
3.1数字钟的工作原理7
3.2数字钟模块功能说明8
4系统仿真11
4.1秒计数器电路仿真图11
4.2分计数器电路仿真图12
4.3小时计数器电路仿真图12
4.4译码驱动电路仿真图13
结束语13
致谢14
参考文献14
附件14
1引言
随着社会的发展,科学技术也在不断的进步。
特别是计算机产业,可以说是日新月异,数字钟作为计算机的一个组成也随之逐渐进入人们的生活,从先前的采用半导体技术实现的数字钟到现在广泛应用的采用高集成度芯片实现的数字钟。
数字钟正在向着功能强,体积小,重量轻等方向不断发展,本设计主要介绍的是一个基于超高速硬件描述语言VHDL对数字钟中显示电路进行编程实现。
近年来,集成电路和计算机应用得到了高速发展,现代电子设计技术已迈入一个崭新的阶段,具体表现在:
(1)电子器件及其技术的发展将更多地趋向于为EDA服务;
(2)硬件电路与软件设计过程已高度渗透;(3)电子设计技术将归结为更加标准、规范的EDA工具和硬件描述语言VHDL的运用;(4)数字系统的芯片化实现手段已成主流。
因此利用计算机和大规模复杂可编程逻辑器件进行现代电子系统设计已成为电子工程类技术人员必不可少的基本技能之一。
1.1课题的背景、目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,加深对硬件电路结构的理解。
通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过对实用数字钟的设计,巩固和综合运用EDA技术的基本理论和方法,理论联系实际,提高IC设计能力,提高分析、解决EDA技术实际问题的独立工作能力。
通过课程设计深入理解EDA技术和VHDL语言自顶向下设计的原理,达到课程设计的目标。
1.2设计的内容
利用VHDL设计数字钟显示电路的各个模块,并使用EDA工具对各模块进行仿真验证。
数字钟显示电路的设计分为下面几个模块:
秒计数模块、分计数模块、小时计数模块.。
完成以后把各个模块整合后,显示相应的输出状态。
2EDA、VHDL简介
2.1EDA技术
EDA是电子设计自动化(ElectronicDesignAutomation)缩写,EDA是以计算机为工具,根据硬件描述语言HDL(HardwareDescriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。
典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。
综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。
综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。
2.2硬件描述语言——VHDL
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语言将承担起大部分的数字系统设计任务。
VHDL语言的特点
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺u无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
VHDL的设计流程
1.设计规范的定义
明确这个系统有哪些设计要求,和你要想到达的目标。
2.采用VHDL进行设计描述
这部分包括设计规划和程序的编写。
设计规划主要包括设计方式的选择及是否进行模块划分。
设计方式一般包括直接设计,自顶向下和自底向下设计,这个和其他软件语言差不多。
最重要还是模块划分。
3.VHDL程序仿真
4.综合、优化和布局布线
综合指的是将设计描述转化成底层电路的表示形式,其结果是一个网表或者是一组逻辑方程;优化,这个主要是为了提高程序的执行效率及减少资源的利用;布局布线,指的是将逻辑关系转化成电路连接的方式。
5.仿真
这个与VHDL程序仿真不同,这个不仅是对逻辑方面的验证,还要进行时序功能验证。
6.器件编程
3数字钟设计
3.1数字钟的工作原理
数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能和校分功能。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路和振荡器组成。
主电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
采用6个数码管显示。
工作原理图如图3.1所示。
图3.1数字钟的工作原理图
3.2数字钟模块功能说明
自顶向下分解图
顶层模块图
(1)Clk为1hz信号输入(5)h[6.0],,h1[6.0]为小时数据输出
(2)Reset为清零输入(6)m[6.0],m1[6.0]为分钟数据输出
(3)Setmin为手动调分(7)s[6.0],s1[6.0]为秒数据输出
(4)Sethour为手动调时
秒模块图
(1)Clk为1hz信号输入
(2)Reset为清零输入
(3)Setmin为手动调分
(4)cmin为分进位信号
(5)dout[6.0]为数据输出
分模块图
(1)Clk1为1hz信号输入
(2)Reset为清零输入
(3)Sethour为手动调时
(4)Clk为进位脉冲
(5)dout[6.0]为数据输出
(6)chour为时进位脉冲
时模块图
(1)Clk为进位脉冲
(3)dout[5.0]为数据输出
译码器模块
(1)BCD码输入
(2)七段共阴码输出
3.3晶体振荡器
晶体振荡电路是构成数字式时钟的核心,它保证了时钟走时准确及稳定。
晶体振荡器它的作用是产生时间标准信号。
数字钟的精度主要取决于时间标准信号的频率及其稳定度。
因此,一般采用石英晶体振荡器经过分频得到这一信号。
晶体振荡器电路给数字钟提供一个频率稳定准确的4MHz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
如图3.2所示晶体振荡电路框图。
图3.2晶体振荡电路
3.4分频器
分频器电路将4M的高频方波信号经4M次分频后得到1Hz的方波信号供秒计数器进行计数。
分频器实际上也就是计数器。
本次设计是运用VHDL语言设计的分频器进行分频,分频电路可提供1HZ的方波为为后级电路输送一秒脉冲信号。
4系统仿真
4.1秒计数器电路仿真图
秒表计数器电路仿真图如图4.1:
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲,仿真结果正确。
图4.1秒计数器电路仿真图
4.2分计数器电路仿真图
分计数器电路仿真图如图4.3:
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
Reset为清零控制端,sethour为时进位脉冲信号,仿真结果正确。
图4.3分计数器电路仿真图
4.3小时计数器电路仿真图
时计数器电路仿真图如图4.2:
“时计数器”采用24进制计时器,可实现对一天24小时的累计。
Reset为清零控制端,仿真结果正确。
图4.2小时计数器电路仿真图
4.4译码驱动电路仿真图
译码驱动电路仿真图如图4.4:
输入BCD码,输出为共阴极数码管显示码,仿真结果正确。
结束语
通过两星期的努力,最后完成了我的设计任务——数字钟的设计。
通过
本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环节,让同学们学以致用。
课程设计中要求要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件(C语言)顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
致谢
感谢谭敏老师在本学期EDA技术实用教程课程上的指导和帮助!
参考文献
[1]黄继业EDA技术实用教程北京:
科学出版社2006
[2]宋万杰CPLD技术及其应用西安:
西安电子科技大学出版社2000年
[3]王金明数字系统设计与VerilogHDL北京:
北京电子工业出版社2002年
附件
1.秒计数器模块的VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYsecondIS
PORT(clk,reset,setmin:
STD_LOGIC;
cmin:
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为手动调分控制信号,高电平有效
cmin<=(enmin_1orenmin_2);--enmin为向分进位信号
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='1')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;
2.分计数器模块的VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(clk,clk1,reset,sethour:
INSTD_LOGIC;
chour:
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为手动调时控制信号,高电平有效
chour<=(enhour_1orenhour_2);
PROCESS(clk,reset,sethour)
BEGIN
IF(reset='1')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;
3.小时计数器模块的VHDL源程序:
LIBRARYIEEE;
useIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYhourIS
PORT(clk,reset:
INSTD_LOGIC;
daout:
outSTD_LOGIC_VECTOR(5DOWNTO0));
ENDENTITYhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
daout<=count;
PROCESS(clk,reset)
BEGIN
IF(reset='1')THENcount<="000000";--若reset=0,则异步清零
ELSIF(clk'eventandclk='1')THEN--否则,若clk上升沿到
IF(count(3DOWNTO0)="1001")THEN--若个位计时恰好到"1001"即9
IF(count<16#23#)THEN--23进制
count<=count+7;--若到23D则
else
count<="000000";--复0
ENDIF;
ELSIF(count<16#23#)THEN--若未到23D,则count进1
count<=count+1;
ELSE--否则清零
count<="000000";
ENDIF;--ENDIF(count(3DOWNTO0)="1001")
ENDIF;--ENDIF(reset='0')
ENDPROCESS;
ENDfun;
4.译码驱动模块的VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYled7IS
PORT(
A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDled7;
ARCHITECTUREfunOFled7IS
BEGIN
PROCESS(A)
BEGIN
caseAis
when"0000"=>LED7S<="0111111";
when"0001"=>LED7S<="0000110";
when"0010"=>LED7S<="1011011";
when"0011"=>LED7S<="1001111";
when"0100"=>LED7S<="1100110";
when"0101"=>LED7S<="1101101";
when"0110"=>LED7S<="1111101";
when"0111"=>LED7S<="0000111";
when"1000"=>LED7S<="1111111";
when"1001"=>LED7S<="1101111";
whenothers=>null;
endcase;
endPROCESS;
ENDfun;
5顶层模块原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 数字 时钟 设计