Formal Verification (五) coverage、sign-off flow

article/2025/10/23 10:25:59

coverage type

formal和simulation一样,也是基于coverage-driven的验证方式;针对formal的coverage metrics,可以分为以下几种(不同工具定义略有不同,本文以Jaspergold为例):

code coverage
code coverage分为branch,statement,expression,toggle;这部分概念和simulation类似,如下图:
在这里插入图片描述
用于衡量cover item(CI) (CI可以简单理解为RTL code)在验证过程中是否被覆盖到;因为formal是工具自动施加激励,CI的覆盖结果分为以下几种:
Covered:工具追踪并覆盖了该CI
Uncovered:在有限的时间内,未追踪覆盖该CI
Unreachable:在给定的约束条件下,无法覆盖该CI(可能存在over-constraint的问题
Dead-code:在任何条件下,都无法覆盖该CI

functional coverage
functional coverage:和simulation一样,通过自定义covergroup的方式收集功能覆盖率。
一般formal验证中,更多的是使用SVA, PSL, TCL cover properties的方式来收集感兴趣的场景(meaningful scenarios);

上述的code coverage,functional coverage可以合并称作Stimuli Coverage

checker coverage
Stimuli Coverage达到100%,并不能表明验证的完备性,只能说明当前formal平台下激励足够充分,各类CI都覆盖到;但是RTL的正确性,需要assertion作为checker来保证;需要引入checker coverage,checker coverage分为COI coverageProof Core两种:

COI coverage
COI(CONES OF INFLUENCE): 逻辑锥的含义,是Formal工具对property的逻辑电路映射;覆盖结果如下:
Checked:该CI和某个/某些assert相关联;
Undetectable:该CI和任何assert都没有关联,也就说CI改变或者去除,不会引起任何asstertion fail。

Proof Core
proof core是对逻辑电路更精确地划分,是COI的子集:
在这里插入图片描述

如下图,一个简单的assertion( asster $onthot0(B)) 从COI的角度看,涉及很多逻辑单元;仅通过这一个asstertion无法保证前面运算单元的正确性,这部分逻辑对于Proof Core是Unchecked的。
在这里插入图片描述
通过分析Proof Core,增加额外条件,提高assertion的完备性,如下:
在这里插入图片描述
Proof Core的覆盖结果如下:
Checked:该CI可以被工具分析的assertion检查到。
Unchecked:该CI不可以被工具分析的assertion检查到。

Proof Core的精确度可以配置为Normal Precision(flop-level,default)和High Precision(code-level)两种。

Mutation:是一种更为精确地对checker完备性检查的方式,可以理解为对RTL code 注错。随机对RTL注错,例如对某些逻辑取反,查看assertion是否fail。如果assertion足够完备,RTL的任何注错, 都会引起assertion fail。此时assertion相当对RTL的 1:1 实现。

衡量的精度越高,需要的努力也越大;一般首先保证COI达标,再考虑Proof Core;综合考虑ROI,建议对一些generic module的验证,采用mutation sign-off;对于Unite Level Module,通常不会使用mutation。
在这里插入图片描述

在VC fomal中,称作Formal Core;在Jaspergold中,称作Proof Core

上述的stimuli coverage,checker coverage可以合并称作Formal Coverage

bounded coverage
bounded coverage是用于评估当前proof depth是否足够作为sign-off标准,可以参考上篇bounded proof的内容。

Coverage Methodology的总结如下:
在这里插入图片描述
Note: 因为formal环境中的辅助代码都是可综合的代码风格,所以覆盖率包含DUT和formal环境两部分。这一点formal和simulation不同

sign-off flow

以覆盖率作为sign-off的标准,各家工具略有不同,但大体一致:
Jaspergold建议如下:
在这里插入图片描述
VC Formal建议如下:
在这里插入图片描述
大致步骤总结如下

  1. 排除formal平台(没有underconstraintoverconstraint)和DUT(没有deadcode)的基本问题;
  2. 首先分析COI覆盖率,补充缺失断言,COI达到100%;接着分析Proof Core,补充缺失断言,Proof Core达到100%。(未覆盖部分的wavie需要review并comment)
  3. 对于inconclusive assertion,需要确认当前的cycle depth是否充分;
  4. 预期的function cover被覆盖;
  5. 针对某些模块,需要进一步的mutations或者FTA (Formal Testbench Analyzer)分析处理;
  6. 在回归阶段,部署相关的Deep Bug Hunting策略;

理想的Sign-off目标如下:

  1. 所有的covers/vacuity-checks都被覆盖,未被覆盖存在合理的解释;
  2. 没有CEX遗留,所有的assertions都是full-proof或者bouned-proof的状态;
  3. COI达到100%
  4. Proof Core达到100%
  5. 通过mutations的注错测试

上述内容针对只使用Formal Sign-off的Block Level DUT;如果DUT使用Formal+Simualtion两种验证方式或者使用Formal做System level的验证,上述内容需要做相应的修改;同一家的工具支持Formal和Simualtion的覆盖率merge;

sign-off flow不单单是覆盖率的收集和分析,涉及验证流程的方方面面;包括但不限于Design SPEC是否对formal的部署友好,Formal Verification Plan的制定,Formal/Simulation Co-Verification,来自Formal Expert的review,Formal TB的搭建,覆盖率的收敛,dashboard/trend chart,回归策略和DBH,Checklist的确认,Sign-off,ROI评估,lesson learn 等。

sign-off flow相关的paper:

FV Signoff in the context of Mainstream Formal Verification (JUG 2022 Recording)

A Coverage-Driven Formal Methodology for Verification Sign-off


http://chatgpt.dhexx.cn/article/AVLsDCnA.shtml

相关文章

Idea coverage覆盖率测试工具的使用

知其然 知其所以然创作不易 求点赞👍 求关注❤️ 求分享👥絮叨 最近项目中,每次Build的时候会触发sonar程序去扫描代码,打出测试覆盖率,也就是coverage。如果不到80%以上,就要去补Test case。可是我们在开…

SV -- Coverage 覆盖率

SV – Coverage 覆盖率 本文内容来自: http://www.asic-world.com/systemverilog/coverage.htmlhttps://verificationguide.com/systemverilog/systemverilog-array-manipulation-methods/https://blog.csdn.net/bleauchat/article/details/90445713 (本文的主要来源…

VCS coverage覆盖率工具常用功能

目录 简介 Coverage Metrics覆盖指标: merge VCS相关命令 常用编译选项: 常用仿真选项: 系统函数: 使用URG及其参数: 用DVE查看coverage: 简介 可通过 -cm_hier 配置文件来控制覆盖率收集范围 C…

vcs/urg 进行覆盖率coverage merge及部分merge到整体

目录 1.vcs收coverage基本Option 2.相同代码的merge 3.部分merge到整体 3.1 mapfile 3.2 -map使用语法 3.3合并的常见问题 3.3.1 UCAPI-MAP-SHAPEMISMATCH coverage相关的用户手册可以在本人的百度云盘中查看Coverage Technology User Guide.pdf 还可以参考gsithxy的博文…

代码覆盖率 ——语句覆盖 Statement Coverage、分支覆盖 Branch Coverage、 路径覆盖 Path Coverage的区别

我们以下面代码为例: public static boolean Method(boolean a, boolean b) {int x 2;int y -4;if(a)x y;elsex -2*x;if(b)y 0-x;return ((100/(xy))> 0);}语句覆盖 Statement Coverage 当我们要实现100% Statement Coverage,只需以下两个test…

NGS 测序深度和覆盖度—Depth、Coverage

文章目录 前言这是比较基本的两个概念:二者的关系:例子:使用**bamdst**计算覆盖度安装 使用参考: 前言 温故而知新,刚入门的时候没有好好记笔记,现在补上😑 公众号:猪猪的乌托邦 这…

idea插件Coverage(用例覆盖率)使用

idea插件Coverage(用例覆盖率)使用 选择测试用例中要执行的包、类或方法,右键选择Run …with Coverage。 执行结束后可在右侧查看覆盖率结果。可以点击导出按钮导出覆盖率报告。注意:若只执行了包中的某个类或方法,则…

浅谈coverage

背景描述: 公司需要对测试用例的对工程代码的覆盖率做统计,因此需要用到coverage,这里有个特殊的点,公司的工程运行时要在容器中进行的。 实际应用: 1. 首先,需要下载coverage: pip3 install…

Python代码覆盖率分析工具Coverage

目录 简介 安装 命令行中使用 调用API使用 简介 Coverage是一个Python代码覆盖率分析工具,它可以用于衡量Python测试代码的质量。通过给代码执行带来的覆盖率数据,Coverage可以帮助开发人员找出被回归测试代码中的漏洞,并且指明哪些代码…

coverage 测试代码覆盖率

测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标。测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档。进一步考虑,测试覆盖率可以看作是产品代码质量的间接指标&#xff0…

GIS原理篇 Coverage

一、什么是 Coverage Coverage 是一种用于存储矢量数据的地理相关数据模型,它包含地理要素的空间(位置)数据和属性(描述性)数据。Coverage 使用一组要素类来表示地理要素。每个要素类存储一组点、线(弧&am…

Python:代码覆盖率工具coverage

简介:覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分正在被测试执行,哪些不是。coverage是一个测量 Python 程序代码覆盖率的工具。它监视您的程序,注意代码的哪些部分已被执行,然后分析源代码以识别可能已执…

configure--prefix

本文主要说明--prefix参数的作用,其主要用在编译安装源代码应用中的./configure环节。 ./configure --help 查看详细的说明帮助 1、源码安装一般包括几个步骤:配置(configure),编译(make)&…

路由策略 匹配工具 IP-Prefix

⦁ p-prefix-name:指定地址前缀列表的名称。字符串形式,长度范围是1~169,不支持空格,区分大小写。 ⦁ index index-number:指定本匹配项在地址前缀列表中的序号。整数形式,取值范围是1&am…

CondaValueError: The target prefix is the base prefix. Aborting.

报错截图 错误原因 conda命令错误 正确做法 conda create -n py38 python3.8

zuul 里面的 prefix 和 strip-prefix 怎么使用

首先两个是配置路由前缀的, 下面是我网上找的一段话: prefix :前缀,当请求匹配前缀时会进行代理strip-prefix :代理前缀默认会从请求路径中移除,通过该设置关闭移除功能, 当 stripPrefixtrue …

Trie树(Prefix Tree)介绍

本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。 一、什么是Trie树 Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图: 上图是一棵Trie树,表示了关键字集…

configure --prefix=/的作用和用法

非root用户安装python和gcc的时候,总是需要设定这个,只知道是个路径,具体是什么路径,代表什么不清楚。 不明白就百度: configure --prefix/是干啥用的?这个路径代表了什么? Configure是一个可…

前缀和(Prefix Sum)

前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身)。前缀和分为一维前缀和,以及二维前缀和。前缀和是一种重要的预处理,能够降低算法的时间复杂度,可以在 O ( 1 ) O(1) O(1)的时间复杂度内求出区间和。 一…

CMAKE_INSTALL_PREFIX

一、定义 CMAKE_INSTALL_PREFIX为cmake的内置变量,用于指定cmake执行install命令时,安装的路径前缀。Linux下的默认路径是/usr/local ,Windows下默认路径是 C:/Program Files/${PROJECT_NAME} 二、用…