等到VHDL仿真中<signal> = 1永远不会成立

 善达集团_187 发布于 2023-02-11 19:52

下面是我正在运行的代码.我的问题是为什么wait until在modelsim 中没有第三个触发器?控制台输出很简单GOT HERE.它从来没有上线GOT HERE 2.我认为wait until = 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;

Morten Zilme.. 12

行为在wait语句的细节中(Jim Lewis引用的等待细节).原因是这些wait陈述有三个部分:

wait
  [on sensitivity_list]
  [until condition]
  [for time_expression];  -- Only for timeout, and not relevant here

wait在相关代码只具有一个until部分,所以将sensitivity_list根据VHDL标准创建的:"如果没有出现灵敏度子句,灵敏度组根据下列(递归)规则构造:...".在这种情况下,生成的sensitivity_list将包含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.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有