0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何又快又好的梳理和利用验证feature文档

sanyue7758 来源:杰瑞IC验证 作者:Jerry 2022-10-09 09:07 次阅读

前面我们探讨了接到验证任务后的行动以及前期如何进行高效的学习,当有了对验证对象的充分理解和学习之后,我们就可以进行验证feature(即验证的测试点)的提取了。

凡事预则立,不预则废,众所周知,验证feature文档决定验证的内容、侧重点、质量,是验证工程师最重要的文档和指导工具。

本文的侧重点不在于大而全的探讨诸如”不同类型的验证对象哪些点可以作为验证feature”等内容(以后在别的文章中有机会再讨论),而是继续遵循“高效”的主题,一起探讨如何又快又好的梳理验证测试点这个文档?怎样在验证过程中充分使用这个文档?

杰瑞IC验证给出一种答案,围绕一个口诀来作为今天探讨的线索和综述:

“先粗再细、先全再剃、不断迭代、定期反思”

1

先粗再细

对于验证feature来说什么叫粗?什么叫细?

我们举个简单的例子,如一条验证feature可以这样写:

“需要覆盖中断功能的测试。”

也可以把这一条验证feature细化成多条验证feature,这样写:

“覆盖不同中断信号使能打开、关闭测试”

“覆盖中断正常清除测试”

“覆盖延迟清除中断测试”

“覆盖不同中断来源的中断测试” “覆盖中断有效后相关中断状态寄存器正确性检查” “覆盖中断不同来源同时有效的优先级测试”

“覆盖多中断次数测试场景”

……

当然,还可以写的更细致:

例如上面“覆盖不同中断信号使能打开、关闭测试”可以继续分解:

“覆盖不同中断信号随机打开关闭以及不同信号间的交叉场景”

“覆盖中断信号使能全关闭,通过轮询寄存器方式处理中断场景”

……

例如“覆盖延迟清除中断测试”可以继续分解:

“覆盖延迟清中断,延迟时间小范围随机”

“覆盖延迟清中断,延迟时间等到下一个中断来之后再清除” ……

我们不再继续细化赘述,相信大家从举例中已经有点感觉了,什么叫“粗”,什么叫“细”,这里说到的粗细,其实就是指的是验证feature的颗粒度。

杰瑞IC验证认为,一个好的验证feature文档,一定是全面且颗粒度很细的文档。只有颗粒度很细,借助这个验证feature文档才能更好的帮助你把需要覆盖的测试点思考清楚,更好的衡量你的验证工作量制定验证计划、更好的帮你构造定向或随机case和编写功能覆盖率代码、更好的保证你的验证完备性。

可想而知,如果你只写一句这么“博大精深”的验证feature:“需要覆盖中断功能的测试。”,你看到这条验证feature也许很难会想到还需要:“覆盖延迟清中断,延迟时间等到下一个中断来之后再清除” 这种测试场景,这样就有可能会埋下风险。

我们回到“高效战斗”的主题,怎么又好又快的把这个文档搞定呢?

从高效的角度杰瑞IC验证建议一定要“先粗再细”。

一方面:

“粗”可以让我们站在一个宏观的角度,不漏掉大的功能点,例如先涵盖各种需求点、各种设计文档核心功能点、应用场景、性能点、功耗测试点、压力测试点、注错点等等

另一方面:

我们是不可能一蹴而就的。如果一开始就钻进某一个点,把某个功能的所有细节验证feature写清楚再写别的,效率显然会低于先写的粗一点,再多轮迭代进行细化。正如前面的举例,每一次的细化都在上一轮细化的思考基础之上进行的,这样也会想的更清楚全面。

2

先全再剃

通过刚才讲的先粗略提取再不断细化的方式,相信大家可以高效提取出来一个比较全面的验证feature文档。

前面我们提到:“一个好的验证feature文档,一定是全面且颗粒度很细的文档。”但是仅仅的全面和颗粒度小,就可以叫一个好的验证feature文档吗??

答案是否定的,全面和颗粒度小,只是提取验证feature的第一步。如果说第一步细化是做加法,第二步更为重要和有难度,那就是做减法。就像本节的小标题“先全再剃”,这里的“剃”,讲的就是“剃刀原则”的“剃”,关注的是验证的执行层面,“剃”就是学会取舍,就是抓验证重点和主要矛盾,就是高效的体现。

(1)“剃”,删除掉不必要的验证feature。

有时候,我们需要删除和精简一些没有必要的验证feature。

最简单的例如,对于已经多次流片实践验证稳定的ip,没有必要覆盖非常细致的验证feature,这部分完全可以舍去不验证。

再举一个例子:如针对某个参数我们通过确定边界值、典型值、划分等价类等方式进行验证feature细化:

“A参数取值[0:1000],需要覆盖边界值0,1000,典型值200、500、600、900……(例如100个),随机覆盖a模式[0:200),b模式[200:700),c模式[700:1000]”

