assume,用于EDA验证为断言,用于Formal验证为约束

“橘生淮南则为橘,生于淮北则为枳,叶徒相似,其实味不同。所以然者何?水土异也”

《晏子春秋·内篇杂下》

用这句话来概括assume这个SVA语法在EDA验证Formal验证中的区别再好不过了。为什么assume在EDA验证中是断言,而在Formal验证中是约束呢?同样是因为“水土异也”罢了。

Assertion-based design verification is an absolute necessity in today’s large,complex designs . . . 

Every design engineer should be adding assertion checks to his design!

SystemVerilog Assertions Handbook

下面本文来一一介绍assert/assume/ cover?

什么是assert?

 

简单来说,assert是关于设计属性的描述性语言,也是验证人员或设计人员对于设计的预期行为。

check_grant: assert property (!(gnt[0] && !req[0])) 
  else $error(“Grant without request for agent 0!”);

以上面这个arbiter的断言为例子,断言!(gnt[0]&& !req[0])恒成立,即reg[0]不请求时就不会被授予仲裁。

 

实际应用中,我们的assert描述通常也不会比这样的描述复杂太多,断言的简明性正是它成为如今数字IC验证不可或缺的一部分的原因之一

 

在EDA验证中,如果仿真工具运行测试用例时发现断言失败,就会打印出相应的信息。对于上述的例子,就会打印出“Grant without request for agent 0!”

 

在Formal验证中,上述的assertion就是Formal验证工具(例如cadence的jasperGold)的证明目标。Formal验证工具会遍历所有的合法场景,在数学上证明这个断言永远不会失败。还是那句话,EDA验证只能“证伪”,而Formal验证具有可以“证明”的能力。

 

什么是assume ?


assume与assert类似,但是assume字面意思上表示DUT的验证环境输入约束,而非DUT的预期行为。例如,也许我们希望输入约束cmd只为WRITE/READ/ATOMIC/EXECUTE,就可以使用下面的assume语句:

good_opcode:assume property (opcode inside {WRITE,READ,ATOMIC,EXECUTE})
else $error(“Illegal opcode.”);

在EDA验证中,对于assume和assert的处理是完全相同的。EDA仿真器会在执行测试用例的时候检查assume是否失败,如果失败就会打印相应的信息。

但是在概念上,assume和assert还是有些区别的:assume失败意味着验证环境或者周边设计可能出现了问题,即所测设计激励的行为不符合预期;而assert失败意味着DUT设计的行为不符合预期。对于上述的实例,如果assume失败,意味着验证环境发送了非法激励cmd。

 

在Formal验证中,assume和assert有着很明显的区别。就和字面意思一样,assume是作为设计的约束,会引导Formal工具产生的合法输入空间。如果没有assume,Formal工具会尽可能地遍历所有的空间,像空气一样到达他能够触及的空间。大多数情况,设计都会对输入有些限制,或者需要使用assume降低Formal full prove的复杂度。

 

 什么是cover?

SVA中的cover描述语法和assert和assume类似,但是含义不同。assertion和assume是需要一直保证正确的属性描述,而cover只需要发生一次就可以,用来确保我们关注的场景条件有被覆盖到。例如,在我们的arbiter测试中,我们可能想确保覆盖到所有请求都同时申请的关键场景,我们可以使用下面的Cover描述:

cover_all_at_once: cover property
(req[0]&&req[1]&&req[2]&&req[3]);

在EDA验证中,覆盖率是一个非常关键的数据,表明验证人员关注的场景是否真的在用例测试时被覆盖到。通常,需要确保每个测试点都至少被覆盖过一次,不然就说明我们的测试存在潜在的风险。

在Formal验证中,cover也起着重要的作用。尽管理论上Formal覆盖DUT所有的场景,但是如果我们对设计过约了,可能还是会遗漏关键的场景测试。这时候,我们仍然需要使用cover来证明,我们确实对这个场景进行了有效的验证和覆盖。

 

上面介绍了assertion/assume/cover在EDA验证以及Formal验证中的应用和区别,“橘生淮南则为橘,生于淮北则为枳,叶徒相似,其实味不同。所以然者何?水土异也”,你理解了么?

  • 11
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jaspergold Apps Command Reference是一个Jaspergold应用程序的命令参考手册,用于用户下载和查看。Jaspergold是一款方便设计和验证芯片的软件工具,通过使用Jaspergold,用户可以进行电路设计、逻辑仿真和验证等工作。这个命令参考手册提供了Jaspergold应用程序的所有命令的详细说明和用法示例。用户可以通过下载这个手册来了解Jaspergold的各种命令,以便更好地掌握和使用这个强大的设计工具。 这个命令参考手册可以帮助用户更高效地使用Jaspergold应用程序。它列出了所有可用的命令,包括基本的操作命令、设计创建和修改命令、结果分析和报告生成命令等。每个命令都有详细的说明,包括命令的功能、参数的用法和示例。用户可以根据自己的需求,选择适当的命令并按照手册中的说明进行操作,从而快速完成设计和验证任务。 这个命令参考手册的下载可以实现两个目的。首先,它可以提供Jaspergold应用程序的全面概览,用户可以快速了解Jaspergold的功能和特点。其次,手册中详细的命令说明可以帮助用户解决使用过程中遇到的问题和困惑。用户可以通过手册中的搜索功能,快速找到需要的命令和信息,从而提高工作效率和准确性。 总之,Jaspergold Apps Command Reference是一份非常有用的手册,它可以帮助用户更好地掌握和使用Jaspergold应用程序。下载这个手册将使用户能够更高效地完成芯片设计和验证任务,并提供了一个方便的参考工具,以解决在使用过程中遇到的问题和困惑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值