什么是形式验证?

在当前复杂的数字设计开发过程中,功能验证十分重要。虽然硬件的复杂度仍遵循摩尔定律持续增长,但是验证的复杂性更具挑战。事实上,随着硬件复杂性随时间呈双指数增长,验证复杂性理论上也呈指数增长。验证已被公认为是设计过程中的主要瓶颈:高达70%的设计开发时间和资源花在功能验证上。Collett International Research认为,即使在验证上花费如此巨大的精力和资源,功能性缺陷仍是芯片重新流片的头号原因。

  功能性验证挑战

  边际情形(corner-case)的缺陷是仿真伪像,由于以仿真为基础的验证具有非穷尽的固有特性,因此边际情形无法被检测到。事实上,不管用多少时间仿真,也不管测试平台和发生器有多么智能,通过仿真验证设计意图对于最小电路以外的所有电路来说都是不完整的。基本的仿真伪像可以被分成三类:穷尽型、可控型和可观察型。

  形式验证是一个系统性的过程,将使用数学推理来验证设计意图(指标)在实现(RTL)中是否得以贯彻。形式验证可以克服所有3种仿真挑战,因为形式验证能够从算法上穷尽检查所有随时间可能变化的输入值。换句话说,没有必要表明如何激励设计或创建多种条件来实现较高的可观察性。

  虽然从理论上讲,仿真测试平台的输入端口针对待验证设计(DUV)具有较高的可控性,但测试平台对内部点的可控性一般较差。为了使用基于仿真的方法识别设计错误,以下条件必须保持:

  * 必须产生正确的输入激励,以激活(也就是敏感化)设计中某个点的缺陷

  * 必须产生正确的输入激励,以便将源自缺陷的所有效果传送到输出端口

在使用基于仿真的验证时,需要规划设计中需要验证的对象:

  * 定义需要测试的各种输入条件

  * 创建功能性覆盖模型(确定是否做了足够的仿真)

  * 搭建测试平台(检查器,测试桩,发生器等)

  * 创建特定的直接测试

  * 成年累月的仿真

  现实中,工程师一直在反复做着这些事:运行测试、调试故障、再次仿真回归组、观察各种覆盖率指标,以及调整激励(例如操控输入发生器)以覆盖以前未覆盖的设计部分。

  这里我们讨论一个弹性缓存例子(见图1)。数据可以在时钟域间改变,能够根据两个时钟之间的相位和频率偏移做出调整。数据必须无损地通过弹性缓存进行传送,即使在设计允许时钟不完全同步的情况下。在这个案例中的一个功能性缺陷例子是在时钟有效沿对齐时由于数据的变化而出现的缓存溢出。这就可能要求对所有可能的输入条件进行大量的仿真和考虑,以建模和仿真这种错误行为。

图1:弹性缓存框图

  高层要求

  许多公司已经采用基于断言的验证(ABV)技术来缩短验证时间,同时改进他们的整体验证工作。然而,一般采用的ABV专注于局部的、在仿真中使用的RTL实现相关断言。所有内部断言的汇聚不会表征或完整规定微架构定义的那种模块的端到端行为。此外,当设计实现改变时,这些局部性断言不能重复使用。换句话说,通过端到端属性(包括数据完整性和包顺序)和规定模块必需的黑箱行为,高层断言提供高得多的设计功能覆盖率,并且能在各种设计实现和多个项目之间重复使用。更重要的是,通过形式性验证模块的高层要求集,可以使验证完整性和产能得到显著提高。因此,高层形式验证无需模块级仿真,可极大地缩短系统级验证时间。让我们详细地看看图2所示的高层要求。

图2:要求与RTL断言对比。

  Y轴代表抽取层,X轴代表被某个特殊断言或要求覆盖的设计数量。沿Y轴越往上走,被高层要求覆盖的设计空间就越大。证实这些高层要求具有很高价值,原因有很多:

  1. 高层要求关系到微架构中的要求

  2. 高层要求关系到测试平台中的输出检查器组

  3. 高层要求覆盖了与工程师想要写入的数百条较低层断言相同的设计空间

  4. 高层要求覆盖了由于工程师遗漏的较低层断言的缺失而未被覆盖的设计空间

  最后一点我们这里举个例子,假如设计包含一个FIFO,并且工程师忘了编写一个断言来检查FIF从不下溢。这种安全性违例将由高层要求加以识别。然而,通过形式性地验证高层要求,高层要求违例的根源就能得以跟踪。例如,如果针对高层要求在影响锥中包含了FIFO,那么导致高层要求不能满足的下溢条件将被检测到。

  理想的形式验证工具要求具有一定的规模,以便穷尽地检查所有可能的输入条件以及设计中任意点的可控性和可视性(见表1)。我们的旗舰产品,例如JasperGold,就采用了高性能和大规模的形式验证技术,能够穷尽地验证模块是否满足源自微架构的高层要求。这款产品使用数学算法,因为不需要使用仿真测试平台或激励。

表1:仿真与形式验证的比较

  本文小结

  形式验证要求你以不同的方式思考。例如,仿真是完全经验主义的做法,也就是说,你通过反复试验试图查明缺陷,这要花相当多的时间尝试所有可能的组合,因此永远不会完整。另外,由于工程师必须定义和产生大量输入条件,他们的工作重点将是如何在非设计目标基础上分解设计。另一方面,形式验证是穷尽式数学技术,允许工程师仅关注设计意图,或“什么是设计的正确行为?”。

  验证实现工作包括将多种输入条件定义为测试计划的一部分、创建功能覆盖模型、开发测试平台、创建输入激励发生器、编写指导性测试以及执行测试、分析覆盖率指标、调整激励发生器以面向未验证的设计部分,然后反复这一过程。纯形式验证技术则相反,专注于证实模块的端到端、直接对应微架构规范的高层要求,帮助用户戏极大提高项目的设计和验证产能,同时确保正确性。

时间: 2024-08-04 00:16:34

什么是形式验证?的相关文章

Tcl与Design Compiler (九)——综合后的形式验证

本文属于原创手打(有参考文献),如果有错,欢迎留言更正:此外,转载请标明出处 http://www.cnblogs.com/IClearner/  ,作者:IC_learner 这里来讲一下formality的使用,貌似跟tcl和DC没有很强的联系:然而说没有联系,也是不正确的.在综合完成之后,可以进行形式验证.此外这里不是专门讲解formality的使用的,因此只会简单地实践一下它的用法. formality是Synopsys公司的形式验证工具,上一节我们得到了综合后的设计,这里我们就要验证综

哪一种验证方法最好?形式验证、硬件加速还是动态仿真?

关于最佳的验证方法,最近总能在各种文章中看到.这里希望以一些新的视角来看待这些问题.所以根据一些EDA公司代表对相关问题的回答,总结出本文. 受邀回答问题的代表有:Steve Bailey,Mentor Graphics公司新兴技术总监:Dave Kelf,OneSpin解决方案营销副总裁:Frank Schirrmeister ,Cadence高级产品管理总监:Seena Shankar,Silvaco的技术营销经理:Vigyan Singhal,Oski技术总裁兼首席执行官 :Lauro R

Kafka笔记整理(三):消费形式验证与性能测试

[TOC] Kafka笔记整理(三):消费形式验证与性能测试 Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: 1.每个consumer属于一个consumer group,可以指定组id.group.id 2.消费形式: 组内:组内的消费者消费同一份数据:同时只能有一个consumer消费一个Topic中的1个partition: 一个consumer可以消费多个partitions中的消息.所以,对于一个topic,同一个group中推荐不能有

Formality形式验证教程

Formality形式验证主要验证综合后,生成的网表文件功能和之前的verilog文件功能是否一致, 需要两个文件,一个verilog文件,一个是网表文件 1.新建一个文件夹,把verilog文件和网表文件放入文件夹下,在此路径,打开linux下输入命令窗口,输入fm,则打开Formality软件 2. 切换到Ref界面下,导入verilog文件 3,设置路径,点击Options 4.  点击Browse,添加DC综合软件安装的根路径,如我的是/opt/Synopsys/Synplify2015

DC综合及仿真验证和DFT测试

综合技术是提高设计产能的一个很重要的技术,没有综合技术的发展就不可能用HDL实现电路的设计,因为HDL开始是用来供电路仿真建模使用的,到了后来才把其中一部分子集作为可综合的语言,也就是RTL CODE.很多人入门都用HDL做设计,就以为HDL就只是用来做设计的,没有看到HDL最初始的一面,所以在验证时,就无法用好HDL另外一部分强大的功能.有时间还是可以看看Writing Testbench这本书,增强对HDL语言在验证方面作用的了解,也是提高对HDL认识很好的补充. 这里以Design Com

《软件形式规格说明语言-Z》 缪淮扣 学习笔记 10-12

<软件形式规格说明语言-Z> 缪淮扣 第一章  绪论 1.1 软件生命周期:  需求分析与规格说明 设计 实现 测试 交付与维护 ——瀑布模型 1.2 软件规格说明的两种抽象:过程抽象.数据抽象.过程抽象描述软件系统要实现的功能,而不是如何实现的具体步骤:数据抽象就是在规格说明中使用集合.关系.映射.序列.包等抽象的数学结构. 为了克服自然语言和程序设计语言描述规格说明的缺陷,人们提出了一种新的软件开发范型,即通过形式化.规范化的数学理论,用描述“做什么”取代“怎么做”. 包含两种技术:形式规

ASIC 前端功能验证等级与对应年薪划分[个人意见] (2011-07-04 15:33:35

下面的讨论转载自eetop,我选取了一些有意义的讨论,加了我的评注. 楼主zhhzhuawei认为 ===================================== 对于ASIC的前端功能验证(不含SOC的IP集成验证): 1. 只会在别人搭建的环境上跑跑用例.       年薪<8W 2. 若还会在别人搭建的环境上构造用例.       年薪<10W 3. 若还会对测试点进行简单的分解,并能利用脚本或高级语言进行简单的编程,搞些自动化.年薪<14W 4. 若自个能独立搭建自动

(转)IC验证概述

验证是确保设计和预定的设计期望一致的过程,设计期望通常是通过设计规范来定义的.对于芯片设计,在不同的阶段可以分为:寄存器传输级(RTL)的功能验证.门级的仿真验证.形式验证以及时序验证.我们通常所说的验证一般是指RTL验证. 验证工作根据设计规范进行,详细的设计规范是RTL编码的依据,也是验证工作的依据.当验证过程发现被测设计(DUT)的响应与验证平台(Testbench)的期望不符时,需要根据设计规范判断是DUT出现错误还是Testbench出现错误,因此完整的.详细的设计规范是验证工作的重要

02-FPGA设计流程介绍——小梅哥FPGA设计思想与验证方法视频教程配套文档

芯航线——普利斯队长精心奉献 课程目标: 1.了解并学会FPGA开发设计的整体流程 2.设计一个二选一选择器并进行功能仿真.时序仿真以及板级验证 实验平台:芯航线FPGA开发板.杜邦线 实验内容: 良好的文件夹设置以及工程管理是一个好的FPGA设计的基础,在学习之初就建立俩良好的习惯,会少走一些弯路.因此我们首先在新建的工程文件夹下面,分别建立如图2-1所示的子文件夹. 图2-1 FPGA工程子文件夹 上图中,prj为工程文件存放目录:rtl为verilog可综合代码存放目录:testbench