基于 VHDL 语言的抢答器设计
本文设计了一种基于 FPGA 的竞赛用四人抢答器,应用 VHDL 程序语言,
基本实现了抢答器的功能。文中给出了每个模块的程序和说明,还给出了仿真
结果,结果表明了文中的设计符合设计要求。
一、设计要求
本文要设计一种基于 FPGA 的竞赛用四人抢答器,应用 VHDL 程序语言实
现。该抢答器要实现以下功能:
1、具有抢答开始后 20 秒倒计时,20 秒倒计时后无人抢答显示超时,并报警;
2、能显示超前抢答台号并显示犯规警报;
3、系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余
各路抢答信号封锁,同时铃声想起,直至该路按键松开,显示牌显示该路
抢答台号。
本文设计的功能有:当复位信号有效时,系统初始化,所有数码管显示
0;当复位信号无效时,而抢答没有开始之前,如果有人抢答则视为超前抢答,
显示抢答台号;在抢答开始之后,开始倒计时,如果有人抢答则显示抢答台号;
开始抢答倒计时 20 秒后,如果一直无人抢答则报警数码管显示 F 报警。文中的
显示均为七段数码管,复位信号、开始抢答信号、抢答信号和数码管均低电平
有效。
功能说明
为实现以上功能,这次设计从逻辑上把抢答器分成了三个模块,分别是抢
答模块、时序模块和显示模块,下面将详细介绍我的设计。
二、端口和信号说明
根据设计要求,文中所涉及的端口和信号如下:
entity qiang is
port(rst:in std_logic;
clk:in std_logic;
st:in std_logic;--start
s0:in std_logic;--press_number
s1:in std_logic;--press_number
s2:in std_logic;--press_number
s3:in std_logic;--press_number
led_ans :out std_logic_vector(6 downto 0);--answer_number
led_foul:out std_logic_vector(6 downto 0);--foul_number
led_alt :out std_logic_vector(6 downto 0);--alert
led_cnth:out std_logic_vector(6 downto 0);--countdown_high
led_cntl:out std_logic_vector(6 downto 0));--countdown_low
end entity;
architecture qiangda of qiang is
signal lock,stop:std_logic:='1';
signal cnt1:std_logic_vector(4 downto 0):="11001";--25
signal cnt2,cnt3:std_logic_vector(8 downto 0):="111110100";--500
signal clk1,clk2,clk3:std_logic:='0';
signal cnt4:std_logic_vector(4 downto 0):="10100";--20