打印

如何才能让进程挂起!纠结 ……求指教

[复制链接]
1771|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
widpj|  楼主 | 2011-6-1 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 widpj 于 2011-6-2 10:04 编辑


首先声明 ,小弟我做的是一个四人抢答器,设计要求如下
2.要求
11个主持键、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

相关帖子

沙发
icecut| | 2011-6-2 13:39 | 只看该作者
继续纠结吧

使用特权

评论回复
板凳
XLDZZ| | 2011-6-3 22:05 | 只看该作者
用状态机 不就解决问题了

使用特权

评论回复
地板
sxhhhjicbb| | 2011-6-4 21:31 | 只看该作者
定义一个signal read_key:std_logic_vector(3 downto 0);
if(K='1')then
read_key <= k1&k2&k3&k4;
else
read_key <= "0000";
就是让抢答键.输入隔开一个,用一个使能信号对他进行分隔.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

40

帖子

0

粉丝