【问题标题】:What is 'cycle' in specman eventsSpecman事件中的“循环”是什么
【发布时间】:2014-04-02 14:34:49
【问题描述】:

我偶然发现了这样写的代码:

事件a是循环 @b;

从此事件中移除“循环”,对行为没有影响。

这里的循环是什么意思?

谢谢

【问题讨论】:

    标签: specman


    【解决方案1】:

    来自 e LRM:

    "表示一个事件的一个周期。没有明确指定采样事件,这 表示默认采样事件的一个周期。在指定采样事件的情况下, 循环相当于“@sampling-event @any”。您可以使用循环表达式 覆盖从上下文中获取的默认采样事件。”

    它的用途如下:

    some_tcm() @clk is {
      message(LOW, "This is synced at clock");
      wait @rise_async;
      message(LOW, "This is synced at the first clk after rise_async");
      wait cycle @rise_async;
      message(LOW, "This is synced exactly at rise_async");
      stop_run();
    };
    

    some_tcm()@clk 指定为采样事件。假设您有另一个异步事件@rise_async,它将在时钟边沿之间触发。如果您执行简单的wait @rise_async,TCM 将等到@rise_async 之后的第一个触发@clk(实际上是@rise_async @clk)。如果您执行wait cycle @rise_async,那么您已经覆盖了采样事件,TCM 将一直等到@rise_async 发生。

    【讨论】:

    • 所以按照这个,在这个tcm里,我写“wait [2];”没有区别或者如果我写“等待 [2]*cycle;”,对吗?如果我没有指定任何事件,那么“循环”将引用采样事件,就像我忽略它一样?
    【解决方案2】:

    "事件a是循环@b;"是响应事件触发的技巧,但在当前刻度结束时这样做。 例如,如果我们执行“on b”,以下代码将打印“hello world”,而不是“world hello”。

    event b;
    event a is cycle @b;
    
    foo() is {
      emit b;
      message(NONE, "hello");
    };
    
    on a {
        message(NONE, "world");
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 2011-07-22
      • 2019-02-20
      • 2015-10-13
      • 2013-11-18
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多