学霸笔记-断言操作符介绍
1.延时操作符(##)
1.1 ##m
带时序关系的sequence :在SVA中时钟延时用符号"##"来表示,如"##2"表示延时两个时钟周期;
波形展示:
sequence只有在时钟上升沿到来后检查a是否为1才会继续检查后面连续x个时钟后的b的值;
1.2 ##[m:n]
波形展示:
##[m:n]”采取的是“就近匹配”原则,在第一个序列匹配后将不会在进行后续序列的匹配。
2.蕴含操作符(|=>,|->)
2.1 |=>操作符
波形展示:
表示sig1在时钟上升沿时为高,在当前时钟上升沿的下一个时钟上升沿时sig2也必须为高
2.2 |->操作符
波形展示:
sig1在时钟上升沿时为高,在当前时钟上升沿sig2也必须为高
NOTE:在编写断言时尽量使用“|->”而不是“|=>”,因为你可以通过“|->”后增加时钟数实现“|=>”的功能, 但是不能通过“|=>”实现“|->”的功能。
断言时序判断note:例如(cat ##1 dog)|=> mouse
1. 首先判断cat是否为真,只有在cat为真的情况下才会进行后续判断,才会开启以上断言;
2. 遇到如果第二个clk如果依旧为cat,则将其作为初始cat进行判断(上图条件3);
3 重复操作符 ([*m][->m][=m])
当需要检查某个信号保持一种状态多个采样周期时,虽然在SVA中可以使用连续 ##1逐个指定该信号,如下例,sig1要在sig0为上升沿之后保持4个时钟周期的高电平。
虽然实现了特定的要求,但是这种实现方式明显很繁琐,为此,在 SVA 中提供了重复运算符,从而可以缩减繁琐的表达式。
3.1 连续重复操作符([*m][*m:n])
波形展示:
提示:
在仿真中$rose并不是单纯的判断信号的跳边沿,而是判断时钟采样信号前后是否存在0->1/x->1/z->1的变化。
在仿真中$fell并不是单纯的判断信号的跳边沿,而是判断时钟采样信号前后是否存在1->/x->0/z->0的变化。
3.2 跟随重复操作符([->m][->m:n])
[->m]使用时表示表达式重复或者连续出现m次,但是整个重复表达式的最后一次匹配必须发生在其后续表达式匹配前的一个采样周期.
波形展示:
[->m]也有对应的[->m:n]方式,其差别与[*m]和[*m:n]差别类似,不再赘述 .
3.3 非连续重复操作符([=m])
[=m] 和 [->m] 工作情况类似,唯一的区别是 [->m] 要求整个重复表达式的最后一次匹配必须发
生在其后续表达式匹配的前一个相邻采样周期,而 [=m] 并没有要求整个重复表达式的最后一
次匹配必须发生在一定的条件下.
跟随重复的最后一次重复必须和下一个信号紧挨,例如上边的第一种情况,非连续重复则不需要。
波形展示:
3.4 小结
4 SVA关键字
4.1 与或非
1.and
2. or
3 not
4.2 动态控制函数
4.3 SVA内嵌函数
4.4 SVA 序列表达式操作符
1 intersect
2 within
3 throughout
4.5 SVA 周期表达式操作符
注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持
#高频知识点汇总##项目##学霸笔记##秋招的第一个offer,大家都拿到了吗#