【SVA基础】

SVA基础

(1)基本概念

什么是assertion?

  • assertion是用来与设计功能和时序做比较的属性描述;
  • assertion可以用来完成:①检查设计的内容;②提高设计的可视度和调式能力;③检查设计特性在验证中是否被覆盖;
  • assertion可以自由的打开和关闭(约束也可以自由打开和关闭);

assertion可以被写在哪里?

  • 可以写在过程块、module、interface和program中;

assertion覆盖率?

  • ①仿真工具可以报告断言覆盖率,来指示哪些断言没有被触发;
  • ②帮助检查是否验证计划捕捉到了所有需要的覆盖率;
  • ③断言覆盖率和功能覆盖率可以共同量化验证进度;

(2)assertion分类

<1>立即断言

  • 非时序的;可以在initial/always过程块或者task/function中使用
always@(posedge clk)
// 如果状态位REQ,但是req1或req2均不为1,断言将失败
	if(state == REQ)
		assert(req1 || req2)
		else begin
			t = $time;
			#5 $error("assert failed at time %0t", t);
		end
//*******************************************************************
assert(myfunc(a,b)) count1 = count+1;
else -> event;
//********************************************************************
assert(y==0) else falg=1;

<2>并行断言

  • 时序性的;关键词property用来区分立即断言和并行断言;之所以称之为并行,是因为它们与设计模块一同并行执行。
property req_grant_prop
	@(posedge clk) req ##2 gnt ##1 !req ##!gnt;
endproperty
assert property req_grant_prop else $error("Req-Gnt Protocol violoation);

注意:assertion可以直接包含一个property,也可以清晰地独立声明property,在property内部可以有条件地关闭。

在这里插入图片描述

  • property块可以直接包含sequence;复杂的property也可以独立声明多个sequence。

在这里插入图片描述
什么是sequence?

  • sequence是用来表示在一个或者多个时钟周期内的时序描述;是property的基本构建模块,并经过组合来描述复杂的功能属性;可以在module、interface、program、clocking块和package中声明。
  • sequence可以提供形式参数,用来提高复用性。
sequence s21_1(data, en);
	(!frame && (data==data_bus)) ##1 (c_be[0:3] ==en);
endsequence

什么是交叠交错符号和非交叠交错符号(蕴含操作符)?

  • |->操作符号是交叠交错符号:如果条件满足,则评估其后续算子序列;如果条件不满足,则表现为空成功,不执行后续算子。

在这里插入图片描述

|=>操作符号是非交叠交错符号:如果条件满足,则下一个周期评估其后续算子序列;如果条件不满足,则表现为空成功,不执行后续算子。

在这里插入图片描述
注意:可以把蕴含操作符当做if,|=>是从下一拍(##1)开始检查,a |=> b就相当于a|-> ##1 b,实际上可以使用|->完全替代|=>

property与sequence的相同和不同之处

  • ①任何在sequence中的表达式都可以放到property中;
  • ②任何在property中的表达式也可以搬到sequence中,但是只有在property中才能使用蕴含操作符;
  • ③property中可以例化其他property和sequence,sequence中也可以调用其他的sequence,但是不能例化property;
  • ④property需要用cover /assert/assume 等关键字进行实例化,而sequence直接调用即可;

(3)sequence

<1>基本操作符号

①##
  • ##用来表示周期延迟符号,例如##n表示在n个时钟周期后,##0表示在当前周期,即交叠周期。
    举例
sequence a_b
// a有效的下一个时钟周期b有效
	@(posedge clk) a ##1 b
endsequence
②##[min,max]
  • ##[min,max]表示在一个范围内的时钟周期延迟。min、max必须是非负
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值