EDA课程设计数字抢答器.docx

上传人:b****5 文档编号:7552424 上传时间:2023-01-24 格式:DOCX 页数:21 大小:188.69KB
下载 相关 举报
EDA课程设计数字抢答器.docx_第1页
第1页 / 共21页
EDA课程设计数字抢答器.docx_第2页
第2页 / 共21页
EDA课程设计数字抢答器.docx_第3页
第3页 / 共21页
EDA课程设计数字抢答器.docx_第4页
第4页 / 共21页
EDA课程设计数字抢答器.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

EDA课程设计数字抢答器.docx

《EDA课程设计数字抢答器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字抢答器.docx(21页珍藏版)》请在冰豆网上搜索。

EDA课程设计数字抢答器.docx

EDA课程设计数字抢答器

数字式竞赛抢答器

设计要求

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

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

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

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

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

1、总体方案设计原理及分析

1.1、方案原理

按照设计要求,设计一个4组参赛的抢答器,所以这种抢答器要求有四路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数码显示和蜂鸣报警等方式提示主持人并显示出组别;同时该系统还应有复位功能。

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

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

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

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

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

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

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

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

1.2、方案设计框图

主电路扩展功能电路

图1方案系统结构图

1.3、方案各路功能分析

此方案是由主体电路和扩展电路两部分构成,整个系统包括这样几个主要模块:

抢答鉴别模块、抢答计时模块、抢答计分模块、译码显示模块、报警模块。

主体电路完成基本的抢答功能,接通电源时,主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯;抢答开始时,主持人将控制开关拨到“开始”位置,扬声器给出声响提示,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。

然后由译码显示电路显示编号,扬声器发出短暂声响,提醒主持人注意。

扩展电路完成各选手的得分显示以及报警功能。

选手回答问题完毕,主持人操作计分开关,计分电路采用十进制加/减计数器、数码管显示。

本轮抢答完毕,主持人操作控制开关,使系统回复到禁止工作状态,以便进行下一轮抢答。

系统的输入信号有:

各组的抢答按钮s0、s1、s2、s3。

系统清零信号CLR,系统时钟信号CLK,复位信号RST,加分按钮端ADD,计时中止信号stop;计时十位和个位信号tb,ta。

;系统的输出信号有:

四个组抢答状态的显示LEDx(x表示参赛者的编号),四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。

2、主要模块设计

2.1、抢答鉴别模块

在这个模块中主要实现抢答过程中的抢答鉴别功能。

其电路框图如下。

其中,rst为复位信号,当该信号高电平有效时,电路无论处于何种状态都恢复为初始状态,即所有的输出信号都为0;EN为抢答使能信号,该信号高电平有效;s0、s1、s2、s3为抢答按钮,高电平时有效。

当使能信号EN为低电平时,如果有参赛者按下按钮,则提前抢答报警信号FALSE[3..0]的对应位输出高电平,以示警告;当EN为高电平时,首先将提前抢答报警信号FALSE[3..0]复位清0,然后根据选手按下抢答按钮的先后顺序选择最先抢答的信号,其对应的抢答状态显示信号LEDA~LEDD输出高电平,抢答成功组别编号由信号states输出,并锁存抢答器此时的状态,直到清0信号有效为止。

在每一轮新的抢答之前,都要使用复位清零信号rst,清除上一轮抢答对判断电路留下的使用痕迹,使电路恢复初始状态。

图2抢答鉴别模块框图

2.2、计时模块

在这个模块中主要实现抢答过程中的计时功能,在有组别抢答后开始倒计时,若在规定时间没人回答,则超时报警。

其中有系统复位信号rst;抢答使能信号s;无人抢答警报信号warn;计时中止信号stop;计时十位和个位信号tb,ta。

图3计时模块框图

2.3、计分模块

抢答计分电路的设计一般按照一定数制进行加减即可,但随着计数数目的增加,要将计数数目分解成十进制并进行译码显示会变得较为复杂。

为了避免该种情况,通常是将一个大的进制数分解为数个十进制以的进制数,并将计数器级连。

