eda数字式竞赛抢答器 1.docx

上传人:b****2 文档编号:1074625 上传时间:2023-04-30 格式:DOCX 页数:16 大小:189KB
下载 相关 举报
eda数字式竞赛抢答器 1.docx_第1页
第1页 / 共16页
eda数字式竞赛抢答器 1.docx_第2页
第2页 / 共16页
eda数字式竞赛抢答器 1.docx_第3页
第3页 / 共16页
eda数字式竞赛抢答器 1.docx_第4页
第4页 / 共16页
eda数字式竞赛抢答器 1.docx_第5页
第5页 / 共16页
eda数字式竞赛抢答器 1.docx_第6页
第6页 / 共16页
eda数字式竞赛抢答器 1.docx_第7页
第7页 / 共16页
eda数字式竞赛抢答器 1.docx_第8页
第8页 / 共16页
eda数字式竞赛抢答器 1.docx_第9页
第9页 / 共16页
eda数字式竞赛抢答器 1.docx_第10页
第10页 / 共16页
eda数字式竞赛抢答器 1.docx_第11页
第11页 / 共16页
eda数字式竞赛抢答器 1.docx_第12页
第12页 / 共16页
eda数字式竞赛抢答器 1.docx_第13页
第13页 / 共16页
eda数字式竞赛抢答器 1.docx_第14页
第14页 / 共16页
eda数字式竞赛抢答器 1.docx_第15页
第15页 / 共16页
eda数字式竞赛抢答器 1.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

eda数字式竞赛抢答器 1.docx

《eda数字式竞赛抢答器 1.docx》由会员分享,可在线阅读,更多相关《eda数字式竞赛抢答器 1.docx(16页珍藏版)》请在冰点文库上搜索。

eda数字式竞赛抢答器 1.docx

eda数字式竞赛抢答器1

课程EDA技术课程设计

题目数字式竞赛抢答器

专业电子信息工程

主要内容、基本要求、主要参考资料等

主要内容:

设计一个可容纳6组参赛的数字式抢答器,当第一个人按下抢答按钮时,其他组的按钮不起作用。

当主持人按下“复位”按钮,所有组的按键才可用。

基本要求:

1、设计一个可容纳6组参赛的数字式抢答器,每组设一个按钮,供抢答使用。

2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。

3、设置一个主持人“复位”按钮。

4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2-3秒的音响。

5、设置一个计分电路,每组开始预置100分,由主持人记分,答对一次加10分,答错一次减10分。

主要参考资料:

[1]潘松著.EDA技术实用教程(第二版).北京:

科学出版社,2005.

[2]康华光主编.电子技术基础模拟部分.北京:

高教出版社,2006.

[3]阎石主编.数字电子技术基础.北京:

高教出版社,2003.

完成期限2011.3.11

指导教师

专业负责人

2011年3月7日

一、总体设计思想

1.基本原理

本设计为六路智能抢答器,所以这种抢答器要求有六路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警、预置答题时间,同时该系统还应有复位、倒计时启动功能。

抢答过程:

主持人按下系统复位键(RST),系统进入抢答状态,计时模块和计分模块输出初始信号给数码显示模块并显示出初始值。

当某参赛组抢先将抢答键按下时,系统将其余三路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。

主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时,在规定的时间内根据答题的正误来确定加分或减分,并通过数码显示模块将成绩显示出来。

计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。

当主持人给出倒计时停止信号时,扬声器停止鸣叫。

若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。

主持人按下复位键,即RST为高电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。

此抢答器的设计中采用自顶向下的设计思路,运用VHDL硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来。

2.设计框图

 

主电路

 

二、设计步骤和调试过程

总体设计电路

1、模块设计和相应模块程序

将该任务分成几个模块进行设计,分别为:

抢答器鉴别模块、抢答器记分模块、译码模块、数选模块、报警模块,最后是撰写顶层文件。

抢答器鉴别模块:

在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是超前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余过滤抢答封锁的功能。

其中有六个抢答信号s0、s1、s2、s3、s4、s5;抢答使能信号s;抢答状态显示信号states;抢答与警报时钟信号clk2;系统复位信号rst;警报信号tmp。

抢答鉴别模块图

VHDL源程序

libraryieee;--抢答鉴别模块

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityqdjbis

port(rst,clk2:

instd_logic;

s0,s1,s2,s3,s4,s5:

instd_logic;

states:

bufferstd_logic_vector(5downto0);

tmp:

outstd_logic);

endqdjb;

