1、抢答器四人的设计四人抢答器一、摘要与概述 我国科技迅速发展,而电子行业这个新兴产业的发展更是日新月异,在很多行业和竞争场合都要求有公正的快速的裁决,例如体育竞技、证券、股票交易,以及各种智力竞赛等。在现在社会中,智力竞赛更是作为一种生动活泼的教育形式和方法来引起观众和参与者的极大地兴趣,在各种各样的竞赛中,往往有几组货多组选手参加,这时当主持人针对某个问题提问时,选手们都要经过比大河抢答,对于必答问题,一般都有时间限制,到时会有报警提示;对于抢答部分,先要判断哪组先按键,为了公平,就要求人们能够设计一种电路来充当裁判员,一般抢答电路由很多模块组成,本课程设计介绍了一种实用的设计方法来实现四人抢
2、答器,具有很强的实用性与可行性。 本抢答器的主体中主要包括以下几个模块,即:抢答模块、分频模块、计时模块、选择模块、报警模块。抢答器具有数据锁存和显示功能。抢答开始后,4个选手按动抢答按钮,编号立即锁存,数码管上立即显示数字,同时扬声器给出生音提示;抢答器具有定时抢答功能,而且每次强大时间有限制,当主持人按下开始键时,定时器立即倒计时,参赛选手在限定的时间里进行抢答,若在倒计时结束后仍未有选手进行抢答,则开始报警,本次抢答无效。整个抢答器中,最最关键的一部就是如何实现抢答封锁,在控制键按下时同时计数器开始倒计时显示有效剩余时间,设为20s。在这以外,这个抢答器还必须包含一个使能信号,外加一个归
3、零信号,这样做是为了方便实现共平抢答和及时停止。这个抢答器有4个输出结果显示,选手代号,计数器的个位和十位等。他们的输出结果要用 BCD码表示出来,这样是为了便于显示译码连接,便于主持人直接读出结果。当主持人按下控制键、选手按下抢答键或者倒计时结束时报警声会暂时响起(报警声暂时设为3秒)。除此之外,该电路还应有清0功能。二、方案阐述论证 在概述中,将该电路分为了5个模块,然后编写顶层文件,在本部分中,我们将详细叙述该方案的各个部分功能及其实现。.、在抢答模块中,应该包含四个抢答信号A,B,C,D,抢答时能信号S, 抢答状态信号STATE, 抢答与报警时钟CLK2,系统复位信号,系统报警信号RI
4、NG上图为本模块的仿真波形。其工作情况:系统来到一个复位信号(rst=1),当主持人允许抢答时即en=1,各路开始抢答,当有一路正常获得抢答时,系统会自动封锁另外三路的抢答信号,只允许一人处于答题状态;当主持人没有允许抢答时,若有人超前抢答,警报会响起,同时只要有人抢答那么抢答显示台(states)会显示哪一个在抢答。例如,A台超前抢答,此时警报响起(即超前抢答警报信号ring获得一个频率很高的脉冲,就会响起),之后主持人复位,并允许抢答,b台最先抢答,此时抢答显示台显示其台号为2号。、本模块为计时模块。本模块主要实现计时功能,主要包含抢答时钟信号CLK,系统复位信号RST,抢答时能信号EN,
5、抢答状态信号STATE,终止信号STOP,,计时十位TA,计时个位TB,无人抢答报警信号WARN。仿真波形如下: 其工作情况:系统复位信号来临(即rst=1),计时复位为20秒倒计时,当主持人允许抢答时,开始倒计时,随着系统时钟来一个上升沿倒计时减1,当到20倒计时计玩仍然无人抢答时,警报指示灯亮(即warn=1),若有人抢答主持人可以按下中止键(即stop=1),这样倒计时就会回到20秒初始状态。图示的情况为在倒计时8秒时有人抢答,主持人按下中止键,计时器变为初始值20,在下一轮抢答过程中,倒计时为0时仍然无人抢答,此时警报指示信号亮(即warn=1)。、数据选择模块该模块主要实现抢答的数据
6、输入方面的功能,因此,该模块应该包括3个输入信号A3.0、 B3.0 、C3.0。还应包括一个数据输出信号Y,计数脉冲CLK,能够实现A、B、C轮流选通,并且能在数码管上显示出来。、报警模块该模块实现报警功能,包括一个有效电平输入信号I,状态输出信号Q,计数脉冲CLK,其具体功能是:主持人按下控制键,在20S内,若无人抢答则电路开始报警;若是有人提前抢答,也会报警。、译码模块 该模块主要功能就是译码,即:把抢答过程出现的一切有用信号转换成BCD码在数码管上显示出来。、编写顶层文件顶层文件就是把前面几个模块综合起来,实现整个电路的功能。其具体工作是:由图可看出:当主持人按下抢答开始按钮,en=1
7、,如果20s内无人抢答,则输出超时报警信号。第一次系统复位后,主任人还没有宣布抢答开始,但a台超前抢答了,主持人给予警告;接着第二轮系统复位后,主持人宣布抢答开始,c台先抢答成功,抢答显示台号显示为3。、硬件分析本课程设计应在EDA实验系统GW48-PK2上完成,芯片均选用“cyclone”系列的“EP1C6Q240C6”。本课程设计选择模式5,管脚锁定如上图,在锁定后对设计文件进行重新编译,产生设计电路的下载文件(.sof)。然后打开GW48-PK2实验系统,执行菜单“tools-programmer”,点击“add file”加载下载文件:点击“hardware setup”选择编程下载方
8、式“ByteBlasterMV”;“Programmer”窗口中“mode”项选择“JTAG”,然后点击“start”开始下载,下载完成后,即可在实验箱上验证设计电路。三、方案总结该方案基本实现任务书上的要求,其优缺点如下 :方案优点:分模块设计,简明易懂,容易修改。方案缺点:没有实现加减分功能。四、心得体会 经过2个星期的课程设计,我对EDA这门课程有了更加深刻的认识。EDA,即Electronic Design Automation,电子设计自动化,只学会了书本是远远不够的,没有亲自编写程序,调试程序,修改程序,你永远也不可能知道设计的真谛。而且,我们以前写的都是一些小程序,小模块,智能实
9、现一种基本功能,并没有对几个大型模块进行综合设计,所以也不能体会到设计一个大工程需要花费多少心血。但是经过这2个星期的磨练,我十分明显的感觉到了自己的进步。首先,我对VHDL语言掌握的更加熟练,在编程时比以前速度更快,准确度更高。其次,我加深对工程的认识,知道要先干什么后干什么,分几个模块,以及了解各模块之间的联系。而且,在每个模块编写完成之后,不用急于仿真,等整体编译成功后,先进行总体仿真,看出现的错误在什么地方,这个地方是由哪个部分控制的,然后再对该部分进行仿真,看有没有问题。最后,在硬件调试方面我也积累了很多经验。例如,时钟频率过高或过低都会影响实验效果。示波器也是一个很重要的工具,我们
10、应该熟练掌握。 总之,通过这次课程设计,我认识到了自己的不足,也收获了很多。五、参考文献l 曹晰燕、周凤臣、聂春燕,EDA技术实验与课程设计,清华大学出版社,2006;2 潘松、黄继业,EDA技术与VHDL,清华大学出版社,2005;3 谭会生、瞿遂春,EDA技术综合应用实例与分析,西安电子科技大学出版社,2004;4 黄仁欣,EDA实用教程,清华大学出版社,2007附录 程序清单library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity qdjb is -抢答警报 port(clk2,en
11、,rst:in std_logic; a,b,c,d:in std_logic; ring:out std_logic; states:out std_logic_vector(3 downto 0);end qdjb;architecture one of qdjb is signal sinor,ringf,tmp:std_logic;signal cnt:std_logic_vector(5 downto 0);beginsinor=a or b or c or d;p1:process(a,rst,b,c,d,tmp) begin if rst=1 then tmp=1;states=
12、0000; elsif tmp=1 then if a=1 then states=0001;tmp=0; elsif b=1 then states=0010;tmp=0; elsif c=1 then states=0011;tmp=0; elsif d=1 then states=0100;tmp=0; else tmp=1;states=0000; end if ; end if;end process p1;p2rocess(clk2,en,rst,cnt) begin if rst=1 then cnt=000000;ringf=0; elsif clk2event and clk
13、2=1 then if en=0 and sinor=1 then if cnt111111 then ringf=not ringf;cnt=cnt+1; else ringf=0; end if; end if; end if;end process p3;ring=ringf;end one;library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity js is -计时 port(clk,rst,en,stop:in std_logic; warn:buffer std_logic; t
14、a,tb:buffer std_logic_vector(3 downto 0);end js;architecture one of js issignal co:std_logic;beginp1:process(clk,rst,en,stop,ta) begin if rst=1 or stop=1 then ta=0000; elsif clkevent and clk=1 then co=0; if en=1 then if ta=0000 then ta=1001;co=1; else ta=ta-1; end if; end if; end if;end process p1;p
15、2:process(co,rst,en,stop,tb) begin if rst=1 or stop=1 then tb=0010; elsif coevent and co=1 then if en=1 then if tb=0000 then tb=0010; else tb=tb-1; end if; end if; end if;end process p2;p3:process(rst,ta,tb) begin if rst=1 then warn=0; elsif ta=0000 and tb=0000 then warn=1; else warn=0; end if;end p
16、rocess p3;end one;library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jf is port(clk,rst,en,add:in std_logic; states:in std_logic_vector(3 downto 0); a_out,b_out,c_out,d_out:buffer std_logic_vector(3 downto 0);end jf;architecture one of jf is beginp2:process(clk,rst,add,
17、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 if add=1 then if a_out=1111 then a_out=0000; else a_out=a_out+1; end if; elsif add=0 then if a_out=0000 then a_out=0000; else a_out if add=1 then if b_out=1111 then b_out=0000; else b_out=b_out+1; end if; el
18、sif add=0 then if b_out=0000 then b_out=0000; else b_out if add=1 then if c_out=1111 then c_out=0000; else c_out=c_out+1; end if; elsif add=0 then if c_out=0000 then c_out=0000; else c_out if add=1 then if d_out=1111 then d_out=0000; else d_out=d_out+1; end if; elsif add=0 then if d_out=0000 then d_
19、out=0000; else d_out a_out=a_out;b_out=b_out;c_out=c_out;d_out=d_out; end case; end if; end if;end process p2;end one;library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qiangda is -抢答 port(clk,clk2,en,a,b,c,d,add,stop,rst:in std_logic; ring,alarm:out std_logic; ta,tb:bu
20、ffer std_logic_vector(3 downto 0); states:buffer std_logic_vector(3 downto 0); a_out,b_out,c_out,d_out:buffer std_logic_vector(3 downto 0);end qiangda;architecture bhv of qiangda iscomponent qdjb is port(clk2,en,rst:in std_logic; a,b,c,d:in std_logic; ring:out std_logic; states:out std_logic_vector(
21、3 downto 0);end component;component js is port(clk,rst,en,stop:in std_logic; warn:buffer std_logic; ta,tb:buffer std_logic_vector(3 downto 0);end component;component jf is port(clk,rst,en,add:in std_logic; states:in std_logic_vector(3 downto 0); a_out,b_out,c_out,d_out:buffer std_logic_vector(3 downto 0);end component;signal cnt:std_logic_vector(3 downto 0);beginu1:qdjb port map(clk2,en,rst,a,b,c,d,ring,states);u2:js port map(clk,rst,en,stop,alarm,ta,tb);u3:jf port map(clk,rst,en,add,states,a_out,b_out,c_out,d_out);end bhv;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1