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

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

3天内不再提示

脱离代码谈芯片验证关键指标:覆盖率

sanyue7758 来源:芯片学堂 2023-04-17 10:04 次阅读

验证覆盖率(Verification Coverage)的存在是为了试图回答这样一个问题:“你怎么知道验证已经完成?”

实际上,就算验证覆盖率达到了100%,从逻辑上也不能保证当前的验证是完备的。只不过,100%的验证覆盖率,可以让工程团队对即将tape out的芯片增添不少信心。

本文将重点厘清覆盖率相关的概念,以及在芯片开发流程中跟覆盖率相关的事项。

01

覆盖率概述

要完成一项工程,需要从市场需求、产品计划、工程流程、技术手段、监管机制、资源调配、评审体系等多个维度做全盘考量。而覆盖率,就是芯片工程中,评审体系需要重点参考的一项技术指标,但也只是验证相关的其中一项。 目前被业界广泛采用的覆盖率指标有功能覆盖率(Function Coverage)和代码覆盖率(Code Coverage)。这两项指标需要配合起来看,比如100%的代码覆盖率以及低于100%的功能覆盖率,可以看出验证不完整;100%的功能覆盖率以及低于100%的代码覆盖率,可以看出代码冗余或验证计划有误;更多的分析可以得出更详细的结论。

下面会对这两种覆盖率分别展开阐述,最后再补充一下用例通过率(Pass rate)和计划覆盖率(Plan Coverage)的内容。

02

功能覆盖率

功能覆盖率,被用来度量DUT中哪些功能/特性被测试用例测试到了。这项指标在随机验证中非常有用,通过它可以明确地知道在“大范围的扫射”之后,哪些功能被命中了,也就对当前DUT的状态有了大致的把握。 但要获得这项指标也会比较麻烦,工程师们需要针对各种各样的功能和应用场景,使用SV等验证语言去实现覆盖率模型(Coverage Model)或断言(Assertion),并且从大量的回归测试(Regression)中采集(Sample)覆盖数据,然后进行统计数据的合并(Merge),最后做覆盖率分析(Analysis)。

a1ec5092-dc3b-11ed-bfe3-dac502259ad0.png

这里提到的功能和应用场景,在不同层级的验证中(模块验证/子系统验证/系统验证)有不同抽象的表达,比如模块验证会更关心模块电路是否所有的功能都被触发到了,而系统验证会更关心是否耦合了各类工作场景。 这里提到的实现覆盖率模型,是容易引入人为错误的地方。覆盖率模型的定义决定了计算覆盖率时的全集,比如设计文档中提到了100个功能特性,验证工程师在开发覆盖率模型的时候由于理解不到位或者遗漏,导致只针对其中90个特性编写了覆盖点,那么最后就算达成100%的功能覆盖率,也还是有10个功能特性没有被测试到。

SV功能覆盖率模型的实现,需要用到覆盖组covergroup和覆盖点coverpoint这些语法特性。覆盖组可以定义在package包、module模块、program程序、interface接口或者class类中。覆盖组通过包含多个覆盖点或覆盖点交叉场景来完成对覆盖率模型的描述,覆盖组还需要指定采样条件和其他配置选项。而覆盖点,通常是需要被覆盖的信号的逻辑或算术表达式,并且对具体覆盖仓(bin)做划分。

提个小建议,即使对SV相关语法很熟悉,实现覆盖率模型的时候还是使用最直接和最简单的方式。这样可以提高可读性,便于维护和评审。

03

代码覆盖率

代码覆盖率,被用来度量RTL中哪些代码被仿真验证执行到了。代码覆盖率是一种软件和硬件开发都通用的手段,通过在仿真程序运行的过程中记录统计数据,来说明代码中哪些语句被分别执行了多少次。 通过对代码覆盖率的分析,我们很容易发现RTL中冗余的代码块(没有被执行),这种“冗余”可能来自于RTL实现逻辑的错误,或者用例和环境没有正确完成期望的测试序列,又或者验证计划不够完备。总之,对于验证质量的把控是非常有益的。 代码覆盖率的收集相比于功能覆盖率要方便得多。

收集代码覆盖率通常是由EDA工具在启用相应功能的选项(option)之后自动化完成,不需要工程师再开发额外的代码。同时,代码覆盖率是按照所有代码作为全集来计算,不会像功能覆盖率那样存在人为引入的局限性。 但是,代码覆盖率有个本质上的问题,那就是代码行本身不能代表功能特性,也就是说,某一些代码被覆盖到了,并不能说明RTL实现了某项功能,也不能说明功能实现的正确性和逻辑完备性。反过来,完整的代码覆盖率,不能识别出来哪些功能特性没有被实现,不能识别出来实现了的功能特性所有可能的场景,也不能识别代码行在执行顺序上的正确性。

a20188d6-dc3b-11ed-bfe3-dac502259ad0.png

代码覆盖率的统计一般会再进一步做分类,即翻转覆盖率(Toggle Coverage)、行覆盖率(Line Coverage)、语句覆盖率(Statement Coverage)、分支覆盖率(Branch Coverage)和状态覆盖率(FSM Coverage)。这些分类很好理解,都是字面意思,比如toggle cov就是看某个信号的翻转情况,FSM cov就是有限状态机的遍历情况,这里不再一一展开赘述。

