设计二 数字抢答器的设计.doc_第1页
设计二 数字抢答器的设计.doc_第2页
设计二 数字抢答器的设计.doc_第3页
设计二 数字抢答器的设计.doc_第4页
设计二 数字抢答器的设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2 数字抢答器的设计2.1 二人数字抢答器的设计一、设计任务:设计一个2人抢答器,采用EPM7128芯片,具体要求如下:(1) 两人抢答,先抢为有效,用发光二极管显示是否抢到优先答题权。(2) 每人2位计分显示,答错不加分,答对加10分、20分、30分。(3) 每题结束后,裁判按复位,可重新抢答下一题。(4) 累计加分可由裁判随时清除。二、设计框图:抢答者1抢答者2抢答判断显示抢答指示灯裁判复位重新抢答裁判加分裁判清零加分电路显示加分结果源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity qd is port(i1,i2:in bit; reset:in bit; g10,g20,g30:in bit; clk:in bit; cong:in bit light1, light2:out bit= 0 ; t11:out std_logic_vector(6 downto 0):=”0111111”; t12:out std_logic_vector(6 downto 0):=”0111111”;t21:out std_logic_vector(6 downto 0):=”0111111”; t22:out std_logic_vector(6 downto 0):=”0111111”);end qd;architecture stru of qd issignal cs1:integer range 0 to 9;signal cs2:integer range 0 to 9;signal a,b:bit:= 0;signal 11,12:bit:= 0;begin process(clk)begin if clkevent and clk = 1 then if (cong = 1 ) then if (reset = 1 ) then if (i1 = 0 and a = 0 ) then 11 =1 ; elsif(i2 = 0 and a = 0 ) then 12 =1 ;a =1 ; end if; if (g10=0and 11= 1 and b= 0 )then cs1=cs1+1;b=1 ; elsif(g20=0and 11= 1 and b= 0 )then cs1=cs1+2;b=1 ;elsif(g30=0and 11= 1 and b= 0 )then cs1=cs1+3;b=1 ; end if; if (g10=0and 12= 1 and b= 0 )then cs2=cs2+1;b=1 ;elsif(g20=0and 12= 1 and b= 0 )then cs2=cs2+2;b=1 ;elsif(g30=0and 12= 1 and b= 0 )then cs2=cs2+3;b=1 ;end if; if (cs1 = 0) then t11=”01111111”;elsif (cs1 = 1) then t11=”0000110”;elsif (cs1 = 2) then t11=”1011011”;elsif (cs1 = 3) then t11=”1001111”;elsif (cs1 = 4) then t11=”1100110”;elsif (cs1 = 5) then t11=”11011101”;elsif (cs1 = 6) then t11=”1111101”;elsif (cs1 = 7) then t11=”0000111”;elsif (cs1 = 8) then t11=”1111111”;elsif (cs1 = 9) then t11=”1101111”;end if;if (cs2 = 0) then t21=”01111111”;elsif (cs2 = 1) then t21=”0000110”;elsif (cs2 = 2) then t21=”1011011”;elsif (cs2 = 3) then t21=”1001111”;elsif (cs2 = 4) then t21=”1100110”;elsif (cs2 = 5) then t21=”11011101”;elsif (cs2 = 6) then t21=”1111101”;elsif (cs2 = 7) then t21=”0000111”;elsif (cs2 = 8) then t21=”1111111”;elsif (cs2 = 9) then t21=”1101111”;end if; else 11=0;12=0;a=0;b=0; end if; else cs1=0; cs2=0; 11=0;12=0;end if;light1=11;light2=12;t12=”01111111”;t22=”01111111”;end if;end process;end stru;说明:当一人抢到优先权,发光二极管亮,另一人再按按键无效;答题结束后,裁判按复位键,方可再次抢答;每人有2个数码管显示累加计分情况,分数分为3档,用按键区别。2.2 四人数字抢答器的设计在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过抢答器的指示灯显示、数码显示和警示蜂鸣等手段指示出第一抢答者。同时,还可以设置计分、犯规及奖惩计录等多种功能。设计要求:(1)设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。(2)电路具有第一抢答信号的鉴别和锁存功能。(3)设置计分电路。(4)设置犯规电路。设计方案根据系统设计要求可知,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。根据以上的分析,可将整个系统分为三个主要模块:抢答鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ。对于需显示的信息,需增加或外接译码器,进行显示译码。考虑到FPGA/CPLD的可用接口及一般EDA实验开发系统提供的输出显示资源的限制,这里我们将组别显示和计时显示的译码器内设,而将各组的计分显示的译码器外接。抢答鉴别电路的设计与实现抢答鉴别模块用来判断A、B、C、D四组抢答者谁最先按下按钮。并为显示端送出信号,使观众能够清楚的知道是哪一组抢答成功,是整个系统的核心部分。同时为下一模块输入信号,以方便裁判为该组加分。模块如图1所示,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR。系统的输出信号有: 各组的抢答按钮显示端A1、B1、C1、D1,组别显示端STATES3.0,同时作为下一模块JFQ模块的输入信号。图1VHDL实现方法如下所示:ARCHITECTURE ART OF QDJB IS CONSTANT W1: STD_LOGIC_VECTOR:=0001; CONSTANT W2: STD_LOGIC_VECTOR:=0010; CONSTANT W3: STD_LOGIC_VECTOR:=0100; CONSTANT W4: STD_LOGIC_VECTOR:=1000; BEGINPROCESS(CLR,A,B,C,D) ISBEGINIF CLR=1 THEN STATES=0000; ELSIF (A=1AND B=0AND C=0AND D=0) THEN A1=1; B1=0; C1=0; D1=0; STATES=W1; ELSIF (A=0AND B=1AND C=0AND D=0) THEN A1=0; B1=1; C1=0; D1=0; STATES=W2; ELSIF (A=0AND B=0AND C=1AND D=0) THEN A1=0; B1=0; C1=1; D1=0; STATES=W3; ELSIF (A=0AND B=0AND C=0AND D=1) THEN A1=0; B1=0; C1=0; D1=1; STATES=W4; END IF; END PROCESS;在抢答鉴别电路的设计中,A、B、C、D四组抢答,理论上应该有16种可能情况,但实际上由于芯片的反应速度快到一定程度时,两组以上同时抢答成功的可能性非常小,因此可设计成只有四种情况,即ABCD分别为1000、0100、0010、0001,这大大简化了电路的设计复杂性。计分器的设计与实现在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可。模块如图2所示,系统的输入信号有:计分复位端RST,加分按钮端ADD,减分按钮端SUB,组别号输入端CHOS3.0。系统的输出信号有:A组分数输出端AA23.0、AA13.0、AA03.0,B组分数输出端BB23.0、BB13.0、BB03.0,C组分数输出端CC23.0、CC13.0、CC03.0,D组分数输出端DD23.0、DD13.0、DD03.0。图2VHDL实现方法如下所示:(1)当按下RST键时,使分数复位,每位的初始分数为100分。IF RST=1 THEN POINTS_A2:=0001; POINTS_A1:=0000; POINTS_B2:=0001; POINTS_B1:=0000; POINTS_C2:=0001; POINTS_C1:=0000; POINTS_D2:=0001; POINTS_D1:=0000;(2)当按下加分按钮端ADD时,以给A组加分为例。IF POINTS_A1=1001 THEN POINTS_A1:=0000; IF POINTS_A2=1001 THEN POINTS_A2:=0000; ELSE POINTS_A2:=POINTS_A2+ 0001; END IF; ELSE POINTS_A1:=POINTS_A1+ 0001; END IF;(3)当按下减分按钮端SUB时,以给A组减分为例。IF POINTS_A1=0000 THEN POINTS_A1:=1001; IF POINTS_A2=0000 THEN POINTS_A2:=1001; ELSE POINTS_A2:=POINTS_A2+ 1111; END IF; ELSE POINTS_A1:=POINTS_A1+ 1111; END IF;在设计中减法的实现是以加法运算来实现的。以A为例,由于每次减分都是减去10分,即每次为POINTS_A1减一,所以可以用POINTS_A1+ 1111来实现。如:0111-0001=0110,用加法实现:0111+1111=10110。由于POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0),所以POINTS_A1=0110。计时器的设计与实现本系统中的计时器电路既有计时初始值的预置功能,又有倒计数功能,功能比较齐全。模块如图3所示,系统输入信号有:系统清零信号CLR,计时预置控制端LDN,计时使能端EN,系统时钟信号CLK,计时预置数据调整按钮TA、TB。系统输出信号有:倒计时输出端QA3.0、QB3.0。图3VHDL实现方法如下所示:(1)计时初始值功能的实现。PROCESS(TA,TB,CLR)BEGIN IF CLR=1 THEN DA=0000; DB=0000; ELSEIF TA=1 THENDA=DA+1 ; END IF; IF TB=1 THEN DB=DB+1; END IF; END IF; END PROCESS;(2)60秒倒计时功能的实现。PROCESS(CLK) VARIABLE TMPA: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE TMPB: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF CLR=1 THEN TMPA:=0000; TMPB:=0110; ELSIF CLKEVENT AND CLK=1 THEN IF LDN=1 THEN TMPA:=DA; TMPB:=DB; ELSIF EN=1 THEN IF TMPA=0000 THEN TMPA:=1001; IF TMPB=0000 THEN TMPB:=0110; ELSE TMPB:=TMPB-1; END IF; ELSE TMPA:=TMPA-1; END IF; END IF; END IF; QA=TMPA; QBDOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7DOUT7=0000000; END CASE; END PROCESS; END ARCHITECTURE ART;在程序中只考虑0000-1001(即0-9)的情况,将其转化为相应的七段显示器的码子,其他情况不予考虑。数字抢答器的实现在每个模块完成之后,就要将它们合为一个整体,成为一个能提供所要求功能的系统。 电路图如下:附 录附录1 抢答鉴别模块VHDL程序(QDJB.VHD)LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY QDJB IS PORT(CLR: IN STD_LOGIC; A, B, C, D: IN STD_LOGIC; A1,B1,C1,D1: OUT STD_LOGIC; STATES: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END QDJB; ARCHITECTURE ART OF QDJB IS CONSTANT W1: STD_LOGIC_VECTOR:=0001; CONSTANT W2: STD_LOGIC_VECTOR:=0010; CONSTANT W3: STD_LOGIC_VECTOR:=0100; CONSTANT W4: STD_LOGIC_VECTOR:=1000; BEGIN PROCESS(CLR,A,B,C,D) BEGINIF CLR=1 THEN STATES=0000; ELSIF (A=1AND B=0AND C=0AND D=0) THEN A1=1; B1=0; C1=0; D1=0; STATES=W1; ELSIF (A=0AND B=1AND C=0AND D=0) THEN A1=0; B1=1; C1=0; D1=0; STATES=W2; ELSIF (A=0AND B=0AND C=1AND D=0) THEN A1=0; B1=0; C1=1; D1=0; STATES=W3; ELSIF (A=0AND B=0AND C=0AND D=1) THEN A1=0; B1=0; C1=0; D1=1; STATES=W4; END IF; END PROCESS; END ART;附录2 计分器模块VHDL程序(JFQ.VHD)LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JFQ IS PORT(RST: IN STD_LOGIC; ADD: IN STD_LOGIC; SUB: IN STD_LOGIC; CHOS: IN STD_LOGIC_VECTOR(3 DOWNTO 0); AA2,AA1,AA0,BB2,BB1,BB0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CC2,CC1,CC0,DD2,DD1,DD0: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END JFQ ; ARCHITECTURE ART OF JFQ IS BEGIN PROCESS(RST,ADD,SUB,CHOS) VARIABLE POINTS_A2,POINTS_A1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_B2,POINTS_B1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_C2,POINTS_C1: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE POINTS_D2,POINTS_D1: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF (ADDEVENT AND ADD=1) THEN IF RST=1 THEN POINTS_A2:=0001; POINTS_A1:=0000; POINTS_B2:=0001; POINTS_B1:=0000; POINTS_C2:=0001; POINTS_C1:=0000; POINTS_D2:=0001; POINTS_D1:=0000; ELSIF CHOS=0001 THEN IF POINTS_A1=1001 THEN POINTS_A1:=0000; IF POINTS_A2=1001 THEN POINTS_A2:=0000; ELSE POINTS_A2:=POINTS_A2+0001; END IF; ELSE POINTS_A1:=POINTS_A1+0001; END IF; ELSIF CHOS=0010 THEN IF POINTS_B1=1001 THEN POINTS_B1:=0000; IF POINTS_B2=1001 THEN POINTS_B2:=0000; ELSE POINTS_B2:=POINTS_B2+0001; END IF; ELSE POINTS_B1:=POINTS_B1+0001; END IF; ELSIF CHOS=0100 THEN IF POINTS_C1=1001 THEN POINTS_C1:=0000; IF POINTS_C2=1001 THEN POINTS_C2:=0000; ELSE POINTS_C2:=POINTS_C2+0001; END IF; ELSE POINTS_C1:=POINTS_C1+0001; END IF; ELSIF CHOS=1000 THEN IF POINTS_D1=1001 THEN POINTS_D1:=0000; IF POINTS_D2=1001 THEN POINTS_D2:=0000; ELSE POINTS_D2:=POINTS_D2+0001; END IF; ELSE POINTS_D1:=POINTS_D1+0001; END IF; END IF; ELSIF (SUBEVENT AND SUB=1) THEN IF RST=1 THEN POINTS_A2:=0001; POINTS_A1:=0000; POINTS_B2:=0001; POINTS_B1:=0000; POINTS_C2:=0001; POINTS_C1:=0000; POINTS_D2:=0001; POINTS_D1:=0000; ELSIF CHOS=0001 THEN IF POINTS_A1=0000 THEN POINTS_A1:=1001; IF POINTS_A2=0000 THEN POINTS_A2:=1001; ELSE POINTS_A2:=POINTS_A2+1111; END IF; ELSE POINTS_A1:=POINTS_A1+1111; END IF; ELSIF CHOS=0010 THEN IF POINTS_B1=0000 THEN POINTS_B1:=1001; IF POINTS_B2=0000 THEN POINTS_B2:=1001; ELSE POINTS_B2:=POINTS_B2+1111; END IF; ELSE POINTS_B1:=POINTS_B1+1111; END IF; ELSIF CHOS=0100 THEN IF POINTS_C1=0000 THEN POINTS_C1:=1001; IF POINTS_C2=0000 THEN POINTS_C2:=1001; ELSE POINTS_C2:=POINTS_C2+1111; END IF; ELSE POINTS_C1:=POINTS_C1+1111; END IF; ELSIF CHOS=1000 THEN IF POINTS_D1=0000 THEN POINTS_D1:=1001; IF POINTS_D2=0000 THEN POINTS_D2:=1001; ELSE POINTS_D2:=POINTS_D2+1111; END IF; ELSE POINTS_D1:=POINTS_D1+1111; END IF; END IF; END IF; AA2=POINTS_A2; AA1=POINTS_A1; AA0=0000; BB2=POINTS_B2; BB1=POINTS_B1; BB0=0000; CC2=POINTS_C2; CC1=POINTS_C1; CC0=0000; DD2=POINTS_D2; DD1=POINTS_D1; DD0=0000; END

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论