课程设计论文.docx
《课程设计论文.docx》由会员分享,可在线阅读,更多相关《课程设计论文.docx(15页珍藏版)》请在冰点文库上搜索。
课程设计论文
广西工学院
课程设计(论文)说明书
课题名称数字秒表
系别信息与计算科学系
专业电子信息科学与技术
班级电科081
学号200800902019
姓名廖玉成
指导教师韦艳霞
2011年9月9日
广西工学院
课程设计任务书
课题名称 数字秒表
系别信息与计算科学系
专业电子信息科学与技术
班级电科081
学号200800902019
姓名廖玉成
指导教师韦艳霞
教研室主任李政林
系主任李栋龙
2011年9月9日
一、课题的主要内容和基本要求
设计一块数字秒表,能够精确反映计时时间,并完成复位、计时功能。
要求:
1、秒表计时的最大范围为1小时,精度为0.01秒,并可显示计时时间的分、秒、0.1秒等度量;
2、可进行秒表清零;
3、可设置秒表的启动/停止开关。
按下开关,开始计时,得到并显示计时结果;放开开关,停止计时。
二、所需完成的工作
1、完成设计的程序编写和编译工作;
2、至少完成两个模块的波形仿真和硬件调试;
3、完成论文的书写,要求15左右页。
三、主要参考文献、资料
1.1.潘松,黄继业.EDA技术实用教程(第二版)[M].北京:
北京航空航天大学出版社,1990
2.2.刘欲晓,方强,黄宛宁等.EDA技术与VHDL电路开发应用实践[M].北京:
电子工业出版社,2009
3.3.谭会生,瞿遂春等.EDA技术综合应用实例与分析[M].西安:
西安电子科技大学出版社.2004.
四、完成期限
2011年9月9日前
摘要
秒表是我们日常生活中常用的测时仪器,它能够简单地完成计时、清零等功能,从一年一度的校际运动会到NBA、世界杯、奥运会,都能看到秒表的身影。
本文介绍了用EDA技术和VHDL语言设计的数字秒表,其结构简单,软、硬件相结合可以实现秒表的开始、暂停、复位、清零等功能,具有制作成本低,操作方便,使用寿命长等优点,适用于计时、停车场、火车站等场合。
关键词:
EDA技术、VHDL语言、秒表、数字、计时
Abstract
Stopwatchiswidelyusedinourdailylifeofthetimetestinstrument,whichcannotonlyfinishcountingsimply,butalsoclearingfunction.FromtheannualschoolsportsmeetingtotheNBA,WorldCup,OlympicGames,youcanseethestopwatchhereandthere.ThispaperintroducesthedesignofdigitalstopwatchwhichusestheEDAtechnologyandVHDLlanguage.Itsstructureissimple;alsoitcanachievethestart,pause,resetandclearfunctionasthecombinationofsoftwareandhardware.Withtheadvantagesoflowcost,convenientoperation,longlifeandsoon.Andwhat’smore,itisapplicabletocounting,parkinglot,railwaystationsetc.
Keywords:
EDAtechnology;VHDLlanguage;stopwatch;digital;timing
1绪论
21世纪,EDA技术在电子领域发挥的作用重大,成为了现代电子设计的核心。
利用EDA技术,大量的设计工作都可以通过计算机虚拟完成,大大了提高了设计效率。
目前,EDA技术已在电子产品企业、企事业单位和科研教学单位广泛地使用。
大部分高校的电子类相关专业也都开设了EDA的相关课程。
EDA的一些工具软件,如multisim7、PSPICE、CAD、Protel、Graphics、Synopsis、Microseism等在教学和实际生产中都得到了广泛的应用。
尤其是EDA的仿真技术能打破专业教学上的一些局限性,在激发学生学习兴趣的同时保证了良好的教学效果。
数字秒表是采用数字电路实现对分、秒,数字显示的计时装置,广泛用于体育竞赛中。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字秒表的精度,远远超过老式秒表,秒表的数字化给人们生产生活带来了极大的方便。
本文设计一块数字秒表,能够精确反应计时时间,并完成复位、计时功能。
秒表计时的最大范围为1小时,精度为0.01秒。
秒表可得到计时时间的分、秒、0.1秒等多量,且各多量单位可以正确进位。
当复位清零有效时,秒表清零并做好计时准备。
在任何情况下,只要按下复位开关,秒表都要无条件地进行复位操作,即使在计时过程中也要无条件地清零。
设置秒表启动/停止开关。
按下该开关,秒表即刻开始计时,并得到计时结果;放开该开关时,计时停止。
2系统总体设计
2.1总体设计思路
根据系统设计要求,可以预先设计若干个不同进制的计数器单元模块,然后将其进行例化组合来得到数字秒表系统。
要满足数字秒表的精度,首先要获得精确的计时基准信号,这里的系统精度要求为0.01秒,因此必须设置周期为0.01秒的时钟脉冲。
1/100秒、秒、分等计时单位之间的进位转换可以通过不同进制的计数器实现,现在分别设计十进制计数器和六进制计数器,每位计数器均能输出相应计时单位计数结果,其中,十进制计数器可以实现0.01秒、0.1秒、1秒和1分为单位的计数,六进制计数器可以实现以10秒、10分为单位的计数。
把各计数器级联,即可同时显示白分秒,秒和分钟。
停止和启动功能可以通过计时使能信号完成。
信号有效时正常计时,否则没有脉冲输入到计数器,从而停止计时。
因为一旦按下复位清零开关数字秒表就无条件清零,因此其优先级必须高于计时使能信号。
2.2系统框图
数字秒表的系统框图如图1所示。
Clk0是周期为0.01秒的时钟脉冲,clr0为复位清零信号,en为计时使能信号,dataout[23…0]为输出信号,以不同的时钟周期为单位的计数器所对应的输入信号如表1所示。
Stopwatch
inst
图1数字秒表系统框图
表1计数单位及对应的输出单位
计数时钟周期
对应的输出信号
Dataout[3…0]
0.01秒
Dataout[7…4]
0.1秒
Dataout[11…8]
1秒
dataout[15…12]
10秒
Dataout[19…16]
1分
Dataout[23…20]
10分
2.2.1十进制模块
图2十进制计数器示意图
其中,clk为时钟脉冲信号,计数器的状态在时钟上升沿发生改变:
clr为复位清零信号,高电平有效;ena为计数使能信号,高电平有效;q[3…0]为计数输出信号,输出计数器当前的值;co为进位输出信号,当计数器满时,产生进位,高电平有效。
2.2.2六进制模块
图3六进制示意图
六进制除了计数的进制不同之外,其余输入和输出信号和十进制的相同。
3硬件设计原理
3.1系统逻辑图
数字秒表的实现主要是依赖于两个计数器模块的设计:
十进制计数器和六进制计数器。
通过例化这两个模块和模块之间特定形式的级联就可得到数字秒表,电路原理图如图4所示,其中,单元模块U4、U6为六进制计数器,实现以10秒和1分为单位的计时进位,其余单元模块均为十进制计数器。
图4数字秒表逻辑图
3.2.引脚分配
3.2.1十进制计数器的引脚分配
图5十进制计数器的引脚分配图
3.2.2六进制计数器的引脚分配
图6六进制计数器的引脚分配图
3.3系统硬件要求
1.时钟信号为1HZ;
2.FPGA芯片型号EP1K30TC144—3;
3.8个7段扫描共阴极数码显示管;
4.按键开关(清零、复位、暂停、计时等);
3.4硬件调试
将时序仿真正确的文件下载到实验箱中的EP1K30TC144—3中,通过合适的管脚分配,将相应的管脚连接起来,验证设计是否完成设计要求:
按下计时键时,开始计时,个位数满9向十位进1,十位数满6向前进1,计时的最大范围为1小时,精度为0.01秒;按下清零位开始无条件清零;按下复位键开始复位;按下暂停键计时暂停。
4系统仿真与分析
4.1十进制计数器产生的仿真波形
图7-a十进制计数器产生的仿真波形
图7-b六进制计数器产生的仿真波形
从图7-a可以看出,当复位信号clr高电平有效时,计数输出信号无条件清零,
被赋值为0(低电平);而从图7-b可以看出,当计数使能信号ena有效时,计数
器允许计数,每一个时钟周期的上升沿到达时,计数器都进行加1操作,当计数
器计满10个数时,输出进位信号,同时计数器清零并重新计数。
4.2六进制计数器产生的仿真波形
图8六进制计数器产生的仿真波形
六进制计数器与十进制计数器输入输出信号的定义完全相同,唯一不同的是计数器容量的大小差别。
当计数使能信号ena有效时,计数器允许计数,
每一个时钟周期的上升沿到达时,计数器都进行加1操作,当计数器计满6个数
输出进位信号,同时计数器清零并重新计数。
结论
两周过去了,数字秒表的课程设计已经完成,论文也已经写好,总算是有了最终结果。
通过这次课程设计,让我收获很多,也深有体会。
在整个课程设计过程中,不仅老师为我提供很好的指导,而且同学们给予我热情的帮助,没有他们的援手我就做不成这个课程设计。
设计过程中,我的时间主要用在仿真这一步,之前很少用过这个软件,很多地方都得自己慢慢摸索。
在这个实践过程中,我深刻的体会到掌握基础知识的重要性,掌握了知识,发现问题和解决问题才成为可能。
还有,我们必须要有耐心和毅力。
致谢
我要感谢韦艳霞老师的认真指导和宝贵意见。
感谢刘青正老师为我提供的DSP试验箱,使我很快的完成硬件的试验。
感谢罗承旺同学衷心热情的帮助。
感谢电科081班的给过我帮助的同学。
如果没有认真负责的老师和热情的同学提供的帮助,我就难以完成这个课程设计,所以我要感谢他们。
参考文献
1.潘松,黄继业.EDA技术实用教程(第二版)[M].北京:
北京航空航天大学出版社,1990
2.刘欲晓,方强,黄宛宁等.EDA技术与VHDL电路开发应用实践[M].北京:
电子工业出版社,2009
3.谭会生,瞿遂春等.EDA技术综合应用实例与分析[M].西安:
西安电子科技大学出版社.2004.
附录
十进制计数器模块的VHDL实现如下:
LIBRARYIEEE;-------加载库文件
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt10IS-----定义实体
PORT(
clk:
INSTD_LOGIC;------时钟信号
clr:
INSTD_LOGIC;------复位信号
ena:
INSTD_LOGIC;------计数信号
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);---计数输出信号
co:
OUTSTD_LOGIC----进位输出信号
);
ENDcnt10;
ARCHITECTURErtlOFcnt10IS----定义结构体
SIGNALtmp:
STD_LOGIC_VECTOR(3DOWNTO0);----定义计数器
BEGIN
PROCESS(clk,clr,ena)---当clk、clr、ena信号发生变化时,启动计数进程
BEGIN
IFclr='1'THEN---复位清零信号有效
tmp<="0000";---任何时刻均将计数器清零
ELSIFclk'EVENTANDclk='1'THEN---时钟上升沿
IFena='1'THEN-----允许计数
IFtmp="1001"THEN-----计数器满
tmp<="0000";
ELSE
tmp<=tmp+'1';----计数器加1
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(tmp)---当计数器发生变化时,启动输出进程
BEGIN
IFtmp="0000"THEN---计数器状态为0时
co<='1';----进位输出信号有效
ELSE
co<='0';----否则,为0
ENDIF;
ENDPROCESS;
q<=tmp;----输出计数器的值
ENDrtl;
六进制计数器模块的VHDL实现如下:
LIBRARYIEEE;-------加载库文件
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt6IS-----定义实体
PORT(
PORT(
clk:
INSTD_LOGIC;------时钟信号
clr:
INSTD_LOGIC;-----复位信号
ena:
INSTD_LOGIC;-----计数信号
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);---计数输出信号
co:
OUTSTD_LOGIC----进位输出信号
);
ENDcnt6;
ARCHITECTURErtlOFcnt6IS----定义结构体
SIGNALtmp:
STD_LOGIC_VECTOR(3DOWNTO0);----定义计数器
BEGIN
PROCESS(clk,clr,ena)---当clk、clr、ena信号发生变化时,启动计数进程
BEGIN
IFclr='1'THEN---复位清零信号有效
tmp<="0000";-----计数器清零
ELSIFclk'EVENTANDclk='1'THEN---到达时钟上升沿
IFena='1'THEN---允许计数
IFtmp="0101"THEN-----计数器满
tmp<="0000";
ELSE
tmp<=tmp+'1';----计数器加1
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(tmp)---当计数器发生变化时,启动输出进程
BEGIN
IFtmp="0000"THEN----进位输出信号有效
co<='1';
ELSE
co<='0';----否则,为0
ENDIF;
ENDPROCESS;
q<=tmp;---输出计数器的值
ENDrtl;
数字秒表顶层模块的VHDL实现如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYstopwatchIS-----定义实体
PORT(
clk0:
INSTD_LOGIC;----定义时钟信号,周期为0.01秒
clr0:
INSTD_LOGIC;---定义复位信号
en:
INSTD_LOGIC;---定义计时使能信号
dataout:
OUTSTD_LOGIC_VECTOR(23DOWNTO0)---输出计时结果
);
ENDstopwatch;
ARCHITECTURErtlOFstopwatchIS---定义结构体
COMPONENTcnt6IS---定义六进制计数器元件
PORT(
clk:
INSTD_LOGIC;
clr:
INSTD_LOGIC;
ena:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC
);
endcomponentcnt6;
COMPONENTcnt10IS---定义十进制计数器元件
PORT(
clk:
INSTD_LOGIC;
clr:
INSTD_LOGIC;
ena:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
co:
OUTSTD_LOGIC
);
ENDCOMPONENTcnt10;
SIGNALco1:
STD_LOGIC;---定义计数器元件的进位输出信号
SIGNALco2:
STD_LOGIC;
SIGNALco3:
STD_LOGIC;
SIGNALco4:
STD_LOGIC;
SIGNALco5:
STD_LOGIC;
BEGIN---元件例化语句,通过计数器的级联实现数字秒表
U1:
cnt10PORTMAP(clk0,clr0,en,dataout(3downto0),co1);
U2:
cnt10PORTMAP(co1,clr0,en,dataout(7downto4),co2);
U3:
cnt10PORTMAP(co2,clr0,en,dataout(11downto8),co3);
U4:
cnt6PORTMAP(co3,clr0,en,dataout(15downto12),co4);
U5:
cnt10PORTMAP(co4,clr0,en,dataout(19downto16),co5);
U6:
cnt6PORTMAP(co5,clr0,en,dataout(23downto20));
ENDrtl;