gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:48:11 24 4
gpt4 key购买 nike

我已经设法在 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/

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