12-重复运算符(连续重复,跟随重复,非连续重复)
资料来源
(1) 硅芯思见:【87】SVA中的重复运算操作 (qq.com)
1.连续重复(可用于表达式和序列)
(1) 信号或者序列将在指定数量的时钟周期内都连续地匹配。信号的每次匹配之间都有一个时钟周期的隐藏延迟。
(2) 连续重复运算符的基本语法:signal or sequence [*n] (“n”是表达式应该匹配的次数);
(3) 连续重复例子:
a[*3]可以被展开成:a ## 1 a ##1 a;
序列(a##1b)[*3]可以展开为:(a##1b)## 1(a##1b)## 1(a##1b);
2.连续重复实例(含波形)
2.1 用于表达式连续重复运算符[*]
2.2 用于序列的连续重复运算符[*]
2.3 用于带延迟窗口的序列的连续重复运算符[*]
2.4 连续运算符与可能性运算符
(1) a[*1:5]表示信号a从某个时钟周期开始重复1~5次,等同于a or (a ##1 a) or (a ##1 a ##1 a) or (a ##1 a ##1 a ##1 a) or (a ##1 a ##1 a ##1 a ##1 a);
(2) 属性p24表示一个带没有重复次数限制的有限的检查;它检验先决条件有效开始两个时钟周期后,信号a将保持为高,知道信号stop跳变为高;
3.跟随重复(只允许使用表达式,不允许使用序列)
(1) 表明一个表达式将匹配达到指定的次数,而且不一定在连续的时钟周期上发生。这些匹配可以是间歇的。
(2) 跟随重复的只要求被检验重复的表达式的最后一个匹配发生在整个序列匹配结束之前。
(3) 跟随重复运算符的基本语法:signal [->n];
(4) 跟随重复实例: start ##1 a[->3] ##1 stop;
这个序列需要信号“a”的匹配(即信号“a”的第三次,也就是最后一次重复的匹配)正好发生在“stop”成功之前。换句话说,信号“stop”在序列的最后一个时钟周期匹配,而且在前一个时钟周期,信号“a”有一次匹配。
4.跟随重复实例(含波形)
5.非连续重复(只允许使用表达式,不允许使用序列)
(1) 与跟随重复相似,除了它并不要求信号的最后一次重复匹配发生在整个序列匹配前的那个时钟周期。
(2) 非连续重复运算符的基本语法:signal [=n];
注1:在跟随重复和非连续重复中只允许使用表达式,不能使用序列。