本帖最后由 widpj 于 2011-6-2 10:04 编辑
首先声明 ,小弟我做的是一个四人抢答器,设计要求如下
2.要求
(1)1个主持键、4个抢答键。
(2)抢答的键号用一个数码管显示(可以采用静态显示)。
(3)抢答的时间用两位数码管显示(可以采用静态显示),精确到0.1s。
(4)主持键按下,4个抢答键才有效,时间从0.0s开始计时。
(5)当时间到8.8s还没人按抢答键,抢答停止,抢答键无效;当主持键再次按下才有效。
(6)在规定时间内抢答键按下时,显示先按下的键号,时间停止,抢答键无效;当主持键再次按下才有效。
我
本人写了一段程序,希望大虾们耐心看下,我的想法是想让程序在进程P3处挂一段时间,直到clr按下,否则程序总是挂起,四个抢答键无效,但是我就是不知道该怎么让他们失效一段时间。纠结了很久了,求大虾帮帮忙啊!!!!!
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity qdmk is
port(key1:in std_logic; --key1-key4是四个抢答键
key2:in std_logic;
key3:in std_logic;
key4:in std_logic;
main: in std_logic; --main是主持人按键
timexz:in std_logic; --这个是到8.8秒时的信号输入
clr: in std_logic; --清零
EN : out std_logic; --计数器使能输出
key_led: out std_logic_vector(3 downto 0) --抢答成功按键组输出
);
end entity qdmk;
architecture qdmk_1 of qdmk is
type STATES is(S0,S1);
signal K :std_logic;
signal state :STATES;
signal Q:std_logic;
signal led:std_logic_vector(3 downto 0);
begin
led<=key4&key3&key2&key1;
P1: process(clr,main)
begin
if clr='1' then
state<=S0;
elsif main'event and main='1' then
state<=S1;
end if;
end process P1;
P2:process(state,timexz,led)
begin
case state is
when S0=>
Q<='0';
led<="0000";
tmd<='0';
when S1=>
Q<='1';K<='1';
if timexz='1' then
Q<='0';led<="0000";K<='0';
else
case led is
when "0001"=> Q<='0';led<="0001";K<='0';
when "0010"=> Q<='0';led<="0010";K<='0';
when "0100"=> Q<='0';led<="0100";K<='0';
when "1000"=> Q<='0';led<="1000";K<='0';
when others=>null;
end case;
end if;
end case;
end process P2;
P3:process()
begin
EN<=Q;key_led<=ked;
wait until K'event and K='1';
end process P3;
end architecture qdmk_1;s |