“B参数取值[0:8880],需要覆盖边界值0,8880,典型值200、500、600、900……(例如300个),随机覆盖a模式[0:1000),b模式[1000:300),c模式[3000:8880]”

……

这样的参数有20个,然后有一条:

“需要覆盖这20个参数取值的所有交叉场景”

这个“交叉场景”是很全面了(当然你如果想“修身养性”可以用一整天时间进一步具体细化出来怎么交叉的)。但是这条有意义吗?

对于EDA仿真验证来说,这条可以说是没有意义的,因为这个需要覆盖的验证空间太大了,大到不能执行,即使你通过脚本交叉参数一键生成批量case,这么大的case量大概率不能在有限的时间跑完,就算能跑完,这样的参数交叉测试是否真的有意义,是否在浪费测试时间?我们有这样的时间,放在更重要的测试点上努力是否更有价值?

所以,对于这样的验证feature我们一定要做以权衡。是否可以通过深入分析实际应用场景和设计思路,精简这些验证feature,是不是哪些点可以删除?是不是哪些点不需要交叉覆盖?当然也可以思考是不是我们可以尝试启用形式验证工具?

(2)“剃”,给验证feature选择一个更好的归宿。

举一个例子,有这样一条验证feature:“需要覆盖连续不间断运行10000次场景的压力测试”。

这条验证feature考虑的没有问题,颗粒度很细,需求也很明确。但是对于EDA验证来说,又是一个不可能完成的任务,这么一个case可能跑几个月都结束不了。对于这样的验证feature,不需要从文档中删除,因为FPGA测试是可以办到的,这种情况可以增加备注,指明在FPGA测试的时候进行覆盖,并且负责跟踪这个点是否在FPGA验证计划中列出以及测试时候是否确实落实。

同理,例如有的验证feature可能不适合在单元级验证时候测试,适合在更高层次的验证阶段中测试,都可以像上面的例子给验证feature一个更好的测试“归宿”,用最适合的方式覆盖,从而提高项目总体的验证效率。当然了,给验证feature更好的归宿前提是需要验证者了解和把握验证的不同验证阶段以及不同验证层次的侧重点和优劣势,有一个验证的全局观念。

(3)“剃”,给验证feature刮骨,设置不同的优先级。

有这么两条验证feature:

“需要覆盖中断功能的测试”

“覆盖用于debug的状态寄存器”

很明显,第一个验证feature是核心功能,第二条重要程度远远不如第一条。如果我们的验证时间有限,那我们至少要通过完备的激励和检查机制保证第一条核心功能,而不是先编写大量的checker去自动化检查各种debug状态寄存器。

也就是说,不同的验证feature含金量和优先级也是不一样的,我们在提取验证feature的时候,要想清楚和标注不同验证feature的优先级。

3

不断迭代

验证feature列表在验证开始前就是写好固定死了不能变的吗?

不是的,验证feature文档是动态变化迭代的

在正式验证开展之前,我们会出一个当时认为最完善的版本,但是在验证过程中我们还是要定期迭代我们的验证feature文档,例如:

当需求和设计的变更,我们需要相应的修改和增删验证feature;

当功能应用场景、典型参数增加或改变时,及时增加验证feature;

性能功耗的场景验证feature也可能常常需要修改文档;

随着验证过程中对设计理解更加深入,也需要及时的记录和补充细化验证feature。

4

定期反思

验证feature需要定期反思,有两层含义,一方面是对已有验证feature的不断反思,其实类似于上面说的迭代,定期反思之前提取出的验证feature是否合理或有缺少,这里不过多解释;另一方面,是要利用好我们的验证feature文档,定期反思验证进度和质量。

a. 依据我们的验证feature列表和优先级等信息来制定我们的验证计划,并且不断的修改更正我们的验证计划。

b.定期的把测试用例与验证feature列表做一个对应和反标,心里清楚哪些验证feature已经有case覆盖住了,哪些还没有,在验证项目最后要保证所有验证feature都有定向或随机case可以对应。

c. 功能覆盖率覆盖点的规划和收集工作,也需要定期利用验证feature文档进行规划和反思,确定哪些点是一定需要写功能覆盖率收集代码的,也是验证完备性和质量的保证。

结语

今天我们用了一句口诀来回答“如何又快又好的梳理和利用验证feature文档?”

这个问题,即“先粗再细、先全再剃、不断迭代、定期反思”。

验证feature文档的地位绝对是验证过程中金字塔的顶端,篇幅有限,这其中很多的细节还希望各位进一步探索、感悟、交流~





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    427

    浏览量

    26309
  • EDA工具
    +关注

    关注

    4

    文章

    257

    浏览量

    31307
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41046

