【发布时间】:2014-04-02 14:34:49
【问题描述】:
我偶然发现了这样写的代码:
事件a是循环 @b;
从此事件中移除“循环”,对行为没有影响。
这里的循环是什么意思?
谢谢
【问题讨论】:
标签: specman
我偶然发现了这样写的代码:
事件a是循环 @b;
从此事件中移除“循环”,对行为没有影响。
这里的循环是什么意思?
谢谢
【问题讨论】:
标签: specman
来自 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 发生。
【讨论】:
"事件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");
};
【讨论】: