基于EDA的数字秒表的设计.docx

上传人:b****6 文档编号:15448485 上传时间:2023-07-04 格式:DOCX 页数:22 大小:538.98KB
下载 相关 举报
基于EDA的数字秒表的设计.docx_第1页
第1页 / 共22页
基于EDA的数字秒表的设计.docx_第2页
第2页 / 共22页
基于EDA的数字秒表的设计.docx_第3页
第3页 / 共22页
基于EDA的数字秒表的设计.docx_第4页
第4页 / 共22页
基于EDA的数字秒表的设计.docx_第5页
第5页 / 共22页
基于EDA的数字秒表的设计.docx_第6页
第6页 / 共22页
基于EDA的数字秒表的设计.docx_第7页
第7页 / 共22页
基于EDA的数字秒表的设计.docx_第8页
第8页 / 共22页
基于EDA的数字秒表的设计.docx_第9页
第9页 / 共22页
基于EDA的数字秒表的设计.docx_第10页
第10页 / 共22页
基于EDA的数字秒表的设计.docx_第11页
第11页 / 共22页
基于EDA的数字秒表的设计.docx_第12页
第12页 / 共22页
基于EDA的数字秒表的设计.docx_第13页
第13页 / 共22页
基于EDA的数字秒表的设计.docx_第14页
第14页 / 共22页
基于EDA的数字秒表的设计.docx_第15页
第15页 / 共22页
基于EDA的数字秒表的设计.docx_第16页
第16页 / 共22页
基于EDA的数字秒表的设计.docx_第17页
第17页 / 共22页
基于EDA的数字秒表的设计.docx_第18页
第18页 / 共22页
基于EDA的数字秒表的设计.docx_第19页
第19页 / 共22页
基于EDA的数字秒表的设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于EDA的数字秒表的设计.docx

《基于EDA的数字秒表的设计.docx》由会员分享,可在线阅读,更多相关《基于EDA的数字秒表的设计.docx(22页珍藏版)》请在冰点文库上搜索。

基于EDA的数字秒表的设计.docx

基于EDA的数字秒表的设计

EDA课程设计报告书

课题名称

基于EDA的数字秒表的设计

姓名

学号

院系

专业

指导教师

 

年月日

一、设计任务及要求:

利用VHDL语言设计基于计算机电路中时钟脉冲原理的数字秒表。

该数字秒表能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒。

计时精度达到10ms。

设计了复位开关和启停开关。

复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。

 

指导教师签名:

年月日

二、指导教师评语:

 

指导教师签名:

年月日

三、成绩

 

验收盖章

年月日

在科技高度发展的今天,集成电路和计算机应用得到了高速发展。

尤其是计算机应用的发展。

它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成,如:

手机、mp3等。

而且将来的不久他们的身影将会更频繁的出现在我们身边。

各种家用电器多会实现微电脑技术。

电脑各部分在工作时多是一时间为基准的。

本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表。

秒表在很多领域充当一个重要的角色。

在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。

他们对时间精确度达到了几纳秒级别。

1设计目的

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。

在掌握所学的计算机组成与结构课程理论知识时。

通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。

通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

2课程设计的内容

利用VHDL语言设计基于计算机电路中时钟脉冲原理的数字秒表。

该数字秒表能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒。

计时精度达到10ms。

设计了复位开关和启停开关。

复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。

3EDA、VHDL简介

3.1EDA技术

EDA是指以计算机为工作平台,融合了应用电子技术、计算机技术、智能化技术的最新成果而开发出的电子CAD通用软件包,它根据硬件描述语言HDL完成的设计文件,自动完成逻辑编译、化简、分割、综合、优化、布局布线及仿真,直至完成对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

目前EDA主要辅助进行三个方面的设计工作:

IC设计、电子电路设计和PCB设计。

没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的;反过来,生产制造技术的不断进步又必将对EDA技术提出新的要求。

