验证是确保设计和预定的设计期望一致的过程,设计期望通常是通过设计规范来定义的。对于芯片设计,在不同的阶段可以分为:寄存器传输级(RTL)的功能验证、门级的仿真验证、形式验证以及时序验证。我们通常所说的验证一般是指RTL验证。

验证工作根据设计规范进行,详细的设计规范是RTL编码的依据,也是验证工作的依据。当验证过程发现被测设计(DUT)的响应与验证平台(Testbench)的期望不符时,需要根据设计规范判断是DUT出现错误还是Testbench出现错误,因此完整的、详细的设计规范是验证工作的重要起点。 当验证工程师拿到设计规范后,就可以开展验证工作了,验证工作可以分成三个阶段:计划阶段,实施阶段和分析总结阶段。

计划阶段主要工作是充分理解设计规范,根据设计规范提取验证需求和编写验证计划。验证计划中,需要提取验证需求,制定验证策略,确定验证语言和验证方法学,验证方法,验证平台的层次和架构,规划测试用例及结果检查机制等等。总之后续验证工作中需要的事物都可以在验证计划中体现出来。对于一个被测设计而言,验证的目的是确保该设计能成功的完成预期的任务,准确的表达设计规范,除了理解设计规范的细节之外,还需要明确预定功能的设计边界。比如我们在测试一个MP3产品时,不能测试是否可以打电话,但一般要测试广播功能,也就是说边界之外的功能是不用去关心的。

实施阶段是根据验证计划来编码实现验证DUT的过程,主要包括搭建验证平台,创建测试用例,开发仿真及统计分析脚本,用例的运行及调试。验证平台主要用于产生激励,把激励施加到DUT上去,捕捉响应并进行正确性检查。同时还会对平台代码的层次化、重用性、功能覆盖率、代码的仿真性能和自动化方面做一些考量。验证一般使用专有的硬件验证语言(HVL),并使用验证方法学建立一个可升级、可预期、可重用的验证环境。当前主流的验证方法有基于Specman E语言的eRM, 基于Systemverilog语言的VMM、OVM与UVM,尤其以UVM最为主流,它们都涵盖了多种先进的验证技术。既能提升现有验证方法,也能充分利用验证过程自动化,功能覆盖,断言这些特点建立一个全面通用验证环境。验证过程中需要使用脚本运行仿真,进行结果检查,数据收集及分析,帮助调试并debug,通常使用Makefile、shell、perl、python、TCL等脚本语言。而前端仿真工具一般使用Mentor的Questsim,Synopsys的VCS以及Cadence的IUS,每家工具都有各自的特点,使用其中任意一种都可以很好的完成验证仿真工作。

分析总结阶段包括回归测试、覆盖率分析及输出验证报告。覆盖率测量数据有两方面重要作用:一方面能明确指出设计中还没有被充分验证到的部分,确定验证过程的漏洞。并通过补充特定的直接测试用例,或改变带约束的随机测试用例的参数来提高验证的充分性。另一方面,覆盖率测量数据是验证已经足够充分,可进行流片的指示器。覆盖率分为两大类:代码覆盖率和功能覆盖率。代码覆盖率包括多种形式(行覆盖,翻转覆盖,条件覆盖,状态机覆盖,表达式覆盖等),它是一个自动化过程,仿真工具可以自动收集并输出报告。在一个特定仿真运行中,覆盖率可以体现所有 RTL设计描述代码是否被执行。代码覆盖率是必要条件,但不是充分条件。功能覆盖率则提供了一个外在度量方法,确定设计规范功能点有多少被正确实现。覆盖率测量数据达到指标后,可以表示RTL验证工作告一段落。最后,需要把验证结果、覆盖率数据,以及覆盖率分析结果输出到验证报告并存档,验证报告还应包含整个验证过程中遇到的问题及解决方案等。

RTL验证结束后,有的还需要进行后端网表验证及辅助芯片测试等工作。总之,对RTL验证来说,难点在于如何能够产生所有可能的输入施加到DUT上,并确定DUT输出正确与否。这就要求验证工程师不断深入理解设计规范并转化为有效的测试用例,尽可能的提早发现设计缺陷并修正,使所验证的模块和整个芯片能够100%完成预期的功能。

注:©本文为“E课网”原创,版权归“E课网”所有,欢迎分享!如需转载请回复“转载”。转载时请注明文章作者“E课网”.

作者:kris. IC验证领域专家,从事IC验证工作多年,拥有丰富的验证理论知识和项目实践。芯片设计验证资深讲师,国核自仪企业培训(SVA),多家集成电路研发企业芯片验证顾问

