FPGA验证学习(四):SoC的验证与测试

前言

验证和测试是两个不同的概念。

前面的三篇嘞,咱们对整个开发的流程有了个了解,这里就来看看验证与测试,芯片这个东西流片一次可太贵了,所以一次芯片的开发流程有超级多的时间都花在了验证上。

1-验证

一般验证是指检验电路的逻辑、功能、时序等是否满足设计者在设计前提出的要求,功能是否完善,时序是否满足

验证的内容一般是面向功能性的。验证是设计过程中的第一道关卡,如果验证没有通过就没有办法进行后面的工作。目前常做的验证一般采用仿真的技术进行,通过计算机建立仿真环境,给被测电路加激励,分析响应或者检查电路内部的所有信息。按设计的不同阶段可以分为行为级仿真、门级仿真、后仿真。(因为每个设计阶段都会设计到仿真与验证,这个其实和软件设计一样,问题发现的时间越晚越危险!!!)

2-测试

测试是设计过程中验证工作的继续,它实际上是对现实芯片的验证,为最终的半导体产品的质量和可靠性提供一种量度。

一个合格的半导体产品一般要进行两次测试。

  • 一次是晶圆片测试(Wafer Test),即制造好的晶圆片需要进行严格的测试,只有通过测试的裸片(Die)才会被划片、封装。
  • 另一次是产品测试(Production Test),即通过晶圆片测试和封装的芯片必须进一步进行测试以确认没有故障才能成为真正的半导体产品。

测试实际上是指将一定的激励信号加载到被测电路(CUT)的输入引脚,然后在它的输出引脚检测响应,并将检测到的电路响应与期望响应进行比较,以判断电路是否存在故障。

1 SoC的验证

验证和测试这个词语我想也不用刻意去纠结。(毕竟FPGA原型验证他们都说的是FPGA测试,还骂这个方向拉胯~~~慌张)

从工业实践来看,SoC产业可以分为两块:IP提供者和SoC集成者。IP提供者(IP Provider)负责设计和验证IP,而SoC集成者(SoC Integrator)需要从IP提供者手中购买IP,然后将它们集成起来形成一个完整的系统。

因此,SoC的验证也分为IP单独验证和SoC集成验证两步。从阶段划分上说,SoC验证可以分为功能验证、等价性验证、静态时序分析、动态时序分析和版图验证等几个主要阶段,如图9-9所示。

在这里插入图片描述

扫描二维码关注公众号,回复: 14599840 查看本文章

布局布线(Place&Route)

1.IP单独验证

IP单独验证是指单个IP的验证,可以是独立的单个IP的验证,也可以是在SoC中对单个IP的验证,为IP单独验证而建立的验证环境称为IP单独验证平台(IP Standalone Verification Platform)。

SoC设计的关键是IP的复用。复用技术不仅仅可以用于电路设计中,还可以用于验证中。验证的复用不仅仅包括测试文件的复用,也包括测试向量的复用,还包括验证工具和验证脚本的复用。

为了复用而设计出IP的验证面临着以下一些问题:

  • ① 验证的目标是零缺陷。因为IP可能被用于任何地方,从一个简单的计算机游戏到某一具有关键任务的太空应用系统。
  • ② 在lP的所有合理配置和所有合理参数取值下,都必须做到零缺陷。
  • ③ IP单独验证平台一定要能够被SoC集成人员部分复用或全部复用,因为作为独立设计的IP需要验证,被集成到SoC后的IP也必须得到验证。
  • ④ 由于IP可能在将来被重新设计,所以IP单独验证平台一定要能够被其他的设计者复用。
  • ⑤ 由于验证平台中的部分元件可能在SoC集成验证时使用,所以IP单独验证平台必须与SoC集成验证时所使用的验证工具相同或兼容。

2.SoC集成验证

SoC集成验证是指对整个SoC进行的整个芯片的验证,为此而建立的验证环境就称为SoC集成验证平台(SoC Integration Verification Platfom)。

SoC集成验证是SoC设计中最困难、最重要的环节,它是在流片前发现概念、功能、实现上有错的最后机会。由于SoC设计中使用的是经过预设计、预验证的IP核,因此SoC集成验证的目标放在IP接口和IP互连上。

(1)验证访问(Verification Access)

由于IP最终要被嵌入到SoC中,这样IP的输入/输出端口一般无法像独立器件那样可以直接访问,加之IP的输入/输出端口数目通常要远大于SoC的输入/输出引脚,因此全都通过SoC输入/输出引脚来访问IP输入/输出端口的方法是不可行的。

通常一个SoC需要一种访问机制来传送各IP验证数据。良好的SoC验证访问机制就是要将验证激励从SoC的输入端口传送到IP的输入端口上,并将IP输出的验证响应传送到SoC的输出端口上。

(2)验证控制(Verification Control)

验证控制就是指在芯片验证过程中,当要验证某一个IP时,就激活该IP处于验证状态,而当验证完成后将该IP处于验证复位状态。当完成整个SoC验证时,要将所有IP置于正常的功能模式。

在今天的SoC中,片上复用的IP可能达到了几十个之多。这么多的IP不可能同时验证,而要分批进行验证。这就需要一种验证控制策略来控制片上IP的验证。最简单的验证控制策略就是一次验证一个IP,但事实上这种策略显然是最不经济的。我们完全可以将几个较小的IP组织在一起同时验证,从而减少SoC总的验证时间,降低芯片成本。因此就需要有相应的验证控制逻辑实现对片上IP进行验证控制。

(3)验证向量(Vector)集成

验证向量集成是指将各个IP模块的验证向量集成在一起形成整个SoC的验证程序的过程。由于真正的验证设备的存储器容量是有限的,因此要求芯片的验证程序就不能是各IP验证向量的简单叠加,而应该进行向量压缩以达到用尽量少的验证向量验证出尽量多的故障的目的。但过度的向量压缩会带来更大的芯片验证功耗,因此应在向量压缩和验证功耗之间进行权衡。
(测试向量就是用来测试模块的激励信号.模块编好了以后,用一系列的激励信号作为输入,然后查看模块的输出信号是否正确,来验证模块是否正确.)

3.FPGA验证

随着半导体制造技术不断的前进和相应的设计规模及复杂度飞速的增长,使得传统的软件仿真工具已不可能完全解决功能验证的问题。而且一些需要处理大量实时数据的应用(如视频)也越来越多,因此要求能够在接近实时的条件下进行功能验证,而近几年FPGA的飞速发展为其提供了可能。

FPGA验证成为SoC设计流程中重要的一个环节,

  • 一方面作为硬件验证工具,可以将所设计的RTL级代码综合实现后写入FPGA芯片进行调试检错
  • 另一方面可以进行软件部分的并行开发,在验证板上检测驱动程序、启动操作系统。

FPGA验证的流程相当于一个FPGA设计的主要流程,它主要分为

  • 设计输入、
  • 综合、
  • 功能仿真(前仿真)、
  • 实现、
  • 时序仿真(后仿真)、
  • 配置下载、
  • 下载后板级调试检错

这几个步骤。

总的来说,FPGA验证是整个SoC设计中一个重要而且有效的验证步骤,用来改进RTL级设计代码,验证功能的正确和完整性,提高SoC流片成功率。

2 SoC的测试

1.测试的基本概念

一个电路设计通过验证后可以拿到工厂去制造,但并不可能百分之百正确地制造出来,总会受到种种不确定性因素的影响,比如机器的偏差、环境干扰、硅基片的质量不一致,甚至一些人为失误等方面的影响,生产出的产品并不全都是完美的。如果芯片存在故障,这样的芯片是绝对不允许流入市场的。那么如何检验出有制造缺陷的芯片就属于测试的范畴。在超深亚微米阶段,线宽非常精细,工序数量多,更加容易受到干扰的影响,制造故障变得尤其明显。所以必须加大测试的力度,尽可能减少次品流入市场的概率。

(1)硅片测试

集成电路在生产过程中主要有两次测试:硅片测试和封装测试。

1-硅片测试

第一次测试常常是在硅片加工完成后,测试仪通过探针压到芯片的焊盘(Bonding Pad)上,这叫做Wafer Probe Test,这样的方法一般只做非常简单的测试,比如电气连通性、电流测试和一些专门为工艺调试的电路参数测试等。

如果结果与预计的相同则为合格,否则判定为测试失败,在失败芯片上打上标记,往后就不做这些故障芯片的封装和后续加工。另外,Wafer Probe Test也做一些工艺参数的测试,比如开启电压、多晶硅电容电阻、掺杂区的各种参数、每层金属的参数等,每一批次的产品它的工艺参数和分布特性也是生产厂家需要提供的规范数据。

2-封装测试

第二次测试是在封装完成后,测试仪通过测试程序完成对芯片的最后测试,这一次的测试一般要求更加严格,要尽可能地检测出有故障的芯片。这一步一般也叫做成测,即成品测试。

芯片的成品测试的内容不光是检测故障,还有许多方面需要测试,如功耗、电流、可靠性、工作频率、能够工作的环境温度等。

在某些领域比如CPU或DSP,还需要做speed binning测试,就是测试出芯片能够运行的最高工作频率,在一批产品中,将不同工作频率的芯片分批标号,高速的芯片自然可以卖到高的价格以增加利润。

另外还有一种测试是寿命测试,设置芯片工作在全速或正常运行状态,持续很长时间,直到达到预期设计寿命或芯片失效。寿命测试常用在EEPROM、Flash RAM之类的芯片领域。其他测试还有强度测试、严酷环境测试、抗电磁干扰测试、震动测试等。

如果检测出芯片有故障,不能通过测试,则需要根据具体情况需要,根据具体问题情况进行故障分析或失效分析,一般来说故障分析会占用大量的人力、物力和时间,所以一般只是在非常必要的情况下才去做。

对于代工工厂来说,一些基本的工艺参数如果与预期不一致,则必须做分析,并且要调整生产线,直到工艺稳定,总体偏差越小越好。

对于设计者来说,实验性的芯片如果有故障,可以多花时间精力进行详细的调试和分析,找到问题所在,修改设计直到正确无误。

如果已经是设计无误的量产的芯片,并且测试系统也是正确的,一旦某块芯片通不过测试,这种情况下是没有足够的时间去分析单块芯片故障的,就只能简单地将故障芯片丢弃掉。

当芯片通过测试出厂了,用户得到芯片之后,将芯片安装到印刷电路(PCB)上,再对PCB进行测试。这时如果发现问题,就需要复杂的诊断过程和人工分析,花费很大的精力才能找到问题。如果是集成电路的问题,就需要将坏的集成电路拆卸下来,将替换的集成电路安装上去。在现代工艺中,很多大规模集成电路的封装往往是BGA(球形网状排列,封装形式的芯片),手工拆卸几乎不可能,需要专门的仪器。

所以,集成电路如果在PCB阶段才测试出问题,则对生产的影响大大高于芯片测试阶段。对于复杂的设备,如果在整机阶段才发现是集成电路芯片的问题,其影响更是巨大。因此,集成电路生产时的测试具有很重要的意义,尽早地发现有故障的芯片就能尽可能大地减少后期的返工代价。

2.SoC芯片对测试的要求

芯片的测试与单功能芯片的测试目的是相同的,都是为了检测出有制造故障的芯片。对设计人员和测试人员所提出的挑战是尽量用少的测试成本达到高的测试覆盖率。这里分析一下SoC芯片测试所遇到的挑战。

随着芯片越来越复杂,频率越来越高,测试大规模的芯片就需要更高级的测试仪,而高级测试仪的成本增长是非常迅速的,如果测试仪的探头引脚数增长一倍的话,其内存容量要增长数倍,系统带宽也增长数倍,控制器变得更加复杂,测试仪的价格就极大地增高了,所以提高了测试成本,间接提高了单芯片的总体成本。

SoC测试的成本昂贵体现在以下方面:

  • ● 芯片的规模增长极快,门数与引脚数之比急速攀升,这样就限制了测试对芯片内部的访问;
  • ● 芯片的速度更快,包括芯片内部逻辑和高速I/O;
  • ● 更多的模拟电路;
  • ● 大多数的故障是与速度有关的,不全是固定型故障类型;
  • ● 需要更长的测试时间、更多的测试引脚。

3.SoC测试技术

目前SoC测试领域为提高测试效率,减少测试成本,往往在设计阶段引入多种结构化DFT(Design For Test,可测试性设计)技术,目前采用最广泛的方法是BIST(Built-in SelfTest,内建自测试)技术和扫描设计技术。

内建自测试技术(BIST)的基本思想是利用芯片本身所带有的TPG(Test Pattern Generator,测试生成器),在芯片上直接生成测试矢量,以降低对ATE(Automatic Test Equipment,自动测试仪)的需求。

常采用的TPG有基于LFSR(Linear Feedback Shift Register,线性反馈移位寄存器)的TPG和基于CA(Cellular Automata,细胞自动机)的TPG等方案。

扫描设计的主要思想是要获得对触发器的控制和可观测性。通过对电路增加一个测试模式,使得当电路处于此模式时所有触发器在功能上构成一个或多个移位寄存器来实现的。

这些移位寄存器(也称为扫描寄存器)的输入与输出可以变成原始输入与原始输出。这样,利用这个测试模式,通过将逻辑状态移位到移位寄存器中的方法,可以把所有的触发器设置成任意需要的状态。类似地,可以通过将扫描寄存器的内容移位出来的方法观察触发器的状态。

4.单个芯片的测试成本的计算

  • ● 测试成本:(固定成本十浮动成本)/(测试产量×成品率×时间有效率);
  • ● 固定成本:测试仪器使用年限内折旧费用、厂房投资、电力供应等;
  • ● 浮动成本:劳动力、管理、维护、技术支持、消耗品供应等;
  • ● 测试产量:要测试的总芯片数量;
  • ● 成品率:无故障的芯片占总产量的比例;

时间有效率:测试仪满负荷工作时间占总使用测试仪的时间比例。

由分析测试成本的计算公式可以知道,减少测试成本的方法有如下两种:减少分子和增大分母。固定成本占分子的很大部分,同时越是复杂的芯片就需要越高级的测试仪器,这样的测试仪器极其昂贵,一般公司难以负担,只有采用租用的方式。

