- 如果给定信号“start”在任何时钟上升沿,出现上升沿;然后,时钟下个周期起,a信号连续持续三个周期的高电平;然后,下个时钟周期,信号”stop“为高;利用此前的方法,我们可以这样写:
sequence test;
@(posedge clk) $rose(a) |-> ##1 a ##1 a ##1 a ##1 stop;
endsequence
- 为了解决这种冗余的写法,SVA提供了三种不同的运算符:
- 连续重复: 用户可以指定信号或序列,在指定数量的周期内都连续的匹配;
- consecutive repetition
- 要求必须在连续的时钟周期匹配;
- 语法:signal or sequence [*n]
- 跟随重复: 用户可以指定信号或序列,匹配达到指定次数,但是不要求连续;
- go to repetition
- 不要求在连续时钟匹配,要求最后一次匹配在整个匹配结束之前;
- 语法:signal or sequence [->]
- 非连续重复:
- non-consecutive repetition
- 不要求在连续时钟匹配,不要求最后一次匹配在整个匹配结束之前;
- signal or sequence [=>]
连续重复运算符
1. 信号的连续重复
sequence p21;
@(posedge clk) $rose(a) |-> ##2 (a[*