二进制运算符“or”可以用来逻辑地组合两个序列。只要其中一个序列成功,整个属性就成功。序列s29a和s29b是两个独立的序列。属性p29将两者用“or运算符组合起来。当其中任一序列成功时,属性就成功。
sequence s29a;
@(posedge clk) a##[1:2] b;
endsequence
sequence s29b;
@(posedge clk) c##[2:3] d;
endsequence
property p29;
@(posedge clk) s28a or s28b;
endproperty
a29 :assert property(p29);
图1-31显示了属性p29在模拟中的响应。表1-15总结了断言a29的状态和所有相关信号的采样值。图1-31也显示了使用“and构造的断言a27的结果,比较两个结果就很容易理解“and”构造和“or”构造的区别。由于没有有效开始而发生的失败和前面小节介绍的相同,第二类失败是由于其中的序列都不匹配引起的。发生在时钟周期12的失败就是这种失败,两个序列在它们各自的时序窗口都没能匹配,因此检验失败。
使用“and”构造和“or”构造的成功几乎是相同的,主要的区别在于匹配的时间。当序列s29a成功时“or”运算符就匹配了而不需要等待序列p29b结束。
其中一个使用“and”构造的失败发生在时钟周期11,但是当使用“or”构造时,属性却成功了一次。原因是属性的第一部分序列s29a在时钟周期12匹配,使得属性立即成功。而在使用“and”构造时,单是这个成功并不是充分条件,第二部分的序列也必须匹配,但是在给定的时序窗口内,并没能出现。因此,相同的条件下,属性p27在时钟周期14失败了。