在集成电路的整个发展史中,验证技术也随着集成电路规模以及复杂度的增加而不断进步,不断推翻之前的验证观念。目前稍微大一点的公司都非常重视集成电路的验证这一重要环节,在有些公司甚至一个设计人员配比两个验证人员。
我们不怕犯错,但我们害怕犯了错后没有正确的渠道和流程发现错误 --- 足见验证在 IC 设计整个流程中的重要性。
这篇文章之所以称之为“IC验证发展简史”,原因有二:其一我本人虽然做过一段时间验证,但并非验证科班出身,深入讲解难免有误人子弟之嫌;其二验证这个题目本来就非常大,不太可能在一篇文章说清楚,后面会分别对我认为比较重要的部分再写一篇。
声明如下:第一、这篇文章的目的还是为了普及基本概念,并非去讲解验证方法学。第二、这篇文章只涵盖数字设计验证的部分,模拟设计验证以及视频电路验证不包含在列。第三,本篇文章只对硬件描述语言出现之后的验证发展史进行说明。
从验证方法学的深度上来看,数字集成电路验证的发展史大致可以分为如下几个阶段:
1. 第一阶段:验证的萌芽期。这个阶段虽然有出现硬件描述语言(Verilog/VHDL),但大部分时候硬件描述语言还是为了设计服务的,在验证上面使用的不多。这一阶段主要还是通过看波形来确定设计的正确性,虽然有些工程师开始使用硬件描述语言写一些简单的验证环节,但还没有形成系统的验证理念。
2. 第二阶段:直接验证(direct test):可以说,验证方法学在这个阶段停留的时间是最久的。直接验证典型环境请参见下图,特点如下:
a) 可以透过 parameter 或 define 在 TestBench 里面调用不同的testcase
b) DUT(design under test) 的 input 是 testcase 的 output, DUT 的output 作为 testcase 的 input.
环境中可以自动检测 DUT 输出的正确性,但还没有 package 及 transition 的概念,对比基本上还是基于单笔数据来做的。
3. 第三阶段:基于 SystemVerilog 的直接验证:这一阶段和第二阶段本质上是相同的,但在验证中会使用一些 SystemVerilog的高级语法,如constraint random, enum 数据结构等让验证环境更搞笑更灵活。这一阶段独立存在的时间不长,因为很快会被出现的第四阶段替代。
4. 第四阶段:基于验证平台的验证:这一阶段的开始是百花齐放的,很多家 EDA 公司都提出了自己的验证平台,如 VMM, OVM 等,但目前基本都有统一到了 UVM 上来。据我所知,国内比较大的几家集成电路设计企业都已经把 UVM 作为了当前验证大规模集成电路的重要技术和手段。这一阶段的特点如下:
a) 使用 SystemVerilog 作为验证平台的语言。
b) 平台模块和架构标准化,会使用到很多 UVM 提供的验证单元库。
c) 构建验证平台速度比直接测试要慢,但覆盖率收集和收敛要快很多。
d) 不仅关注代码覆盖率,更会关注功能覆盖率。
e) Assertion(断言技术)大量使用到验证平台上。
从广义定义,验证方法学的广度上来看,如下几个方法作为 EDA 验证的补充也在不断发展完善。
1. FPGA 验证
2. 硬件加速器验证
3. 形式验证(LEC)
4. RTL Checker 验证
5. 静态时序分析
因为这部分和大部分验证人员关系不大,这里就暂不展开进行说明。
验证技术是随着集成电路的规模和复杂度不断进步的,而且在技术的深度和广度方面都同时在发展。目前市场上对验证人员尤其是高级验证人员的缺口还是很大,但验证人员只有时时刻刻关注验证新技术,才能不被验证技术发展的洪流淘汰,才能在集成电路验证的道路上走得更好,走得更远。