IC验证方法基础

article/2025/9/23 4:20:46

数字IC的设计流程,如下图所示:

其中讲到形式验证的时候就懵了。当时老师说,其实我也记不太清了,就从网上找了一下:

形式验证(Formal Verification)是一种IC设计的验证方法,它的主要思想是通过使用数学证明的方式来验证一个设计的功能是否正确。

形式验证可以分为三大类:

等价性检查(Equivalence Checking)、

形式模型检查(Formal Model Checking)(也被称作特性检查)

定理证明(Theory Prover)

 

首先我当时很不理解,为什么要做形式验证。老师给了一个答案,为了确认综合后的电路跟你的设计是一致的。电路不也是工具综合出来的吗?为什么不能保证一致性?

老师说工具也是人做出来的,也有可能会出错,所以要确认。好像有一定的道理,当时对形式验证的理解就是这么一个初步概念。

 

后来工作了几年,也做了不少项目,对形式验证的理解可能稍微深刻一点。

 

我们平时做的最多的模拟仿真,就是给各种case的输入,穷尽各种组合,总是希望100%的验证到所有的情况。但是有些情况下,你不太可能达到这一个目的。假如有一个32位的比较器:

比较产生等于、大于、大于的结果。

假设采用一个快速模拟器,每微秒运行一个向量,则用模拟器模拟完全部模拟向量需要的时间为:

              264 (all input patterns) X 10-6

          ---------------------------------------------------  

           3600 (seconds) X 24 (hours) X 365 (days)

                   ≈584,942 years  

显然这是一个不切实际的验证时间。而形式验证使用

严格的数学推理来证明待测试设计的正确性,由于其静态、数学的特性,避免了对所有可能测试向量的枚举,而且能够达到100%无死角的检测。

 

定理证明是形式验证技术中最高大上的,它需要设计行为的形式化描述,通过严格的数学证明,比较HDL描述的设计和系统的形式化描述在所有可能输入下是否一致。这种验证方法需要非常深厚的数学功底,而且不能完全自动化,所以应用案例较少。当然还是有一些例子,例如HOL系统、PVS系统和ACL2系统等,并且都有成功应用案例。Moore等人验证了AMD5K86芯片的除法算法的微码,Brock等验证了Motorola的CAP处理器,Clark等验证了SRT除法算法。

 

模型检验是一种检测设计是否具有所需属性的方法,如安全性、活性和公平性。模型检验所针对的对象是同步时序设计。系统的设计spec用时序状态逻辑公式来描述。而通过对有限状态系统的所有可能的状态空间遍历来证明设计是符合规范的,增强设计者的信心;或者是通过提供违反spec的反例,以帮助设计者来发现早期设计的错误。反例给出的方式是从系统的初始状态出发到“坏”的状态的路径。系统的状态空间能够用有效的抽象符号算法来隐含地描述。抽象符号算法包括有向迁移图、二叉决策图(BDD- binary decision diagram)、合取范式(CNF- conjunctive normal form)等有效手段。

 

目前比较著名的模型检验工具:

Carnegie Mellon大学的符号模型检验工具SMV,

Stanford 研究所的原型验证系统PVS,

U.C.Berkerley的验证和综合工具VIS

和Bell实 验室的软件和协议验证工具Spin等。

 

 

等价性检查用于比较设计的两种实现是否一致,可分为组合等价性检查和时序等价性检查。目前是我们设计验证过程中用得最多的方法。它也是利用数学技术来验证参考设计与改动后的设计等价,主要目的是在一个设计经过变换之后,穷尽地检验变换前后的功能一致性,即证明设计的变换没有产生功能的变化,如下图所示:

等价性检查被广泛应用到设计流程中的各个不同阶段,用于验证不同设计层次之间的功能一致性,

 

或者用来验证RTL级对RTL级、RTL级对门级以及门级实现之间是否等价。

等价性检查的主要优点是比穷举式的模拟仿真更快,通常可在数小时内验证数百万门规模集成电路的一致性,这对模拟仿真是不可能的。比如我们在tapeout前突然因为一个bug改动比较大,看仿真已经来不及了,but怎么能放心的出去呢,只能靠等价性检查。因此,等价性检查工具已经被主流的设计流程所采用。

 

等价性检查的问题是需要一个参考设计作为描述,而如何设计一个理想参考模型(gold design)又是一个很重的任务。此外,等价性验证是为了找出实现的不一致性,而不能找出参考设计原先就可能存在的bug。另外等价性检查不能验证设计对象的时序,只能验证功能,因此它通常需要和时序分析工具配合在一起使用。

 

等价性检查主要是比较两种设计中相应的组合功能块。可以在参考设计中指定比较点,然后比较2种设计在该点的逻辑功能是否等价。比较点可以是输出端口、寄存器、锁存器、黑盒输入pin或被驱动的线网等。

 

逻辑锥(logical cone)是一组可驱动比较点的信号,它有n个输入(基本输入,状态点)和一个输出(基本输出,状态点),也可以包含其他逻辑锥,如下图所示:

最右边是一个输出端口,可以将它将作为一个比较点,与参考设计中相应的对象进行比较,比较的过程实际上就是考察它们的逻辑锥是否等价。所以对于报告出来的不匹配的点,我们也可以通过对它们逻辑锥进行分析,来找出具体的原因。

 

因此,等价性检查的具体工作就是比较两种设计中的关键点的等价性并将两种设计中任何不匹配之处标记、报告出来。

 

等价性检查的工具有:

Synopsys的Formality,

Cadence的Incisive Conformal,

Mentor Graphics公司的FormalPro等

而具体的应用例子网上也能找到一些,如果找不到可以在公众号留言邮箱索取啊

 

最后,总结一下模拟仿真和形式验证的比较:

 

形式验证目前还不能完全取代模拟仿真验证。两者各有所长,技术互补,在验证过程中应该结合使用,争取找出设计中所有的bug,哈哈!


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

相关文章

Excel中7种自定义数据验证设置

在Excel中,利用数据验证可以对数据的录入添加一定的限制条件。比如我们可以通过数据验证的基本设置使单元格只能录入整数、小数、时间、日期等,也可以创建下拉菜单选项。数据验证的基本功能在前面的文章已进行介绍,链接地址:excel…

Spring Boot 极验验证滑动验证码

概要 基于极验验证官网 java版gt3-java-sdk改编,使用Spring Boot 整合的极验滑动验证,包含form表单登录和ajax登录两种情况。 目录 注册账户获取ID和KEYDemo源码说明Demo演示源码地址 注册账户获取ID和KEY 1.进入官网注册账户 2.登录后台选择行为认证 3.增加认证…

iOS集成极验行为验证

iOS集成极验行为验证 项目中有使用到极验行为验证 看了下官方的demo,记录下如下的要点,官网文档行为验证 官方验证按钮GT3CaptchaButton的效果图如下: 也可以不使用官方GT3CaptchaButton,而使用自定义的按钮。但它们都要注意三…

Javascript框架库漏洞验证

Javascript框架库漏洞 💨前言💩漏洞验证👀漏洞描述🐾解决办法💀免费福利 💨前言 经常看到漏扫扫出来这个漏洞,查看了网上好多文章都没有正确的验证方法都在扯淡。今天我来点干货记录一下这个漏…

SSL证书文件验证

SSL证书域名验证 SSL证书域名验证方式有三种:自动DNS验证,手工DNS验证,文件验证 自动DNS验证:域名和SSL证书都是同一个供应商购买手工DNS验证:域名和SSL证书不是同一个供应商购买,需要到域名提供方进行解…

stata进行logistic回归内部验证和外部验证

我们既往已经介绍了使用Stata进行logistic回归绘制列线图并做内部验证,不少粉丝发信息问我怎么进行外部验证。今天我们来介绍一下,继续使用我们的不孕症数据(公众号回复:不孕症可以获得该数据)。我们数据先导入看一下 数据有8个指标,最后两个是PSM匹配结果,我们不用理他…

极验点选验证分析

本文分析的是极验点选验证码。 不管自己训练识别模型还是调用第三方识别接口,都需要拿到完成的验证图片。 极验的滑块验证图片是重新拼接的乱序图片。图片是由canvas标签绘制的,可以通过监听canvas断点调试。 接下来看看点选是否与众不同。 文章目录 …

geetest极验验证-java使用笔记