3.2硬件描述语言——VHDL

3.2.1VHDL的简介

VHDL语言是一种用于电路设计的高级语言。

它在80年代的后期出现。

最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。

但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为ANSI/IEEE的标准(IEEESTD1076-1987)。

1993年更进一步修订,变得更加完备,成为ANSI/IEEE的ANSI/IEEESTD1076-1993标准。

目前,大多数的CAD厂商出品的EDA软件都兼容了这种标准。

自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.2.2VHDL语言的特点

VHDL的程序结构特点是将一项工程设计,关于用VHDL和原理图输入进行CPLD/FPGA设计的粗略比较:

在设计中,如果采用原理图输入的设计方式是比较直观的。

你要设计的是什么,你就直接从库中调出来用就行了。

这样比较符合人们的习惯。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

应用VHDL进行工程设计的优点是多方面的。

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。

强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。

(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。

符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

3.2.3VHDL的设计流程

它主要包括以下几个步骤:

(1)文本编辑:

用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。

通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。

(2)功能仿真:

将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)

(3)逻辑综合:

将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。

逻辑综合软件会生成.edf或.edif的EDA工业标准文件。

(4)布局布线:

将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放PLD/FPGA内。

(5)时序仿真:

需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。

(也叫后仿真)通常以上过程可以都在PLD/FPGA厂家提供的开发工具。

(6)器件编程:

4设计过程

4.1设计规划

本系统设计采用自顶向下的设计方案,系统的整体组装设计原理图如图4-1所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。

各模块分别完成计时过程的控制功能、计时功能与显示功能。

 

4.2各模块的原理及其程序

 

本系统设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。

各模块实现秒表不同的功能。

图4-2就是整个系统原理图。

4.3控制模块

计时模块的作用是针对计时过程进行控制。

计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。

部分源程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCTRLIS

PORT(CLR,CLK,SP:

INSTD_LOGIC;

EN:

OUTSTD_LOGIC);

END;

ARCHITECTUREBEHAVEOFCTRLIS

CONSTANTS0:

STD_LOGIC_VECTOR(1DOWNTO0):

="00";

CONSTANTS1:

STD_LOGIC_VECTOR(1DOWNTO0):

="01";

CONSTANTS2:

STD_LOGIC_VECTOR(1DOWNTO0):

="11";

CONSTANTS3:

STD_LOGIC_VECTOR(1DOWNTO0):

="10";

TYPESTATESIS(S0,S1,S2,S3);

SIGNALCURRENT_STATE,NEXT_STATE:

STATES;

BEGIN

COM:

PROCESS(SP,CURRENT_STATE)

BEGIN

CASECURRENT_STATEIS

WHENS0=>EN<='0';

IFSP='1'THEN

NEXT_STATE<=S1;

ELSE

NEXT_STATE<=S0;

ENDIF;

WHENS1=>EN<='1';

IFSP='1'THEN

NEXT_STATE<=S1;

ELSE

NEXT_STATE<=S2;

ENDIF;

WHENS2=>EN<='1';

IFSP='1'THEN

NEXT_STATE<=S3;

ELSE

NEXT_STATE<=S2;

ENDIF;

WHENS3=>EN<='0';

IFSP='1'THEN

NEXT_STATE<=S3;

ELSE

NEXT_STATE<=S0;

ENDIF;

ENDCASE;

ENDPROCESS;

SYNCH:

PROCESS(clk)

BEGIN

IFCLR='1'THEN

CURRENT_STATE<=S0;

ELSIFCLK'EVENTANDCLK='1'THEN

CURRENT_STATE<=NEXT_STATE;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

4.4时基分频模块

时基分频模块的作用把输入时钟信号变为分频输出信号。

源程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCB10IS

PORT(CLK:

INSTD_LOGIC;

CO:

OUTSTD_LOGIC);

ENDCB10;

ARCHITECTUREARTOFCB10IS