原文标题:验证feature文档梳理

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA开发如何降低成本,比如利用免费的IP内核

    。 了解IP内核的特性和使用方式:在选定IP内核后,应详细阅读其文档,了解内核的功能、性能、接口以及使用限制等。这有助于在设计中更好地利用这些内核,避免潜在的问题。 集成IP内核到FPGA设计中:在
    发表于 04-28 09:41

    fpga验证和uvm验证的区别

    FPGA验证和UVM验证在芯片设计和验证过程中都扮演着重要的角色,但它们之间存在明显的区别。
    的头像 发表于 03-15 15:00 380次阅读

    芯片验证中linux的用法详解

    本文主要针对芯片验证工作中常用的linux知识做了一个总结和梳理,内容虽然比较基础,但确实是非常实用。全文8000多字,为了方便大家阅读和查阅,我把文章的目录截图放下面。如果您是老手,看看目录是不是都掌握了;如果您是新手,也不用焦虑,山高千仞,只登一步。
    的头像 发表于 12-03 14:23 565次阅读
    芯片<b class='flag-5'>验证</b>中linux的用法详解

    基于Feature架构设计的百兆以太网交换机项目

    第二代交换机有更丰富的feature,更贴近真正使用的功能,除rtl代码,详细设计文档外,还会包括验证环境、验证代码,最后项目完成后,会全部开源供大家学习,顺利的话,希望还能上FPGA
    的头像 发表于 11-20 09:22 515次阅读
    基于<b class='flag-5'>Feature</b>架构设计的百兆以太网交换机项目

    功率放大电路知识的梳理

    电子发烧友网站提供《功率放大电路知识的梳理.pdf》资料免费下载
    发表于 11-17 15:41 0次下载
    功率放大电路知识的<b class='flag-5'>梳理</b>

    Java 中验证码的使用

    今天我们讲一下在 Java 中验证码的使用。 验证码生成 本效果是利用easy-captcha工具包实现,首先需要添加相关依赖到pom.xml中,代码如下: com .github.whvcse
    的头像 发表于 09-25 11:11 485次阅读
    Java 中<b class='flag-5'>验证</b>码的使用

    梳理单片机学习方法、产品开发流程

    梳理单片机学习方法、产品开发流程
    的头像 发表于 09-21 17:20 413次阅读
    <b class='flag-5'>梳理</b>单片机学习方法、产品开发流程

    pcb怎么布局又快又好

    pcb怎么布局又快又好  PCB(Printed Circuit Board)设计是电子工程领域中最重要的一环,它需求我们做好PCB布局设计。但是,PCB布局设计并不简单,它需要我们掌握一定
    的头像 发表于 09-08 11:23 1577次阅读

    验证码到底在验证啥?聊一聊验证码是怎么为难我们人类的

    在文章开头,老狐先给大家玩一个验证码的游戏,猜出图中验证码字母。
    的头像 发表于 08-12 10:25 1551次阅读
    <b class='flag-5'>验证</b>码到底在<b class='flag-5'>验证</b>啥?聊一聊<b class='flag-5'>验证</b>码是怎么为难我们人类的

    什么是形式验证(Formal验证)?Formal是怎么实现的呢?

    相信很多人已经接触过验证。如我以前有篇文章所写验证分为IP验证,FPGA验证,SOC验证和CPU验证
    的头像 发表于 07-21 09:53 5929次阅读
    什么是形式<b class='flag-5'>验证</b>(Formal<b class='flag-5'>验证</b>)?Formal是怎么实现的呢?

    利用先进形式验证工具来高效完成RISC-V处理器验证

    在本文中,我们将以西门子EDA处理器验证应用程序为例,结合Codasip L31这款广受欢迎的RISC-V处理器IP提供的特性,来介绍一种利用先进的EDA工具,在实际设计工作中对处理器进行验证的具体方法。
    的头像 发表于 07-10 10:28 341次阅读
    <b class='flag-5'>利用</b>先进形式<b class='flag-5'>验证</b>工具来高效完成RISC-V处理器<b class='flag-5'>验证</b>

    探讨一下在UVM中典型的验证平台

    验证平台顾名思义就是为了验证而存在的。普通意义上来说,如果是IP验证,当验证人员拿到设计的某模块的RTL代码(DUT,Design Under Test),设计
    的头像 发表于 06-15 18:12 816次阅读
    探讨一下在UVM中典型的<b class='flag-5'>验证</b>平台

    求分享Espressif文档说明

    )。此外,从 248 到 251 的字节和从 256 到 264 的字节也不会保留。 有人可以验证我的发现吗? 互联网上的某个地方是否还有任何 Espressif 文档说明了类似的内容?我自己找不到东西。
    发表于 05-31 10:33

    为什么SoC验证一定需要FPGA原型验证呢?

    在现代SoC芯片验证过程中,不可避免的都会使用FPGA原型验证,或许原型验证一词对你而言非常新鲜,但是FPGA上板验证应该是非常熟悉的场景了。
    发表于 05-30 15:04 1038次阅读
    为什么SoC<b class='flag-5'>验证</b>一定需要FPGA原型<b class='flag-5'>验证</b>呢?

    是否有任何基准测试文档或步骤来验证S32G板上的HSE状态?

    目前,SDK 已更新为适用于 S32G 的 BSP36。 我想知道是否有任何基准测试文档或步骤来验证 S32G 板上的 HSE 状态?
    发表于 05-22 07:23