存档

文章标签 ‘验证’

芯片设计(IC)中的验证

2011年2月19日 sigma 5 条评论 562,995 views

通俗的讲,芯片设计的验证(Verification)就是验证所设计的逻辑代码是否符合预期的要求,是否符合原来定义好的规范(如对于一个H264解码芯片,就是验证其是否实现了H264 标准中的某部分规范,不一定是全部,因为H264分为很多profile,可能所要求的仅仅是实现某些profile)。

在现在的集成电路的验证中,主要有两种方法,一种是随机验证,另外一种是形式验证(Formal Verification)。随机验证就是通过大量的随机向量来验证测试是否符合要求(通常是将硬件的结果和软件的结果进行比较,或者通过断言比较)。形式验证的主要思想是通过使用形式证明的方式来验证一个设计的功能是否正确。形式验证可以分为三大类:等价性检查(Equivalence Checking)、模型检查(Model Checking)和定理证明(Theory Prover) 。

随着芯片规模的增大,芯片设计中验证需要的时间越来越长,占整个设计周期的比例越来越大。为了提高验证速度,出现个各种自动化的验证语言(如SystemVerilog等)和验证工具(这些验证工具大部分都支持随机验证)和各种验证方法学,如OVM和VMM。

VMM和OVM都是基于SV(SystemVerilog)的硬件验证的方法学,从本质上来讲,VMM和OVM的方法学是一致的,目的都是实现可重用性(reusable)以提高验证的效率。

VMM是由ARM和Synopsys提出的,OVM则是由Mentor和Candence共同提出的。因此使用Synopsys VCS进行仿真也就选择了VMM的验证方法,支持OVM的仿真工具自然就是Mentor和Candence的工具了。

VMM和OVM都是基于SystemVerilog(SV)的验证方法,而SV相对于传统的HDL语言来说,其最大的好处就是引入了面向对象编程的概念(Object Oriented Programming,OOP),OOP的概念基本上是可以跟{封装(Encapsulation)+继承(Inheritance)+多态(Polymorphism)}相等同的,至于封装、继承和多态,如果学过C++的人自然会明白。引入了OOP之后,SV便可以在更高的抽象层次进行仿真和验证。

在2010年,貌似又出现了一个新的验证方法,叫Universal Verification Methodology(UVM),UVM号称集成了两个验证方法的优点,具体可以看http://www.uvmworld.org/overview.php

以上几种验证方法学的基本结构都差不多,可重用的实现的手段都是通过VIP(verification IP)实现的。这些VIP都是EDA工具提供或者单独购买的,通常是一些常见的协议或者标准的IP,如AXI总线IP,USB协议IP。这样的话,倘若设计一个使用了AXI总线作为输入输出接口的部件,通过验证工具检测待测设计AXI总线上的输入输出,并且和SystemVerilog描述的断言进行比较(只需描述里面出AXI总线接口外的行为,不用自己用SystemVerilog描述复杂AXI的行为,直接使用VIP就可以,节省了大量时间)。

并且这些验证方法学和EDA工具现在都提供了对覆盖率的支持,其基本的验证结构如下(其中灰色部分就是验证方法学所提供的支持):

 

芯片设计中验证Verification,确认Validation以及测试Test的区别

2011年2月6日 sigma 2 条评论 50,583 views

上一篇关于测试的文章提到,现代芯片设计中的QA环节有两个,验证Verification和测试Test,事实上,还漏了一个不常见的,其英文为Validation,对应中文经常也翻译为验证,但为了和之前的验证区分,我在此翻译成确认。

对于刚进入芯片设计领域的童鞋,经常被这三个概念迷惑,很难区分,我曾经也是,因此,在这里把我理解的异同点在这里写一下,不一定准确,希望对某些童鞋有用。

验证(Verification),确认(Validation),测试(Test)的最终目的是一样的,都是减少设计中的缺陷,保证设计的质量,可以算是QA的环节(不过貌似现在QA几乎就是指测试了),不同点的是,他们是在不同的层次,由不同的人进行的工作。

验证(Verification)一般是在硅前的rtl设计阶段进行的,一般也是由rtl设计人员负责的。其目的是让设计符合设计者所想的,粒度也比较细,一般前期是分模块的,不同的模块由不同的设计人员进行,后期才会将所有模块连起来联调。由于这时候只有rtl,需要用软件仿真来模拟最终的硬件行为,速度很慢,因此用于验证的向量规模都比较小,即便如此,在整个设计周期中,验证所占的时间也非常可观,对于这一点,作为一个做设计和验证的码农,我深有体会,把rtl写出来,简单,把rtl验证好,那是非常地难。

确认(Validation)是由结构设计者完成的(这是我的理解,不知对否),一般是对设计的功能进行验证,即确认设计能否实现某种功能。其粒度(功能级)较验证(一般为模块级)要粗一些,时间也短一些。

测试(Test)一般是在硅后(Post-silicon)完成的,有专门的测试人员完成,粒度最粗,一般是系统级(其实验证也会在系统级进行,但由于是硅前的,规模非常非常的小)。并且由于已经有了硬件平台,测试速度大大提高,因此规模也比较大,具体的可看之前关于测试的文章

一般来说,芯片设计会有专门的验证(也负责设计)和测试人员,但没有专门的“确认”人员,就像龙芯有验证组和测试组,但没有“确认”组。

比较复杂的芯片,如处理器,验证与测试已经占了整个芯片研发的大部分时间,一般来说,在一款芯片量产前,需要进行几次工程样片的流片,这些流片的主要原因都是测试中发现了缺陷,从而重新修改设计,重新进行验证(一般只验证修改的模块),重新进行测试(一般也是针对之前发现的缺陷,以及因为之前的缺陷无法进行测试的部分)。

无觅相关文章插件,快速提升流量