秒表计时器.docx

上传人:b****1 文档编号:1895400 上传时间:2023-05-02 格式:DOCX 页数:18 大小:113.17KB
下载 相关 举报
秒表计时器.docx_第1页
第1页 / 共18页
秒表计时器.docx_第2页
第2页 / 共18页
秒表计时器.docx_第3页
第3页 / 共18页
秒表计时器.docx_第4页
第4页 / 共18页
秒表计时器.docx_第5页
第5页 / 共18页
秒表计时器.docx_第6页
第6页 / 共18页
秒表计时器.docx_第7页
第7页 / 共18页
秒表计时器.docx_第8页
第8页 / 共18页
秒表计时器.docx_第9页
第9页 / 共18页
秒表计时器.docx_第10页
第10页 / 共18页
秒表计时器.docx_第11页
第11页 / 共18页
秒表计时器.docx_第12页
第12页 / 共18页
秒表计时器.docx_第13页
第13页 / 共18页
秒表计时器.docx_第14页
第14页 / 共18页
秒表计时器.docx_第15页
第15页 / 共18页
秒表计时器.docx_第16页
第16页 / 共18页
秒表计时器.docx_第17页
第17页 / 共18页
秒表计时器.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

秒表计时器.docx

《秒表计时器.docx》由会员分享,可在线阅读,更多相关《秒表计时器.docx(18页珍藏版)》请在冰点文库上搜索。

秒表计时器.docx

秒表计时器

课程设计说明书

 

设计题目:

秒表计时器

院(系):

机电工程系

专业年级:

07机制本2班

学号:

0715118201

姓名:

樊印文

指导老师:

刘江海

 

课程设计任务书

机电工程系机制专业07级本科二班

姓名:

樊印文学号:

0715118201

题目:

秒表计时器

课程设计内容与要求:

1.课程设计的目的

(1)掌握EDA技术及CPLD/FPGA的开发流程

(2)能够应用VHDL语言和EDA软件进行电子系统的设计

(3)掌握自上而下的设计思想

(4)掌握秒表计时器的设计原理

(5)掌握系统设计的分析方法

2.课程设计的任务及要求

(1)用VHDL语言设计一个多功能的秒表计时器,包含以下主要功能:

精确计时,暂停,复位,整点报时等

(2)能把设计文件进行仿真并下载到实验箱正确实现功能

 

目录

1.绪论

2.说明

3.Protel99绘图过程

4.主要芯片

5.所有程序

6.心得体会

7.附件

8.参考文献

9.鸣谢

 

绪论

本文采用VHDL语言,运用自上而下的设计思想,将系统功能逐层分割的层次设计方法,使用MUX+PLUS2集成开发环境进行编辑,逻辑综合自动化把VHDL描述转电路,然后进行波形仿真,最后通过编程电缆将所设计的内容下载到CPLD器件中,最终实行了电子钟的设计。

相比传统的电路系统的设计方法,EDA技术采用硬件描述语言电路系统,包括电路的结构,行为方式,逻辑功能等。

VHDL具有多层次描述系统硬件功能的能力,支持自上而下和基于库的设计特点。

设计者不必了解硬件结构。

从系统设计入手,在顶层记性系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后在用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD期间中去,从而实现可编程的ASIC的设计。

本文运用现代电子设计工具,采用VHDL语言在CPLD器件上实现秒表计时器的设计,能够进行百分之一秒,秒,分,时的计数,而且通过十进制数码显示,具有体积小,可靠性高,功耗低的特点。

秒表计时器的设计基于强大的EDA功能,通过一台计算机,一套EDA软件和一片或者几片大规模可编程芯片(CPLD/FPGA),完成了秒表计时器的设计。

说明

一、设计实验说明及要求:

1、秒表主要由:

分频器、扫描显示译码器、一百进制计数器、六十进制计数器(或十进制计数器与6进制计数器)、十二进制计数器(或二十四进制计数器)电路组成。

在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,数字秒表需有清零控制端,以及启动控制端、保持保持,以便数字时钟能随意停止及启动。

