断言的学习(以对APB协议检查断言为例)

断言

断言就是一段描述设计期望行为的代码。目前,对断言的使用主要在于仿真,但断言的能力不仅仅如此。断言是基于一些更加基础的信息,我们称之为属性 (Property),属性可以用来作为断言、功能覆盖点、形式检查和约束随机激励生成。断言可以应用在白盒调试或者黑盒调试两种方式中,一般情况下,白盒调试会被设计工程师采用,而黑盒调试会与验证工程师比较相关。作为设计工程师,他可以借助对设计的认识,对某些关键的设计部分添加断言,例如 fifo的读写是否溢出,数据传输时握手协议是否符合约定等,通常在采用第三方的设计IP,都会要求IP提供商附带提供该 IP接口的断言模块,以保证在系统集成的时候,在对接部分的设计能够符合 IP接口的要求。作为验证工程师,主要是在更高一个层次架构验证平台和验证策略,其未必对设计的细节很了解;为此,设计的大部分模块对他们来说是黑盒子,验证工程师关注的是各个模块之间的连接,以及设计顶层的接口是否符合设计规范,例如:APB接口设计是否符合规范,顶层以太网接口是否符合规范,上电复位的过程是否正常等。

立即断言与并发断言区别

在过程化代码 (initial/program/function/task) 中使用的 assert,其中没有任何时序概念的为立即断言。而并发断言是一种基于周期的语法结构,需要采样事件去激发周期性的数值采样,为此对同步时序电路比较有效。

sequence和property的区别

property区别于sequence很大的特点就是可以定义蕴涵操作符。

断言常见语法

常见调用函数

  1. $isunknown 指某个信号不能为随机态
property SIGNAL_VALID(signal);
  @(posedge PCLK)
  !$isunknown(signal);//表示在每个时钟的上升沿,signal不能为x值
endproperty: SIGNAL_VALID

2.$onehot 指信号中只有一位为1

property CONTROL_SIGNAL_VALID(signal);
  @(posedge PCLK)
  $onehot(PSEL) |-> !$isunknown(signal);//PSEL信号中只有一位为1
endproperty: CONTROL_SIGNAL_VALID
  1. $rose 和 $fell 分别指拉高和拉低信号
property PENABLE_SIGNAL_VALID(signal);
  @(posedge PCLK)
  $rose(PENABLE) |-> !$isunknown(signal)[*1:$] ##1 $fell(PENABLE);
endproperty: PENABLE_SIGNAL_VALID //分别表示拉高PENABLE信号和拉低PENABLE信号
  1. $stable 指信号保持稳定
property PSEL_TO_PENABLE_ACTIVE;
  @(posedge PCLK)
  (!$stable(PSEL) && $onehot(PSEL)) |=> PENABLE;
endproperty: PSEL_TO_PENABLE_ACTIVE //表示PSEL信号不稳定,即跳变为1以后,拉高PENABLE信号
  1. $past 指采样过去周期的值
property PENABLE_ACTIVE_to_PSEL;
    @(posedge clk) $rose(PENABLE) |-> $past(PSEL,1);
    //在PENABLE拉高的前1个周期,PSEL的信号应该为高
endproperty: PENABLE_ACTIVE_to_PSEL
  1. $coutones表示信号中有几位拉高为1
    $coutones(PSEL) == 1; //PSEL中有且仅有1bits是高,其他是低

if的用法

如当a为高时,下一个周期,b为高或者c应该为高;
如果b为高,则下一个周期bb为高
如果c为高,则下一个周期cc为高
property master_child_reqs;
    @(posedge clk) a ##1 (b || c)
    if(b)	(##1 bb)
    else    (##1 cc);
endproperty

蕴含操作符

property PENABLE_DEASSERTED;
  @(posedge PCLK)
  $rose(PENABLE && PREADY) |=> !PENABLE;//PENABLE和PREADY拉高以后,下一个周期PENABLE应该拉低   |=> 相当于|-> ##1 
endproperty: PENABLE_DEASSERTED
// 只有蕴含操作符左边表达式成立,才进行右边

重复操作符

符号含义
##延长多少周期
##[m:n]在m:n的周期内
##[1:$]表示1到最大一个时间周期
[*n]表示重复n个周期
[*m:n]表示一段时间范围的重复
[=m:n]表示m:n范围内事件的重复发生,不要求连续
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

借问众神明.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值