(转)IC验证概述的更多相关文章

  1. Hardware Emulation Platform (硬件仿真平台) 在IC验证中的运用情况如何?

    三个EDA公司都有自己的hardware emulation verification platform: Cadence Palladium, Synopsys ZeBu, Mentor Veloc ...

  2. IC验证概念总结

    一份代码,在写完之后,一定要再经过一次或多次整理和打磨,才能算完成的:一份代码,一定要把其有效代码行,精简.锤炼到最少.最短.最有效,才能算完成的.   下面这些问题和回答是忘记是在哪里看到的了,参考 ...

  3. 入行数字IC验证的一些建议

    0x00 首先,推荐你看两本书,<"胡"说IC菜鸟工程师完美进阶>(pdf版本就行)本书介绍整个流程都有哪些岗位,充分了解IC行业的职业发展方向.<SoC设计方法 ...

  4. 入行数字IC验证后会做些什么?

    半年前,公众号写了第一篇推文<入行数字IC验证的一些建议>,介绍了IC小白可以如何一步一步地摸索入门数字IC验证,同时也在知乎发了这篇入门贴,并且衍生出很多额外基础的内容,收获了不少的浏览 ...

  5. ASP.NET Forms身份验证概述

    表单身份验证允许您使用自己的代码对用户进行身份验证,然后在cookie或页面URL中维护身份验证令牌.表单身份验证通过FormsAuthenticationModule类参与ASP.NET页面生命周期 ...

  6. .Net身份验证概述

    一直以来,所有的系统基本都会有用户的登陆验证过程,整个过程其实也不难理解,就是对于cookie的解析.微软的.Net平台围绕用户身份验证授权也有好几个版本了,从早期的Membership到Identi ...

  7. 移動電源ic的概述

    移動電源ic壹種集供電和充電功能於壹體的便攜式充電器,可以給手機等數碼設備隨時隨地充電或待機供電.壹般由鋰電芯或者幹電池作為儲電單元.區別於產品內部配置的電池,也叫外掛電池.壹般配備多種電源轉接頭, ...

  8. VerilogHDL概述与数字IC设计流程学习笔记

    一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是 ...

  9. 数字IC设计入门书单

    首发于观芯志 写文章     数字IC设计入门书单 Forever snow   1 年前 作者:Forever snow链接:你所在领域的入门书单? - 知乎用户的回答来源:知乎著作权归作者所有,转 ...

随机推荐

  1. S5Time BCD码存储

    ,时基为1秒. 当使用S5TIME时,定义数值的范围为0~999,而且要指明使用的时基.时基指定了时间单位. S5TIME时基及相应的时间范围如下: 时基 BCD码 时间范围 10 ms 00 10 ...

  2. Java与C++程序在编译和运行上的区别

    Java.C++都属于高级语言,而计算机能认识执行的只是机器码(即二进制),所以高级语言都必须经过直接或间接的转换成汇编以后,才能运行: 对于C/C++这类高级计算机语言,它们的编译器(例如Unix下 ...

  3. HBase读延迟的12种优化套路

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  4. 升级owncloud到7.0.2

    owncloud很久没有提示升级了,官网已经升级到7.0.2,访问Update Center依旧显示是最新.估计是有什么问题导致不能自动更新.想着干脆手动升级试试.找到了两个手动升级的文档: 大版本升 ...

  5. HUD 4007 [扫描线][序]

    /* 大连热身B题 不要低头,不要放弃,不要气馁,不要慌张 题意: 坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部. 思路: 按照x先排序,然后确定x在合法 ...

  6. Aop资料整理

    1.Spring AOP 实现机制2 http://cjhz.iteye.com/blog/2245161 http://itindex.net/detail/29812-aop 2.跟我学aspec ...

  7. Partitioning & Archiving tables in SQL Server (Part 1: The basics)

    Reference: http://blogs.msdn.com/b/felixmar/archive/2011/02/14/partitioning-amp-archiving-tables-in- ...

  8. html狂记

    由于承接一部分站点优化工作,竟无节操地好几天没有喂博客,好了,今天完成交接工作,马上奉上DIV+CSS传统开发的干货一枚,内容绝非原创,仅是收集.学习.消化.总结.吐出... 基本结构标签: < ...

  9. Android 调用系统联系人界面的添加联系人,添加已有联系人,编辑和修改。

    一.添加联系人 Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("cont ...

  10. neutron debug

    neutron port-list neutron port-delete neutron floatingip-list neutron floatingip-delete