EDA课程设计篮球倒计时VHDL_第1页
EDA课程设计篮球倒计时VHDL_第2页
EDA课程设计篮球倒计时VHDL_第3页
EDA课程设计篮球倒计时VHDL_第4页
EDA课程设计篮球倒计时VHDL_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、题目:篮球竞赛30s计时器设计一、设计目的 随着电子技术的高速发展和计算机技术的普遍应用,电子设计也越来越普遍地应用于整个电子行业中。电子设计是人们进行电子产品设计、开发和制造过程中十分关键的一步,其核心就是电子电路的设计。电子设计自动化(EDA)是在电子产品向更复杂、更高级,向数字化、集成化、微型化和低耗能方向发展过程中逐渐产生并日趋完善的电子设计方法,在这种方法中,设计过程的大部分工作(特别是底层工作)均由计算机自动完成,是电子技术发展历程中产生的一种先进的设计方法,是当今电子设计的主流。 在篮球比赛中,规定了球员的持球时间不能超过30秒,否则就犯规了。本课程设计的“篮球竞赛30秒计时器”

2、,可用于篮球比赛中,用于对球员持球时间30秒限制。一旦球员的持球时间超过了30秒,它自动的报警从而判定此球员的犯规。本课程设计是篮球竞赛30秒计时器。此计时器功能齐全,显示30秒倒计时功能,系统设置外部操作开关可以直接清零、启动、暂停,同时应用了七段数码管来显示数值,可以方便地实现断点计时功能,当计时器递减到零时,还会发出光电报警信号。本设计完成的中途计时功能,实现了在许多的特定场合进行时间追踪的功能,在社会生活中也具有广泛的应用价值.二、 设计要求用EDA技术设计一个30s计时器,具体技术要求如下:1、具有30s计时功能,并且能够实时显示计数结果。2、设有外部操作开关,控制计数器实现直接清零

3、、启动以及暂停/连续工作等操作。3、计时器为30s递减计时,计时间隔为1s。4、计时器递减计时到零时,数码显示器不能灭灯,同时发出光电报警信号。三、总体设计原理与内容 1、设计的总体原理 本设计为30秒计数器,它主要由外部开关,控制电路,秒脉冲发生器,计数器,译码器和报警电路组成。各部分相互联系,共同协作,实现电路功能。各部分关系框图如图3-1所示: 图3-1 总体框图 2、设计内容 本设计为30秒计数器,它主要分为三个部分:计数部分,显示部分和控制部分。其中计数器和控制电路是系统的主要部分。计数器完成30s计时功能,而控制电路具有直接控制计数器的启动计数、暂停连续计数、译码显示电路的显示功能

4、。为了满足系统的设计要求,在设计控制电路时,应正确处理各个信号之间的时序关系。在操作直接清零开关CLR时,要求计数器清零,数码显示器不灭灯。 清零开关不工作时置数键才有效,置数键PLD为1时,同时计数器完成置数功能,译码显示电路显示“30”字样;当启动开关为高电平时,计数器开始计数;为了简单起见,我们将暂停与连续的控制与开始用一个键控制。当计数器减到0时,启动报警系统,报警指示灯亮进行报警。通过控制脉冲信号的传送来达到相应的目的。3、设计方案 本设计主要能完成:显示30秒倒计时功能;系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;在直接清零时,数码管显示器灭灯;计时器为30秒

5、递减计时其计时间隔为1秒;计时器递减计时到零时,数码显示器不灭灯,同时发出光电报警信号等。经分析我们可以用两种方案进行实现:方案一:用VHDL编码进行实现。VHDL是一门硬件描述语言,可以实现各种组合电路及逻辑电路。使用VHDL编码实现,可读性强,易于理解,可以在软仿,硬仿时,依次进行查看其正确性,还能提高自己的编码水平,利于EDA课程的学习与应用。采用静态编码,先设计计数器进行计数,数值通过数码管显示电路进行显示。设置CLOCK为1HZ,数值变化周期为1秒。方案二:也是采用VHDL编码进行实现,但采用的是动态扫描法,设置一个片选信号,分时复用扫描两个数码管。这时就要设置两个时钟,因为1HZ的

6、时钟频率太小了,会使得看到的效果不连续,十位与个位产生分离,效果不好。可以另选一个频率1000HZ左右的时钟信号作为扫描时钟。这种设计节约了能量,延长了数码管的寿命,但引入了片选信号,又增加了一个时钟,所以较第一种方案复杂。方案三:用原理图输入法进行实现。用原理图书输入法也能实现,电路的仿真。但原理图输入法只适合中小型电路,而且需要良好的数字电路基础与电路功底。另外,原理图输入法,比较繁琐,不易于操作。综合比较,选择第一种方案。 四、EDA设计及仿真1、30S倒计时器源程序1. 计数模块计数模块,采用和三十秒减计数。计数间隔为1秒。其程序如下所示:-LIBRARY IEEE;USE IEEE.

