(转)IC验证概述
验证是确保设计和预定的设计期望一致的过程,设计期望通常是通过设计规范来定义的。对于芯片设计,在不同的阶段可以分为:寄存器传输级(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验证概述的更多相关文章
- Hardware Emulation Platform (硬件仿真平台) 在IC验证中的运用情况如何?
		
三个EDA公司都有自己的hardware emulation verification platform: Cadence Palladium, Synopsys ZeBu, Mentor Veloc ...
 - IC验证概念总结
		
一份代码,在写完之后,一定要再经过一次或多次整理和打磨,才能算完成的:一份代码,一定要把其有效代码行,精简.锤炼到最少.最短.最有效,才能算完成的. 下面这些问题和回答是忘记是在哪里看到的了,参考 ...
 - 入行数字IC验证的一些建议
		
0x00 首先,推荐你看两本书,<"胡"说IC菜鸟工程师完美进阶>(pdf版本就行)本书介绍整个流程都有哪些岗位,充分了解IC行业的职业发展方向.<SoC设计方法 ...
 - 入行数字IC验证后会做些什么?
		
半年前,公众号写了第一篇推文<入行数字IC验证的一些建议>,介绍了IC小白可以如何一步一步地摸索入门数字IC验证,同时也在知乎发了这篇入门贴,并且衍生出很多额外基础的内容,收获了不少的浏览 ...
 - ASP.NET Forms身份验证概述
		
表单身份验证允许您使用自己的代码对用户进行身份验证,然后在cookie或页面URL中维护身份验证令牌.表单身份验证通过FormsAuthenticationModule类参与ASP.NET页面生命周期 ...
 - .Net身份验证概述
		
一直以来,所有的系统基本都会有用户的登陆验证过程,整个过程其实也不难理解,就是对于cookie的解析.微软的.Net平台围绕用户身份验证授权也有好几个版本了,从早期的Membership到Identi ...
 - 移動電源ic的概述
		
移動電源ic壹種集供電和充電功能於壹體的便攜式充電器,可以給手機等數碼設備隨時隨地充電或待機供電.壹般由鋰電芯或者幹電池作為儲電單元.區別於產品內部配置的電池,也叫外掛電池.壹般配備多種電源轉接頭, ...
 - VerilogHDL概述与数字IC设计流程学习笔记
		
一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是 ...
 - 数字IC设计入门书单
		
首发于观芯志 写文章 数字IC设计入门书单 Forever snow 1 年前 作者:Forever snow链接:你所在领域的入门书单? - 知乎用户的回答来源:知乎著作权归作者所有,转 ...
 
随机推荐
- C++的隐式类型转换与转换操作符
			
C++标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象(创建临时对象).如果这种转换代价很大(调用类的构造函数),隐式转换将影响性能.隐式转换的发生条件:函数调用中, ...
 - git学习1:git安装和配置
			
Git是什么?世界上最先进的分布式版本控制系统,记录了一个文本文件的每次一修改信息,比如,一篇散文,从草稿到最终出版,经历过无数次修改,修改了标点符号形成一个版本,老师帮助修改形成一个版本,同学帮忙修 ...
 - 网页制作过程中div定位的三个问题
			
这几天要做单位的网站,对于做网站我也不怎么样,于是我便在网上参考了一个比较满意的网站,套一下来把这个工作结束了.在此期间遇到了三个关于div定位问题, 一般网站用div布局时都是从上到下分head . ...
 - Bash Shell 获取进程 PID
			
转载地址:http://weyo.me/pages/techs/linux-get-pid/ 导读 Linux 的交互式 Shell 与 Shell 脚本存在一定的差异,主要是由于后者存在一个独立的运 ...
 - Button--防止button多次点击
			
================================= //代码2 public abstract class NoDoubleClickListener implements OnCli ...
 - Bugtags 实时跟踪插件 - BugtagsInsta
			
BugtagsInsta 是 Bugtags SDK 的官方插件,应用集成成功后,可以在 Bugtags 云端管理平台实时查看应用的运行时数据:操作步骤.用户数据.控制台日志.Bugtags 日志.网 ...
 - 路由跟踪语法:tracert  www.love125.com
			
tracert www.love125.com 路由跟踪语法
 - SSH配置免密码登陆
			
1.使用SSH-keygen,然后一路回车使之生成id_rsa何id_rsa.pub文件,id_rsa.pub为公匙文件. 2.使用命令:cat ~/.ssh/id_rsa.pub >> ...
 - LAMP_01_Win下安装配置MySql
			
1.解压Mysql server到D盘配置环境变量MYSQL_HOME D:\J2EE\apache-ant-1.9.7PATH %MYSQL_HOME%\bin; 2 ...
 - vs2012中添加lib,.h文件方法(原)
			
项目.属性.C/C++.附加包含目录:填写附加头文件(*.h)所在目录 分号间隔多项项目.属性.链接器.附加库目录:填写附加依赖库(*.lib)所在目录 分号间隔多项项目.属性.链接器(点前面的+展开 ...