SIGNALCOUNT:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFRISING_EDGE(CLK)THEN

IFCOUNT="1001"THEN

COUNT<="0000";

CO<='1';

ELSE

COUNT<=COUNT+1;

CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDART;

4.5计时模块

计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。

他是由四个十进制计数器和俩个六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。

源程序:

4.5.1十进制计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCDU10IS

PORT(CLK:

INSTD_LOGIC;

CLR,EN:

INSTD_LOGIC;

CN:

OUTSTD_LOGIC;

COUNT10:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCDU10;

ARCHITECTUREARTOFCDU10IS

SIGNALSCOUNT10:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGINCOUNT10<=SCOUNT10;

PROCESS(CLK,CLR,EN)

BEGINIF(CLR='1')THEN

SCOUNT10<="0000";CN<='0';

ELSIFRISING_EDGE(CLK)THEN

IF(EN='1')THEN

IFSCOUNT10="1001"THEN

CN<='1';

SCOUNT10<="0000";

ELSE

CN<='0';

SCOUNT10<=SCOUNT10+'1';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDART;

4.5.2六进制计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCDU6IS

PORT(CLK,CLR,EN:

INSTD_LOGIC;

CN:

OUTSTD_LOGIC;

COUNT6:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCDU6;

ARCHITECTUREARTOFCDU6IS

SIGNALSCOUNT6:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

COUNT6<=SCOUNT6;

PROCESS(CLK,CLR,EN)

BEGIN

IF(CLR='1')THEN

SCOUNT6<="0000";CN<='0';

ELSIFRISING_EDGE(CLK)THEN

IF(EN='1')THEN

IFSCOUNT6="0101"THEN

CN<='1';

SCOUNT6<="0000";

ELSE

CN<='0';

SCOUNT6<=SCOUNT6+'1';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDART;

4.5.3计数器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOUNTIS

PORT(CLK,CLR,EN:

INSTD_LOGIC;

S_1MS:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_10MS:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_100MS:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_1S:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_10S:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_1MIN:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

S_10MIN:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

HOUR:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOUNT;

ARCHITECTUREARTOFCOUNTIS

COMPONENTCDU10

PORT(CLK,CLR,EN:

INSTD_LOGIC;

CN:

OUTSTD_LOGIC;

COUNT10:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENTCDU10;

COMPONENTCDU6

PORT(CLK,CLR,EN:

INSTD_LOGIC;

CN:

OUTSTD_LOGIC;

COUNT6:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENTCDU6;

SIGNALA,B,C,D,E,F,G,H:

STD_LOGIC;

BEGIN

UL:

CDU10PORTMAP(CLK,CLR,EN,A,S_1MS);

U2:

CDU10PORTMAP(A,CLR,EN,B,S_10MS);

U3:

CDU10PORTMAP(B,CLR,EN,C,S_100MS);

U4:

CDU10PORTMAP(C,CLR,EN,D,S_1S);

U5:

CDU6PORTMAP(D,CLR,EN,E,S_10S);

U6:

CDU10PORTMAP(E,CLR,EN,F,S_1MIN);

U7:

CDU6PORTMAP(F,CLR,EN,G,S_10MIN);

U8:

CDU10PORTMAP(G,CLR,EN,H,HOUR);

ENDART;

4.6显示模块

计时显示电路的作用是将计时值在LED数码管上显示出来。

计时电路产生的值经过BCD七段译码后,驱动LED数码管。

计时显示电路的实现方案采用扫描显示。

部分源程序:

4.6.1数据选择器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYMULXIS

PORT(CLK,CLR,EN:

INSTD_LOGIC;

S_1MS:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_10MS:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_100MS:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_1S:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_10S:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_1MIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

S_10MIN:

INSTD_LOGIC_VECTOR(3DOWNTO0);

HOUR:

INSTD_LOGIC_VECTOR(3DOWNTO0);

OUTBCD:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

SEG:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDMULX;

ARCHITECTUREARTOFMULXIS

SIGNALCOUNT:

STD_LOGIN_VECTOR(3DOWNTO0);

BEGIN

PROCESS(CLK)

BEGIN

IFCLR='1'THEN

COUNT<="1111";

ELSIFRISING_EDGE(CLK)THEN

IFEN='1'THEN

COUNT<="0000";

ELSE

COUNT<=COUNT+'1';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

CASECOUNTIS

WHEN"0000"=>OUTBCD<=S_1MS;SEG<="11111110";

WHEN"0001"=>OUTBCD<=S_10MS;SEG<="11111101";

WHEN"0010"=>OUTBCD<=S_100MS;SEG<="11111011";

WHEN"0011"=>OUTBCD<=S_1S;SEG<="11110111";

WHEN"0100"=>OUTBCD<=S_10S;SEG<="11101111";

WHEN"0101"=>OUTBCD<=S_1MIN;SEG<="11011111";

WHEN"0110"=>OUTBCD<=S_10MIN;SEG<="10111111";

WHEN"0111"=>OUTBCD<=S_HUOR;SEG<="01111111";

WHEN"1000"=>OUTBCD<=S_1MS;SEG<="11111110";

WHEN"1001"=>OUTBCD<=S_10MS;SEG<="11111101";

WHENOTHERS=>OUTBCD<="0000";SEG<="00000000";

ENDCASE;

ENDIF;

ENDPROCESS;

ENDART;

4.6.2BCD七段译码器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYBCD7IS

PORT(

BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

LED:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDBCD7;

ARCHITECTUREARTOFBCD7IS

BEGIN

LED<="1111110"WHENBCD="0000"ELSE

"0110000"WHENBCD="0001"ELSE

"1101101"WHENBCD="0010"ELSE

"1111001"WHENBCD="0011"ELSE

"0110011"WHENBCD="0100"ELSE

"1011011"WHENBCD="0101"ELSE

"1011111"WHENBCD="0110"ELSE

"1110000"WHENBCD="0111"ELSE

"1111111"WHENBCD="1000"ELSE

"1111011"WHENBCD="1001"ELSE

"0000000";

ENDART;

5系统仿真

5.1时基分频模块的仿真(如图5-1所示)

分析:

CLK为时钟信号的输入,CO为分频输出信号。

5.2控制模块的仿真(如图5-2所示)

分析:

CLK、CLR和SP为输入信号,EN为输出信号。

5.3计时电路模块的仿真(如图5-3~图5-5所示)

5.3.1十进制计数器的仿真(如图5-3所示)

5.3.2六进制计数器的仿真(如图5-4所示)

5.3.3计数器的仿真(如图5-5所示)

分析:

clk为时钟脉冲脉冲,s_1ms是毫秒计数值,s_10ms是十毫秒计数器,s_100ms是百毫秒计数器,s_1s是秒计数器,s_10s是十秒计数器,m_1min是分计数器,s_10min是十分计数器,hour是小时计数器。

它们均为输入信号。

每来两个时钟脉冲,s_1ms加1,当s_1ms满十时,s_10ms加1,依次类推,s_10ms满十的时候,s_100ms加1等等作为输出。

5.4显示电路模块的仿真(如图5-6~图5-7所示)

5.4.1数据选择器的仿真(如图5-6所示)

5.4.2BCD七段译码器驱动器的仿真(如图5-7所示)

分析:

bcd为时钟脉冲输入信号,led是输出信号,如图所示:

当输出为“1111110”时候,输入为“0000”;当输出为“0110000”时输入“0001”,当输入为“0010”时输出为“1101101”,当输入为“0011”时输出为“1111001”等等来实现七段译码功能。

5.5数字秒表整个系统的仿真(如图5-8所示)

分析:

秒表开始从零开始计数,每次增加10ms。

工作很正常的进行。

6心得体会

开始做设计时总是会犯一些错误,只

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2