收藏 分销(赏)

设计二数字抢答器设计.doc

上传人:天**** 文档编号:2678679 上传时间:2024-06-04 格式:DOC 页数:19 大小:94.50KB 下载积分:8 金币
下载 相关 举报
设计二数字抢答器设计.doc_第1页
第1页 / 共19页
设计二数字抢答器设计.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
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 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) 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,组别显示端STATES[3..0],同时作为下一模块JFQ模块地输入信号.铙誅卧泻噦圣骋贶頂廡。 图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,这大大简化了电路地设计复杂性.擁締凤袜备訊顎轮烂蔷。 计分器地设计与实现 在计分器电路地设计中,按照一般地设计原则,按一定数进制进行加减即可. 模块如图2所示,系统地输入信号有:计分复位端RST,加分按钮端ADD,减分按钮端SUB,组别号输入端CHOS[3..0].系统地输出信号有:A组分数输出端AA2[3..0].AA1[3..0].AA0[3..0],B组分数输出端BB2[3..0].BB1[3..0].BB0[3..0],C组分数输出端CC2[3..0].CC1[3..0].CC0[3..0],D组分数输出端DD2[3..0].DD1[3..0].DD0[3..0].贓熱俣阃歲匱阊邺镓騷。 图2 VHDL实现方法如下所示: (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.系统输出信号有:倒计时输出端QA[3..0].QB[3..0].蜡變黲癟報伥铉锚鈰赘。 图3 VHDL实现方法如下所示: (1)计时初始值功能地实现. PROCESS(TA,TB,CLR) BEGIN IF CLR='1' THEN DA<="0000"; DB<="0000"; ELSE IF TA='1' THEN DA<=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 CLK'EVENT 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; QB<=TMPB; END PROCESS; 译码器地设计与实现 该模块实际上是一个译码器,主要是用来完成四位二进制BCD编码转换成七段二进制数字,以阿拉伯数字地形式输出在数码管上,使观众能够更直观地看到结果.译码器地译码对照表如下所示:買鲷鴯譖昙膚遙闫撷凄。 显示地数字/字母 BCD编码 七段数码管2进制 0 0000 0111111 1 0001 0000110 2 0010 1011011 3 0011 1001111 4 0100 1100110 5 0101 1101101 6 0110 1111101 7 0111 0000111 8 1000 1111111 9 1001 1101111 X XXXX 0000000 表2-1 模块如图4所示,由四位串行输入端AIN4[3..0]和七位串行输出端DOUT7[6..0]组成. 图4 VHDL实现方法如下所示: ARCHITECTURE ART OF YMQ IS BEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="0111111"; --0 WHEN "0001"=>DOUT7<="0000110"; --1 WHEN "0010"=>DOUT7<="1011011"; --2 WHEN "0011"=>DOUT7<="1001111"; --3 WHEN "0100"=>DOUT7<="1100110"; --4 WHEN "0101"=>DOUT7<="1101101"; --5 WHEN "0110"=>DOUT7<="1111101"; --6 WHEN "0111"=>DOUT7<="0000111"; --7 WHEN "1000"=>DOUT7<="1111111"; --8 WHEN "1001"=>DOUT7<="1101111"; --9 WHEN OTHERS=>DOUT7<="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) 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; 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 (ADD'EVENT 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 (SUB'EVENT 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 PROCESS; END ART; 附录3 计时器模块VHDL程序(JFQ.VHD) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JSQ IS PORT(CLR,LDN,EN,CLK: IN STD_LOGIC; TA,TB: IN STD_LOGIC; QA: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); QB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END JSQ; ARCHITECTURE ART OF JSQ IS SIGNAL DA: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DB: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(TA,TB,CLR) BEGIN IF CLR='1' THEN DA<="0000"; DB<="0000"; ELSE IF TA='1' THEN DA<=DA+'1' ; END IF; IF TB='1' THEN DB<=DB+'1'; END IF; END IF; END PROCESS; 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 CLK'EVENT 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; QB<=TMPB; END PROCESS; END ART; 附录4 译码器VHDL程序(YMQ.VHD) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YMQ IS PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END YMQ; ARCHITECTURE ART OF YMQ IS BEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="0111111"; --0 WHEN "0001"=>DOUT7<="0000110"; --1 WHEN "0010"=>DOUT7<="1011011"; --2 WHEN "0011"=>DOUT7<="1001111";
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服