关于芯片验证中写testcase的一些想法

在芯片验证中,搭建好testbench后,就必须开始着手创建testcases。testcase按功能可划分为三类:冒烟用例、随机用例、定向用例。按开发时间顺序,一般也是冒烟用例→随机用例→定向用例。

  1. 冒烟用例(sanity testcase)
    在环境搭建好之后,为了迅速将RTL基本功能测试起来,可以考虑写几个简单的testcases来作为冒烟用例,比如总线验证中,可以将基本通路扫描作为的冒烟用例,在CPU验证中,可以将几个简单指令拿来做冒烟用例。
    冒烟用例的特点就是要快速测试基本功能,不要求大而全。而且在每次testbench和RTL有所改动时,可以用冒烟用例先调试起来,加速环境的稳定。冒烟用例像是侦察兵,提前探测敌情。
  2. 随机用例(random testcase)
    随机用例一般是用在环境稳定后,开始大规模冲击压力和各种可能存在场景而开发的,此时就是要考虑大而全了。在写随机用例时,一定要注意:所有可变的特性值一定要在最大范围内随机,再加以覆盖率收集,确保所有值都有覆盖到。当然可以在某些常用值或组合上加大随机权重,减少在很大验证空间里漫无目的随机,浪费机时。
    随机用例的特点就是要全面,是覆盖率的主要贡献者,它就像是主要作战部队,用例大规模消除隐藏的bug。
  3. 定向用例(direct testcase)
    定向用例顾名思义就是有针对性去测试一些场景,这些场景可能是设计要求覆盖的,也可能是在覆盖率中一些无法随机到corner场景。
    定向用例的特点就是要易于控制,精准打击,用于完善覆盖率和检测一些边界情况。

温馨提示:
大家在写testcase的时候一定要注意提前规划好全局testcase风格,达到易扩展和易复用,不要一味求快,想到啥就写啥,这样后期改动起来特别耗时间和精力,而且容易错。
在易扩展和易复用有以下几个小点供参考:

  • 把一些可能会变化的值定义成宏,方便改变宏的值就达到全局替换,如总线位宽;
  • 对一些可能常用的功能块或配置流程,封装起来,方便使用,代码也更简洁;
  • 如果多个人共用一套验证环境,可以自己从tc_base.sv扩展出子类tc_base_xxx.sv,方便把常用task/function或配置放在这里,不和别人冲突;不过也可以在tc_base.sv里采用`include file_name的方式自己维护一份file,不影响他人;
  • UVM phase把验证平台执行过程分的很细,要提前想好在每个phase里面需要做的事情,如系统时钟复位处理、寄存器配置、sequence执行、end of checker检查、用例执行报告等等;
  • 对一些变量可能只有几种值,且每种值都有特殊含义的,可以考虑用enum类型来定义,简单易懂。

在这里插入图片描述

  • 24
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值