验证是确保设计和预定的设计期望一致的过程,设计期望通常是通过设计规范来定义的。对于芯片设计,在不同的阶段可以分为:寄存器传输级(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),多家集成电路研发企业芯片验证顾问