architectureoneofqdjbis

signalst:

std_logic_vector(5downto0);

begin

p1:

process(s0,rst,s1,s2,s3,s4,s5,clk2)

begin

ifrst='0'then

tmp<='0';st<="0000";

elsifclk2'eventandclk2='1'then

if(s0='1'orst(0)='1')andnot(st

(1)='1'orst

(2)='1'orst(3)='1'orst(4)='1'orst(5)='1')thenst(0)<='1';

endif;

if(s1='1'orst

(1)='1')andnot(st(0)='1'orst

(2)='1'orst(3)='1'orst(4)='1'orst(5)='1')thenst

(1)<='1';

endif;

if(s2='1'orst

(2)='1')andnot(st(0)='1'orst

(1)='1'orst(3)='1'orst(4)='1'orst(5)='1')thenst

(2)<='1';

endif;

if(s3='1'orst(3)='1')andnot(st(0)='1'orst

(1)='1'orst

(2)='1'orst(4)='1'orst(5)='1')thenst(3)<='1';

if(s4='1'orst(4)='1')andnot(st(0)='1'orst

(1)='1'orst

(2)='1'orst(3)='1'orst(5)='1')thenst(4)<='1';

endif;

if(s5='1'orst(5)='1')andnot(st(0)='1'orst

(1)='1'orst

(2)='1'orst(3)='1'orst(5)='1')thenst(5)<='1';

endif;

tmp<=s0ors1ors2ors3ors4ors5;

endif;

endprocessp1;

p2:

process(states(0),states

(1),states

(2),states(3),states(4),states(5))

begin

if(st="0000")thenstates<="0000";

elsif(st<="0001")thenstates<="0001";

elsif(st<="0010")thenstates<="0010";

elsif(st<="0100")thenstates<="0011";

elsif(st<="0100")thenstates<="0100";

elsif(st<="0101")thenstates<="0101";

elsif(st<="1000")thenstates<="0110";

endif;

endprocessp2;

endone;

数据选择模块:

在这个模块中主要实现抢答过程中的数据输入功能,输入信号a[3..0]、b[3..0]、c[3..0];计数输出信号s;数据输出信号y;计数脉冲clk2,实现a、b、c按脉冲轮流选通,在数码管上显示。

数据选择模块

 

VHDL源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitysjxzis

port(a,b,c:

instd_logic_vector(3downto0);

clk2,rst:

instd_logic;

s:

outstd_logic_vector(1downto0);

y:

outstd_logic_vector(3downto0));

endsjxz;

architecturebody_chooserofsjxzis

signalcount:

std_logic_vector(1downto0);

begin

s<=count;

process(clk2,rst)

begin

if(rst='0')thencount<="00";

