抢答器四人的设计.docx
《抢答器四人的设计.docx》由会员分享,可在线阅读,更多相关《抢答器四人的设计.docx(13页珍藏版)》请在冰豆网上搜索。
抢答器四人的设计
四人抢答器
一、摘要与概述
我国科技迅速发展,而电子行业这个新兴产业的发展更是日新月异,在很多行业和竞争场合都要求有公正的快速的裁决,例如体育竞技、证券、股票交易,以及各种智力竞赛等。
在现在社会中,智力竞赛更是作为一种生动活泼的教育形式和方法来引起观众和参与者的极大地兴趣,在各种各样的竞赛中,往往有几组货多组选手参加,这时当主持人针对某个问题提问时,选手们都要经过比大河抢答,对于必答问题,一般都有时间限制,到时会有报警提示;对于抢答部分,先要判断哪组先按键,为了公平,就要求人们能够设计一种电路来充当裁判员,一般抢答电路由很多模块组成,本课程设计介绍了一种实用的设计方法来实现四人抢答器,具有很强的实用性与可行性。
本抢答器的主体中主要包括以下几个模块,即:
抢答模块、分频模块、计时模块、选择模块、报警模块。
抢答器具有数据锁存和显示功能。
抢答开始后,4个选手按动抢答按钮,编号立即锁存,数码管上立即显示数字,同时扬声器给出生音提示;抢答器具有定时抢答功能,而且每次强大时间有限制,当主持人按下开始键时,定时器立即倒计时,参赛选手在限定的时间里进行抢答,若在倒计时结束后仍未有选手进行抢答,则开始报警,本次抢答无效。
整个抢答器中,最最关键的一部就是如何实现抢答封锁,在控制键按下时同时计数器开始倒计时显示有效剩余时间,设为20s。
在这以外,这个抢答器还必须包含一个使能信号,外加一个归零信号,这样做是为了方便实现共平抢答和及时停止。
这个抢答器有4个输出结果显示,,选手代号,计数器的个位和十位等。
他们的输出结果要用BCD码表示出来,这样是为了便于显示译码连接,便于主持人直接读出结果。
当主持人按下控制键、选手按下抢答键或者倒计时结束时报警声会暂时响起(报警声暂时设为3秒)。
除此之外,该电路还应有清0功能。
二、方案阐述论证
在概述中,将该电路分为了5个模块,然后编写顶层文件,在本部分中,我们将详细叙述该方案的各个部分功能及其实现。
1.、在抢答模块中,应该包含四个抢答信号A,B,C,D,抢答时能信号S,抢答状态信号STATE,抢答与报警时钟CLK2,系统复位信号RST,系统报警信号RING
上图为本模块的仿真波形。
其工作情况:
系统来到一个复位信号(rst=’1’),当主持人允许抢答时即en=‘1’,各路开始抢答,当有一路正常获得抢答时,系统会自动封锁另外三路的抢答信号,只允许一人处于答题状态;当主持人没有允许抢答时,若有人超前抢答,警报会响起,同时只要有人抢答那么抢答显示台(states)会显示哪一个在抢答。
例如,A台超前抢答,此时警报响起(即超前抢答警报信号ring获得一个频率很高的脉冲,就会响起),之后主持人复位,并允许抢答,b台最先抢答,此时抢答显示台显示其台号为2号。
2、本模块为计时模块。
本模块主要实现计时功能,主要包含抢答时钟信号CLK,系统复位信号RST,抢答时能信号EN,抢答状态信号STATE,终止信号STOP,,计时十位TA,计时个位TB,无人抢答报警信号WARN。
仿真波形如下:
其工作情况:
系统复位信号来临(即rst=‘1’),计时复位为20秒倒计时,当主持人允许抢答时,开始倒计时,随着系统时钟来一个上升沿倒计时减1,当到20倒计时计玩仍然无人抢答时,警报指示灯亮(即warn=‘1’),若有人抢答主持人可以按下中止键(即stop=‘1’),这样倒计时就会回到20秒初始状态。
图示的情况为在倒计时8秒时有人抢答,主持人按下中止键,计时器变为初始值20,在下一轮抢答过程中,倒计时为0时仍然无人抢答,此时警报指示信号亮(即warn=‘1’)。
3、数据选择模块
该模块主要实现抢答的数据输入方面的功能,因此,该模块应该包括3个输入信号A[3..0]、B[3..0]、C[3..0]。
还应包括一个数据输出信号Y,计数脉冲CLK,能够实现A、B、C轮流选通,并且能在数码管上显示出来。
4、报警模块
该模块实现报警功能,包括一个有效电平输入信号I,状态输出信号Q,计数脉冲CLK,其具体功能是:
主持人按下控制键,在20S内,若无人抢答则电路开始报警;若是有人提前抢答,也会报警。
5、译码模块
该模块主要功能就是译码,即:
把抢答过程出现的一切有用信号转换成BCD码在数码管上显示出来。
6、编写顶层文件
顶层文件就是把前面几个模块综合起来,实现整个电路的功能。
其具体工作是:
由图可看出:
当主持人按下抢答开始按钮,en=1,如果20s内无人抢答,则输出超时报警信号。
第一次系统复位后,主任人还没有宣布抢答开始,但a台超前抢答了,主持人给予警告;接着第二轮系统复位后,主持人宣布抢答开始,c台先抢答成功,抢答显示台号显示为3。
7、硬件分析
本课程设计应在EDA实验系统GW48-PK2上完成,芯片均选用“cyclone”系列的“EP1C6Q240C6”。
本课程设计选择模式5,管脚锁定如上图,在锁定后对设计文件进行重新编译,产生设计电路的下载文件(.sof)。
然后打开GW48-PK2实验系统,执行菜单“tools-programmer”,点击“addfile…”加载下载文件:
点击“hardwaresetup…”选择编程下载方式“ByteBlasterMV”;
“Programmer”窗口中“mode”项选择“JTAG”,然后点击“start”开始下载,下载完成后,即可在实验箱上验证设计电路。
三、方案总结
该方案基本实现任务书上的要求,其优缺点如下:
方案优点:
分模块设计,简明易懂,容易修改。
方案缺点:
没有实现加减分功能。
四、心得体会
经过2个星期的课程设计,我对EDA这门课程有了更加深刻的认识。
EDA,即ElectronicDesignAutomation,电子设计自动化,只学会了书本是远远不够的,没有亲自编写程序,调试程序,修改程序,你永远也不可能知道设计的真谛。
而且,我们以前写的都是一些小程序,小模块,智能实现一种基本功能,并没有对几个大型模块进行综合设计,所以也不能体会到设计一个大工程需要花费多少心血。
但是经过这2个星期的磨练,我十分明显的感觉到了自己的进步。
首先,我对VHDL语言掌握的更加熟练,在编程时比以前速度更快,准确度更高。
其次,我加深对工程的认识,知道要先干什么后干什么,分几个模块,以及了解各模块之间的联系。
而且,在每个模块编写完成之后,不用急于仿真,等整体编译成功后,先进行总体仿真,看出现的错误在什么地方,这个地方是由哪个部分控制的,然后再对该部分进行仿真,看有没有问题。
最后,在硬件调试方面我也积累了很多经验。
例如,时钟频率过高或过低都会影响实验效果。
示波器也是一个很重要的工具,我们应该熟练掌握。
总之,通过这次课程设计,我认识到了自己的不足,也收获了很多。
五、参考文献
[l]曹晰燕、周凤臣、聂春燕,《EDA技术实验与课程设计》,清华大学出版社,2006;
[2]潘松、黄继业,《EDA技术与VHDL》,清华大学出版社,2005;
[3]谭会生、瞿遂春,《EDA技术综合应用实例与分析》,西安电子科技大学出版社,2004;
[4]黄仁欣,《EDA实用教程》,清华大学出版社,2007
附录程序清单
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdjbis--------------------------------抢答警报
port(clk2,en,rst:
instd_logic;
a,b,c,d:
instd_logic;
ring:
outstd_logic;
states:
outstd_logic_vector(3downto0));
endqdjb;
architectureoneofqdjbis
signalsinor,ringf,tmp:
std_logic;
signalcnt:
std_logic_vector(5downto0);
begin
sinor<=aorborcord;
p1:
process(a,rst,b,c,d,tmp)
begin
ifrst='1'then
tmp<='1';states<="0000";
elsiftmp='1'then
ifa='1'then
states<="0001";tmp<='0';
elsifb='1'then
states<="0010";tmp<='0';
elsifc='1'then
states<="0011";tmp<='0';
elsifd='1'then
states<="0100";tmp<='0';
elsetmp<='1';states<="0000";
endif;
endif;
endprocessp1;
p2rocess(clk2,en,rst,cnt)
begin
ifrst='1'then
cnt<="000000";ringf<='0';
elsifclk2'eventandclk2='1'then
ifen='0'andsinor='1'then
ifcnt<"111111"then
ringf<=notringf;cnt<=cnt+1;
elseringf<='0';
endif;
endif;
endif;
endprocessp3;
ring<=ringf;
endone;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjsis--------------------------------计时
port(clk,rst,en,stop:
instd_logic;
warn:
bufferstd_logic;
ta,tb:
bufferstd_logic_vector(3downto0));
endjs;
architectureoneofjsis
signalco:
std_logic;
begin
p1:
process(clk,rst,en,stop,ta)
begin
ifrst='1'orstop='1'then
ta<="0000";
elsifclk'eventandclk='1'then
co<='0';
ifen='1'then
ifta="0000"then
ta<="1001";co<='1';
elseta<=ta-1;
endif;
endif;
endif;
endprocessp1;
p2:
process(co,rst,en,stop,tb)
begin
ifrst='1'orstop='1'then
tb<="0010";
elsifco'eventandco='1'then
ifen='1'then
iftb="0000"thentb<="0010";
elsetb<=tb-1;
endif;
endif;
endif;
endprocessp2;
p3:
process(rst,ta,tb)
begin
ifrst='1'then
warn<='0';
elsifta="0000"andtb="0000"then
warn<='1';
elsewarn<='0';
endif;
endprocessp3;
endone;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjfis
port(clk,rst,en,add:
instd_logic;
states:
instd_logic_vector(3downto0);
a_out,b_out,c_out,d_out:
bufferstd_logic_vector(3downto0));
endjf;
architectureoneofjfis
begin
p2:
process(clk,rst,add,states,a_out,b_out,c_out,d_out)
begin
if(rst='1')then
a_out<="0101";b_out<="0101";c_out<="0101";d_out<="0101";
elsifen='1'then
ifclk'eventandclk='1'then
casestatesis
when"0001"=>
ifadd='1'then
ifa_out="1111"then
a_out<="0000";
elsea_out<=a_out+1;
endif;
elsifadd='0'then
ifa_out="0000"then
a_out<="0000";
elsea_out<=a_out-1;
endif;
endif;
when"0010"=>
ifadd='1'then
ifb_out="1111"then
b_out<="0000";
elseb_out<=b_out+1;
endif;
elsifadd='0'then
ifb_out="0000"then
b_out<="0000";
elseb_out<=b_out-1;
endif;
endif;
when"0011"=>
ifadd='1'then
ifc_out="1111"then
c_out<="0000";
elsec_out<=c_out+1;
endif;
elsifadd='0'then
ifc_out="0000"then
c_out<="0000";
elsec_out<=c_out-1;
endif;
endif;
when"0100"=>
ifadd='1'then
ifd_out="1111"then
d_out<="0000";
elsed_out<=d_out+1;
endif;
elsifadd='0'then
ifd_out="0000"then
d_out<="0000";
elsed_out<=d_out-1;
endif;
endif;
whenothers=>
a_out<=a_out;b_out<=b_out;c_out<=c_out;d_out<=d_out;
endcase;
endif;
endif;
endprocessp2;
endone;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqiangdais--------------------------------抢答
port(clk,clk2,en,a,b,c,d,add,stop,rst:
instd_logic;
ring,alarm:
outstd_logic;
ta,tb:
bufferstd_logic_vector(3downto0);
states:
bufferstd_logic_vector(3downto0);
a_out,b_out,c_out,d_out:
bufferstd_logic_vector(3downto0));
endqiangda;
architecturebhvofqiangdais
componentqdjbis
port(clk2,en,rst:
instd_logic;
a,b,c,d:
instd_logic;
ring:
outstd_logic;
states:
outstd_logic_vector(3downto0));
endcomponent;
componentjsis
port(clk,rst,en,stop:
instd_logic;
warn:
bufferstd_logic;
ta,tb:
bufferstd_logic_vector(3downto0));
endcomponent;
componentjfis
port(clk,rst,en,add:
instd_logic;
states:
instd_logic_vector(3downto0);
a_out,b_out,c_out,d_out:
bufferstd_logic_vector(3downto0));
endcomponent;
signalcnt:
std_logic_vector(3downto0);
begin
u1:
qdjbportmap(clk2,en,rst,a,b,c,d,ring,states);
u2:
jsportmap(clk,rst,en,stop,alarm,ta,tb);
u3:
jfportmap(clk,rst,en,add,states,a_out,b_out,c_out,d_out);
endbhv;