设计验证中随机约束.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计验证中随机约束

设计验证中随机约束   摘要:随机约束在现代集成电路验证中已得到国际IC设计业界的普遍认可,并逐渐开始普及。与传统的定向测试比较,它在验证效率、验证覆盖率等方面具有诸多优势。最新公布的SystemVerilog IEEE标准中,包含了对随机约束的支持。本文举例说明了随机约束的优点、使用方法及其与断言和功能覆盖率相辅相成的关系。目前国内已有一些设计单位开始将随机约束应用于设计验证中,本文的宗旨是介绍我们的成功经验以推动这种新的验证方法在国内的推广和普及。   关键字:随机约束,SystemVerilog,功能覆盖率      1. 随机约束的概念      现代集成电路芯片的设计规模越来越大,对其功能验证的要求也随之不断提高。原有的一些验证手段已不能满足日益复杂芯片的验证需求。功能验证占用了芯片设计70%以上的资源。为了解决这个困境,EDA厂商相继推出一些新的验证手段和概念:随机约束(constrained random),断言(assertion),功能覆盖率(functional coverage)等等。下面我们将基于SystemVerilog 介绍随机约束(constrained random)的概念和应用方法。   在验证中,需要产生激励来驱动设计。在时间有限的仿真过程中,定向测试只能验证芯片的典型行为,而不能验证所有可能的行为,这是定向测试的主要缺陷。出现这个问题的主要原因是对芯片的定向测试只是针对已知的测试空间,而不是针对未知的测试空间。即使是仅对已知测试空间的测试也要花费很长时间,一个小的设计就可能需要上百次不同的测试矢量的测试。而当设计的规模和功能逐渐增大和变得更加复杂时,我们就可能需要成千上万的定向激励来验证设计的功能。随着逻辑越来越复杂,验证空间也会相应增加,这不仅要使用大量的人力,同时随着代码行数的增多也会显著增加代码出错的概率。   因此,随之出现了随机化激励。随机化激励可以仅用几行代码就能产生大量的激励数据,通过为设计提供随机激励信号来扩大验证的测试空间。   随机化的激励有很多优点:1) 随机激励可以使得验证代码长度明显地缩短,这不仅减少了时间和人力的花费,还减少了测试平台代码出错的概率。2)随机激励可以更全面地检测整个设计的功能,找到边角条件下的隐患(有很多是定向验证难以产生和检查到的边角情况),实现最大化的功能验证覆盖率。3)随机化的激励一定程度上提高了设计者对设计可靠性的信心。   当设计规模很大且非常复杂时,随机测试空间会变得近乎无限,如果只是简单地使用随机激励,达到功能覆盖率要求所需要的仿真时间会超过忍耐极限。为了解决这个问题,引入了随机约束的概念,它可以给随机化过程施加一定的约束,使其按照约束生成随机化的激励,即让它生成的随机化的激励更多地落在我们感兴趣的区域或者边界内,以更快地达到功能覆盖率的要求。   我们最初是在使用Designware中的VIP(Verification IP)对一个设计进行验证的过程中,开始对随机约束有了初步的认识,当时用了受约束的随机激励对AMBA总线协议进行检查。在那次使用过程中,笔者清楚地感受到了使用随机约束进行验证的优点。因此,在其后的验证工作中,我们都使用了随机约束,极大地提高了工作效率。   已经成为了IEEE1800-2006标准的SystemVerilog语言中就包含了随机约束。它将随机约束与面向对象的语言无缝地结合在一起,使得用户可以用简洁一致的方法来定义随机约束。在下一节中,我们将举例介绍如何用SystemVerilog编写随机约束。      2. 用SystemVerilog编写   随机约束举例      首先将数据做随机化处理,即在某个类中定义属性为rand型的变量,便可以产生给定位宽的具有随机属性的变量。约束可以直接在类中写出,使用的关键字为constraint。下面就以我们经常碰到的总线为例,简单地介绍一下。首先声明ambaBus类:      class ambaBus;   rand bit[31:0] haddr; //随机化的32位地址信号   rand bit[15:0] hdata; //随机化的16位数据信号   rand bit[1:0] htrans; //随机化的2位控制信号,可选择四种传输方式之一   constraintword_transfer {haddr[1:0] == 2’b0;}   endclass   以上的代码段简单地定义了可进行随机化处理的32位地址(haddr)、16位数据(hdata)和 2位传输控制信号(htrans),再加一个简单约束 word_transfer 以确保传输时地址的低二位必须为0。在编写代码时只需要在模块中实例引用上

文档评论(0)

bokegood + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档