但随着数位的增加,电路的接口也会相应增加。

因此,本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,既减少了接口,又简化了设计。

其电路框图如下,该模块输入信号为加分选择信号add和组别选择信号chose[3..0],其中,加分选择信号add高电平有效,有效时对组别选择信号chose[3..0]选择的参赛组进行加分;组别选择输入信号chose[3..0]即抢答鉴别模块的输出信号states[3..0]。

输出信号分别对应四组竞赛者的得分。

图4计分模块框图

2.4、译码显示模块

译码显示模块用于显示每组选手的分数,计时的时间等信息。

显示电路的实质就是一个简单的LED共阴极显示模块的译码器。

7段数码管LED常用的一般8字型为a,b,c,d,e,f,g,P,其中P为小数点,共阴LED低电平有效。

在这里我们不需要用到小数点位,因此用位宽为7的矢量表示7段数码管即可。

7段LED共阴极显示模块的框图如图所示。

其中,IN4[3…0]为输入信号,以4位2进制数表示;OUT7[6…0]为输出信号,将输入的二进制数译码显示为十进制数字的0~9。

图5译码显示模块框图

2.5、报警模块

在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间有人抢答,指示灯显示抢答组别,扬声器发出2~3秒的音响。

即有效电平输入信号i;状态输出信号q。

图6报警模块框图

2.6、整体框图

从上述设计方案中我们可以大致得到数字竞赛抢答器的系统框图,如下图所示,其中抢答时钟信号clk2;系统复位信号rst;抢答使能信号s;抢答状态显示信号states;无人抢答警报信号warn;计时中止信号stop;计时十位和个位信号tb,ta。

图7抢答器系统框图

3、仿真结果

3.1、抢答鉴别模块仿真

抢答鉴别模块的仿真波形图如图所示。

当鉴别模块的清零复位信号rst为高电平时,无论四组参赛者谁按下抢答按钮,系统输出均为零,同时组别显示端输出信号也显示为零;当清零信号rst为低电平时,s0、s1、s2、s3四组参赛者谁先按下抢答按钮,其对应的显示灯LEDx亮起,states[3..0]输出抢答成功的选手编号。

图8抢答鉴别模块仿真波形图

3.2计时模块

计时模块的仿真波形如图所示。

实现了抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。

图9计时模块仿真波形图

3.3计分模块仿真

系统设计过程中,当计分复位端RST=1时,并且组别输入信号CHOSE=0000,其中的组别输入信号是抢答鉴别模块的输出信号,计分器复位,此时以上四组都不会产生加减分操作。

然而当计分复位端RST=0时,此时计分器可以计分。

当CHOS=0001时,组别显示为A组,此时主持人利用计分器对A组进行加减分操作;当CHOS=0010时,组别显示为B组,此时主持人则利用计分器对B组进行加减分操作,以此类推。

下图仿真为A组回答正确,加分。

图10计分模块仿真波形图

3.4译码模块仿真

当in4="0000",out7输出"0111111",此时数码管显示0;

当in4="0001",out7输出"0000110",此时数码管显示1;

当in4="0010",out7输出"1011011",此时数码管显示2;

当in4="0011",out7输出"1001111",此时数码管显示3;

当in4="0100",out7输出"1100110",此时数码管显示4;

当in4="0101",out7输出"1101101",此时数码管显示5;

当in4="0110",out7输出"1111101",此时数码管显示6;

当in4="0111",out7输出"0000111",此时数码管显示7;

当in4="1000",out7输出"1111111",此时数码管显示8;

当in4="1001",out7输出"1101111",此时数码管显示9;

图11译码显示模块仿真波形图

3.5、报警模块仿真

在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间如果人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;状态输出信号q。

仿真如下图。

图12报警模块仿真波形图

3.6、整体仿真

对电路整体进行仿真,得出如下仿真波形图12。

图中,当复位信号rst为高电平时,系统所有信号都清零;当主持人按下开始键,抢答器开始工作。

图13整体仿真波形图

4、原理连线图

根据系统设计要求,将各模块连线得到如下系统框图。

主持人按下使能端EN,抢答器开始工作。

四位抢答者谁先按下抢答按钮,则抢答成功,对应的显示灯亮起,并通过显示电路模块显示参赛编号。

抢答成功的选手进入答题阶段,如果正确回答问题,则加分信号add有效,给相应的参赛组加分。

如果复位信号rst有效,使得抢答器在下一轮抢答前,其抢答成功的组别判断恢复为初始状态,开始新一轮抢答。

 

图14原理连线图

5、致

对于此次课程设计,首先我得诚挚的感我的指导老师,从设计、整改及论文的定稿过程中,自始至终都倾注着老师的心血。

老师以严谨的治学之道、宽厚仁慈的胸怀、积极乐观的生活态度,兢兢业业的工作作风为我树立了学习的典,他们的教诲与鞭策将激励我在学习和生活的道路上励精图治,开拓创新。

他们渊博的知识、开阔的视野和敏锐的思维给了我深深的启迪。

我真诚地老师们的指导和关怀。

于个人,通过这次课程设计,我进一步加深了对电子设计自动化的了解。

并进一步熟练了对QuartusII软件的操作。

EDA这门课程也不像学习理论般那么空洞,有了更加贴切的了解及运用。

做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。

最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。

总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

6、详细仪器清单

名称

型号

数量

计算机

联想

1

QuartusII开发软件

9.0

1

EDA/SOPC实验开发系统

GW48-PK2

1

参考文献

[1]俊逸.EDA技术课程设计.华中科技大学.2008.2-12

[2]松.EDA应用技术.理工大学.2003

[3]徐志军.EDA技术与PLD设计[M].科学.2002

[4]黄仁欣.EDA技术实用教程.清华大学.2004

[5]建明.电工电子EDA仿真技术.高等教育,2004

[6]昕燕、周风臣、聂春燕.EDA技术试验与课程设计.清华大学.2007

[7]自美.电子线路设计实验测试.华中科技大学.1999

[8]世强、许杰.电子电路EDA技术.电子科技大学.2001

[9]江国强.EDA技术习题与实验.电子工业.2012

[10]高有堂.EDA技术及应用实践.清华大学.2006-08

 

附录

VHDL程序

1)抢答鉴别模块

libraryieee;

useieee.std_logic_1164.all;

entityqdjbis

port(rst:

instd_logic;

EN:

instd_logic;

s0,s1,s2,s3:

instd_logic;

LEDA:

outstd_logic;

LEDB:

outstd_logic;

LEDC:

outstd_logic;

LEDD:

outstd_logic;

false:

outstd_logic_vector(3downto0);

states:

outstd_logic_vector(3downto0));

endqdjb;

architectureoneofqdjbis

signaltmp:

std_logic_vector(3downto0);

signaltag:

std_logic;

begin

tmp<=s0&s1&s2&s3;

process(rst,EN,s0,s1,s2,s3,tmp)

begin

ifrst='1'THEN

states<="0000";

LEDA<='0';

LEDB<='0';

LEDC<='0';

LEDD<='0';

false<="0000";

tag<='0';

elsifEN='0'then

ifs0='1'then

false(3)<='1';

endif;

ifs1='1'then

false

(2)<='1';

endif;

ifs2='1'then

false

(1)<='1';

endif;

ifs3='1'then

false(0)<='1';

endif;

else

false<="0000";

iftag='0'then

iftmp="1000"then

LEDA<='1';

LEDB<='0';

LEDC<='0';

LEDD<='0';

states<="1000";

tag<='1';

elsiftmp="0100"then

LEDA<='0';

LEDB<='1';

LEDC<='0';

LEDD<='0';

states<="0100";

tag<='1';

elsiftmp="0010"then

LEDA<='0';

LEDB<='0';

LEDC<='1';

LEDD<='0';

states<="0010";

tag<='1';

elsiftmp="0001"then

LEDA<='0';

LEDB<='0';

LEDC<='0';

LEDD<='1';

states<="0001";

tag<='1';

