0

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

事件a是循环@b;

从此事件中删除“循环”对行为没有任何影响。

这里的循环是什么意思?

谢谢

4

2 回答 2

4

来自 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 将等到@clkafter的第一个触发@rise_async(实际上是 a @rise_async @clk)。如果您执行 a wait cycle @rise_async,那么您已经覆盖了采样事件,并且 TCM 将完全等待直到@rise_async发生。

于 2014-04-02T15:57:32.767 回答
0

“事件 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");
};
于 2022-02-07T18:36:07.010 回答