6-禁止属性not,蕴含操作符(交叠蕴含与非交叠蕴含)(包含在蕴含中使用if...else结构)

资料来源

(1)硅芯思见:【95】SVA中的基本元素sequence和蕴含操作 (qq.com)

(2)SVA中的与或非(and_or_not) (qq.com)

1.禁止属性

当期望属性为假时,可以采用关键词not,用来表示属性永远不为真.

2.蕴含/implication

(1) 蕴含等效于if-then结构,蕴含左边的叫做"先行算子",右边叫做"后续算子";

(2) 先行算子是约束条件;当先行算子成功时,后续算子才会被计算;如果先行算子不成功,那么整个属性就默认地认为成功,这叫做"空成功";

(3) 蕴含结构只能被用在属性定义中,不能在序列中使用(注意:蕴含也能用在assert property中,此时相当于将property展开放到了assert property()中,不推荐这种写法);

(4) 补充:为什么使用蕴含?

(1)上图中p7在每一个时钟上升沿寻找序列的有效开始,即在每个时钟上升沿检查信号a是否为高;如果a在给定的任何时钟上升沿不为高,检验器将产生一个错误信息;但这并不是一个有效的错误信息,因为并不关心只检查信号a的电平; 这个错误表明在这个时钟周期没有得到检验器的有效起始点;

(2)为了避免上图中写法引入的大量错误信息,属性需要被定义为在检查的起始点无效时忽略这次检查,这时需要采用蕴含;

2.1交叠蕴含/overlapped implication/|->

交叠蕴含用符号“|->”表示。如果先行算子匹配,在同一个时钟周期计算后续算子表达式。

 

 

2.2非交叠蕴含/non-overlapped implication/|=>

非交叠蕴含用符号“|=>”表示。如果先行算子匹配,在下一个时钟周期计算后续算子表达式。后续算子表达式的计算总是有一个时钟周期的延迟。

3.蕴含的扩展

3.1 后续算子带固定延迟的蕴含

3.2 使用序列作为先行算子的蕴含

下图中,1s,2s,3s表示属性的有效开始;

 

3.3 嵌套的蕴含

3.4 在蕴含中使用if/else(if/else不能用于sequence表达式中,只能出现在蕴含操作的后续算子中)

注1:在if前不能出现类似"##1"等时序表征的语句使其成为子序列的语句的一部分,但是可以在if/else结构中使用各种序列表达式;

注2:属性中的表达式最后要以";"结束,所以作为属性中表达式一部分的if/else结构中的任何分支的描述结束时不能使用";";

posted on 2021-11-23 13:34  _见贤_思齐  阅读(664)  评论(0编辑  收藏  举报

导航