EDA课程设计-数字式竞赛抢答器.doc
课程 EDA技术课程设计题目 数字式竞赛抢答器专业 电子信息工程 姓主要内容、基本要求、主要参考资料等主要内容:设计一个可容纳6组参赛的数字式抢答器,当第一个人按下抢答按钮时,其他组的按钮不起作用。当主持人按下“复位”按钮,所有组的按键才可用。基本要求:1、设计一个可容纳6组参赛的数字式抢答器,每组设一个按钮,供抢答使用。2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作用。3、设置一个主持人“复位”按钮。4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示灯显示抢答组别,扬声器发出2-3秒的音响。5、设置一个计分电路,每组开始预置100分,由主持人记分,答对一次加10分,答错一次减10分。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2011.3.11 指导教师 专业负责人 2011年 3月7日一、总体设计思想1.基本原理根据系统设计要求可知,系统的输入信号有:各组的抢答按钮ABCDEF,系统清零信号CLR,系统时钟信号CLK,计分复位端rst,加分按钮ADD,减分按钮ACC,系统的输出信号有:六个组抢答成功与否的指示灯控制信号输出口LEDA、LEDB、LEDC、LEDD、LEDE、LEDF,六个组抢答时的抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。本系统应具有的功能有:第一抢答信号的鉴别和锁存功能;抢答计分功能;各组得分的累加和动态显示功能。根据以上分析,我们可将整个系统分为三个主要模块:抢答鉴别模块QDJB;抢答计分模块JFQ;显示译码模块YMQ。系统的工作原理如下:当主持人按下使能端CLR时,抢答器开始工作,ABCDEF六个抢答者谁先抢答成功则此选手的台号灯(LEDA-LEDF)将点亮,并且主持人前的组别显示数码将显示出抢答成功者的台号,扬声器发出2-3秒的音响。接下来主持人提问若回答正确,主持人按加分按钮ADD,若回答错误,按减分按钮ACC,抢答计分模块JFQ将给对应的组加分或者减分,并将组该的总分显示在对应的选手计分数码管上。完成第一轮抢答后,主持人清零,接着重新开始,步骤如上。2.设计框图抢答启动选手抢答加减分显示:抢答选手号选手得分蜂鸣器二、设计步骤和调试过程1、 总体设计电路2、 模块设计和相应模块程序l 抢答鉴别模块 rst states3.0clk2 tmps0s1s2s3s4s5 qdjblibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qdjb isport(rst,clk2:in std_logic; s0,s1,s2,s3,s4,s5:in std_logic; states:buffer std_logic_vector(5 downto 0);tmp:out std_logic);end qdjb;architecture one of qdjb issignal st:std_logic_vector(5 downto 0);beginp1:process(s0,rst,s1,s2,s3,s4,s5,clk2)begin if rst='0' then tmp<='0'st<="0000" elsif clk2'event and clk2='1' then if (s0='1' or st(0)='1')and not( st(1)='1' or st(2)='1' or st(3)='1' or st(4)='1' or st(5)='1' ) then st(0)<='1' end if ; if (s1='1' or st(1)='1')and not( st(0)='1' or st(2)='1' or st(3)='1' or st(4)='1' or st(5)='1') then st(1)<='1' end if ; if (s2='1' or st(2)='1')and not( st(0)='1' or st(1)='1' or st(3)='1' or st(4)='1' or st(5)='1') then st(2)<='1' end if ; if (s3='1' or st(3)='1')and not( st(0)='1' or st(1)='1' or st(2)='1' or st(4)='1' or st(5)='1') then st(3)<='1'if (s4='1' or st(4)='1')and not( st(0)='1' or st(1)='1' or st(2)='1' or st(3)='1' or st(5)='1') then st(4)<='1' end if ; if (s5='1' or st(5)='1')and not( st(0)='1' or st(1)='1' or st(2)='1' or st(3)='1' or st(5)='1') then st(5)<='1' end if ;tmp<=s0 or s1 or s2 or s3 or s4 or s5;end if ;end process p1;p2:process(states(0),states(1),states(2),states(3) ,states(4),states(5) begin if (st="0000") then states<="0000" elsif (st<="0001") then states<="0001"elsif (st<="0010") then states<="0010" elsif (st<="0100") then states<="0011"elsif (st<="0100") then states<="0100" elsif (st<="0101") then states<="0101" elsif (st<="1000") then states<="0110" end if; end process p2;end one;抢答鉴别模块用来准确直观地判断A、B、C、D、E、F六组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。l 计分器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity js isport(clk,rst,s,stop:in std_logic; warn:out std_logic; ta,tb:buffer std_logic_vector(3 downto 0);end js;architecture one of js issignal co:std_logic;beginp1:process(clk,rst,s,stop,ta) begin if rst='0' or stop='1' then ta<="0000" elsif clk'event and clk='1' then co<='0' if s='1' then if ta="0000" then ta<="1001"co<='1' else ta<=ta-1; end if; end if; end if;end process p1;p2:process(co,rst,s,stop,tb) begin if rst='0' or stop='1' then tb<="0010" elsif co'event and co='1' then if s='1' then if tb="0000" then tb<="0011" else tb<=tb-1; end if; end if; end if;end process p2;end one;计分模块的运行方式是按照十进制进行加减,即当时钟出现上升沿时就进行加一或者减一的操作。l 译码器模块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 ISBEGIN PROCESS(AIN4) BEGIN CASE AIN4 IS WHEN "0000"=>DOUT7<="1111110" -0 WHEN "0001"=>DOUT7<="0110000" -1 WHEN "0010"=>DOUT7<="1101101" -2 WHEN "0011"=>DOUT7<="1111001" -3 WHEN "0100"=>DOUT7<="0110011" -4 WHEN "0101"=>DOUT7<="1011011" -5 WHEN "0110"=>DOUT7<="1011111" -6 WHEN "0111"=>DOUT7<="1110000" -7 WHEN "1000"=>DOUT7<="1111111" -8 WHEN "1001"=>DOUT7<="1111011" -9 WHEN OTHERS=>DOUT7<="0000000" END CASE; END PROCESS;END ARCHITECTURE ART;在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。3、仿真及仿真结果分析l 抢答鉴别模块仿真图l 译码模块仿真图l 计分器模块仿真图3、 实验调试结果抢答鉴别模块:第一个按下键的小组,抢答信号判定电路LOCK通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的锁存器清零,组别显示、计时和计分会保存到主持人对系统进行清零操作时为止。当INI=1时系统复位,使组别显示信号G=0000,各组的指示灯信号A1=0,B1=0,C1=0,D1=0;当INI=0,即低电平有效,使其进入抢答鉴别状态,到CLK的上升沿到来时,以A组抢答成功为例,当输入信号为A=1,B=0,C=0,D=0,输出信号G=1000,A1=1,即为鉴别出A组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。记分模块为哪组进行记分取决于鉴别模块的输入信号G,当G=1000时表示A组最先抢答,则在此模块中为A组记分,当G=0100时表示B组最先抢答,则在此模块中为B组记分,当G=0010时表示C组最先抢答,则在此模块中为C组记分,当G=0001时表示D组最先抢答,则在此模块中为D组记分。以A组为例来说明此模块的设计,当复位信号RST=1时,系统复位且A组的分值显示初始值,为100分。当RST=0时,如果该组选手答题正确,则主持人按下加分键,即ADD=1,此时对该组进行加分操作;如果该组选手答题错误,则主持人按下减分键,即SUB=1,此时对该组进行减分操作。三、结论及心得体会通过这次对抢答器的设计和实践,学到了很多的东西,不仅巩固了以前所学的知识,而且学到了书本上没有的东西,在调试中每修改一个小的错误,自己心中的成就感就徒增。在这次设计,把理论与实践信结合起来,在老师的指导下和视频学习下,有些关键的问题才得以解决,锻炼了自己的能力,对以后走的路有了更清楚的认识,同时有了更多的信心。参考资料1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 江国强:EDA技术习题与实验,电子工业出版社 3 曹昕燕,周风臣,聂春燕:EDA技术试验与课程设计,清华大学出版社4 黄仁欣:EDA技术实用教程,清华大学出版社5 汉泽西.EDA技术与应用【M】.北京:北京航空航天大学出版社,2004