“ intersect”运算符和“and”运算符很相似,它有一个额外要求。两个序列必须在相同时刻开始且结束于同一时刻。换句话说,两个序列的长度必须相等。属性p28检验与属性p27相同的情况。唯一的区别是它使用的是“ Intersect”构造而不是“and”构造。
sequence s28a;
@(posedge clk) a##[1:2] b;
endsequence
sequence s28b;
@(posedge clk) c ##[2:3] d;
endsequence
property p28;
@(posedge clk) s28a intersect s28b;
endproperty
a28: assert property(p28);
图1-30显示了属性p28在模拟中的响应。表1-14总结了断言p28的状态和所有相关信号的采样值。图1-30也显示了在同一条件下使用“and”构造的断言a27的结果,从而可以帮助理解“and”和“ intersect”的区别。
由于缺少有效开始而导致的失败与前一节相同。第二类的失败是由于属性中单个序列未能成功匹配。这类的失败发生在时钟周期11和12。第三类的失败是在属性中所有单个序列都匹配时发生的。这些失败是由于两个序列达到匹配的时间长度不一致而发生的。在时钟周期3显示的失败中,序列s28a花了一个时钟周期实现匹配(“a”在时钟周期3为真,且“b”在时钟周期4为真),而序列s28b花了两个时钟周期实现匹配(“c”在时钟周期3为真,且“d”在时钟周期5为真)。在时钟周期7显示的失败中,s28a花了两个时钟周期完成匹配(“a”在时钟周期7为真,且“b”在时钟周期9为真),而s28b花了三个时钟周期完成匹配(“c”在时钟周期7为真,且“d”在时钟周期10为真)。
三次成功分别发生于时钟周期8,9,10。在所有这三个例子中,两个序列都经过相同的时间长度匹配。
在时钟周期8显示的成功中,序列s28a匹配了两次,分别在时钟周期9和10。序列s28b同样也匹配了两次,分别在时钟周期10和两个序列匹配的共同时间长度是两个时钟周期。因此intersect在s28a和s28b都在时钟周期10时匹配成功,它们各自的长度是两个时钟周期。
在时钟周期9所示的成功中,序列s28a在时钟周期10和11各有一次匹配。序列s28b也有两次匹配,分别在时钟周期1l和12。两个序列匹配的通用长度为两个时钟周期。因此 intersect构造因为s28a和s28b都在时钟周期ll匹配而成功。每个序列的长度都是两个时钟周期。在时钟周期10所示的成功中,序列s28a在时钟周期11和12各有一次匹配。序列s28b在时钟周期12也有一次成功。两个序列匹配的通用长度为两个时钟周期。因此 intersect构造因为s28a和s28b都在时钟周期12有匹配而成功。每个序列的长度都是两个时钟周期。