我有条件将某个变量设置为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皮带关闭,则报警开启。
我不知道为什么会这样。你能帮我个忙吗?
答案 0 :(得分:1)
每次灵敏度列表中的一个信号发生变化时,您的过程就会运行一次。由于秒不在灵敏度列表中,纯粹的时间流逝不会触发您的过程。
它看到的是:
在时间0改变钥匙和皮带。你的过程运行,钥匙在点火,但没有4秒钟,所以没有警报。
皮带在6秒钟更换,皮带打开,钥匙进入,皮带系好。没有警报。
钥匙在7秒后退出点火。点火没有钥匙所以没有警报。
腰带在10秒钟变化。皮带被取下,但钥匙不在点火器内,因此不会报警。
14秒钟更换钥匙(!)。皮带仍然关闭,钥匙处于点火状态,时间大于4秒(14秒)。警报已激活。