基于VHDL的电子秒表课程设计报告.docx
- 文档编号:5814484
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:10
- 大小:161.48KB
基于VHDL的电子秒表课程设计报告.docx
《基于VHDL的电子秒表课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于VHDL的电子秒表课程设计报告.docx(10页珍藏版)》请在冰豆网上搜索。
基于VHDL的电子秒表课程设计报告
课程设计报告
题目:
电子秒表
课程:
《EDA技术》课程设计
专业班级:
电信07级2班
学生姓名:
学号:
完成日期:
2010-6-15
机电工程学院
目录
摘要……………………………………………………………………3
1概述…………………………………………………………………3
1.1课程设计目的……………………………………………………3
1.2课程设计内容……………………………………………………3
1.3课程设计原理……………………………………………………3
2设计过程……………………………………………………………4
2.1模块1……………………………………………………………4
2.2模块2……………………………………………………………4
2.3模块3……………………………………………………………5
2.4顶层设计模块……………………………………………………5
3系统仿真……………………………………………………………5
3.1时序仿真…………………………………………………………5
3.2电路功能验证……………………………………………………6
3.3问题分析…………………………………………………………7
4心得体会………………………………………………………………7
参考文献…………………………………………………………………8
附录1:
源程序清单………………………………………………………8
摘要
数字秒表是生活中大家都很熟悉的事物,在EDA设计中也是一个不错的选题。
设计首先需要考虑秒表的整体构成,主要由分频器与计数器组成。
通过计数器进位端相联系。
设计好顶层原理图后,需要用VHDL语言对各个模块进行行为描述,完成对各模块的设计。
这应该属于自定向下,模块化的设计方法。
1概述
1.1课程设计目的
了解各种PLD器件的基本结构,掌握QUARTUSII的使用方法,用图形输入法和VHDL完成规定的基本练习题,在此基础上完成一个数字系统设计题的设计、仿真、下载(FPGA实现)。
通过课程设计使学生能熟练掌握一种EDA软件(QUARTUSII)的使用方法,能熟练进行设计输入、编译、管脚分配、下载等过程。
使学生能利用EDA软件(QUARTUSII)进行至少一个电子技术综合问题的设计(内容可由老师指定或自由选择),设计输入可采用图形输入法或VHDL硬件描述语言输入法。
使学生初步具有分析、寻找和排除电子电路中常见故障的能力。
1.2课程设计内容
使用VHDL语言描述一个秒表电路,利用QuantusII软件进行源程序设计,编译,仿真,最后形成下载文件下载至装有FPGA芯片的实验箱,进行硬件测试,要求实现秒表功能。
1.3课程设计原理
秒表的逻辑结构较简单,它主要由、显示译码器、分频器、十进制计数器和6进制计数器组成。
在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。
秒有共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便与同显示译码器(七段数码管驱动译码器)的连接,当计时达60分钟后,蜂鸣器鸣响10声。
四个10进制计数器:
用来分别对百分之一秒、十分之一秒、秒和分进行计数;两个6进制计数器:
用来分别对十秒和十分进行计数;分频器:
用来产生100HZ计时脉冲;显示译码器:
完成对显示的控制。
选定实验箱产生的频率送入分频器,输出100Hz频率,驱动显示百分秒的十进制计数器,此计数器进位端接显示时分秒的十进制计数器。
依次接下去,分别是秒,十秒,分,十分。
最后设计一个驱动蜂鸣器的模块。
2设计过程
2.1模块1——分频器
要驱动最小的时间单位百分秒需要一百赫兹的频率,而实验箱不提供这个频率,所以需要一个分频器来提供。
分频器原理:
输入一个较高的频率,比如750kHz,则设计算法,使得每输入7500个脉冲输出一个脉冲,这样输出端口就提供一个100Hz的频率。
部分源程序及说明:
ARCHITECTUREARTOFCLKGENIS
SIGNALCNTER:
INTEGERRANGE0TO10#119999#;
BEGIN
PROCESS(CLK)IS
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNTER=10#119999#THENCNTER<=0;——
ELSECNTER<=CNTER+1;——对输入脉冲计数7500次
ENDIF;
ENDIF;
endprocess;
PROCESS(CNTER)IS
BEGIN
IFCNTER=10#119999#THENNEWCLK<='1';——每计数7500次——输出一个脉冲
ELSENEWCLK<='0';
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
模块符号:
2.2模块2——十进制计数器
十进制计数器就是输入一个时钟脉冲计一个数,计数当前值通过4位输出端口输出。
当计到九且再来一个脉冲时计数输出清零,且进位端给出高电平。
再来脉冲继续计数,进位端清零。
计数只有在使能端为1时有效,否则保持。
部分源程序及说明:
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');——清零
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI<9THENCQI:
=CQI+1;COUT<='0';——计数,进位端清零
ELSECQI:
=(OTHERS=>'0');COUT<='1';——计数端清零,进位端置1。
ENDIF;
ENDIF;
ENDIF;
CQ<=CQI;
ENDPROCESS;
ENDbehav;
模块图:
2.3模块3——六进制计数器
六进制计数器与十进制的很相似,区别仅在于输入六个脉冲时计数端清零,进位端置1。
这里不再赘述。
2.4顶层设计模块
顶层文件是一个原理图文件,见附录源程序清单。
3系统仿真
3.1时序仿真
分频器时序仿真结果:
仿真时间是100ms,输入脉冲是上面一排,下面是输出脉冲,100ms内有100个脉冲,即输出是一个100Hz时钟信号。
十进制计数器仿真结果:
仿真时间50us,时钟周期2us。
由图可见,使能端使能功能,复位端清零功能均正常。
计数端十进制计数正常,进位端进位时间正常。
六进制计数器仿真结果:
仿真时间50us,时钟周期2us。
由图可见,使能端使能功能,复位端清零功能均正常。
计数端六进制计数正常,进位端进位时间正常。
3.2电路功能验证
各模块与整体设计完毕并仿真得到预期结果后,就开始分配管脚,下载进行硬件测试。
分配管脚在AssignmentEditor里。
根据自己选择的模式,选择所需输入输出设备,比如按键,数码管。
查表获知管脚名称,写好后保存,全程编译。
管脚就分配好了,在顶层原理图上会自动显示管脚名称。
接下来将程序下载至芯片。
Tools里的programer。
检测到硬件后,选addfiel,找到自己的文件,选中后点Start开始下载。
下载完成后就开始硬件测试。
用短路帽选好实验箱上的时钟频率,按下使能键,看到数码管显示秒表开始计时。
再按使能键停止计时。
按复位键清零。
等到计时一个小时后,蜂鸣器响十秒。
在此后的十分钟里,每分钟开始的十秒会响,十分钟后不再响。
硬件测试达到预期效果。
3.3问题分析
整个设计过程中遇到很多问题,选择其中有价值的几个说一下。
有一次硬件测试时发现秒的各位逢九就会向高位进位。
就是说18下一个是29,接下来是20,21。
。
。
经过分析认为是计数器逻辑存在问题,见九就进位,并不等待下一个上升沿到来。
检查源程序,问题果然是这样的。
修改源程序,使得计到9,再等到下一个时钟上升沿时才进位。
保存,编译,再验证,问题解决。
还有一个问题就是发现秒走得太快,不符合实际。
认为是分频器有问题,但是检查源程序后发现逻辑是正确的。
时序仿真后发现了问题:
每一个输出脉冲都带一个毛刺,相当于输出频率提高了一倍。
解决办法:
修改源程序逻辑以降低输出频率到原来的一半,或者选用相当于原来一半的输入频率。
最后一个问题:
将最高为的计数器进位输出端接扬声器,它不会响。
查阅资料后发现需要用一个有一定频率的高低变化电平来驱动扬声器。
于是将十分与十秒的进位端还有1000Hz的时钟接与门,将与门输出接扬声器,问题解决。
4心得体会
下面谈谈本次设计中的心得。
通过这次设计,首先把课堂上学习的硬件描述语言应用到了实际,巩固了已经学到的东西,并对它有了更深层次的理解。
理论应用到实际总是能让人学到很多。
其次,实际操作让我了解一个电子系统的实际开发过程,这就是学到了实际操作方面的东西。
还有,这个设计过程让我体会到了模块化设计法的优势。
最后,在设计中遇到的各种问题让我产生很多思考,体会到依靠思考解决实际问题的乐趣。
最后想说的是,这虽然是一个很简单的系统,但是在设计过程中也称得上困难重重,历经困惑。
一个看上去挺简单的东西,要实现它却是另一回事,会有很多想不到的困难。
那么看上去就很难的东西,实现起来就更难于上青天了。
但是人们却能把这样的东西做出来,比如计算机系统。
这就是人类智慧和现代科技的伟力。
参考文献:
《EDA技术与PLD设计》《VHDL与可编程逻辑器件应用》《EDA技术及应用》
《现场可编程门阵列(FPGA)及其应用》
XX百科
附录1:
源程序清单:
clkgen.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCLKGENIS
PORT(CLK:
INSTD_LOGIC;
NEWCLK:
OUTSTD_LOGIC);
ENDENTITYCLKGEN;
ARCHITECTUREARTOFCLKGENIS
SIGNALCNTER:
INTEGERRANGE0TO10#119999#;
BEGIN
PROCESS(CLK)IS
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNTER=10#119999#THENCNTER<=0;
ELSECNTER<=CNTER+1;
ENDIF;
ENDIF;
endprocess;
PROCESS(CNTER)IS
BEGIN
IFCNTER=10#119999#THENNEWCLK<='1';
ELSENEWCLK<='0';
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
Cnt10.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI<9THENCQI:
=CQI+1;COUT<='0';
ELSECQI:
=(OTHERS=>'0');COUT<='1';
ENDIF;
ENDIF;
ENDIF;
CQ<=CQI;
ENDPROCESS;
ENDbehav;
Cnt6.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT6IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT6;
ARCHITECTUREbehavOFCNT6IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI<5THENCQI:
=CQI+1;COUT<='0';
ELSECQI:
=(OTHERS=>'0');COUT<='1';
ENDIF;
ENDIF;
ENDIF;
CQ<=CQI;
ENDPROCESS;
ENDbehav;
顶层原理图文件:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 电子 秒表 课程设计 报告