EDA课程设计智能竞赛抢答器.docx
《EDA课程设计智能竞赛抢答器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计智能竞赛抢答器.docx(24页珍藏版)》请在冰豆网上搜索。
![EDA课程设计智能竞赛抢答器.docx](https://file1.bdocx.com/fileroot1/2023-2/6/dbaaeb5c-8f31-4cd5-9dd8-274df76c98dd/dbaaeb5c-8f31-4cd5-9dd8-274df76c98dd1.gif)
EDA课程设计智能竞赛抢答器
唐山学院
《EDA技术》课程设计
题目
系(部)
班级
姓名
学号
指导教师
15年7月5日至7月10日共1周
2015年7月9日
《EDA技术》课程设计任务书
一、设计题目、内容及要求
设计题目:
《智力竞赛抢答器设计》
设计内容:
(1)设计一个四组(人)参加的智力竞赛抢答计时器,它具有四路抢答输入,主持人按下复位键后,系统复位进入抢答状态,计时显示初始值;
(2)某组首先按下抢答键,该路抢答信号,竞赛抢答器能够设别最先抢答的信号,锁定该信号,同时扬声器响起,参赛小组的序号在数码管上显示;
(3)主持人对抢答结果进行确认,给出倒计时计数允许信号,开始回答问题,计时显示器从初始值开始以秒为单位倒计时,计数至0时,停止计数,扬声器发出超时报警信号,以中止继续回答问题;
(4)参赛者在规定时间内回答完问题,主持人给出倒计时计数禁止信号,以免扬声器鸣叫,按下复位键,又可开始新一轮的抢答;
设计要求:
(1)根据任务要求确定电路各功能模块;
(2)写出设计程序;
(3)给出时序仿真结果;
(4)实现硬件调试;
二、设计原始资料
QuartusⅡ软件;EDA实验箱;计算机一台;
三、要求的设计成果(课程设计说明书、设计实物、图纸等)
课程设计说明书1份,不少于2000字,应包含设计原理分析、相关软件介绍、仿真波形分析,实验箱下载验证等。
四、进程安排
周1-周4:
查阅资料,上机编写并调试程序
周5:
课程设计答辩并交设计说明书
五、主要参考资料
[1].VokneiA.Pedroni.《VHDL数字电路设计教程》.电子工业出版社,2008.5
[2].潘松,黄继业.《EDA技术实用教程》(第二版).科学出版社,2005.2
[3].焦素敏.《EDA应用技术》.清华大学出版社,2002.4
指导教师(签名):
教研室主任(签名):
1引言
EDA技术又称电子设计自动化,它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。
在当今时代,现代电子产品几乎渗透了社会的各个领域,EDA技术是电子设计的发展趋势,EDA工具从数字系统设计的单一领域开始,应用范围已涉及模拟、微波等多个领域,可实现各个领域电子系统设计的测试、设计仿真和布局布线等。
设计者只要完成对电子系统的功能描述,就可利用计算机和EDA工具,进行设计处理,最终得到设计结果。
随着大规模集成电路技术和计算机技术的不断发展,即便是在普通的电子产品的开发方面,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性价比大幅度提高。
不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。
从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大的一种技术。
在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。
我们当代大学生必须能够熟练的掌握这门技术,并把它运用到实际当中,才能把我们所学的知识转化为对社会有贡献有帮助的能力,同时提升自身的实际发现问题和处理问题的能力。
2VHDL介绍
VHDL是一种硬件描述语言,它可以对电子电路和系统的行为进行描述,基于这种描述,结合相关的软件工具,可以得到所期望的实际电路与系统。
VHDL(VERYHIGHSPEEDINTEGRATED CIRCUITHARDWAREDESCRIPTIONLANGUAGE)语言最早是有美国国防部提出的,它支持行为领域和结构领域的硬件描述,并且可以从最抽象的系统级一直到最精确的逻辑级,在描述数字系统时,可以使用前后一致的语义和语法跨越多个层次,并且使用跨越多个级别的混合描述模拟该系统。
因此,它可以由高层次行为描述子系统及低层次详细实现子系统所组成的系统模拟。
它有两个版本IEEEStd1076-1987[LRM87]和IEEEStd1076-1993[LRM93],他们并不完全兼容,但做一些修改就可以兼容了。
VHDL被广泛使用的基本原因在于它是一种标准语言,是与工具和工艺无关的语言,从而可以方便的进行移植和重用。
使用VHDL语言描述的电路,可以进行综合与仿真。
然而,值得注意的事,尽管所有VHDL代码都可以仿真的,但并不是所有代码都是可综合的。
VHDL语言与常规的顺序执行的计算机程序不同,VHDL从根本上讲是并发执行的。
因此,我们通常称之为代码,而不是程序。
在VHDL中,只有在进程、函数和过程内部的语句才是顺序执行的。
VHDL语言的两个最直接的应用领域是可编程逻辑器件和专用集成电路。
3应用软件QuartusII
我们设计运用Quartus II,是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
4智力竞赛抢答器设计
4.1设计的目的
本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过对智力竞赛抢答器的设计,巩固和综合运用所学课程,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
本文以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言VHDL为主要表达方式,以QuartusⅡ开发软件设计的电子抢答器,具有抢答鉴别与锁存功能以及29秒答题限时功能,应用二极管和数码显示管为主要部件来设计扫描显示器。
通过课程设计深入理解VHDL语言的精髓和掌握运用所学的知识,达到课程设计的目标。
4.2设计的基本内容
(1)设计一个四组(人)参加的智力竞赛抢答计时器,它具有四路抢答输入,主持人按下复位键后,系统复位进入抢答状态,计时显示初始值;
(2)某组首先按下抢答键,该路抢答信号,竞赛抢答器能够设别最先抢答的信号,锁定该信号,同时扬声器响起,参赛小组的序号在数码管上显示;
(3)主持人对抢答结果进行确认,给出倒计时计数允许信号,开始回答问题,计时显示器从初始值开始以秒为单位倒计时,计数至0时,停止计数,扬声器发出超时报警信号,以中止继续回答问题;
(4)当主持人给出倒计时计数禁止信号时,扬声器停止鸣叫;
(6)参赛者在规定时间内回答完问题,主持人给出倒计时计数禁止信号,以免扬声器鸣叫,按下复位键,又可开始新一轮的抢答;
5总体设计思路及分析
5.1功能分析
抢答信号判别电路在系统复位后,对A、B、C、D四路抢答信号进行判别,输出端ALIGHT一DLIGHT与A—D一一对应,优胜者对应的XLIGHT为“1”(X为A,B,C,D),其余的为“0”,且将结果锁存。
完成抢答判别的同时,输出端stap输出有效信号,对扬声器进行选通。
分频电路用于产生倒计时电路所需的周期为ls的时钟脉冲,分频系数视输入时钟cLK的频率而定。
本次选用64HZ的clk,故进行拉64分频。
台号显示控制电路将输入信号D一A转换为二进制码,以驱动数码管,显示台号。
倒计时及时间显示控制电路由stop信号控制;由复位信号RESET将答题时间作为初值赋给倒计时计数器;由计数允许信号jishi启动计数。
输出信号为count1,count2,music与music1,其中music与music1为扬声器选通控制信号。
扬声器控制电路使系统只在两种情况下输出驱动扬声器的脉冲信号:
一种是倒计时计数器处于禁止计数状态(jishi无效),并且完成初始化,开始对抢答信号进行判别,当某参赛组抢先按下按键,系统在输出该组台号信息的同时,输出脉冲信号;一种是确认优先抢答的参赛组后,启动倒计时计数器计数(使jishi有效),当计数到“0”时,输出脉冲信号。
5.2整体设计思想
对于一个四人抢答器,四个选手在电路中的起始控制作用是一样的,当主持人宣布开始抢答时,谁先按下他前面的控制开关,他的灯就会亮,同时会有警报声响起并将抢答的组别号用数码管显示出来,而且这时其他人再怎么按,也就不会亮了,说明每个人对其他人都有一个先发制人的作用,及每个人都在时间控制下,能锁存住其他选手的功能。
当有一个指示灯亮了等待主持人确定,主持人确定以后计数器就开始从29开始倒计时,到0时还要警告声,直到主持人按下复位键为止。
在选手答题过程中,如果在规定时间内答完,主持人按下暂停键,倒计时停止显示当前时间,待主持人按下复位键以后开始下一轮抢答,这样计数器开始工作就是在选手抢答以后在主持人的控制下工作。
可以设四个人分别为输入端A,B,C,D;因为四个输入端在VHDL中,要求四个输入端应该是相等优先级别,但只要有一个输入端接入高电平时,就给其他信号一个反馈,使得他们的输入无效,及他们对应的指示灯不亮;所以我们可以也并行语句,让它们分为四个进程(process),同时也要求每个进程中都有反馈信号传给其他进程语句中,这样就可以完成抢答器基础部分了。
其次就是计数器部分,当有人开始进入回答部分,指示灯亮,同时警报器开始工作,当主持人确定以后计时开始并要求是倒计时方式用七段显示出,通过这些消息我们可知,主持人确认键即是计数器开始倒计时的信号,本设计中采用了元件例化(component)语句,在抢答器中给个选手已经开始回答了的信号插口,给计数器中的置零输入端,这样就基本上完成了设计,计数器采用倒计时方式,实现方式也很简单,只要给他们最初赋值为29,而后在每个上升沿来到减一,具体设计情况还是看看程序设计部分吧。
本设计由于蜂鸣器是在脉冲控制下才会发出明显声响,故我们在此加了一个分频器,具体请看程序。
5.3分频模块设计
此程序实现了64hz的脉冲信号64分频,得到1hz脉冲信号,给倒计时提供脉冲信号。
if(RISING_EDGE(CLK))then
temp:
=temp+1;
if(temp=64andena='1')then
temp:
=0;
其仿真图如下图所示
图5-1分频仿真图
如上图图3-1所示,程序进行了64分频,即当计64个上升沿以后计数器减1.
5.4复位模块设计
此程序将所有信号初始化,通过ean使数码管也初始化为初值29。
if(RESET='1')then
--fuweiLIGHT<="0000";ALIGHT<='0';BLIGHT<='0';CLIGHT<='0';
DLIGHT<='0';SET<='0';A0<='0';B0<='0';C0<='0';D0<='0';ean<='1';
其仿真图如下图所示
图5-2复位仿真图
由图3-2可以看出信号LIGHT初值为0,而倒计时初值为29.当A,B,C,D抢答时,A先抢答故A的灯ALIGHT为1(即点亮)同时数码管LIGHT显示为1,在有人抢答以后同时蜂鸣器(music0)响起,当主持人按下确认键(即jishi键)蜂鸣器停止再响,同时计时开始,复位(RESET)以后所有数据初始化
5.5抢答模块设计
抢答模块的程序设计如下
begin
A2<=notA1;B2<=notB1;
C2<=notC1;D2<=notD1;
L1:
process(A0)--qiangda
begin
A1<=(A0andB2andC2andD2);
endprocessL1;
L2:
process(B0)
begin
B1<=(B0andA2andC2andD2);
endprocessL2;
L3:
process(C0)
begin
C1<=(C0andA2andB2andD2);
endprocessL3;
L4:
process(D0)
begin
D1<=(D0andA2andC2andB2);
endprocessL4;
抢答模块符号图如下图所示
图5-3抢答器符号图
此符号为抢答器抢答符号图,实现抢答优先及在抢答以后对他人的锁定功能。
抢答模块仿真图如下所示
图5-4抢答模块仿真图
此程序实现了对A,B,C,D四个人抢答信号处理,只要有一人抢答以后其他人均不能再次抢答实现对他人信号的屏蔽,经过A0,B0,C0,D0将A,B,C,D信号锁存,其对应的等分别为ALIGHT,BLIGHT,CLIGHT,DLIGHT,其对应的组别分别为1,2,3,4当有人抢答以后相应的等亮同时在数码管上显示其对应的组别号。
按下reset后,数码管显示0,其对应的等也熄灭,所有值均被初始化。
5.6倒计时模块设计
begin
C1:
process(SET,CLK,MUSIC1,ena)
variabletemp:
integerrange0to255;
begin
if(SET='0')then
MUSIC1<='0';HIGH<="0010";LOW<="1001";
elsif(RISING_EDGE(CLK))then
temp:
=temp+1;
if(temp=64andena='1')then
temp:
=0;
if(LOW="0000")then--daojishisheji
LOW<="1001";
if(HIGH="0000")then
HIGH<="0010";
elseHIGH<=HIGH-1;
endif;
elseLOW<=LOW-1;
endif;
endif;
endif;
if(HIGH="0000"andLOW="0000")then
MUSIC1<=CLK;
endif;
endprocessC1;
倒计时模块符号图如下图:
图5-5倒计时符号图
此器件主要实现倒计时功能,同时带有暂停控制位stop。
倒计时仿真图如下:
图5-6倒计时暂停仿真图
由图5.6可以看出当选手在规定时间内答完题即倒计时没有减到0,主次人按下暂停键(即stop)以后倒计时停止显示当前时间,同时蜂鸣器也不会响
图5-7倒计时复位仿真图
由图5.7可以看出,当选手答题时间超过规定时间时,蜂鸣器(music)响起,倒计时数码管显示00,直到主持人按下复位键(RESET)以后,恢复初值,LIGHT显示0,倒计时数码管显示29,ALIGHT变为0(即熄灭),进入下一轮的抢答。
此程序主要功能是实现倒计时功能,当有人抢答以后蜂鸣器响起,在主持人确认以后开始倒计时29秒,如果在规定时间内回答完毕主此人则按下暂停键,停止计数显示当前时间如图5.6,如果超出规定时间则蜂鸣器响起,直到主此人按下复位键为止如图5.7,所有信号初始化,数码管显示29等待下一轮抢答。
总结:
由以上仿真图可知,该设计基本实现了原先的设计要求,并在此基础上添加了选手相关位置的显示灯等功能。
5.7硬件下载驱动
其硬件连接图如下:
图5-8硬件连接图
此图为硬件连接以后,当D抢答成功,LIGHT显示为4,数码管从29倒计时开始,同时LED第4个等亮如图5.8所示。
硬件大的引脚锁定如下图:
图5-9引脚锁定图
此图为硬件连接时的引脚锁定图。
6心得体会
通过这次EDA课程设计,我学到了很多的东西,不仅巩固以前所学过的知识,而且学到了很多在书本上所没有的知识。
从而进一步加深了对EDA的了解,让我对它产生了浓厚的兴趣。
这次课程设计让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,还要把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到的问题,可以说是困难重重,这毕竟第一次做,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次出抢答器设计让我体会最深的一点就是,一定要保持一种严谨的态度,尤其是在引脚锁定的时候一定要仔细认真,否则会严重影响实验结果。
而且我还意识到一点做事绝不能眼高手低,凡事想当然,只有自己亲自动手一遍一遍地查错改错才能使自己不断进步,并且从中会体会到成功的喜悦。
总得来说这次只能抢答器的设计比较成功的。
在设计中遇到了很多问题,尤其在下载到实验箱时,最后在老师的辛勤的指导下,终于下载调试成功。
参考文献
[1]VokneiA.Pedroni.《VHDL数字电路设计教程》[M].电子工业出版社,2008.5
[2]潘松,黄继业.《EDA技术实用教程》(第二版)[M].科学出版社,2005.2
[3]焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4
[4]曹昕燕,周凤臣,聂春燕.《EDA技术实验与课程设计》[M].清华大学出版社
[5]谭会生,张昌凡.《EDA技术及应用》(第二版)[M].西安电子科技大学出版社
附录一
--顶层头文件
libraryieee;
useieee.std_logic_1164.all;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityxxxis
port(A,B,C,D,RESET,jishi,stop:
instd_logic;
CLK:
instd_logic;
MUSIC:
outstd_logic;
MUSIC0:
outstd_logic;
COUT1:
outstd_logic_vector(6downto0);
COUT2:
outstd_logic_vector(6downto0);
LIGHT:
outstd_logic_vector(6downto0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:
outstd_logic);
endxxx;
architectureaaaofxxxis
componentCOUNTER29is
port(ean,jishi,SET,CLK,stop:
instd_logic;
MUSIC,MUSIC0:
outstd_logic;
COUT1:
outstd_logic_vector(6downto0);
COUT2:
outstd_logic_vector(6downto0));
endcomponentCOUNTER29;
componentqiangdais
port(A,B,C,D,RESET,jishi:
instd_logic;
CLK:
instd_logic;
ean,SET:
outstd_logic;
LIGHT:
outstd_logic_vector(6downto0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:
outstd_logic);
endcomponentqiangda;
signalean,SET:
std_logic;
begin
U0:
COUNTER29
Portmap(ean,jishi,SET,CLK,stop,MUSIC,MUSIC0,COUT1,COUT2);
U1:
qiangda
Portmap(A,B,C,D,RESET,jishi,CLK,ean,SET,LIGHT,ALIGHT,BLIGHT,CLIGHT,DLIGHT);
endaaa;
--抢答模块程序
libraryieee;
useieee.std_logic_1164.all;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityqiangdais
port(A,B,C,D,RESET,jishi:
instd_logic;
CLK:
instd_logic;
ean,SET:
outstd_logic;
LIGHT:
outstd_logic_vector(6downto0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:
outstd_logic);
endqiangda;
architectureqiangdaofqiangdais
signalA0,B0,C0,D0:
std_logic;
signalA1,B1,C1,D1:
std_logic;
signalA2,B2,C2,D2:
std_logic;
begin
A2<=notA1;B2<=notB1;
C2<=notC1;D2<=notD1;
L1:
process(A0)--qiangda
begin
A1<=(A0andB2andC2andD2);
endprocessL1;
L2:
process(B0)
begin
B1<=(B0andA2andC2andD2);
endprocessL2;
L3:
process(C0)
begin
C1<=(C0andA2andB2andD2);
endprocessL3;
L4:
process(D0)
begin
D1<=(D0andA2andC2andB2);
endprocessL4;
L5:
process(A1,B1,C1,D1,A,B,C,D,RESET)
begin
if(RESET='1')then--fuweiLIGHT<="0000";ALIGHT<='0';BLIGHT<='0';CLIGHT<='0';
DLIGHT<='0';SET<='0';A0<='0';B0<='0';C0<='0';D0<='0';ean<='1';
else
ean<='0';
if(A='1')then
A0<='1';
endif;
if(