业务场景 在系统业务中,需要想客户发送手机验证码,进行验证后,才能提交。但为了防止不正当的短信发送(攻击,恶意操作等),需要在发送短信前添加一个行为验证(这里使用的是 极验&…

【原创】Python 极验滑块验证

本文仅供学习交流使用,如侵立删!记一次 极验滑块验证分析并通过 操作环境 win10 、 macPython3.9selenium、seleniumwire分析 最近在做的一个项目登录时会触发一个滑块验证,就长下面这个样子 可以很明显的看出来是极验3代验证,借助之前写阿里云盾的经验使用selenium+pya…

MCU芯片级验证

第一讲 前言 只要是做SOC芯片的项目都需要SOC验证,SOC验证也是芯片验证的重中之重。 在之前做过ahb2apb、ahb2uart的验证之后,这篇文章提到相关内容都很少深入,于是乎,还是后面打算去啃ARM架构,默写代码去了&#xff…

极验验证滑块破解,canvas

前言 请勿用于商务用途哦,仅限于学习,否则后果自负哦 有两篇关于极验验证滑块破解的文章,在此分享一下: https://www.jianshu.com/p/c8df1194b514 https://www.jianshu.com/p/f12679a63b8d 这两篇文章针对不同滑块,有…

极验验证--滑块验证

极验验证–滑块验证 本文通过通过模拟登录极验网站,完成滑块验证 所用语言和相关模块 python3.6seleniumrequestsPIL 极验验证码特点分析 极验验证是一种在计算机领域用于区分自然人和机器人的,通过简单集成的方式,为开发者提供安全、便捷…

vue2.0 + 极验验证

1.极验验证gt.js需要注意的是这两行 window.initGeetest initGeetest; return initGeetest; 网上有博主的文章中是没有这两行的截图的,需要注意。完整的js如下:-------------------------------------------------------------------------------…

更安全的验证方式-极验验证

简介 极验验证是一种在计算机领域区分自然人和机器人的,通过简单集成的方式,为开发者提供安全、便捷的云端验证服务,与以往传统验证不同的是,极验通过分析用户完成拼图过程中的行为特征,通过数据分析来判断是人还是机…

centos7 创建、删除目录软连接

创建/删除目录软连接 ① 目录只能创建软链接 ② 目录创建链接必须用绝对路径,相对路径创建会不成功,会提示:符号连接的层数过多这样的错误 ③ 在链接目标目录中修改文件都会在源文件目录中同步变化 1.创建软连接 创建源目录: …

C#删除目录和目录下的所有文件

方法1&#xff1a;直接删除法 DirectoryInfo di new DirectoryInfo(string Path);di.Delete(true); 注&#xff1a;path是你要删除的非空目录&#xff1b; true&#xff1a;你要删除里面所有的文件&#xff0c;包括文件夹和子文件夹 方法2&#xff1a;层级删除法 /// <…

练习HDFS的访问,创建目录,删除目录--超详细

1、如果连接被拒绝&#xff0c;则输入&#xff1a; source ~/.bash_profile: 2、进入到sbin目录下输入&#xff1a;start-dfs.sh&#xff0c;重启一下。 之后再输入hdfs dfs -ls /&#xff0c;没有出现拒绝连接即可。 3、若需要创建目录&#xff0c;则输入&#xff1a; hdfs…

linux删除目录下文件的几种方法

删除某个目录下的文件 > tree . . └── rumenz├── 1.txt├── 2.txt└── one2 directories, 2 files删除rumenz目录下的所有文件(不删除目录) > rm -f rumenz/* rm: cannot remove ‘rumenz/one’: Is a directory如果是一个目录就跳过提示 使用find删除rumenz…

linux 删除目录下所有指定的子目录

find /var/lib/jenkins/jobs/service-sit-jck-syc/jobs -type d -name "builds" -exec rm -rf {} find 【要搜索的目录】 -type d【d为目录&#xff0c;如果是删除指定文件&#xff0c;就用f】-name “【要删除的目录名】” exec rm -rf {}

bat脚本删除目录下的文件

今天在写脚本的时候有一个场景是需要判断目录是否存在如果存在的话就删除掉这个目录&#xff0c;然后在执行其他操作。 我们需要删除delete目录及其目录下的所有文件 D: set dir delete echo %dir% if exist %dir% ( del /s /q %dir% rd /s /q %dir% ) pause