基于VHDL语言的四位抢答器
四位VHDL 抢答器
一、设计理念:
1.1 需要设计的是四名选手的抢答过程所用到的抢答器,分别用S0~S3四个按钮表示。
1.2 设置一个由主持人控制的“复位”开关S ,按下此开关后以前的状态复位并且重新开始计时抢答。
1.3 抢答器具有锁存与显示功能。选手按动自己相应的抢答按钮,系统锁存对应的编号,并在LED 数码管上显示出来。同时,扬声器发出提示音。锁存器实行优先锁存,因此,最先按动抢答按钮的选手编号将被显示,一直到主持人按下复位开关清除为止。
1.4 抢答器规定在一定时间内抢答,暂定为0-99s ,当主持人按下复位开关后开始计时。
1.5 若在规定时间内无人抢答,扬声器发出提示音并停止抢答过程,此时定时显示器上显示00。
二、设计内容
2.1系统大致过程分析
抢答器系统的结构分为抢答鉴别lock 模块、定时模块、译码模块和报警器模块。抢答器各步骤中最关键的是锁存,在选手按下抢答器的同时,LED 数码管上将显示计时器的剩余有效时间(个位和十位)和选手号。他们输出全都为BCD 码输出,这样便于和显示译码器连接除此之外,整个抢答器还需有一个“复位开始”信号,以便抢答器能实现清零和开始。。当主持人按下控制键、选手按下抢答键蜂鸣器短暂响起。
2.2 方案设计
1) 抢答鉴别lock 模块:
这个模块就是起到抢答过程中的抢答功能。模块中的输入端除了四个抢答输入信号(S0,S1,S2,S3)、时钟信号CLK 和公用的时间控制系统的复位端外,还有一个以时间控制系统的警报(WARN )输出信号为信号源的WARN 输入。其中时钟信号是个高频信号,用来扫描S0,S1,S2,S3是否有信号输入。输出端有对应于4位选手编号的LED 指示灯和用来锁存当前状态的4线2进制输出端外,还有一个STOP 端用来指示S0,S1,S2,S3按钮状态(控制计时器停止)。
这个模块中一直作用的是高频时钟信号,主持人按下复位键,所以输出端都清零,抢答开始,计时器开始计时。在有效时间内若有选手按下抢答键,STOP 就有就发出高电平到时间控制系统的STOP 端,计时器停止计时。按下抢答键的选手对应的指示灯亮,锁存器输出到译码显示模块,显示优先抢答人的编号,同时锁定输入端S ,阻止系统响应其他抢答者的信号。如果有效时间内无人抢答,计时模块发出报警提示音,并反馈给抢答鉴别模块以禁止选手抢答。
2)定时模块:
定时模块的输入端包括时钟信号CLK1、系统复位信号CLEAR 和一个STOP 输入信号;输出端时间状态显示信号高位HIGH 和低位LOW ,无人抢答时计时中止警报信号WARN 。 模块主要实现抢答过程中的计时功能,抢答开始后计时,N 秒有效时间内若无人抢答,显示超时,并输出信号至WARN 报警。若计时N 秒内有人抢答则由鉴别模块输出STOP 信号
停止计时,显示出抢答者的按抢答器的时间,同时输出一个信号经WARN 传到抢答鉴别系统,锁存不让其他选手抢答。
3)译码模块:
将抢答过程中锁存的BCD 码转换成7段码,并且用LED 显示。
4)报警器模块:
报警器模块主要实现抢答过程中的报警功能,当主持人按下复位键,有效时间内有人抢答或是计时已满无人抢答之后蜂鸣器开始报警,输出SOUND 有效电平为高电平.
三、设计步骤及数据
3.1 各单元电路软件设计
1)抢答器鉴别模块VHDL 程序及模块:
在这个模块中主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。在这个模块输入端有WARN 输入(以时间控制系统的WARN 输出信号为信号源) 、一个和“时间控制系统”公用的CLEAR 端、4人抢答输入信号端S0,S1,S2,S3和有一个时钟信号端CLK ,这个时钟信号是个高频信号,用以扫描S0,S1,S2,S3是否有信号输入。输出端有对应于S0,S1,S2,S3编号的4个指示灯LED 和4线2进制输出端STATES (用于锁存当前的状态),还有一个STOP 端用于指示S0,S1,S2,S3按钮状态(控制计时器停止)。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LOCK IS
PORT( CLK,CLEAR:IN STD_LOGIC;
WARN:IN STD_LOGIC;
S0,S1,S2,S3:IN STD_LOGIC;
STATES:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
STOP:OUT STD_LOGIC;
LED:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END LOCK;
ARCHITECTURE ONE OF LOCK IS
SIGNAL G:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLEAR,CLK,S0,S1,S2,S3)
BEGIN
IF CLEAR='1' THEN G
ELSIF CLK'EVENT AND CLK='1' THEN
IF WARN='0' THEN
IF( S3='1')AND NOT(G(0)='1' OR G(1)='1' OR G(2)='1') THEN
G(3)
ELSIF( S2='1')AND NOT(G(0)='1' OR G(1)='1' OR G(3)='1') THEN
G(2)
ELSIF( S1='1')AND NOT(G(0)='1' OR G(2)='1' OR G(3)='1') THEN
G(1)
ELSIF( S0='1')AND NOT(G(1)='1' OR G(2)='1' OR G(3)='1') THEN
G(0)
END IF;
STOP
END IF;
END IF;
CASE G IS
WHEN "0001"=>STATES
WHEN "0010"=>STATES
WHEN "0100"=>STATES
WHEN "1000"=>STATES
WHEN OTHERS=>STATES
END CASE;
END PROCESS;
END ARCHITECTURE ONE;
2)译码模块VHDL 程序及模块:
将抢答过程中锁存的BCD 码转换成7段码用于LED 的显示。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CODE IS
PORT(INSTATES: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
QOUT: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END CODE;
ARCHITECTURE TWO OF CODE IS
BEGIN
PROCESS(INSTATES)
BEGIN
CASE INSTATES IS
WHEN "0000"=>QOUT
WHEN "0001"=>QOUT
WHEN "0010"=>QOUT
WHEN "0011"=>QOUT
WHEN "0100"=>QOUT
WHEN "0101"=>QOUT
WHEN "0110"=>QOUT
WHEN "0111"=>QOUT
WHEN "1000"=>QOUT
WHEN "1001"=>QOUT
WHEN OTHERS=>QOUT
END CASE;
END PROCESS;
END ARCHITECTURE TWO;
3)定时模块VHDL 程序及模块:
定时模块的输入端有时钟信号CLK 、系统复位信号CLEAR 和一个STOP 输入信号;输出端有秒时间状态显示信号高位HIGH 和低位LOW ,无人抢答时计时中止警报信号WARN 。这个模块中主要实现抢答过程中的计时功能,在抢答开始后进行N 秒的倒计时,并且在N 秒倒计时后无人抢答的情况下显示超时并输出信号至WARN 报警,或者只要N 秒内有人抢答,由抢答鉴别模块输出的STOP 信号控制停止计时,并显示优先抢答者的抢答时刻,输出一个信号经WARN 传至“抢答鉴别系统”,锁存不再让选手抢答。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT IS
PORT(CLK,CLEAR,STOP:IN STD_LOGIC;
WARN:OUT STD_LOGIC;
HIGH,LOW:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END COUNT;
ARCHITECTURE THREE OF COUNT IS
SIGNAL HS:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL LS:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK)
BEGIN
IF CLEAR='1' THEN
HS
ELSIF CLK'EVENT AND CLK='1' THEN
LS
IF LS="0000" THEN
LS
IF HS="0000" AND LS="0000" THEN
WARN
IF STOP='1' THEN
HS
LS
WARN
END IF;
END IF;
END IF;
END IF;
HIGH
END PROCESS;
END ARCHITECTURE THREE;
4)报警模块VHDL :
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内(N 秒内)有人抢答或是倒计时到了之后蜂鸣器开始报警,输出SOUND 有效电平为高
.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ALARM IS
PORT(CLEAR,WARN:IN STD_LOGIC;
SOUND:OUT STD_LOGIC);
END ;
ARCHITECTURE FOUR OF ALARM IS
BEGIN
PROCESS(WARN,CLEAR)
BEGIN
IF CLEAR='1' THEN SOUND
ELSIF WARN='1' THEN
SOUND
ELSE SOUND
END IF;
END PROCESS;
END ;
3.2 各单元设计电路的仿真波形图
1)抢答鉴别模块仿真图:
2)译码模块仿真图:
3)记时模块仿真图:
部分仿真图(1):
部分仿真图(2):
4)报警模块仿真图:
3.3 总电路连线图:
总电路仿真图:
四、设计总结
五、参考文献
[1] 、李国洪,沈明山:《可编程逻辑器件EDA 技术与实践》,机械工业出版社
[2]、江国强:《EDA 技术习题与实验》,电子工业出版社
[3]、曹昕燕,周风臣,聂春燕:《EDA 技术试验与课程设计》,清华大学出版社
[4]、黄仁欣:《EDA 技术实用教程》,清华大学出版社