vhdl - 如何通过超时停止模拟?

标签 vhdl simulation

我已经设法在 VHDL 中实现了模拟超时。如果进程在 MaxRuntime 上运行的时间更长,它们将被“杀死”。

不幸的是,这反过来不起作用。如果我的模拟在 MaxRuntime 之前完成,那么一切都在等待 MaxRuntime 上的最后一个等待语句。

我发现可以结合 wait on , wait forwait until语句合二为一。

我当前的代码片段。一个完整的例子太长了......

package sim is
  shared variable IsFinalized : BOOLEAN := FALSE;

  procedure initialize(MaxRuntime : TIME := TIME'high);
  procedure finalize;
end package;

package body sim is
  procedure initialize(MaxRuntime : TIME := TIME'high) is
  begin
    -- do init stuff
    if (MaxRuntime = TIME'high) then
      wait on IsFinalized for MaxRuntime;
      finalize;
    end if;
  end procedure;

  procedure finalize;
  begin
    if (not IsFinalized) then
      IsFinalized := TRUE;
      -- do finalize stuff:
      --  -> stop all clocks
      -- write a report
    end if;
  end procedure;
end package body;

entity test is
end entity;

architecture tb of test is
begin
  initialize(200 us);

  process
  begin
    -- simulate work
    wait for 160 us;
    finalize;
  end process;
end architecture;

如果 IsFinalized,等待语句不会退出改变了。我的模拟运行了大约 160 美元。如果我设置 MaxRuntime到 50 us,模拟在大约 50 us 停止(加上一些额外的周期,直到每个进程注意到停止条件)。当我设置 MaxRuntime到 200 us,模拟在 200 us 而不是 162 us 后退出。
  • 如何退出/中止等待语句?
  • 为什么我不能等待一个变量?

  • 我不想为模拟器使用命令行开关来设置最大执行时间。

    最佳答案

    所以听起来你想终止模拟,要么在超时,要么在超时之前完成测试。当事件队列为空时模拟器将停止是正确的,但正如您所体验的那样,这是相当高的。

    VHDL-2008 引入了 stop finish std.env用于停止或终止仿真的包。

    在 VHDL-2002 中,一种常见的方法是通过 assert 停止仿真。与 severity FAILURE :

    report "OK   ### Sim end: OK :-) ###   (not actual failure)" severity FAILURE;
    

    这种模拟停止方法基于这样一个事实,即模拟器(例如 ModelSim)通常会在出现 assert 时停止模拟。与 severity FAILURE发生。

    关于vhdl - 如何通过超时停止模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35302180/

    相关文章:

    hex - 在常量中使用十六进制值

    arrays - 数组索引为宽数组

    java - java中的骰子模拟

    random - 如何创建随机模拟?

    c++ - 模拟以退出代码 : 132 终止

    linux - 如何在 Linux 上提交 R 作业?

    math - 如何摆脱 CORDIC 中的比例因子

    concurrency - 请澄清VHDL中顺序和并发执行的概念

    vhdl - 在单周期数据路径中加载半字和加载字节

    simulation - Repast 是否允许代理使用浮点坐标?