/
课题十六 智力竞赛抢答计时器的设计
一、 课题说明
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等多种手段指示出第一抢答者。同时,还可以设置计时、计分、犯规奖惩计录等多种功能。
二、 设计要求
1、设计一个4组参加的智力竞赛抢答计时器。每组设置一个抢答按钮供抢答者使用。
2、电路具有第一抢答信号的鉴别和锁存功能。在主持人将系统复位并发出抢答指令后,当有某一组参赛者首先按下抢答开关时,数码管显示相应组别并伴有声响。此时,电路应具备自锁功能,使别组的抢答开关不起作用。
3、电路具有回答问题时间控制功能。要求回答问题时间小于等于100s(显示为0~99),时间显示采用倒计时方式。当达到限定时间时,发出声响以示报警。
三、设计思路
根据设计要求可知,系统的输入信号有:各组的抢答按钮d1、d2、d3、d4,主持人按钮host,系统时钟信号clk,数码管的片选信号;系统的输出信号有:首先按下按钮的组别信号sel, 声音信号sound,倒计时显示信号q[6..0]。为实现设计要求,电路由抢答鉴别模块、锁存器模块、转换模块、倒计时模块、片选信号产生模块、3选1模块、显示译码模块和一些门电路组成。总体框图如图16-1所示。
四、设计文件
1、顶层原理图
智力竞赛抢答计时器的顶层原理图如图16-1所示
图16-1 智力抢答器的原理图
2、底层源程序
(1)抢答鉴别模块FENG的VHDL源程序
抢答鉴别模块FENG如图16-2所示,该模块在第一个选手按下按键后,输出高电平给锁存器,锁存当时的按键状态。
【例16-1】--feng.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FENG IS
PORT(CP,CLR:IN STD_LOGIC;
Q :OUT STD_LOGIC);
END FENG;
ARCHITECTURE FENG_ARC OF FENG IS 图16-2抢答鉴别 模块FENG
BEGIN
PROCESS(CP,CLR)
BEGIN
IF CLR='0'THEN
Q<='0';
ELSIF CP'EVENT AND CP='0'THEN
Q<='1';
END IF;
END PROCESS;
END FENG_ARC;
(2)片选信号产生模块SEL的VHDL源程序
片选信号产生模块SEL如图16-3所示,该模块产生数码管片选信号。
【例16-2】--sel.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEL IS
PORT(CLK:IN STD_LOGIC;
a :OUT INTEGER RANGE 0 TO 7);
END SEL;
ARCHITECTURE SEL_ARC OF SEL IS 图16-3 片选信号产生模块SEL
BEGIN
PROCESS(CLK)
VARIABLE AA:INTEGER RANGE 0 TO 7;
BEGIN
IF CLK'EVENT AND CLK='1'THEN
AA:=AA+1;
END IF;
A<=AA;
END PROCESS;
END SEL_ARC;
(3)锁存器模块LOCKB的VHDL源程序
锁存器模块LOCKB如图16-4所示。该模块将第一个抢答的结果锁存,同时送出ALM信号,实现声音提示。
【例16-3】--lockb.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LOCKB IS
PORT(D1,D2,D3,D4:IN STD_LOGIC;
CLK,CLR:IN STD_LOGIC;
Q1,Q2,Q3,Q4,ALM:OUT STD_LOGIC);
END LOCKB;
ARCHITECTURE LOCK_ARC OF LOCKB IS
BEGIN
PROCESS(CLK)
BEGIN
IF CLR='0'THEN
Q1<='0';
Q2<='0';
Q3<='0';
Q4<='0';
ALM<='0'; 图16-4 模块LOCKB
ELSIF CLK'EVENT AND CLK='1'THEN
Q1<=D1;
Q2<=D2;
Q3<=D3;
Q4<=D4;
ALM<='1';
END IF;
END PROCESS;
END LOCK_ARC;
(4)转换模块CH41A的VHDL源程序
转换模块CH41A如图16-5所示,该模块将抢答结果转换为二进制数。
【例16-4】--ch41a..vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CH41A IS
PORT(D1,D2,D3,D4:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CH41A;
ARCHITECTURE CH41_ARC OF CH41A IS 图16-5 转换模块CH41A
BEGIN
PROCESS(D1,D2,D3,D4)
VARIABLE TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
TMP:=D1&D2&D3&D4;
CASE TMP IS
WHEN "0111"=>Q<="0001";
WHEN "1011"=>Q<="0010";
WHEN "1101"=>Q<="0011";
WHEN "1110"=>Q<="0100";
WHEN OTHERS=>Q<="1111";
END CASE;
END PROCESS;
END CH41_ARC;
(5)3选1模块CH31A的VHDL源程序
3选1模块CH31A如图16-6所示,该模块由SEL选择,输出抢答成功的号数,或倒计时。
【例16-5】--ch31a.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CH31A IS
PORT(SEL:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
D1,D2,D3:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CH31A;
ARCHITECTURE CH31_ARC OF CH31A IS
BEGIN
PROCESS(SEL,D1,D2,D3)
BEGIN
CASE SEL IS
WHEN "000"=>Q<=D1;
WHEN "001"=>Q<=D2;
WHEN "111"=>Q<=D3;
WHEN OTHERS=>Q<="1111";
END CASE;
END PROCESS; 图16-6 3选1 模块CH31A
END CH31_ARC;
(6)倒计时模块COUNT的VHDL源程序
倒计时模块COUNT如图16-7所示,该模块实现答题时间的倒计时,在计满100s后送出声音提示。
【例16-6】--count.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT(CLK,EN:IN STD_LOGIC; 图16-7 倒计时 模块COUNT
H,L:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SOUND:OUT STD_LOGIC);
END COUNT;
ARCHITECTURE COUNT_ARC OF COUNT IS
BEGIN
PROCESS(CLK,EN)
VARIABLE HH,LL:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF EN='1'THEN
IF LL=0 AND HH=0 THEN
SOUND<='1';
ELSIF LL=0 THEN
LL:="1001";
HH:=HH-1;
ELSE
LL:=LL-1;
END IF;
ELSE
SOUND<='0';
HH:="1001";
LL:="1001";
END IF;
END IF;
H<=HH;
L<=LL;
END PROCESS;
END COUNT_ARC;
(7)显示译码模块DISP的VHDL源程序
显示译码模块DISP如图16-8所示,。
【例16-7】--disp.vhd
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DISP IS 图16-8 显示译码模块DISP
PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END DISP;
ARCHITECTURE DISP_ARC OF DISP IS
BEGIN
PROCESS(D)
BEGIN
CASE D IS
WHEN"0000"=>Q<="0111111";
WHEN"0001"=>Q<="0000110";
WHEN"0010"=>Q<="1011011";
WHEN"0011"=>Q<="1001111";
WHEN"0100"=>Q<="1100110";
WHEN"0101"=>Q<="1101101";
WHEN"0110"=>Q<="1111101";
WHEN"0111"=>Q<="0100111";
WHEN"1000"=>Q<="1111111";
WHEN"1001"=>Q<="1101111";
WHEN OTHERS=>Q<="0000000";
END CASE;
END PROCESS;
END DISP_ARC;
五、系统仿真
智力竞赛抢答计时器的时序仿真波形如图16-10所示。由图可见,d2首先抢答,当sel为111时,
Q[6..0]=5B,ch31a的Q端为2,表示2号抢答成功,此后d4再按开关不起作用。
图16-9 智力竞赛抢答计时器的时序仿真图
六、引脚锁定
端口分类 设计实体
端口名称 GW48-CK
按键、显示器 结构图上的
信号名 目标芯片
引脚号
输入端口 CLR 时钟 CLOCK0 2
D1 键3 PIO8 17
D2 键4 PIO9 18
D3 键5 PIO10 19
D4 键6 PIO11 21
HOST 键8 PIO13 23
输出端口 Q[6..0] 数码管8 PIO46~40 78,73-70,67,66
SEL[2..0] PIO18,17,16 29,28,27
SOUND SPKER 3
CLKY PIO12 22
目标芯片:EPF10K10CL84-4
模式:NO.6
七、硬件验证
参加智力竞赛的同学分别是D1(键3),D2(键4),D3 (键5),D4(键6 ),而主持人是键8。通过队员们按键开关的抢答,响应显示灯亮并伴有声响,说明已经有队员抢答了,此时抢答器不再接受其他队员的请求信号。
八、知识链接
十、同步练习
一周热门 更多>