保姆级教程超硬核包会,SystemVerilog SV 断言

本文详细介绍了系统验证语言(SVA)在验证程序中的应用,包括断言的类型如即时断言和并发断言,以及SVA中的序列、属性和时钟定义。重点阐述了序列的内置方法、时序关系以及属性的使用,如蕴含操作符和描述延迟的方法。此外,还提及了SVA在功能覆盖率和设计连接中的作用,以及如何利用SVA进行局部变量的定义和覆盖信息的获取。

前言:仿真的时候,需要观察某些程序运行的结果是否符合预期,这一需求一般是通过断言来实现。

断言

  • 对于程序的检查。
  • 断言是设计的属性的描述
  • 如果被检查的属性与期望不同断言失败
  • 如果被禁止在设计中出现的属性在仿真中出现,也断言失败。
  • 断言可以在功能仿真中不断被监视。
  • 相同的断言可以在仿真中也可以在形式验证中复用。

断言的评估和执行包括一下三个阶段:

  • 预备(Preponed)在这个阶段,采样断言变量,而且信号或变量的状态不能改变。这样确保在时隙开始的时候采样到最稳定的值。
  • 观察(Observed)在这个阶段,对所有的属性表达式求值。
  • 相应(Reactive)在这个阶段,调度评估属性成功或失败的代码。

1. 为什么使用SVA语言?

  • SVA是一种描述性语言,可以详细的描述相关的状况, 非常精确且易于维护。
  • 有内嵌函数来测定特定情况,并且可以收集断言覆盖率。

1.1 即时断言

  • 基于仿真事件的语义,与在过程块中其他表达式一样。
  • 即时断言本质与时序无关,立即求值。必须放在过程块的定义中,应用在动态仿真里。
always_comb
begin
	a_aia : assert (a&&b);//assert 断言
end

1.2. 并发断言

  • 基于时钟周期,根据调用的变量采样值计算测试表达式。
  • 一般放在模块接口里。
a_cc : assert property(@(posedge cik) not(a&&b)); //

有property的是并发断言,后边跟的时钟。

2. 建立SVA块

  • 功能由多个逻辑事件组成。这些事件可以是简单的同一个时钟边缘求值的表达式。

2.1 序列

  • SVA用序列sequence来表示这些事件,描述这些发生变化的事件
sequence name_of_sequence;
	< test expression>;
endsequence

-多个序列可以逻辑组合生成更复杂的序列,使用属性property来表示 。例如序列1发生导致序列2发生。

property name_of_property;
	
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值