数字逻辑课程设计报告
数字式抢答器
学院:计算机科学与技术
班级:网
姓名:
学号:
时间:2017.10.16
指导老师:张辉宜
2
一:实验目的
1、设计一个可容纳 4 组参赛的数字式抢答器,每组设一个按钮,供抢答使
2、抢答器具有第一信号鉴别和锁存功能,使除第一抢答者外的按钮不起作
用。
用。
3、设置一个主持人“复位”按钮。
4、主持人复位后,开始抢答,第一信号鉴别锁存电路得到信号后,有指示
灯显示抢答组别,扬声器发出 2~3 秒的音响。
5、设置一个计分电路,每组开始预置 100 分,由主持人记分,答对一次加
10 分,答错一次减 10 分。
二:实验方案设计原理及分析
2.1、方案原理
1.按照设计要求,设计一个 4 组参赛的抢答器,所以这种抢答器要求有四路
不同组别的抢答输入信号,并能识别最先抢答的信号,直观地通过数码显示和蜂
鸣报警等方式提示主持人并显示出组别;
2.该系统应有复位功能。主持人按下系统复位键(RST),系统进入抢答状态,
计分模块输出初始信号给数码显示模块并显示出初始值。
3.当某参赛组抢先将抢答键按下时,系统将其余三路抢答信号封锁,同时扬
声器发出 2-3 秒的声音提示,组别显示模块送出信号给数码显示模块,从而显示
出该抢答成功组台号,并一直保持到下一轮主持人将系统清零为止。
4.主持人对抢答结果进行确认,计时至 0 时,停止计时,扬声器发出超时报
警信号,以中止未回答完问题。当主持人给出倒计时停止信号时,扬声器停止鸣
叫。若参赛者在规定时间内回答完为题,主持人可给出倒计时计数停止信号,以
免扬声器鸣叫。主持人按下复位键,即 RST 为高电平有效状态,清除前一次的抢
答组别,又可开始新的一轮的抢答。
3
2.2、方案设计框图
主持人控制开关
抢答按钮
控制电路
优先编码
报警电路
锁存器
译码电路
显示电路
预制
计分电路
译码电路
显示电路
主电路
扩展功能电路
2.3、方案各路功能分析
此方案是由主体电路和扩展电路两部分构成,整个系统包括这样几个主要模
块:抢答鉴别模块、抢答计时模块、抢答计分模块、译码显示模块、报警模块。
主体电路完成基本的抢答功能,扩展电路完成各选手的得分显示以及报警功
能。选手回答问题完毕,主持人操作计分开关,计分电路采用十进制加/减计数
器、数码管显示。本轮抢答完毕,主持人操作控制开关,使系统回复到禁止工作
状态,以便进行下一轮抢答。
系统的输入信号有:各组的抢答按钮 s0、s1、s2、s3。系统清零信号 CLR,
系统时钟信号 CLK,复位信号 RST,加分按钮端 ADD,计时中止信号 stop;计时
十位和个位信号 tb,ta。;系统的输出信号有:四个组抢答状态的显示 LEDx(x
表示参赛者的编号),四个组抢答时的计时数码显示控制信号若干,抢答成功组
别显示的控制信号若干,各组计分动态显示的控制信号若干。
4
三:原理连线图
根据系统设计要求,将各模块连线得到如下系统框图。主持人按下使能端
EN,抢答器开始工作。四位抢答者谁先按下抢答按钮,则抢答成功,对应的显示
灯亮起,并通过显示电路模块显示参赛编号。抢答成功的选手进入答题阶段,如
果正确回答问题,则加分信号 add 有效,给相应的参赛组加分。如果复位信号
rst 有效,使得抢答器在下一轮抢答前,其抢答成功的组别判断恢复为初始状态,
开始新一轮抢答。
5
四:主要模块设计
4.1、抢答鉴别模块
在这个模块中主要实现抢答过程中的抢答鉴别功能。其电路框图如下。其中,
rst 为复位信号,当该信号高电平有效时,电路无论处于何种状态都恢复为初始
状态,即所有的输出信号都为 0;EN 为抢答使能信号,该信号高电平有效;s0、
s1、s2、s3 为抢答按钮,高电平时有效。当使能信号 EN 为低电平时,如果有参
赛者按下按钮,则提前抢答报警信号 FALSE[3..0]的对应位输出高电平,以示警
告;当 EN 为高电平时,首先将提前抢答报警信号 FALSE[3..0]复位清 0,然后根
据选手按下抢答按钮的先后顺序选择最先抢答的信号,其对应的抢答状态显示信
号 LEDA~LEDD 输出高电平,抢答成功组别编号由信号 states 输出,并锁存抢答
器此时的状态,直到清 0 信号有效为止。在每一轮新的抢答之前,都要使用复位
清零信号 rst,清除上一轮抢答对判断电路留下的使用痕迹,使电路恢复初始状
态。
VHDL 程序
library ieee;
use ieee.std_logic_1164.all;
entity qdjb is
port(rst:in std_logic;
EN:in std_logic;
s0,s1,s2,s3:in std_logic;
LEDA:out std_logic;
LEDB:out std_logic;
LEDC:out std_logic;
LEDD:out std_logic;
false:out std_logic_vector(3 downto 0);
states:out std_logic_vector(3 downto 0));
end qdjb;
architecture one of qdjb is
signal tmp: std_logic_vector(3 downto 0);
signal tag: std_logic;
begin
tmp<=s0&s1&s2&s3;
6
process(rst,EN,s0,s1,s2,s3,tmp)
begin
if rst='1'THEN
states<="0000";
LEDA<='0';
LEDB<='0';
LEDC<='0';
LEDD<='0';
false<="0000";
tag<='0';
elsif EN='0'then
if s0='1'then
false(3)<='1';
end if;
if s1='1'then
false(2)<='1';
end if;
if s2='1'then
false(1)<='1';
end if;
if s3='1'then
false(0)<='1';
end if;
else
false<="0000";
if tag='0'then
if tmp="1000"then
LEDA<='1';
LEDB<='0';
LEDC<='0';
LEDD<='0';
states<="1000";
tag<='1';
elsif tmp="0100"then
LEDA<='0';
LEDB<='1';
LEDC<='0';
LEDD<='0';
states<="0100";
tag<='1';
elsif tmp="0010"then
LEDA<='0';
LEDB<='0';
7
LEDC<='1';
LEDD<='0';
states<="0010";
tag<='1';
elsif tmp="0001"then
LEDA<='0';
LEDB<='0';
LEDC<='0';
LEDD<='1';
states<="0001";
tag<='1';
end if;
end if;
end if;
end process;
end one;
4.2、计时模块
在这个模块中主要实现抢答过程中的计时功能,在有组别抢答后开始倒计时,
若在规定时间没人回答,则超时报警。其中有系统复位信号 rst;抢答使能信号
s;无人抢答警报信号 warn;计时中止信号 stop;计时十位和个位信号 tb,ta。
VHDL 程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity js is
port(clk,rst,s,stop:in std_logic;
8
warn:out std_logic;
ta,tb:buffer std_logic_vector(3 downto 0));
end js;
architecture one of js is
signal co:std_logic;
begin
p1: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;
9