VHDL四路抢答器的设计

  • 格式:doc
  • 大小:110.00 KB
  • 文档页数:9

1 / 9 VHDL四路抢答器的设计

设计要求:

1.抢答器同时供N名选手,(此处假设4个)分别用4个按钮S0~ S3表示。

2.设置一个系统“开始复位”开关S,该开关由主持人控制(当主持人按下该开关后以前的状态复位并且开始计时抢答)。

3.抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。

4. 抢答器具有定时抢答功能,且一次抢答的时间(0-99S)。当主持人启动“开始复位”键后,定时器进行减计时。

5. 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。

一、概述

抢答器的逻辑结构主要由抢答鉴别lock模块、定时模块、译码模块和报警器模块组成。在整个抢答器中最关键的是如何实现抢答封锁,在控制键按下的同时计数器倒计时显示有效剩余时间。除此之外,整个抢答器还需有一个“复位开始”信号,以便抢答器能实现清零和开始。抢答器共有3个输出显示,选手代号、计数器的个位和十位,他们输出全都为BCD码输出,这样便于和显示译码器连接。当主持人按下控制键、选手按下抢答键蜂鸣器短暂响起。

• 方案设计与论证

嘿嘿!将该任务分成N个模块进行设计,分别为:抢答器鉴别模块、抢答器计时模块、译码模块、报警模块,最后是综合。

1. 抢答器鉴别模块:

在这个模块中主要实现抢答过程中的抢答功能,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。在这个模块输入端有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按钮状态(控制计时器停止)。

在此模块中高频时钟信号一直作用,此时,若主持人按下CLEAR即为开始抢答信号,所有输出端都自动清零。在有效时间范围(N秒)内只要有人抢答,STOP就有高电平输出至“时间控制系统”的STOP端以控制倒计时的停止,并且对应的LCD指示灯点亮,STATES锁存输出到译码显示模块,用以显示优先抢答人的组号,并锁定输入端S以阻止系统响应其他抢答者的信号。当有效时间到了之后还没有人抢答,则记时模块发出报警信号,同时反馈回来给抢答鉴别模块,禁止选手在抢答。

2.译码模块:

将抢答过程中锁存的BCD码转换成7段码用于LED的显示。

3定时器模块:

这个模块的输入端有时钟信号CLK1、系统复位信号CLEAR和一个STOP输入信号;输出端有秒时间状态显示信号高位HIGH和低位LOW,无人抢答时计时中止警报信号WARN。 2 / 9 这个模块中主要实现抢答过程中的计时功能,在抢答开始后进行N秒的倒计时,并且在N

秒倒计时后无人抢答的情况下显示超时并输出信号至WARN报警,或者只要N秒内有人抢答,由抢答鉴别模块输出的STOP信号控制停止计时,并显示优先抢答者的抢答时刻,输出一个信号经WARN传至“抢答鉴别系统”,锁存不再让选手抢答。

4报警模块:

在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内(N秒内)有人抢答或是倒计时到了之后蜂鸣器开始报警,输出SOUND有效电平为高.

5.在这个模块中是对前4个模块的综合。

三.单元电路软件设计及仿真

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<="0000";LED<="0000";STOP<='0';

ELSIF CLK'EVENT AND CLK='1' THEN

IF WARN='0' THEN 3 / 9 IF( S3='1')AND NOT(G(0)='1' OR G(1)='1' OR G(2)='1') THEN

G(3)<='1';LED(3)<='1';

ELSIF( S2='1')AND NOT(G(0)='1' OR G(1)='1' OR G(3)='1') THEN

G(2)<='1';LED(2)<='1';

ELSIF( S1='1')AND NOT(G(0)='1' OR G(2)='1' OR G(3)='1') THEN

G(1)<='1';LED(2)<='1';

ELSIF( S0='1')AND NOT(G(1)='1' OR G(2)='1' OR G(3)='1') THEN

G(0)<='1';LED(3)<='1';

END IF;

STOP<=G(0) OR G(1) OR G(2) OR G(3);

END IF;

END IF;

CASE G IS

WHEN "0001"=>STATES<="0001";

WHEN "0010"=>STATES<="0010";

WHEN "0100"=>STATES<="0011";

WHEN "1000"=>STATES<="0100";

WHEN OTHERS=>STATES<="0000";

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) 4 / 9 BEGIN

CASE INSTATES IS

WHEN "0000"=>QOUT<="0111111";

WHEN "0001"=>QOUT<="0000110";

WHEN "0010"=>QOUT<="1011011";

WHEN "0011"=>QOUT<="1001111";

WHEN "0100"=>QOUT<="1100110";

WHEN "0101"=>QOUT<="1101101";

WHEN "0110"=>QOUT<="1111101";

WHEN "0111"=>QOUT<="0000111";

WHEN "1000"=>QOUT<="1111111";

WHEN "1001"=>QOUT<="1101111";

WHEN OTHERS=>QOUT<="0000000";

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; 5 / 9 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<="1001";LS<="1001";WARN<='0';