VHDL模拟混淆

时间:2018-04-18 16:05:15

标签: vhdl wait alarm

我有条件将某个变量设置为1.这是条件:

process(key, belt) is
    begin 
        alarm <='0';
        if key ='1' then
            if Seconds > 4 and belt ='0' then
                alarm <='1';
            else 
                alarm <='0';
            end if;
        end if; 
end process; 

因此,当驾驶员戴上钥匙时,如果在5秒内他/她没有系好安全带,则警报开启。这就是主意。为了测试它,我创建了一个testbench文件,当KEY为ON且BELT为ON时硬编码。 这是代码:

process is
    begin
        key<='1'; 
        wait for 7000 ms; 
        key<='0'; 
        wait for 7000 ms; 
    end process; 

    --simluate beltOn after 6sec
    process is
    begin 
        belt<='0'; 
        wait for 6000 ms; 
        belt<='1'; 
        wait for 4000 ms; 
    end process; 

基本上,钥匙最初开启7秒钟,但是皮带仅在6秒后紧固,这意味着警报应该在5-6秒的间隔内打开。但是,当我在软件上模拟它时,闹钟关闭,并且它不会运行14秒,但之后它成功运行。因此,例如,如果间隔30-35皮带关闭,则报警开启。

我不知道为什么会这样。你能帮我个忙吗?

1 个答案:

答案 0 :(得分:1)

每次灵敏度列表中的一个信号发生变化时,您的过程就会运行一次。由于秒不在灵敏度列表中,纯粹的时间流逝不会触发您的过程。

它看到的是:

  1. 在时间0改变钥匙和皮带。你的过程运行,钥匙在点火,但没有4秒钟,所以没有警报。

  2. 皮带在6秒钟更换,皮带打开,钥匙进入,皮带系好。没有警报。

  3. 钥匙在7秒后退出点火。点火没有钥匙所以没有警报。

  4. 腰带在10秒钟变化。皮带被取下,但钥匙不在点火器内,因此不会报警。

  5. 14秒钟更换钥匙(!)。皮带仍然关闭,钥匙处于点火状态,时间大于4秒(14秒)。警报已激活。