【问题标题】:TE to check two events coinciding or delayedTE 检查两个事件同时发生或延迟
【发布时间】:2015-09-28 11:48:37
【问题描述】:

我有两个事件@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 在该时间范围内都没有发生。有什么想法有什么问题吗?是否禁止混合使用布尔和时间收益率运算符?

【问题讨论】:

    标签: specman


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      经过一些实验,我发现:

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

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

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 2016-05-08
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多