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

    文章

    268

    浏览量

    31845
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59861
  • fsm
    fsm
    +关注

    关注

    0

    文章

    35

    浏览量

    12831
  • DUT
    DUT
    +关注

    关注

    0

    文章

    189

    浏览量

    12429

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

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

收藏 人收藏

    评论

    相关推荐

    怎么用Vivado做覆盖率分析

    在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。
    的头像 发表于 01-03 12:34 1756次阅读
    怎么用Vivado做<b class='flag-5'>覆盖率</b>分析

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

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

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

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

    结合覆盖率驱动技术的RVM验证方法学在SOC验证中的应用

            本文首先介绍RVM验证方法学和覆盖率驱动技术,然后详细分析如何使用结合覆盖率驱动技术的RVM验证
    发表于 09-05 08:53 15次下载

    针对功能覆盖率验证过程

    针对功能覆盖率验证过程神州龙芯集成电路设计公司徐伟俊 杨鑫 陈先勇 夏宇闻[摘要]:本文在介绍传统验证过程及其局限性的基础上,阐述了针对功能覆盖率
    发表于 12-23 16:12 13次下载

    Verilog代码覆盖率检查

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

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

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

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

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

    嵌入式代码覆盖率如何进行统计有哪些方法和经验

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

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

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

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

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

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

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

    代码覆盖率工具的重要性

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

    EDA仿真验证环境中的激励、检查和覆盖率

    下图是一个典型的EDA仿真验证环境,其中主要的组件就是激励生成、检查和覆盖率收集。
    的头像 发表于 04-15 10:13 1740次阅读

    代码覆盖率记录

    为确保具体的产品(例如,医疗或航空电子市场)质量合格, 通常需要提供语句覆盖与判定覆盖认证证明。对于各种嵌 入式系统,规范要求高度优化的代码需要实时测试。禁止 代码插装和运行时篡
    发表于 11-03 11:02 0次下载
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖率</b>记录