数字抢答器系统的设计与实现
1 抢答器系统设计要求
数字抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者,并设置一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果控制抢答器的清零复位,掌握比赛的进程。所以我在设计8路数字抢答器的模块需要满足鉴别、抢答报警、回答倒计时、数显等功能,具体设计要求如下:
(1)抢答器可容纳八组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始;
(2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。在主持人将系统复位并发出抢答指令后,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在组别显示器上显示该组别,同时扬声器也给出音响提示,此时,电路具备自锁功能,使其他抢答按钮不起作用。
(3)抢答器具有限时回答问题的功能,当主持人启动倒计时开始键后,要求计时器采用倒计时,同时最后计时器倒计时到00时扬声器会发出声响提示;
2系统总体设计思想
抢答器要求有八路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警,同时该系统还应有复位、倒计时启动功能。
抢答过程:主持人按下系统复位键(CLR ),系统进入抢答状态,计时模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余七路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到主持人将系统清零为止。主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时。计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。若参赛者在规定时间内回答完问题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。主持人按下复位键,即CLR 为低电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
此抢答器的设计中采用自顶向下的设计思路,运用VHDL 硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来系统的总体框图如下:
系统的总体框图
3子模块的设计思想和实现
根据对抢答器的功能要求,把要设计的系统划分为六个功能模块:抢答信号鉴别模块、锁存模块、编码模块、计时模块、译码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路。
3.1 鉴别模块的设计与实现
抢答鉴别模块用来准确直观地判断S1、S2、S3、S4、S5、S6、S7、S8八组抢答者谁最先按下按钮, 并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行下一步的操作。抢答鉴别模块的元件图如下图所:
图4-3-1 鉴别模块元件框图
引脚作用:
输入信号:各组的抢答按钮S1、S2、S3、S4、S5、S6、S7、S8,系统清零信号CLR ,反馈使能端OE 。
输出信号: 各组的抢答按钮显示端q1,q2,q3,q4,q5,q6,q7,q8。
工作原理:第一个按下键的小组,抢答信号判定模块QDJB 通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的按键信号屏蔽,显示组别直到主持人对系统进行清零操作时为止。当CLR=1时系统复位,抢答被屏蔽;当CLR=0时,即低电平有效,且OE 为低电平时,使其进入抢答鉴别状态,到CLK 的上升沿到来时,以S1组抢答成功为例,当输入信号为S1=1,S2=0,S3=0,S4=0,S5=0,S6=0,
S7=0,S8=0,即为鉴别出S1组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。部分源程序如下所示:
IF (CLR ='1') THEN
Q1
清零端有效时,所有的输出赋值为0
ELSIF (OE='0') THEN
Q1
原理框图如下:
抢答鉴别模块原理图
仿真结果图如下图:
鉴别模块仿真图
3.2 锁存反馈模块的设计与实现
当抢答鉴别模块成功将各个抢答组的抢答信号输出后后,必须由锁存电路来将抢答信号中最先抢答的组别锁定,禁止其他组的信号显示出来,这个模块是整个电路中最重要的地方,这个模块直接影响主持人对比赛公平进行的判断。锁存模块的元件图如下图所示:
锁存模块元件图
引脚作用:
输入信号:D1、D2、D3、D4、D5、D6、D7、D8是各组的抢答信号。
输出信号:Q 是锁存反馈信号。
工作原理:当D1、D2、D3、D4、D5、D6、D7、D8各组的抢答信号进入锁存模块时,在锁存模块中,对输入的各个信号的信息进行或的关系运算,将计算结果输给Q ,通过Q 向外输出。最后将Q 值反馈给QDJB 模块,对本次的抢答进行锁存,并将锁存结果输出给下一级电路。部分源程序如下所示:
If d1='1' or d2='1' or d3='1' or d4='1' or d5='1' or d6='1' or d7='1' or d8='1'then q
Else q
End if;
仿真结果图如下图:
锁存反馈模块的仿真图
3.3 编码模块的设计与实现
当被所存的信号被送到编码模块后,该模块会将送到的各个组的信息进行编码。该模块在总体电路中起到对输出信号的编码的作用,以便后级的译码显示电路正确显示。编码模块的元件图如下图所示:
编码模块元件图
引脚作用:
输入信号:锁存后的信号输入端为Q1、Q2、Q3、Q4、Q5、Q6、Q7、Q8,模块清零端为CLR.
输出信号:编码后的输出端为M[3..0],声音响起的使能端为EN 。
工作原理:通过编程的方法,实现编码的功能,例如S7组抢答成功,那么送到编码模块的信号就是01000000,这时,编码器就将改信号编码成0111,从M 端输出,同时EN 端跳变成高电平输出。部分源程序如下所示:
TEMP: =Q1&Q2&Q3&Q4&Q5&Q6&Q7&Q8;
CASE TEMP I
WHEN"10000000"=>M
WHEN"01000000"=>M
WHEN"00100000"=>M
WHEN"00010000"=>M
WHEN"00001000"=>M
WHEN"00000100"=>M
WHEN"00000010"=>M
编码成0111,并赋给M 。
WHEN"00000001"=>M
WHEN OTHERS=>M
END CASE;
EN
编码模块仿真图
3.4 声音报警模块的设计与实现
当某组的选手抢答成功之后,为了让主持人第一时间反应到抢答的成功,系统需要设置一个声响报警装置,来提示主持人对其他选手的抢答信号进行屏蔽。该模块在系统中是
十分必要的,声音响起,可以节约不少时间,为比赛的顺利进行争取时间。声音报警模块的元件图如下图所示:
发声模块的元件图
引脚作用:
输入信号:时钟信号CLK ,复位端CLR ,声音响起的使能端EN 。
输出信号:声音响起的输出端SOUND 。
工作原理:当时钟脉冲的上升沿到来,并且高电平有效时,EN 端为高电平,CLR 端的信号是低电平时,SOUND 端输出高电平,即声音响起;当CLR 为高电平时屏蔽一切EN 端的信号,SOUND 端输出低电平,声音不响起。原理框图如下图:
发声模块的原理框图
部分源程序如下所示:
IF (CLK'EVENT AND CLK='1') THEN
IF (CLR='0' AND EN='1') THEN \\…………当清零有效且使能端EN 为高电平时 SOUND
ELSE
SOUND
END IF; END IF;
仿真结果图如下图:
声音报警模块仿真图
3.5 答题倒计时模块的设计与实现
当某组抢答成功后,需要由抢答成功的组的组员来回答问题,而这期间必须有时间限制,让比赛尽快地顺利的进行,而回答问题的开始和结束都必须由主持人来掌握,该模块的元件图如下图所示:
倒计时器模块元件图
引脚作用:
输入信号:时钟信号CLK ,复位端CLR ,倒计时使能端EN 。
输出信号:倒计时高位显示端H[3..0],倒计时低位显示端L[3..0],倒计时结束声音报警端SOUND1。
工作原理:如果一组抢答成功,主持人给出判断并给出使能信号使倒计时开始计时如果计时到30秒的时候声音就会响起给主持人提供信息说明抢答队员已经超过了规定的时间,主持人会根据自己的主观意愿宣部此次抢答有效或无效。总的来说倒计时起到提醒参赛者时间的结束,并起到给主持人提示的作用。倒计时的设计思想:倒计时需要用两个数码管显示,其中一个数码管显示十位(H )另一个显示个位(L ),它们都用二进制表示,当参赛者抢答成功时,主持人给出是否有效,如果有效就把使能信号EN 赋低电平,倒计时开始工作,当时钟脉冲(CLK )有效的时候倒计时就开始计时,当个位变成零的时候程序就会使十位减1并且个位变成9,如果个位没有变成零的时候个位在时钟脉冲上升沿的时候自动减1,十位保持不变。当倒计时结束时,会有声音响起,提醒回答者和主持人回答超时,主持人对倒计时进行复位,回答结束。原理框图如下图:
倒计时模块原理框图
部分源程序如下所示:
IF CLR='0' THEN \\……………当清零有效的时候
HH: ="0011";
\\……………清零时赋初始
LL: ="0000";
ELSE
IF CLK'EVENT AND CLK='1'THEN
IF EN='0'THEN \\…………………使能有效的时候
\\…………当倒计时为00的时候声音响起
SOUND
\\……………当个位为0时十位减1个位变成
LL: ="1001";
HH: =HH-1;
ELSE
LL: =LL-1; \\………………如果个位不为0时十位不变个位减1
END IF;
ELSE
SOUND
HH: ="0011";
LL: ="0000";
仿真结果图如下图:
倒计时模块仿真图
3.6 组别译码显示模块的设计与实现
当抢答成功后,编码模块将抢答信息编码成四位二进制数,传送给译码显示模块,而译码显示模块的功能就是将四位二进制数通过数码管显示出来,以便于主持人判断出是哪一组抢答成功,且公布给每个抢答组。该模块的元件图如下图所示:
组别译码显示模块元件图
引脚作用:
输入信号:编码信号输入端M[3..0]。
输出信号:数码管显示输出端BCD[7..0]。
工作原理:译码显示模块的功能是将四位二进制BCD 编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,数码管它是由a 、b 、c 、d 、e 、f 、g 这七段组成,它根据各个模块的输出信号来决定这七段中那些显示那些不显示最终得到的数字就是需要显示的结果,能给观众一个准确、简明的数字。
部分源程序如下所示:
BEGIN
CASE M IS
WHEN "0000" => BCD
WHEN "0001" => BCD
数码管上有b 、c 亮因此显示为1。
WHEN "0010" => BCD
WHEN "0011" => BCD
WHEN "0100" => BCD
WHEN "0101" => BCD
WHEN "0110" => BCD
WHEN "0111" => BCD
WHEN "1000" => BCD
WHEN "1001" => BCD
WHEN OTHERS => BCD
译码显示模块仿真图
4抢答器的系统实现
单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:①元件例化。也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL 语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。在设计中选择的是这种方法。通过总的顶层元件图可以很清晰的看到模块连接的原理。下图就是各个元件连接在一起的总的系统图。
顶层元件图
系统总体仿真图如下图:
系统总体仿真图
注:抢答器组别信号S1、S2、S3、S4、S5、S6、S7、S8为高电平时,其功能为有效状态。同样,系统清零信号CLR 为高电平时有效,预置及倒计时控制信号EN ,为低电平有效。当CLR 有效时,抢答信号判别电路清零,为判别优先抢答信号做出准备。当倒计时使能端EN 为高电平时,预置时间设置信号EN=1时,通过倒计时预置数功能进行预置数。当倒计时使能端EN 为低电平,有系统时钟信号CLK 时,进行30秒倒计时。输入时钟CLK 一方面作为扬声器控制电路的输入信号,另一方面为倒计时电路提供信号。
附录
1、抢答鉴别模块VHDL 程序(QDJB.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY QDJB IS
PORT (S1, S2, S3, S4, S5, S6, S7, S8, CLR, OE: IN STD_LOGIC; Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8: OUT STD_LOGIC); END QDJB;
ARCHITECTURE A OF QDJB IS
BEGIN
PROCESS(S1,S2,S3,S4,S5,S6,S7,S8,OE,CLR) BEGIN
IF (CLR ='1') THEN
Q1
Q1
2、锁存反馈模块VHDL 程序(SUOCUN.VHD )
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY SUOCUN IS
PORT (D1, D2, D3, D4, D5, D6, D7, D8: IN STD_LOGIC;
Q: OUT STD_LOGIC);
END SUOCUN;
ARCHITECTURE A OF SUOCUN IS BEGIN
PROCESS (D1, D2, D3) BEGIN
IF D1='1' OR D2='1' OR D3='1' OR D4='1' OR D5='1' OR D6='1' OR D7='1' OR D8='1'THEN Q
3、编码模块VHDL 程序(BIANMA.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY BIANMA IS
PORT (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8: IN STD_LOGIC; CLR: IN STD_LOGIC;
M: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); EN: OUT STD_LOGIC); END BIANMA;
ARCHITECTURE A OF BIANMA IS BEGIN
PROCESS (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, CLR)
VARIABLE TEMP: STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN
TEMP: =Q1&Q2&Q3&Q4&Q5&Q6&Q7&Q8; CASE TEMP IS
WHEN"10000000"=>MMMMMMMMM
EN
4、译码模块VHDL 程序(DISPLAY.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DISPLAY IS
PORT (M: IN
STD_LOGIC_VECTOR (3 DOWNTO 0) ;
BCD: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END DISPLAY;
ARCHITECTURE A OF DISPLAY IS
BEGIN
PROCESS (M) BEGIN
CASE M IS
WHEN "0000" => BCD
WHEN "0001" => BCD BCD BCD BCD BCD BCD BCD BCD BCD BCD
5、声音报警模块VHDL 程序(FASHENG.VHD )LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FASHENG IS
PORT (CLK, CLR, EN: IN STD_LOGIC; SOUND: OUT STD_LOGIC); END FASHENG;
ARCHITECTURE A OF FASHENG IS
BEGIN
PROCESS (EN, CLK) BEGIN
IF (CLK'EVENT AND CLK='1') THEN IF (CLR='0' AND EN='1') THEN SOUND
SOUND
END IF; END IF; END PROCESS; END A;
6、答题倒计时模块VHDL 程序(DJSQ.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DJSQ IS
PORT (CLR, CLK, EN: IN STD_LOGIC;
H, L: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); SOUND1: OUT STD_LOGIC); END DJSQ;
ARCHITECTURE DJSQ_ARC OF DJSQ IS BEGIN
PROCESS (CLK, EN)
VARIABLE HH, LL: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
IF CLR='0' THEN HH: ="0011"; LL: ="0000"; ELSE
IF CLK'EVENT AND CLK='1'THEN IF EN='0'THEN
IF LL=0 AND HH=0 THEN SOUND1
LL: =LL-1; END IF; ELSE
SOUND1
数字抢答器系统的设计与实现
1 抢答器系统设计要求
数字抢答器,必须能够准确判断出第一位抢答者,并且通过数显、蜂鸣这些途径能让人们很容易得知谁是抢答成功者,并设置一定的回答限制时间,让抢答者在规定时间内答题,主持人根据答题结果控制抢答器的清零复位,掌握比赛的进程。所以我在设计8路数字抢答器的模块需要满足鉴别、抢答报警、回答倒计时、数显等功能,具体设计要求如下:
(1)抢答器可容纳八组选手,并为每组选手设置一个按钮供抢答者使用;为主持人设置一个控制按钮,用来控制系统清零(组别显示数码管灭灯)和抢答开始;
(2)电路具有对第一抢答信号的锁存、鉴别和显示等功能。在主持人将系统复位并发出抢答指令后,若参赛选手按下抢答按钮,则该组别的信号立即被锁存,并在组别显示器上显示该组别,同时扬声器也给出音响提示,此时,电路具备自锁功能,使其他抢答按钮不起作用。
(3)抢答器具有限时回答问题的功能,当主持人启动倒计时开始键后,要求计时器采用倒计时,同时最后计时器倒计时到00时扬声器会发出声响提示;
2系统总体设计思想
抢答器要求有八路不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数显和蜂鸣等方式显示出组别;对回答问题所用的时间进行计时、显示、超时报警,同时该系统还应有复位、倒计时启动功能。
抢答过程:主持人按下系统复位键(CLR ),系统进入抢答状态,计时模块输出初始信号给数码显示模块并显示出初始值。当某参赛组抢先将抢答键按下时,系统将其余七路抢答信号封锁,同时扬声器发出声音提示,组别显示模块送出信号给数码显示模块,从而显示出该抢答成功组台号,并一直保持到主持人将系统清零为止。主持人对抢答结果进行确认,随后,计时模块送出倒计时计数允许信号,开始回答问题,计时显示器则从初始值开始以计时。计时至0时,停止计时,扬声器发出超时报警信号,以中止未回答完问题。若参赛者在规定时间内回答完问题,主持人可给出倒计时计数停止信号,以免扬声器鸣叫。主持人按下复位键,即CLR 为低电平有效状态,清除前一次的抢答组别,又可开始新的一轮的抢答。
此抢答器的设计中采用自顶向下的设计思路,运用VHDL 硬件描述语言对各个模块进行层次化、系统化的描述,并且先设计一个顶层文件,再把各个模块连接起来系统的总体框图如下:
系统的总体框图
3子模块的设计思想和实现
根据对抢答器的功能要求,把要设计的系统划分为六个功能模块:抢答信号鉴别模块、锁存模块、编码模块、计时模块、译码显示模块和扬声器控制电路,具体的说,显示模块又包含最先抢答的组别显示电路、计时值显示电路。
3.1 鉴别模块的设计与实现
抢答鉴别模块用来准确直观地判断S1、S2、S3、S4、S5、S6、S7、S8八组抢答者谁最先按下按钮, 并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行下一步的操作。抢答鉴别模块的元件图如下图所:
图4-3-1 鉴别模块元件框图
引脚作用:
输入信号:各组的抢答按钮S1、S2、S3、S4、S5、S6、S7、S8,系统清零信号CLR ,反馈使能端OE 。
输出信号: 各组的抢答按钮显示端q1,q2,q3,q4,q5,q6,q7,q8。
工作原理:第一个按下键的小组,抢答信号判定模块QDJB 通过缓冲输出信号的反馈将本参赛组抢先按下按键的信号锁存,并且以异步清零的方式将其他参赛组的按键信号屏蔽,显示组别直到主持人对系统进行清零操作时为止。当CLR=1时系统复位,抢答被屏蔽;当CLR=0时,即低电平有效,且OE 为低电平时,使其进入抢答鉴别状态,到CLK 的上升沿到来时,以S1组抢答成功为例,当输入信号为S1=1,S2=0,S3=0,S4=0,S5=0,S6=0,
S7=0,S8=0,即为鉴别出S1组抢答成功,同时屏蔽其他组的输入信号,以免发生错误。同理其他组别抢答成功也是这样的鉴别过程。部分源程序如下所示:
IF (CLR ='1') THEN
Q1
清零端有效时,所有的输出赋值为0
ELSIF (OE='0') THEN
Q1
原理框图如下:
抢答鉴别模块原理图
仿真结果图如下图:
鉴别模块仿真图
3.2 锁存反馈模块的设计与实现
当抢答鉴别模块成功将各个抢答组的抢答信号输出后后,必须由锁存电路来将抢答信号中最先抢答的组别锁定,禁止其他组的信号显示出来,这个模块是整个电路中最重要的地方,这个模块直接影响主持人对比赛公平进行的判断。锁存模块的元件图如下图所示:
锁存模块元件图
引脚作用:
输入信号:D1、D2、D3、D4、D5、D6、D7、D8是各组的抢答信号。
输出信号:Q 是锁存反馈信号。
工作原理:当D1、D2、D3、D4、D5、D6、D7、D8各组的抢答信号进入锁存模块时,在锁存模块中,对输入的各个信号的信息进行或的关系运算,将计算结果输给Q ,通过Q 向外输出。最后将Q 值反馈给QDJB 模块,对本次的抢答进行锁存,并将锁存结果输出给下一级电路。部分源程序如下所示:
If d1='1' or d2='1' or d3='1' or d4='1' or d5='1' or d6='1' or d7='1' or d8='1'then q
Else q
End if;
仿真结果图如下图:
锁存反馈模块的仿真图
3.3 编码模块的设计与实现
当被所存的信号被送到编码模块后,该模块会将送到的各个组的信息进行编码。该模块在总体电路中起到对输出信号的编码的作用,以便后级的译码显示电路正确显示。编码模块的元件图如下图所示:
编码模块元件图
引脚作用:
输入信号:锁存后的信号输入端为Q1、Q2、Q3、Q4、Q5、Q6、Q7、Q8,模块清零端为CLR.
输出信号:编码后的输出端为M[3..0],声音响起的使能端为EN 。
工作原理:通过编程的方法,实现编码的功能,例如S7组抢答成功,那么送到编码模块的信号就是01000000,这时,编码器就将改信号编码成0111,从M 端输出,同时EN 端跳变成高电平输出。部分源程序如下所示:
TEMP: =Q1&Q2&Q3&Q4&Q5&Q6&Q7&Q8;
CASE TEMP I
WHEN"10000000"=>M
WHEN"01000000"=>M
WHEN"00100000"=>M
WHEN"00010000"=>M
WHEN"00001000"=>M
WHEN"00000100"=>M
WHEN"00000010"=>M
编码成0111,并赋给M 。
WHEN"00000001"=>M
WHEN OTHERS=>M
END CASE;
EN
编码模块仿真图
3.4 声音报警模块的设计与实现
当某组的选手抢答成功之后,为了让主持人第一时间反应到抢答的成功,系统需要设置一个声响报警装置,来提示主持人对其他选手的抢答信号进行屏蔽。该模块在系统中是
十分必要的,声音响起,可以节约不少时间,为比赛的顺利进行争取时间。声音报警模块的元件图如下图所示:
发声模块的元件图
引脚作用:
输入信号:时钟信号CLK ,复位端CLR ,声音响起的使能端EN 。
输出信号:声音响起的输出端SOUND 。
工作原理:当时钟脉冲的上升沿到来,并且高电平有效时,EN 端为高电平,CLR 端的信号是低电平时,SOUND 端输出高电平,即声音响起;当CLR 为高电平时屏蔽一切EN 端的信号,SOUND 端输出低电平,声音不响起。原理框图如下图:
发声模块的原理框图
部分源程序如下所示:
IF (CLK'EVENT AND CLK='1') THEN
IF (CLR='0' AND EN='1') THEN \\…………当清零有效且使能端EN 为高电平时 SOUND
ELSE
SOUND
END IF; END IF;
仿真结果图如下图:
声音报警模块仿真图
3.5 答题倒计时模块的设计与实现
当某组抢答成功后,需要由抢答成功的组的组员来回答问题,而这期间必须有时间限制,让比赛尽快地顺利的进行,而回答问题的开始和结束都必须由主持人来掌握,该模块的元件图如下图所示:
倒计时器模块元件图
引脚作用:
输入信号:时钟信号CLK ,复位端CLR ,倒计时使能端EN 。
输出信号:倒计时高位显示端H[3..0],倒计时低位显示端L[3..0],倒计时结束声音报警端SOUND1。
工作原理:如果一组抢答成功,主持人给出判断并给出使能信号使倒计时开始计时如果计时到30秒的时候声音就会响起给主持人提供信息说明抢答队员已经超过了规定的时间,主持人会根据自己的主观意愿宣部此次抢答有效或无效。总的来说倒计时起到提醒参赛者时间的结束,并起到给主持人提示的作用。倒计时的设计思想:倒计时需要用两个数码管显示,其中一个数码管显示十位(H )另一个显示个位(L ),它们都用二进制表示,当参赛者抢答成功时,主持人给出是否有效,如果有效就把使能信号EN 赋低电平,倒计时开始工作,当时钟脉冲(CLK )有效的时候倒计时就开始计时,当个位变成零的时候程序就会使十位减1并且个位变成9,如果个位没有变成零的时候个位在时钟脉冲上升沿的时候自动减1,十位保持不变。当倒计时结束时,会有声音响起,提醒回答者和主持人回答超时,主持人对倒计时进行复位,回答结束。原理框图如下图:
倒计时模块原理框图
部分源程序如下所示:
IF CLR='0' THEN \\……………当清零有效的时候
HH: ="0011";
\\……………清零时赋初始
LL: ="0000";
ELSE
IF CLK'EVENT AND CLK='1'THEN
IF EN='0'THEN \\…………………使能有效的时候
\\…………当倒计时为00的时候声音响起
SOUND
\\……………当个位为0时十位减1个位变成
LL: ="1001";
HH: =HH-1;
ELSE
LL: =LL-1; \\………………如果个位不为0时十位不变个位减1
END IF;
ELSE
SOUND
HH: ="0011";
LL: ="0000";
仿真结果图如下图:
倒计时模块仿真图
3.6 组别译码显示模块的设计与实现
当抢答成功后,编码模块将抢答信息编码成四位二进制数,传送给译码显示模块,而译码显示模块的功能就是将四位二进制数通过数码管显示出来,以便于主持人判断出是哪一组抢答成功,且公布给每个抢答组。该模块的元件图如下图所示:
组别译码显示模块元件图
引脚作用:
输入信号:编码信号输入端M[3..0]。
输出信号:数码管显示输出端BCD[7..0]。
工作原理:译码显示模块的功能是将四位二进制BCD 编码转换成七段二进制数字,以阿拉伯数字的形式输出在数码管上,数码管它是由a 、b 、c 、d 、e 、f 、g 这七段组成,它根据各个模块的输出信号来决定这七段中那些显示那些不显示最终得到的数字就是需要显示的结果,能给观众一个准确、简明的数字。
部分源程序如下所示:
BEGIN
CASE M IS
WHEN "0000" => BCD
WHEN "0001" => BCD
数码管上有b 、c 亮因此显示为1。
WHEN "0010" => BCD
WHEN "0011" => BCD
WHEN "0100" => BCD
WHEN "0101" => BCD
WHEN "0110" => BCD
WHEN "0111" => BCD
WHEN "1000" => BCD
WHEN "1001" => BCD
WHEN OTHERS => BCD
译码显示模块仿真图
4抢答器的系统实现
单独模块只有彼此联系起来构成一个完整的系统,才能实现其功能,这个过程有两种实现方法:①元件例化。也是用编程的方式将它们各个程序、信号、输入输出之间的关系用VHDL 语言来叙述清楚,还关系到程序的调用问题,需要设计者思路清晰,设计合理;②元器件图示连线。这种连线方法思路清晰可见,而且用的时候很简单方便,出现错误也很好检查。在设计中选择的是这种方法。通过总的顶层元件图可以很清晰的看到模块连接的原理。下图就是各个元件连接在一起的总的系统图。
顶层元件图
系统总体仿真图如下图:
系统总体仿真图
注:抢答器组别信号S1、S2、S3、S4、S5、S6、S7、S8为高电平时,其功能为有效状态。同样,系统清零信号CLR 为高电平时有效,预置及倒计时控制信号EN ,为低电平有效。当CLR 有效时,抢答信号判别电路清零,为判别优先抢答信号做出准备。当倒计时使能端EN 为高电平时,预置时间设置信号EN=1时,通过倒计时预置数功能进行预置数。当倒计时使能端EN 为低电平,有系统时钟信号CLK 时,进行30秒倒计时。输入时钟CLK 一方面作为扬声器控制电路的输入信号,另一方面为倒计时电路提供信号。
附录
1、抢答鉴别模块VHDL 程序(QDJB.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY QDJB IS
PORT (S1, S2, S3, S4, S5, S6, S7, S8, CLR, OE: IN STD_LOGIC; Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8: OUT STD_LOGIC); END QDJB;
ARCHITECTURE A OF QDJB IS
BEGIN
PROCESS(S1,S2,S3,S4,S5,S6,S7,S8,OE,CLR) BEGIN
IF (CLR ='1') THEN
Q1
Q1
2、锁存反馈模块VHDL 程序(SUOCUN.VHD )
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY SUOCUN IS
PORT (D1, D2, D3, D4, D5, D6, D7, D8: IN STD_LOGIC;
Q: OUT STD_LOGIC);
END SUOCUN;
ARCHITECTURE A OF SUOCUN IS BEGIN
PROCESS (D1, D2, D3) BEGIN
IF D1='1' OR D2='1' OR D3='1' OR D4='1' OR D5='1' OR D6='1' OR D7='1' OR D8='1'THEN Q
3、编码模块VHDL 程序(BIANMA.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY BIANMA IS
PORT (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8: IN STD_LOGIC; CLR: IN STD_LOGIC;
M: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); EN: OUT STD_LOGIC); END BIANMA;
ARCHITECTURE A OF BIANMA IS BEGIN
PROCESS (Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, CLR)
VARIABLE TEMP: STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN
TEMP: =Q1&Q2&Q3&Q4&Q5&Q6&Q7&Q8; CASE TEMP IS
WHEN"10000000"=>MMMMMMMMM
EN
4、译码模块VHDL 程序(DISPLAY.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DISPLAY IS
PORT (M: IN
STD_LOGIC_VECTOR (3 DOWNTO 0) ;
BCD: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END DISPLAY;
ARCHITECTURE A OF DISPLAY IS
BEGIN
PROCESS (M) BEGIN
CASE M IS
WHEN "0000" => BCD
WHEN "0001" => BCD BCD BCD BCD BCD BCD BCD BCD BCD BCD
5、声音报警模块VHDL 程序(FASHENG.VHD )LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FASHENG IS
PORT (CLK, CLR, EN: IN STD_LOGIC; SOUND: OUT STD_LOGIC); END FASHENG;
ARCHITECTURE A OF FASHENG IS
BEGIN
PROCESS (EN, CLK) BEGIN
IF (CLK'EVENT AND CLK='1') THEN IF (CLR='0' AND EN='1') THEN SOUND
SOUND
END IF; END IF; END PROCESS; END A;
6、答题倒计时模块VHDL 程序(DJSQ.VHD ) LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DJSQ IS
PORT (CLR, CLK, EN: IN STD_LOGIC;
H, L: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); SOUND1: OUT STD_LOGIC); END DJSQ;
ARCHITECTURE DJSQ_ARC OF DJSQ IS BEGIN
PROCESS (CLK, EN)
VARIABLE HH, LL: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN
IF CLR='0' THEN HH: ="0011"; LL: ="0000"; ELSE
IF CLK'EVENT AND CLK='1'THEN IF EN='0'THEN
IF LL=0 AND HH=0 THEN SOUND1
LL: =LL-1; END IF; ELSE
SOUND1