减少浮动成本,这种方法对测试成本的提高贡献不大。测试产量是与流片产量对应的,没有订单是不会轻易增加产量的。增加成品率不仅可以减少测试成本,还是提高芯片总体成本最直接的方法,但是这与工艺是密切相关的。

所以,减少对高端测试仪的依赖性,使用中低端的测试仪来测试是减少测试成本的有效方法。SoC芯片内部包含的模块众多,规模的增长速度非常快,但是其输入/输出数量却并没有随着规模增长按比例增多,所以可供测试的端口就更少了,再加上大量采用IP,就更加难以测试。

从PCB板级系统到SoC系统,虽然系统的功能可以粗略地认为是相同的,但是从测试的角度来看,已经发生了巨大的变化。PCB系统所用到的单个芯片由芯片供应者提供,并都经过单独测试,系统集成商采购芯片回来将它集成为PCB系统再继续测试。但是SoC芯片不同,芯片内部的模块开发完之后供应给芯片集成者,然后集成者进行整个芯片的生产和测试,芯片生产之后供给整机厂商。所以PCB系统中用到的芯片是经过测试了的,而其对应到SoC芯片中是其中的模块,一般只做验证,只有SoC芯片生产之后才对整个芯片进行测试。

对SoC芯片内部模块进行测试是困难的,一般这些模块是一些特定功能的IP核,比如DSP、CPU、RAM等。这些IP核是由专门的供应商提供或者公司内部开发的,这些单独测试由供应者来完成。按照业界惯例,IP核的提供者应该同时开发测试方案,如果IP核是以硬核(网表级)提供的,那么也应该同时提供对应的测试向量,这样更容易给SoC集成者提供方便。但是从另一个方面来讲,IP核的供应者一般并不清楚集成者的使用方法和特殊之处,所以很难提供更全面的技术支持。IP提供者和集成者之间的这种矛盾也是阻碍SoC芯片测试发展的一个方面。将来的发展应该是更加规范IP核的供应标准,统一标准和格式更有利于SoC集成者使用这些IP核、缩短芯片的开发周期。

另一个关于SoC芯片内部模块的问题是它的可探测性(Accessibility)不如PCB系统上的芯片。PCB系统上的单个芯片都可以独立被测试,这些芯片对应了SoC芯片内部的模块,在SoC芯片中这些模块很难被直接探查到。所以就必须用一定的设计方法,通过结构的改变或者增加一些额外的电路和连线,在一定程度上提高内部模块的可探测性。比如一种方法是用Wrapper(隔离单元)来把内部IP核包围起来,Wrapper单元的功能是切换内部IP核和与之关联的输入/输出,它能够作为IP核的激励与响应接收单元,也可以作为IP核以外的逻辑的输入和输出单元。Wrapper的这种性质能够用来对芯片内的IP核进行很好的隔离和信号屏蔽。另外的方法是通过结构的改变,使得外部测试仪能够直接或间接地“接触”到IP核,比如在体系结构中增加一种测试总线。

这里必须要说明的是,虽然PCB系统对应于一块SoC芯片,PCB上的独立芯片对应于SoC芯片内部的模块,但是从测试的角度来看,SoC芯片的测试复杂性和难度绝不是PCB系统测试复杂性和难度的简单相加。SoC芯片测试要比PCB系统测试更加复杂、要求更高。一般SoC芯片的测试需要对其内部每一个部分进行测试,如IP核、存储器、胶连逻辑(Glue Logic)、用户自定义逻辑(UDLI)、互连线路等,并且还必须对整个芯片进行测试,相当于SoC芯片既需要做内部模块的测试,还需要做本“系统”的测试。

由于SoC芯片的特殊性,它的测试必须要支持一些新的特性,比如片上测试和支持检测的功能。要做到完善的测试必须要做详尽的测试计划,需要满足一些系统要求,比如测试时间、测试时的功耗、测试向量生成的复杂性和芯片面积增加的开销。如果SoC芯片内部有多个IP核,还需要规划好在调试过程中多个核被测试的先后关系和系统架构。

综上所述,SoC芯片既有和以往单功能芯片测试共同的目的和需要,比如测试覆盖率、总体测试成本、测试周期等,也有与之不同的地方,主要是测试复杂度更高,内部IP核的隐蔽性高导致难于探测。减少测试成本的最有效方法是简化测试方法,采用一般的测试仪来完成对SoC芯片的测试。

看来这个测试真的也是个日积月累的事情!!!

感谢前辈的优秀书籍啊!!!

参考书籍:《32位嵌入式系统与SoC设计导论》

猜你喜欢

转载自blog.csdn.net/weixin_45264425/article/details/129785126