7、STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-ENTITY CNT30 IS PORT (CLK,EN : IN STD_LOGIC; C0,C10 : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); -C0,C10表示十位和个位 END CNT30;-ARCHITECTURE behav OF CNT30 ISBEGIN PROCESS(CLK, EN)VARIABLE TMPA: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR (3 D

8、OWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN -检测时钟上升沿 TMPB:="0011"TMPA:="0000"; IF EN = '1' THEN - -检测是否允许计数(同步使能) IF TMPA="0000" THEN IF TMPB/="0000" THEN TMPA:="1001" TMPB:=TMPB-1; END PROCESS;C0<=TMPA;C10<= TMPB;END beha

9、v; -2、显示模块源程序 显示部分采用七段数码管进行实现。LED数码管及引脚图资料:7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,可以显示09等10个数字和小数点,使用非常广泛。这类数码管可以分为共阳极与共阴极两种,共阳极就是把所有LED的阳极连接到共同接点com,而每个LED的阴极分别为a、b、c、d、e、f、g及dp;共阴极则是把所有LED的阴极连接到共同接点com,而每个LED的阳极分别为a、b、c、d、e、f、g及dp,图中的8个LED分别与上面那个图中的ADP各段相对应,通过控制各个LED的亮灭来显示数字。我们采用共阴极接法,其图如下: 图

10、4-1 共阴极数码管连接图 输入相应的数值,对应驱动相关二极管点亮,显示相应的数值。显示部分功能表如表4-1所示: 表4-1 功能表 用数码管进行显示,需把各个数值译码后传输到数码管,分十位与个位分别进行显示,其程序如下:PRO2: PROCESS(DD) BEGIN CASE DD IS -DD表示十位WHEN "0000" => S1 <="0111111"-显示0WHEN "0001" => S1 <="0000110"-显示1WHEN "0010" => S

11、1 <="1011011"-显示2WHEN "0011" => S1 <="1001111"-显示3WHEN "0100" => S1<="1100110"-显示4WHEN "0101" => S1 <="1101101"-显示5WHEN "0110" => S1 <="1111101"-显示6WHEN "0111" => S1 <

12、="0000111"-显示7WHEN "1000" => S1 <="1111111"-显示8WHEN "1001" => S1 <="1101111"-显示9WHEN OTHERS =>S1<="0000000" END CASE ; END PROCESS; PROCESS(SS) BEGIN CASE SS IS -SS表示个位WHEN "0000" => S0 <="0111111"

13、;-显示0WHEN "0001" => S0 <="0000110"-显示1WHEN "0010" => S0 <="1011011"-显示2WHEN "0011" => S0 <="1001111"-显示3WHEN "0100" => S0<="1100110"-显示4WHEN "0101" => S0 <="1101101"-显示5W

14、HEN "0110" => S0 <="1111101"-显示6WHEN "0111" => S0 <="0000111"-显示7WHEN "1000" => S0 <="1111111"-显示8WHEN "1001" => S0 <="1101111"-显示9WHEN OTHERS =>S0<="0000000" END CASE ;END PROCESS

15、;END A;2、总源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-ENTITY CNT30 ISPORT(CLK,CLR: INSTD_LOGIC;PLD,ENB : INSTD_LOGIC; -PLD表示复位信号 WARN: OUT STD_LOGIC; S1,S0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-译码输出,S1为十位S0为个位END CNT30;-ARCHITECTURE A OF CNT30 ISSIGNAL DD: STD_LOGIC_VE

16、CTOR (3 DOWNTO 0);-DD表示十位SIGNAL SS : STD_LOGIC_VECTOR (3 DOWNTO 0) ;-SS表示个位BEGINPRO1: PROCESS (CLK,CLR,ENB) VARIABLE TMPA: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR (3 DOWNTO 0); VARIABLE TMPWARN: STD_LOGIC;BEGIN IF CLR='1' THEN TMPA:="0000"TMPB:="0000&quo

17、t;TMPWARN:='0' ELSIF CLK'EVENT AND CLK='1' THEN IF PLD='1' THEN TMPB:="0011"TMPA:="0000"TMPWARN:='0'-赋初值 ELSIF ENB='1' THEN IF TMPA="0000" THEN IF TMPB/="0000" THEN TMPA:="1001" TMPB:=TMPB-1; ELSE TMPWARN:=

18、'1' END IF; ELSE TMPA:=TMPA-1; END IF; END IF; END IF; SS<=TMPA;DD<=TMPB;WARN<=TMPWARN; END PROCESS; -PROT2显示部分PRO2: PROCESS(DD) BEGIN CASE DD IS -十位显示部分WHEN "0000" => S1 <="0111111"-显示0WHEN "0001" => S1 <="0000110"-显示1WHEN "0

19、010" => S1 <="1011011"-显示2WHEN "0011" => S1 <="1001111"-显示3WHEN "0100" => S1<="1100110"-显示4WHEN "0101" => S1 <="1101101"-显示5WHEN "0110" => S1 <="1111101"-显示6WHEN "0111&qu

20、ot; => S1 <="0000111"-显示7WHEN "1000" => S1 <="1111111"-显示8WHEN "1001" => S1 <="1101111"-显示9WHEN OTHERS =>S1<="0000000" END CASE ; END PROCESS; PROCESS(SS)BEGIN CASE SS IS -个位显示部分WHEN "0000" => S0 <=&q

21、uot;0111111"-显示0WHEN "0001" => S0 <="0000110"-显示1WHEN "0010" => S0 <="1011011"-显示2WHEN "0011" => S0 <="1001111"-显示3WHEN "0100" => S0<="1100110"-显示4WHEN "0101" => S0 <="11

22、01101"-显示5WHEN "0110" => S0 <="1111101"-显示6WHEN "0111" => S0 <="0000111"-显示7WHEN "1000" => S0 <="1111111"-显示8WHEN "1001" => S0 <="1101111"-显示9WHEN OTHERS =>S0<="0000000" END C

23、ASE ;END PROCESS;END A;-2、源程序仿真结果及数据分析(1)仿真结果 图4-2 仿真结果部分波形图 图4-3仿真结果总体波形图(2)数据分析 由仿真结果图可以看出:先清零,再置数,置初始值为30 ,置数后,保持30,直至使能端ENB为高电平,等到上升沿的到来,开始计数,计数器减计数至零时,报警信号WARM变为高电平,发出报警信号。但信号在FPGA器件内部通过连线和逻辑门时,都有一定的延时。延时的大小与连线的长短和门单元的数目有关,同时还受器件的制造工艺、工作电压、温度等的影响。此外,信号的高低电平转换也需要一定的过度时间。由于存在这些因素的影响,多路信号的电平值发生变化时

24、,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的“毛刺”,称为“冒险”现象。可以通过改变设计来破坏毛刺的产生的条件,从而减少毛刺的发生。例如,在数字电路设计中,常采用格雷码。还可以利用D触发器消除毛刺。但由于时间和条件的限制没有进行时延现象的消除,在本次设计中没有太大影响,但在以后的工作中是一定要避免的。五、硬件实现1、打开QuartusII软件,建立一个工程,将编写好的源代码加载进去进行仿真。2、代码编译成功之后,进行功能仿真,首先建立波形文件,设置时钟参数;将波形文件保存好,进行软件仿真;3、软仿真实现之后,要进行硬仿,即硬件实现。硬件实现简单明了,可以

25、清楚的看到实验的成功与否,而且真实可靠。为了实现硬仿,我们先进行管脚绑定。CLR ,ENB ,PLD分别由键8,键7及键6来执行,S1,S0分别由数码管8和数码管7来显示。绑定情况如图4-4所示: 图4-4 管脚绑定图4、管脚绑定好之后,进行编译。5、编译无误后,进行下载硬仿。硬件电路选择模式6,数码管8和数码管7分别显示计数值的十位与个位。键8,键7与键6分别代表清零,启动/暂停/连续与复位键。加载结果如图4-5所示: 图4-5 加载成功图 图 4-6 清零效果显示图 实验箱选择模式6.按下清零键,数码管清零,显示00,并且报警灯不亮。 图 4-7 复位效果显示图 释放清零键,按下复位键,显

26、示预置数30,上图为显示效果。 图 4-8 硬件运行效果剪影 释放复位键,按下启动按钮,计数器开始减计数,计数周期为1秒。图为计数器减至19时的效果。 图 4-9 光电报警示意图 计数器继续进行减计数,当减至0时出发光电报警信号进行报警。并保持数码管不灭,保持0状态。直至清零。重复上述过程。六、设计总结1、设计过程中遇到的问题及解决方法在此次设计中,我自己的动手能力有了显著的提高。在软仿的时候一切都比较顺利,但硬仿的时候,却发现有一个不该报警的地方报警了,看程序也没错误,波形也没错误,刚开始怎么也找不出问题,后来我们感觉应该还是程序的问题,便从程序入手,在程序中又强调了一下,报警条件,结果硬仿

27、正确了。所以说,实验就要不断的尝试,VHDL是一门语言,语言有些时候不仅仅是语法这么简单,只有在不断地调试中才能取得成功。在本次设计中,其实我们做了两种方案。第二种方案没有详细提及,该方案采用的时动态扫描。做完第一种方案之后,我们又进行了第二种方案的仿真,在硬仿时发现数码管不能正确显示,出现了乱码现象。这让我们很是费解,软仿没有错误,试验箱也不可能有问题,这是什么原因呢?我们思索了很久,也做了许多尝试,都没有成功。后来忽然间看到模式指示数码管旁边有一个短路帽,这让我哦联想到电路实验中短路帽的转换,所以,我把短路帽从上方拿到了下方,结果就正确显示了。还有一次,同学的显示怎么都成功不了,按了开始就变为0,完全看不到变化现象,我看了程序感觉没错,就觉得是不是时钟设置的问题,我把它的时钟频率调小之后,发现果真正确显示了。2,设计体会为期一周的EDA课程设计就要结束了,在这一周的实训中,我收获颇丰

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论