endif;

endif;

endif;

endprocess;

endone;

2)计时模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjsis

port(clk,rst,s,stop:

instd_logic;

warn:

outstd_logic;

ta,tb:

bufferstd_logic_vector(3downto0));

endjs;

architectureoneofjsis

signalco:

std_logic;

begin

p1:

process(clk,rst,s,stop,ta)

begin

ifrst='0'orstop='1'then

ta<="0000";

elsifclk'eventandclk='1'then

co<='0';

ifs='1'then

ifta="0000"then

ta<="1001";co<='1';

elseta<=ta-1;

endif;

endif;

endif;

endprocessp1;

p2:

process(co,rst,s,stop,tb)

begin

ifrst='0'orstop='1'then

tb<="0010";

elsifco'eventandco='1'then

ifs='1'then

iftb="0000"thentb<="0011";

elsetb<=tb-1;

endif;

endif;

endif;

endprocessp2;

endone;

3)计分模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjfis

port(rst:

instd_logic;

add:

instd_logic;

chose:

instd_logic_vector(3downto0);

aa2,aa1,aa0,bb2,bb1,bb0:

outstd_logic_vector(3downto0);

cc2,cc1,cc0,dd2,dd1,dd0:

outstd_logic_vector(3downto0));

endentityjf;

architectureartofjfis

begin

process(rst,add,chose)is

variablea2,a1:

std_logic_vector(3downto0);

variableb2,b1:

std_logic_vector(3downto0);

variablec2,c1:

std_logic_vector(3downto0);

variabled2,d1:

std_logic_vector(3downto0);

begin

if(rst='1')then

a2:

="0001";a1:

="0000";

b2:

="0001";b1:

="0000";

c2:

="0001";c1:

="0000";

d2:

="0001";d1:

="0000";

elsif(add'eventandadd='1')then

ifchose="0001"then

ifa1="1001"then

a1:

="0000";

ifa2="1001"then

a2:

="0000";

else

a2:

=a2+'1';

endif;

else

a1:

=a1+'1';

endif;

elsifchose="0010"then

ifb1="1001"then

b1:

="0000";

ifb2="1001"then

b2:

="0000";

else

b2:

=b2+'1';

endif;

else

b1:

=b1+'1';

endif;

elsifchose="0100"then

ifc1="1001"then

c1:

="0000";

ifc2="1001"then

c2:

="0000";

else

c2:

=c2+'1';

endif;

else

c1:

=c1+'1';

endif;

elsifchose="1000"then

ifd1="1001"then

d1:

="0000";

ifd2="1001"then

d2:

="0000";

else

d2:

=d2+'1';

endif;

else

d1:

=d1+'1';

endif;

endif;

endif;

aa2<=a2;aa1<=a1;aa0<="0000";

bb2<=b2;bb1<=b1;bb0<="0000";

cc2<=c2;cc1<=c1;cc0<="0000";

dd2<=d2;dd1<=d1;dd0<="0000";

endprocess;

endarchitectureart;

4)译码显示模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityymxsis

port(in4:

instd_logic_vector(3downto0);

out7:

outstd_logic_vector(6downto0));

endymxs;

architectureartofymxsis

begin

process(in4)

begin

casein4is

when"0000"=>out7<="0111111";

when"0001"=>out7<="0000110";

when"0010"=>out7<="1011011";

when"0011"=>out7<="1001111";

when"0100"=>out7<="1100110";

when"0101"=>out7<="1101101";

when"0110"=>out7<="1111101";

when"0111"=>out7<="0000111";

when"1000"=>out7<="1111111";

when"1001"=>out7<="1101111";

whenothers=>out7<="0000000";

endcase;

endprocess;

endarchitecture;

5)报警模块

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;

6)TOP模块

libraryieee;

useieee.std_logic_1164.all;

entitytopis

port(rst,en,ADD,s0,s1,s2,s3:

instd_logic;

LEDA,LEDB,LEDC,LEDD:

outstd_logic;

false:

outstd_logic_vector(3down

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

当前位置:首页 >

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1