我想问一下系统Verilog语言中Specman e sync
的对应部分。
我知道@ event_indentifier
相当于Specman e的wait @ event
。
但sync @ event
怎么样?
答案 0 :(得分:1)
对于命名事件,您可以使用triggered
属性。
event ev;
...
wait (ev.triggered);
有关完整说明,请参见2012 SystemVerilog LRM的第15.5.3章。
答案 1 :(得分:0)
IEEE 1647的13.1.1部分说
同步操作类似于等待操作,除了等待操作始终需要至少一个TCM采样事件的循环才能继续执行。通过同步操作,可以在同一时间步骤继续执行。
1647-2008草案的部分内容
sync
当TCM达到同步动作时,其执行将被暂停,因此可以安排其他TCM或暂停的TCM本身执行。
wait
当TCM到达等待动作时,其执行将被暂停,因此可以安排其他一些TCM执行。暂停的TCM本身应保持闲置状态,直到下一次才能安排 发生抽样事件。
我认为你在比较不同的东西。 SystemVerilog 是模拟引擎和内核, Specman 就像是内核上的附加组件或插件,用于监视和检查您在 e中编写的内容语言。在 SystemVerilog 中,事件用于其模拟事件, Specman 也为其TCM进程创建自己的事件。所以在 Specman 中,它有自己的TCM进程调度。如果使用sync
,它可以在没有额外周期的情况下进行同步;使用wait
并为采样周期至少产生一个周期。当然,如果sync
和wait
没有时间表达式,它们都会使用TCM默认采样事件,并且可能有一个或多个周期。
SystemVerilog 也是基于事件的模拟器。它在每个时间步骤中都有delta周期。
您可以在http://standards.ieee.org/getieee/1800/download/1800-2012.pdf下载IEEE 1800-2012 SystemVerilog LRM,并查看4.5其调度参考算法。
但是在硬件建模中,它在当前模拟时间步骤中没有明确的wait
synx用于零周期延迟,因为模拟器将自动调度具有要运行的灵敏度列表的过程。如果必须将 Specman 与 SystemVerilog 进行比较,则应该具体为 SystemVerilog Assertion 语法。 SVA中有##0
语法,导致断言进程在下一个断言表达式之前具有零周期延迟。