Assertion断言入门(二)——操作符及系统函数

基本操作符

操作符 描述
## 周期延迟时间
##[min:max] 表示在一个范围内的时钟周期延迟,会从min到max时间窗口中最早的时间来匹配
$ 表示无穷大的周期(在仿真结束前),不建议使用
[*n] 表示事件重复n次
[*m:n] 表示一定范围内的重复事件
[=m] 表示一个事件的连续性,需要重复m次,但并不需要在连续周期内发生
[=m:n] 表示一个事件的连续性,需要重复m~n次,但并不需要在连续周期内发生

蕴含操作符

  • 蕴含操作符的含义:如果property中左边的运算子先成立,那么property右边的后续运算子才会被计算。如果左边的运算子不成功,那么整个属性就会被默认地认为成功,这叫做“空成功”;
  • 蕴含只能用在属性定义中,不能在sequence中使用。

分类:

  • 交叠蕴含

    运算符 |->
    如果满足条件,则评估后续算子序列;如果条件不满足,则表示为空成功,不执行后续算子。

    property p_req_ack;
        @(posedge clk) mem_en |-> (req ##2 ack);
    	//当men_en为高时,此时req为1 ,过两拍,ack要为拉高    
    endproperty
    /*
    【注意】
    	*断言成功:左边算子成功,右边算子成功
    	*断言失败:左边算子成功,右边算子失败
    */
    
  • 非交叠蕴含

    运算操作符 |=>
    如果满足条件,则在下一个周期评估后续算子序列;如果条件不满足,则表示为空成功,不执行后续算子。

    property p_req_ack;
        @(posedge clk) mem_en |=> (req ##2 ack);
    	//当men_en为高时,下一拍的req为1 ,过两拍,ack要为拉高    
    endproperty
    

and操作符

  • 用法:SEQ1 and SEQ2,表示连个序列需要保持匹配

  • 满足条件:

    1.在同一个起始点开始后,SEQ1和SEQ2均满足。

    2.满足的时刻发生在两个序列都满足的周期,即稍晚序列的满足时刻

    3.两个序列的满足时间可以不同
    在这里插入图片描述
    ​ 图解:

    • 第八拍开始,才有满足 (te1 ##2 te2),所以从8拍作为起始点
    • 从第8拍开始,(te3 ##2 te4 ##2 te5)在第12拍满足,
    • 所以整个and操作符后的序列从第8拍开始,到第12拍结束

intersect操作符

  • 与and类似,只是需要两边的序列时序在同一时间周期内匹配
  • 用法 :SEQ1 intersect SEQ2
    在这里插入图片描述

or操作符

  • 用法 SEQ1 or SEQ2,表示两个序列至少要有一个满足
  • 满足条件:
    1. SEQ1和SEQ2都从同一个时刻被触发;
    2. 最终满足SEQ1或者满足SEQ2;
    3. 每一个序列的结束时间可以不同,结束时间以序列满足的最后一个序列时间为准
      在这里插入图片描述
/*
【需求:】
如果burst write长度为4,那么写的长度可以为1、2或者4,怎么判断?
*/
property BurstLengthValid
    @(posedge clk) disable iff(!rst)
    ((burstLen == 4) |->
       (wrlen==1) or (wrlen==2) 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值