04

用例通过率和计划覆盖率

这是最后想要补充的两个常见指标,用例通过率(Pass rate)和计划覆盖率(Plan Coverage)。 通过率指的是执行Pass的用例数占所有需要执行的用例的比例。严格来讲,通过率并不能表示验证工作的质量进度,它只能表征验证工程师大致的工作量进度。在达成功能覆盖率和代码覆盖率的目标前,一般要求用例是100%pass的,即手上已开发的用例都能执行通过。

计划覆盖率指的是测试通过的测试点(test point)占所有测试点的比例。严格来讲,计划覆盖率同样不能表征验证工作的质量进度,因为测试点的拆分具有很大的主观性,在实际工程中增加测试点是常有的事。 计划覆盖率的计算,会要求将用例执行结果反标回验证计划表,然后再对应到测试点,这样就可以根据用例的执行结果来计算出计划覆盖率,它同样只是能在一定程度上表征工作量进度。





审核编辑:刘清

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

    关注

    4

    文章

    252

    浏览量

    31287
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59076
  • fsm
    fsm
    +关注

    关注

    0

    文章

    35

    浏览量

    12719
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11998

原文标题:SystemVerilog | 脱离代码谈芯片验证关键指标:覆盖率

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

收藏 人收藏

    评论

    相关推荐

    示波器的关键指标

    80%的工程师使用泰克示波器来加快其设计的调试与测试工作。本文作者——泰克公司大中华区市场开发经理张天生在接受国内某知名媒体专访时就示波器的一些关键指标进行了阐述,并在结尾作了趋势展望。
    发表于 07-24 06:52

    如何改善5G覆盖率

    改善5G覆盖率的方法
    发表于 12-15 07:52

    如何提高DFT设计测试覆盖率

    提高DFT设计测试覆盖率的有效方法是什么
    发表于 05-07 06:37

    音频功放的关键指标是什么?

    音频功放的关键指标是什么?
    发表于 06-03 06:00

    嵌入式仿真平台SkyEye的覆盖率分析相关资料下载

    代码执娜行覆盖情况的功能,来检测代码中未执行覆盖情况。在覆盖率分析时需要分析嵌入式软件的指令覆盖率
    发表于 12-17 07:27

    关于SpinalHDL中的验证覆盖率收集简单说明

    在做RTL仿真验证时,覆盖率收集往往是我们在验证中需要注意的地方,本篇就SpinalHDL中的验证覆盖率收集做一个简单说明。sbt配置在Sp
    发表于 06-24 15:56

    重点厘清覆盖率相关的概念以及在芯片开发流程中跟覆盖率相关的事项

    全盘考量。而覆盖率,就是芯片工程中,评审体系需要重点参考的一项技术指标,但也只是验证相关的其中一项。目前被业界广泛采用的覆盖率
    发表于 09-14 11:57

    Systemverilog覆盖率的合并和计算方式

      在systemverilog中,对于一个covergroup来说,可能会有多个instance,我们可能需要对这些instance覆盖率进行操作。  只保存covergroup type的覆盖率
    发表于 03-21 14:24

    Verilog代码覆盖率检查

    Verilog代码覆盖率检查是检查验证工作是否完全的重要方法,代码覆盖率(codecoverge)可以指示Verilog
    发表于 04-29 12:35 7945次阅读

    USCIS API的应用程序发热覆盖率

    功能覆盖率是保证验证过程整体完整性的关键指标,然而有很多证据表明覆盖率模型往往不准确,不完整和具有误导性。作者这种覆盖缺陷是非常常见的,并且
    发表于 09-15 10:49 6次下载
    USCIS API的应用程序发热<b class='flag-5'>覆盖率</b>上

    嵌入式代码覆盖率统计方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出。代码覆盖率
    的头像 发表于 01-06 15:06 2841次阅读
    嵌入式<b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>统计方法和经验

    统计嵌入式代码覆盖率的方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中已检查的程序源代码比例计算得出。代码覆盖率
    的头像 发表于 03-29 11:58 1613次阅读
    统计嵌入式<b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>的方法和经验

    怎么才能写出高覆盖率的Verilog代码

    芯片前端工程中,测试验证的核心理念:以提高覆盖率为核心。设计工程师需要关心的主要有行覆盖率(Block),条件覆盖率(Expression)
    的头像 发表于 06-01 10:13 2386次阅读

    覆盖率的Verilog代码的编写技巧

    设计工程师需要关心的主要有行覆盖率(Block),条件覆盖率(Expression),翻转覆盖率(Toggle),状态机覆盖率。本文从ASIC设计的角度上来讨论,如何写出高
    的头像 发表于 05-26 17:30 3727次阅读

    代码覆盖率工具的重要性

    测试覆盖率是软件质量的重要指标,也是软件维护的重要组成部分。它通过提供不同承保项目的数据来帮助评估测试的有效性。这种洞察力允许通过为未经测试的代码定义新的测试用例来改进测试,从而提高代码
    的头像 发表于 12-08 15:13 1112次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>工具的重要性