gpt4 book ai didi

vhdl - 等到 =1 在 VHDL 仿真中永远不会为真

转载 作者:行者123 更新时间:2023-12-04 05:38:50 25 4
gpt4 key购买 nike

下面是我正在运行的代码。我的问题是为什么第三个 wait until 没有在modelsim中触发?控制台输出只是 GOT HERE .它永远不会到达线路 GOT HERE 2 .我认为具有相同的 wait until <SIGNAL> = 1连续两次就可以了,因为条件两次都为真。我没有在那里添加“事件”,所以我认为模拟器不需要看到边缘。谁能解释这种行为?

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity example_wait_failure is
end example_wait_failure;

architecture behave of example_wait_failure is

signal r_CLK_TB : std_logic := '0';

begin

r_CLK_TB <= '1' after 20 ns, '0' after 40 ns, '1' after 60 ns;


p_TEST : process
begin

wait until r_CLK_TB = '1';
report "GOT HERE" severity note;

wait until r_CLK_TB = '1';
wait until r_CLK_TB = '1';
report "GOT HERE 2 " severity note;

end process p_TEST;

end behave;

最佳答案

行为在wait语句的细节中(wait的细节)
吉姆刘易斯提到)。原因是wait陈述有三个
部分:

wait
[on sensitivity_list]
[until condition]
[for time_expression]; -- Only for timeout, and not relevant here
wait在相关代码中只有 until部分,所以
敏感列表是根据 VHDL 标准创建的:“如果没有敏感
子句出现时,敏感度集根据以下内容构建
(递归)规则:...”。在这种情况下,生成的敏感列表将
包含 r_CLK_TB .

VHDL 标准有一个与代码精确匹配的示例,这
指出:
wait until r_CLK_TB = '1';

等同于:
loop
wait on r_CLK_TB;
exit when r_CLK_TB = '1';
end loop;

所以即使 wait没有明确包含 wait until
r_CLK_TB'event
(如评论中所写),执行结果等待直到 r_CLK_TB 上的事件为了通过第一个 waitwait on r_CLK_TB .
是不是很直观...自己判断;-)

所以也许原始代码应该更改为:
wait until r_CLK_TB = '1';

替换为:
if r_CLK_TB /= '1' then
wait until r_CLK_TB = '1';
end if;

在这种情况下,“GOT HERE”和“GOT HERE 2”都显示为 20 ns,因为
此处所有三个结构的条件都为 TRUE。

关于vhdl - 等到 <signal>=1 在 VHDL 仿真中永远不会为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com