2、数字秒表显示由时(24进制任选)、分(60进制)、秒(60进制)、百分之一秒(一百进制)组成,利用扫描显示译码电路在八个数码管显示。

3、能够完成清零、启动、保持(可以使用键盘或拨码开关置数)功能。

4、时、分、秒、百分之一秒显示准确。

二、秒表组成及功能:

1、分频率器:

用来产生100HZ计时脉冲;

来源:

(–我的EDA课程设计-----数字秒表1_THE_secret_新浪博客2、二十四进制计数器:

对时进行计数

3、六十进制计数器:

对分和秒进行计数;

4、六进制计数器:

分别对秒十位和分十位进行计数;

5、十进制计数器:

分别对秒个位和分个位进行计数;

6、扫描显示译码器:

完成对7字段数码管显示的控制;

三、系统硬件要求:

1、时钟信号为10MHz;

2、FPGA芯片型号为EP2C5Q208C8

3、8个7段扫描共阳级数码显示管;

4、按键开关(清零、启动、保持);

四、硬件实现

将时序仿真正确的文件下载到实验箱中的EP2C5Q208C8中,通过合适的管脚分配,将相应的管脚连接起来,验证设计是否完成设计要求

 

Protel99SE绘图过程

(1)设置原理图设计环境,设计环境对画原理图人影响很大,在画原理图之前,应该把设计环境设置好,工作环境是使用DESIGN/OPTIONS和TOOL/PREFERENCE菜单进行的,画原理图环境的设置主要包括图纸大小,捕捉栅格,电气栅格,模板设置等。

(2)放置元件。

将电气和电子元件放置到图纸上,一情况下元件的原理图符号在元件库中都可以找到,只需要将元件从元件库中取出,放置在图上,但由于本次设计中有一些新元件,故还要自己画元件。

(3)画元件图。

1、首先选择菜单FILE/NEW,然后在出现的窗口选择SCHEMATICLIBRARYDOCUMENT图标建立一个元件库,该库的缺省名为SCHLIBL.LIB;在设计管理器窗口中双击该元件库,这就进入了画元件图窗口,在元件管理器窗口,可以看到已经给元件取了个缺省名COMPONENT_。

2、进入编辑窗口后使用pageup键将窗口放大,放大到能清楚地看到可视栅格。

3、然后使用绘图工具箱中的工具依次绘出所需使用的元件。

4、当需要对所画元件放置管脚时,单击工具箱上的放管脚工具,就会看见鼠标变成十字还带着一个管脚,将鼠标移动到放置管脚的地方,单击鼠标将管脚一个接一个放置,注意用空格键调整管脚方向。

其中管脚的系列号是Protel99SE软件自动加上去的,若管脚名称或管脚的序号需要按顺序排列,则在放置第一个管脚之前,按Tab键然后在管脚Name和Number属性中输入排列序号的第一个数值或字母加数字,例如,若管脚序列号按数字增加的顺序排列,则输入第一个数字:

若管脚名按D0、D1、D2……排列,则输入D0。

(4)若需要将所画元件图放在原理图中,则需要将左上侧的Place单击则会自动跳转至原理图中,但选取适当的位置后,则单击右键即可确认。

(5)原理图布线,元件一旦放置在原理图上,就需要用导线将元件连接起来,连接时一定要符合电气规则。

(6)编辑与调整,编辑元件的属性,这些属性包括元件名,参数,封装图等,然后将元件与导线的位置进行细微的调整。

(7)检查原理图在编辑元件的属性的基础上使用Protel99SE的电气规则检查功能,检查原理图的连线是否合理与正确,给出检查报告,若有错误,就需要根据错误情况进行改正。

(8)在原理图右下角输入原理图名称,然后打印输出原理图。

主要芯片

一.555芯片

二.EP2C5Q208C8

CycloneIIEP2C5Q208C8是Altera公司生产的一款具有较高性价比的FPGA芯片,它采用Stratix架构,使用90nm工艺生产,具有4608个LE,26个M4K单元,2个PLL以及13个乘法器,另外,其I/O管脚可以直接与系统中使用的其它芯片相连而不需要进行电平转换。

该款FPGA的内部资源以及管脚数量能够完全满足本案的设计需求。

故选用该款FPGA作为主控逻辑芯片。

FPGA的内部功能模块可以划分为UART收发、AD9951控制、包络信号DDS、脉冲信号控制、变频控制信号输出这五个主要部分,另外,还包括各个模块间的协调以及时钟信号产生等部分。

这些控制逻辑都通过Verilog硬件描述语言来实现。

 

所有程序

一.顶层设计

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYclockIS

PORT(

clk:

INSTD_LOGIC;

enable:

INSTD_LOGIC;

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDclock;

ARCHITECTURErt1OFclockIS

COMPONENTclk_div10

PORT(clk:

INSTD_LOGIC;

clk_div:

OUTSTD_LOGIC);

ENDCOMPONENT;

componentcount100

PORT(

clk:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

qh:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

endcomponent;

componentcount60

PORT(

clk:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

qh:

outSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

outSTD_LOGIC_VECTOR(3DOWNTO0));

endcomponent;

COMPONENTcount24

PORT(

clk:

INSTD_LOGIC;

qh:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTdisplay

PORT(

clk:

INSTD_LOGIC;

qh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

INSTD_LOGIC_VECTOR(3DOWNTO0);

qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4:

instd_logic_vector(3downto0);

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

signalqh,ql,qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4:

STD_LOGIC_VECTOR(3DOWNTO0);

signalclk0:

STD_LOGIC;

signalcout1,cout2,cout3:

STD_LOGIC;

BEGIN

u0:

clk_div10PORTMAP(clk,clk0);

u1:

count100portmap(clk0,cout1,qh1,ql1);

u2:

count60portmap(cout1,cout2,qh2,ql2);

u3:

count60portmap(cout2,cout3,qh3,ql3);

u4:

count24PORTMAP(cout3,qh4,ql4);

u5:

displayportMAP(clk,qh,ql,qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4,sel,segment);

ENDrt1;

二.分频模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityclk_div10is

port(clk:

instd_logic;

clk_div:

outstd_logic);

endclk_div10;

architecturert1ofclk_div10is

signalq_tmp:

integerrange0to9;

begin

process(clk)

begin

IF(clk'eventandclk='1')THEN

IF(q_tmp=9)THEN

q_tmp<=0;

ELSE

q_tmp<=q_tmp+1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(q_tmp=9)THEN

clk_div<='1';

ELSE

clk_div<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDrt1;

三.计时模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcount100IS

PORT(

clk:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

qh:

outSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

outSTD_LOGIC_VECTOR(3DOWNTO0));

ENDcount100;

ARCHITECTURErt1OFcount100IS

SIGNALqh_temp,ql_temp:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(qh_temp="1001"andql_temp="1001")THEN

qh_temp<="0000";

ql_temp<="0000";

ELSE

IF(ql_temp="1001")THEN

ql_temp<="0000";

qh_temp<=qh_temp+1;

ELSE

ql_temp<=ql_temp+1;

ENDIF;

ENDIF;

ENDIF;

qh<=qh_temp;

ql<=ql_temp;

ENDPROCESS;

cout<='1'whenqh_temp="0000"andql_temp="0000"else'0';

--cout<='1'whenqh_temp="0000"andql_temp="0000"else'0';

ENDrt1;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcount24IS

PORT(

clk:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

qh:

outSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

outSTD_LOGIC_VECTOR(3DOWNTO0));

ENDcount24;

ARCHITECTURErt1OFcount24IS

SIGNALqh_temp,ql_temp:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(qh_temp="0010"andql_temp="0011")THEN

qh_temp<="0000";

ql_temp<="0000";

ELSE

IF(ql_temp="1001")THEN

ql_temp<="0000";

qh_temp<=qh_temp+1;

ELSE

ql_temp<=ql_temp+1;

ENDIF;

ENDIF;

ENDIF;

qh<=qh_temp;

ql<=ql_temp;

ENDPROCESS;

ENDrt1;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcount60IS

PORT(

clk:

INSTD_LOGIC;

cout:

OUTSTD_LOGIC;

qh:

outSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

outSTD_LOGIC_VECTOR(3DOWNTO0));

ENDcount60;

ARCHITECTURErt1OFcount60IS

SIGNALqh_temp,ql_temp:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(clk)

BEGIN

IF(clk'eventandclk='1')THEN

IF(qh_temp="0101"andql_temp="1001")THEN

qh_temp<="0000";

ql_temp<="0000";

ELSE

IF(ql_temp="1001")THEN

ql_temp<="0000";

qh_temp<=qh_temp+1;

ELSE

ql_temp<=ql_temp+1;

ENDIF;

ENDIF;

ENDIF;

qh<=qh_temp;

ql<=ql_temp;

ENDPROCESS;

cout<='1'whenqh_temp="0000"andql_temp="0000"else'0';

--cout<='1'whenqh_temp="0000"andql_temp="0000"else'0';

ENDrt1;

四.显示模块

libraryieee;

useieee.std_logic_1164.all;

entityseg7is

port(q:

instd_logic_vector(3downto0);

segment:

outstd_logic_vector(6downto0));

endseg7;

architecturert1ofseg7is

begin

process(q)

begin

caseqis

when"0000"=>segment<="0111111";

when"0001"=>segment<="0000110";

when"0010"=>segment<="1011011";

when"0011"=>segment<="1001111";

when"0100"=>segment<="1100110";

when"0101"=>segment<="1101101";

when"0110"=>segment<="1111101";

when"0111"=>segment<="0100111";

when"1000"=>segment<="1111111";

when"1001"=>segment<="1101111";

whenothers=>segment<="XXXXXXX";

endcase;

endprocess;

endrt1;

libraryieee;

useieee.std_logic_1164.all;

entitytime_chooseis

port(sel:

instd_logic_vector(2downto0);

qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(3downto0));

endtime_choose;

architecturert1oftime_chooseis

begin

process(sel)

begin

caseselis

when"000"=>q<=ql1;

when"001"=>q<=qh1;

when"010"=>q<=ql2;

when"011"=>q<=qh2;

when"100"=>q<=ql3;

when"101"=>q<=qh3;

when"110"=>q<=ql4;

when"111"=>q<=qh4;

whenothers=>q<="XXXX";

endcase;

endprocess;

endrt1;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdisplayIS

PORT(

clk:

INSTD_LOGIC;

qh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

INSTD_LOGIC_VECTOR(3DOWNTO0);

qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4:

instd_logic_vector(3downto0);

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDdisplay;

ARCHITECTURErt1OFdisplayIS

COMPONENTcount8

PORT(clk:

INSTD_LOGIC;

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

COMPONENTtime_choose

port(sel:

instd_logic_vector(2downto0);

qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4:

instd_logic_vector(3downto0);

q:

outstd_logic_vector(3downto0));

ENDCOMPONENT;

COMPONENTseg7

PORT(q:

INSTD_LOGIC_VECTOR(3DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

SIGNALsel_tmp:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALq:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALsegment_tmp:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

U0:

count8PORTMAP(clk,sel_tmp);sel<=sel_tmp;

U2:

time_choosePORTMAP(sel_tmp,qh1,ql1,qh2,ql2,qh3,ql3,qh4,ql4,q);

U3:

seg7PORTMAP(q,segment_tmp);segment<=segment_tmp;

ENDrt1;

 

设计总结

为期两周的课程设计,主要是以上机操作为主,在实验室查资料,编程序,画图。

设计语言主要是采用VHDL语言的自上而下的设计方法。

EDA中,自上向下的设计,就是在整个设计流程中各设计环节逐步精益求精的过程,应用VHDL运行自上而下的设计,就是使用VHDL模型

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

当前位置:首页 > 解决方案 > 学习计划

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

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