elsif(clk2'eventandclk2='1')then

if(count>="10")then

count<="00";

elsecount<=count+1;

endif;

endif;

casecountis

when"00"=>y<=a;

when"01"=>y<=b;

when"10"=>y<=c;

whenothers=>null;

endcase;

endPROCESS;

endbody_chooser

报警模块:

在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内有人抢答,有效电平输入信号i;状态输出信号q;计数脉冲clk2。

报警模块图

 

VHDL源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYALARMIS

PORT(CLK,I:

INSTD_LOGIC;

Q:

OUTSTD_LOGIC);

ENDALARM;

ARCHITECTUREBEHAVEOFALARMIS

SIGNALWARN:

STD_LOGIC;

SIGNALN:

INTEGERRANGE0TO20;

BEGIN

Q<=WARN;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFI='0'THEN

WARN<='0';

ELSIF(I='1'ANDN<=19)THEN

WARN<=NOTWARN;

N<=N+1;

ELSE

WARN<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDBEHAVE;

译码模块:

在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。

译码模块图

 

VHDL源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYYMQIS

PORT(AIN4:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDYMQ;

ARCHITECTUREARTOFYMQIS

BEGIN

PROCESS(AIN4)

BEGIN

CASEAIN4IS

WHEN"0000"=>DOUT7<="1111110";--0

WHEN"0001"=>DOUT7<="0110000";--1

WHEN"0010"=>DOUT7<="1101101";--2

WHEN"0011"=>DOUT7<="1111001";--3

WHEN"0100"=>DOUT7<="0110011";--4

WHEN"0101"=>DOUT7<="1011011";--5

WHEN"0110"=>DOUT7<="1011111";--6

WHEN"0111"=>DOUT7<="1110000";--7

WHEN"1000"=>DOUT7<="1111111";--8

WHEN"1001"=>DOUT7<="1111011";--9

WHENOTHERS=>DOUT7<="0000000";

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

 

译码显示电路图

顶层文件:

在这个模块中是对前面模块的综合编写的顶层文件。

VHDL源程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityqiangdaqiis

port(clk,clk2,s,s0,s1,s2,s3,s4,s5,stop,rst:

instd_logic;

n,k,q_out:

outstd_logic;

m:

outstd_logic_vector(1downto0);

a,b,c,d,e,f,g:

outstd_logic);

endqiangdaqi;

architecturebhvofqiangdaqiis

componentqdjbis

port(clk2,rst:

instd_logic;

s0,s1,s2,s3,s4,s5:

instd_logic;

tmp:

outstd_logic;

states:

outstd_logic_vector(5downto0));

endcomponent;

componentjsis

port(clk,rst,s,stop:

instd_logic;

warn:

outstd_logic;

ta,tb:

bufferstd_logic_vector(5downto0));

endcomponent;

componentsjxzis

port(clk2,rst:

instd_logic;

s:

outstd_logic_vector(1downto0);

a,b,c:

instd_logic_vector(3downto0);

y:

outstd_logic_vector(3downto0));

endcomponent;

componentymqis

port(ain4:

instd_logic_vector(3downto0);

dout7:

outstd_logic_vector(6downto0));

endcomponent;

componentalarmis

port(clk,i:

instd_logic;

q:

outstd_logic);

endcomponent;

signalstates_out,ta_out,tb_out,y_out:

std_logic_vector(3downto0);

signalledout:

std_logic_vector(6downto0);

signalw:

std_logic;

begin

a<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);e<=ledout

(2);f<=ledout

(1);g<=ledout(0);

u1:

qdjbportmap(clk2,rst,s0,s1,s2,s3,tmp=>k,states=>states_out);

u2:

jsportmap(clk,rst,s,stop,warn=>n,ta=>ta_out,tb=>tb_out);

u3:

sjxzportmap(clk2=>clk2,rst=>rst,s=>m,a=>states_out,b=>ta_out,c=>tb_out,y=>y_out);

u4:

ymqportmap(ain4=>y_out,DOUT7=>ledout);

u5:

alarmportmap(clk2,s,q_out);

endbhv;

2、仿真及仿真结果分析

抢答鉴别模块仿真图

数据选择模块仿真图

报警模块仿真图

译码模块仿真图

 

顶层文件仿真图

CLK接高电平,s0,s1,s2,sl3,s4,s5六个选手接低电平,鉴别器的输出接指示灯,译码器的输出接LED数码管,计分器的输出接显示译码器。

当主持人按下使能端时,六个选手同时抢答。

如图所示,若s0抢答,即为高电平时,s0灯亮,若回答正确,对其加分,即当时钟出现上升沿时就进行加一或者减一的操作。

3、实验调试结果

按下rst键清零,按下s键,观察数码管是否开始倒计时,扬声器是否发出报警声,按下s0,观察数码管是否显示1和抢答的时间,再按s1,s2,s3,s4.s5均不改变显示,按下rst键,观察是否清零,再按s键,不按别的,直到计时时间到,观察是否显示00,扬声器是否发出报警

第一个按下键的小组,抢答信号判定电路LOCK通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的锁存器清零,组别显示、计时和计分会保存到主持人对系统进行清零操作时为止。

当INI=1时系统复位,使组别显示信号G=0000,各组的指示灯信号S0=0,S1=0,S2=0,S3=0,S4=0,S5=0;当INI=0,即低电平有效,使其进入抢答鉴别状态,到CLK的上升沿到来时,以A组抢答成功为例,当输入信号为A=1,B=0,C=0,D=0,输出信号G=1000,A1=1,即为鉴别出A组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。

三、结论及心得体会

这次EDA课程设计了一个星期,在这期间学到了很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。

特别是当每一个子模块编写调试成功时,心里特别的开心。

但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

总的来说,这次设计的数字抢答器还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

 

参考资料

[1]潘松著.EDA技术实用教程(第二版).北京:

科学出版社,2005.

[2]康华光主编.电子技术基础模拟部分.北京:

高教出版社,2006.

[3]阎石主编.数字电子技术基础.北京:

高教出版社,2003.

[4]崔建明主编,电工电子EDA仿真技术北京:

高等教育出版社,2004

[5]侯继红,李向东主编,EDA实用技

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

当前位置:首页 > 小学教育 > 语文

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

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