首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SystemVerilog中检入信号在ModelSim仿真过程中信号很高

如何在SystemVerilog中检入信号在ModelSim仿真过程中信号很高
EN

Stack Overflow用户
提问于 2022-02-14 10:54:25
回答 1查看 482关注 0票数 0

我需要检查一下,在测试过程中,特定的信号是否至少在一个时钟周期内到达逻辑1。

我测试了以下的断言,这些断言将是等价的:

代码语言:javascript
复制
    initial assert property (
        @(posedge clk_tree_x.ClkRsBST_ix.clk)
            s_eventually TS.TSUpdated) else
      $error("Was not active");

代码语言:javascript
复制
   initial begin
      assert property (@(posedge clk_tree_x.ClkRsBST_ix.clk)
               strong(##[*] TS.TSUpdated)) else
    $error("Was not active");
   end

在使用Mentor ModelSim SE64 2021.1进行仿真时,结果非常奇怪。

在第一次模拟中,模拟完全忽略了这个断言。在第二次模拟传递时,ModelSim显然使用以前模拟的结果在新运行的模拟发生之前宣布断言触发:

代码语言:javascript
复制
#    Time: 2005087500 ps Started: 5 ns  Scope: tb_bst_provider.DUT.fook File: bst_provider.sv Line: 669
# ** Warning: (vsim-8777) Breakpointing based on severity while evaluating concurrent assertion is not supported.
#    Time: 2005087500 ps  Iteration: 0  Region: /tb_bst_provider/DUT File: bst_provider.sv

不确定这是否是所有强属性的一致行为,但对于任何类型的单元测试都几乎没有用,因为测试从未使用相同的参数运行两次。

是否有任何方法来断言‘信号在模拟运行中不存在’,这实际上适用于modelsim?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 13:45:23

我不确定你是否能用断言来做这件事。您可以使用断言覆盖来检测非活动信号。在任何情况下,您都不应该将断言放在初始块中。

可以在不使用断言的情况下完成潜在的活动检查,如下例所示。

代码语言:javascript
复制
  always @(posedge clk) begin
    if (sig == 1)
      active <= 1;
  end

  final begin
    if (!active)
       $error("was not active");
    else
      $info ("it was active");
  end

只需确保您有一个正常的退出模拟,否则最终可能不会执行在任何情况下中断。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71110703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档