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(il,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 downto0):="0111111
2 数字抢答器的设计 2.1 二人数字抢答器的设计 一、设计任务:设计一个 2 人抢答器,采用 EPM7128 芯片,具体要求如下: (1) 两人抢答,先抢为有效,用发光二极管显示是否抢到优先答题权。 (2) 每人 2 位计分显示,答错不加分,答对加 10 分、20 分、30 分。 (3) 每题结束后,裁判按复位,可重新抢答下一题。 (4) 累计加分可由裁判随时清除。 二、设计框图: 源程序: 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”; 抢答者 1 抢答者 2 抢答判断 显示抢答 指示灯 重新抢答 裁判复位 裁判加分 裁判清零 加分电路 显示加分 结果
t21:out std_logic_vector(6 downto 0):="0111111" t22:out std_logic_vector(6 downto 0):="0111111") end ad: architecture stru of qd is signal csl:integer range 0 to9; signal cs2:integer range to9 signal a,b:bit:=0" signal 11,12:bit:=0'; begin process(clk) begin if clk'event and clk='1'then if (cong='1)then if(reset='1')then if (il ='0'and a='0')then 11<='1'; elsif(i2 ='0 'and a='0)then 12<='1'a<='1" end if; if (g10='0'and 11='1 'and b='0')then csl<=cs1+1:b<='1' elsif(g20='0'and 11='1 'and b='0')then cs1<=cs1+2;b<='1 ' elsif(g30='0'and 11='1'and b='0')then cs1<=cs1+3:b<='1'; end if: if (g10='0'and 12='1'and b='0')then cs2<=cs2+1:b<='1'; elsif(g20='0'and 12='1 'and b='0)then cs2<=cs2+2;b<='1. elsif(g30='0'and 12='1 'and b='0')then cs2<=cs2+3;b<='1 ' end if; if (csl =0)then tl1<="01111111"; elsif(cs1=1)thent11<="0000110" elsif (cs1 =2)thent11<="1011011" elsif(cs1=3)thent11<="1001111"; elsif (cs1=4)thent11<="1100110"; elsif(cs1=5)thent11<="11011101" elsif (csl=6)thent11<="1111101"; elsif (cs1 =7)thent11<="0000111". elsif(csl=8)thent11<="1111111
t21:out std_logic_vector(6 downto 0):=”0111111”; t22:out std_logic_vector(6 downto 0):=”0111111”); end qd; architecture stru of qd is signal 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 clk’event 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=’0’and 11= ’1 ’and b= ’0 ’)then cs1<=cs1+1;b<=’1 ’; elsif(g20=’0’and 11= ’1 ’and b= ’0 ’)then cs1<=cs1+2;b<=’1 ’; elsif(g30=’0’and 11= ’1 ’and b= ’0 ’)then cs1<=cs1+3;b<=’1 ’; end if; if (g10=’0’and 12= ’1 ’and b= ’0 ’)then cs2<=cs2+1;b<=’1 ’; elsif(g20=’0’and 12= ’1 ’and b= ’0 ’)then cs2<=cs2+2;b<=’1 ’; elsif(g30=’0’and 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)thent11<=1101111". end if; if(cs2=0)thent21<=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)thent21<=”11011101 elsif (cs2 =6)then t21<="1111101" elsif (cs2=7)then t21<=0000111" elsif(cs2=8)thent21<=”11llll1” elsif (cs2 =9)then t21<="1101111"; end if; else11=0;12<=0'a<0,b<0; end if. else cs1<=0cs2<=011<=0':12=0 end if; light1<=11; light2<=12; t12<="01111111” t22<=01111111, end if. end process, end stru: 说明:当一人抢到优先权,发光二极管亮,另一人再按按键无效:答题结束后, 裁判按复位键,方可再次抢答:每人有2个数码管显示累加计分情况,分数分为3 档,用按键区别
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,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信 号若干,各组计分动态显示的控制信号若干。 根据以上的分析,可将整个系统分为三个主要模块:抢答鉴别模块QDB:抢 答计时模块JSQ:抢答计分模块FQ。对于需显示的信息,需增加或外接译码器, 进行显示译码.考虑到FPGA/CPLD的可用接口及一般EDA实验开发系统提供的输 出显示资源的限制,这里我们将组别显示和计时显示的译码器内设,而将各组的计 分显示的译码器外接。 抢答鉴别电路的设计与实现 抢答鉴别模块用来判断A、B、C、D四组抢答者谁最先按下按钮。并为显示端 送出信号,使观众能够清楚的知道是哪一组抢答成功,是整个系统的核心部分。同 时为下一模块输入信号,以方便裁判为该组加分。 模块如图1所示,系统的输入信号有:各组的抢答按钮A、B、C、D,系统清 零信号CLR。系统的输出信号有:各组的抢答按钮显示端A1、B1、C1、D1,组 别显示端STATES3O],同时作为下一模块FQ模块的输入信号
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,组 别显示端 STATES[3.0],同时作为下一模块 JFQ 模块的输入信号
QDJB VHDL实现方法如下所示: ARCHITECTUREARTOF QDJB IS CONSTANTW1:STD LOGIC_VECTOR:="0001" CONSTANTW2:STD LOGIC VECTOR:="0010" CONSTANTW3:STD LOGIC VECTOR:="0100": CONSTANTW4:STD_LOGIC_VECTOR:="1000" BEGIN PROCESS(CLR,A,B,C,D)IS BEGIN IF CLR='I'THEN STATES<="0000" ELSIF(A=I'AND B=0'AND C-0'AND D-'0)THEN A1<1:B1<=0:C1<=0:D1<=0:STATES-<=W1 ELSIF(A-0'AND B-T'AND C-0'AND D-0)THEN A1<=0;B1<=1':C1<=0:D1<=0:STATES<=W2 ELSIF(A-0'AND B-0AND C-1'ANDD-0)THEN A1<=0;B1<=0;C1<=1:D1<=0;STATES<=W3; ELSIF(A=0'AND B=0'AND C=0'ANDD-1)THEN A1<=0;B1<=0:C1<=0:D1<=1;STATES-<=W4; ENDIF; END PROCESS: 在抢答鉴别电路的设计中,A、B、C、D四组抢答,理论上应该有16种可能 情况,但实际上由于芯片的反应速度快到一定程度时,两组以上同时抢答成功的可 能性非常小,因此可设计成只有四种情况,即ABCD分别为1000、0100、0010、 0001,这大大简化了由路的设计复杂性。 计分器的设计与实现 在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可
图 1 VHDL 实现方法如下所示: 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) IS BEGIN IF CLR='1' THEN STATES<="0000"; ELSIF (A='1'AND B='0'AND C='0'AND D='0') THEN A1<='1'; B1<='0'; C1<='0'; D1<='0'; STATES<=W1; ELSIF (A='0'AND B='1'AND C='0'AND D='0') THEN A1<='0'; B1<='1'; C1<='0'; D1<='0'; STATES<=W2; ELSIF (A='0'AND B='0'AND C='1'AND D='0') THEN A1<='0'; B1<='0'; C1<='1'; D1<='0'; STATES<=W3; ELSIF (A='0'AND B='0'AND C='0'AND 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,这大大简化了电路的设计复杂性。 计分器的设计与实现 在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可