TE检查两个事件是否重合或延迟

时间:2015-09-28 11:48:38

标签: specman

我有两个事件@A和@B。我想检查出现@A时,@ B是同时发出还是稍后发出。

expect my_check is ((@A and @B) or (@A => {[0..N]; @B}))@clk exec { 
  message(NONE, "my_check");
};

但是,我可以看到(从消息中)TE从模拟开始的每个时钟周期都成功。这很令人费解,因为在这段时间内A和B都没有出现。有什么想法有什么不对吗?是否禁止混合布尔和时间收益运算符?

2 个答案:

答案 0 :(得分:2)

你在这里看到的是一个空洞的传球。第一个子表达式为FALSE,评估前进到下一个子表达式。第二个子表达式的计算结果为TRUE,因为前提条件@A not 发生(在这种情况下,暗示不能关心RHS表达式)。因此,OR被满足并且exec块被激活。

答案 1 :(得分:1)

经过一些实验,我发现:

 expect my_check is @A => ({[..N-1];@B} or detach({@B; ~[..1]}))@clk

请注意,这仍需要第二个expect语句来检查虚假B事件。