Assertion断言介绍1

1.什么是Assertion

断言:用来与设计功能和时序做比较的属性描述

  • 断言可以用来完成:检查设计的内容、提高设计的可视度和调试能力、检查设计特性在验证中是否被覆盖
  • 可读性好,因此也可以用来服务于设计文档
  • 用来检查算法模型的断言在形式验证中可以穷举计算,找出可能的违例
  • 可以自由地打开或者关闭
  • 一小部分子集甚至可以用来综合或者移植到emulation中,用来完成跨平台的移植

2.断言的类型划分

断言可以分为立即断言并行断言这两种常见的类型
立即断言(immediate assertion): 非时序、执行时如同过程语句、可以在initial/always过程块或者task/function中使用
立即断言可以结合 $fata、$error、$warning、$info给出不同严重级别的消息提示

[name:] assert(expression) [pass_statement][else fail_statement]
//如果状态为REQ,但是req1或者req2均不为1时,断言将失败
always @ (posedge clk) begin
	if(state == REQ)
		assert(req1||req2) //立即断言
	else begin
		t = $time;
		#5$error("assert failed at time %0t", t);
	end
end
always @ (state)
	assert (state == $onehot) else $fatal;

并行断言(concurrent assertion): 时序性的、关键词property用来区分立即断言和并行断言,与设计模块一同并行执行
并行断言只会在时钟边沿激活,变量的值是采样到的值

base_rule1:assert property(cont_prop(rst,in1,in2)) pass_state else fail_state;
//Request-Grant协议描述:request拉高,在2个周期后,grant拉高,
//在1个周期后,request拉低,在1个周期后,grant拉低
property req_grant_prop
	@(posedge clk) req ##2 gnt ##1 !req ## !gnt;
endproperty
assert property req_grant_prop else $error ("Req-Gnt Protocol violoation");

3.assertion、property、sequence关系

  • assertion可以直接包含一个property
  • assertion也可以清晰地独立声明property
  • 在property内部可以有条件地关闭
  • property块可以直接包含sequence
  • 复杂的property也可以独立声明多个sequence

3.1 断言中的property

结合sequence对时序和逻辑的描述,property可以用来描述设计的确切行为。
property可以在验证中用来做assumption,checker或者coverage:

  • 当使用assert关键词时,可以用作checker来检查设计是否遵循property的描述
  • 当使用assume关键词时,可以作为环境的假设条件,对于仿真环境和形式验证均起到对激励进行假设的作用
  • 当使用cover关键词时,可以将property是否真正通过作为断言覆盖率来衡量
    property可以在module、interface、clocking块或者package中声明
    property共有七种:
分类用途
sequence只有满足sequence条件,property才可以通过
negation不期望出现这个negation条件,property通过;可以用NOT关键词
disjunction至少要有一个满足,property通过;可以用OR关键词
conjunctionl例如exp1 and exp2,只有两个exp都满足时,property通过;可以用AND关键词
if…else条件选择
implication蕴含,同sequence中用法一致
instantiation命名一个property后,可以在另外一个property中使用

3.2 断言中的sequence

sequence: 是用来表示在一个或者多个时钟周期内的时序描述,是property的基本构建模块,并经过组合来描述复杂的功能属性
sequence用来提供下列的场景描述:

  • 第一个时钟周期,第一个表达式成立的
  • 接下来在若干时钟周期后,第二个表达式也成立
  • 以此类推,在接下来的若干时钟周期,后续的表达式也成立
    sequence可以在module interface、program、clocking块和package中声明
sequence s1;
	@ (posedge clk) a ##1 b ##1 c;
endsequence
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值