文章目录
基本操作符
| 操作符 | 描述 |
|---|---|
| ## | 周期延迟时间 |
| ##[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,表示两个序列至少要有一个满足
- 满足条件:
- SEQ1和SEQ2都从同一个时刻被触发;
- 最终满足SEQ1或者满足SEQ2;
- 每一个序列的结束时间可以不同,结束时间以序列满足的最后一个序列时间为准

/*
【需求:】
如果burst write长度为4,那么写的长度可以为1、2或者4,怎么判断?
*/
property BurstLengthValid
@(posedge clk) disable iff(!rst)
((burstLen == 4) |->
(wrlen==1) or (wrlen==2)

——操作符及系统函数&spm=1001.2101.3001.5002&articleId=118119357&d=1&t=3&u=d13047f3ab0549d1bf0699c6ce9c413d)
1万+

被折叠的 条评论
为什么被折叠?



