而所有的这些工作,都需要芯片设计工程师在流片之前都设计好。测试工作在芯片内是由专属电路负责的,这部分电路的搭建由DFT工程师来做,在流片后,DFT工程师还要生成配套输入矢量,一般会生成几万个。这些矢量是否能够正常的检测芯片的功能,需要产品开发工程师来保证。此外还需要测试工程师,产品工程师,和助手来一同保证每天能够完成几万片芯片的生产任务不会因为测试逻辑bug而延迟。
考虑到每一次测试版本迭代都是几十万行的代码,保证代码不能出错。需要涉及上百人的测试工程师协同工作,这还不算流水线技工,因此测试是费时费力的工作。实际上,很多大公司芯片的测试成本已经接近研发成本。
1、为什么要进行芯片测试?
芯片复杂度越来越高,为了保证出厂的芯片没有问题,需要在出厂前进行测试以确保功能完整性等。而芯片作为一个大规模生产的东西,大规模自动化测试是唯一的解决办法,靠人工或者说benchtest是没法完成这样的任务的。
2、芯片测试在什么环节进行?
芯片测试实际上是一个比较大的范畴,一般是从测试的对象上分为wafertest和finaltest,对象分别是尚未进行封装的芯片,和已经封装好的芯片。为啥要分两段?简单的说,因为封装也是有cost的,为了尽可能的节约成本,可能会在芯片封装前,先进行一部分的测试,以排除掉一些坏掉的芯片。而为了保证出厂的芯片都是没问题的,finaltest也即FT测试是最后的一道拦截,也是必须的环节。
3、怎么样进行芯片测试?
这需要专业的ATE也即automaTIctestequipment。以finaltest为例,首先根据芯片的类型,比如automoTIve,MixedSignal,memory等不同类型,选择适合的ATE机台。在此基础上,根据芯片的测试需求,(可能有专门的testspecificaTIon的文档,或者干脆让测试工程师根据datasheet来设计testspec),做一个完整的testplan。在此基础上,设计一个外围电路loadboard,一般我们称之为DIBorPIBorHIB,以连接ATE机台的instrument和芯片本身。同时,需要进行test程序开发,根据每一个测试项,进行编程,操控instrument连接到芯片的引脚,给予特定的激励条件,然后去捕捉芯片引脚的反应,例如给一个电信号,可以是特定的电流,电压,或者是一个电压波形,然后捕捉其反应。根据结果,判定这一个测试项是pass或者fail。在一系列的测试项结束以后,芯片是好还是不好,就有结果了。好的芯片会放到特定的地方,不好的根据fail的测试类型分别放到不同的地方。
所以楼主的问题里,对于各种功能的测试,确实可能需要一行一行写代码来做测试开发,这也是我日常工作的一大部分。
芯片fail可以是下面几个方面:
1.功能fail,某个功能点点没有实现,这往往是设计上导致的,通常是在设计阶段前仿真来对功能进行验证来保证,所以通常设计一块芯片,仿真验证会占用大约80%的时间
2.性能fail,某个性能指标要求没有过关,比如2G的cpu只能跑到1.5G,数模转换器在要求的转换速度和带宽的条件下有效位数enob要达到12位,却只有10位,以及lna的noise figure指标不达标等等。这种问题通常是由两方面的问题导致的,一个是前期在设计系统时就没做足余量,一个就是物理实现版图太烂。这类问题通常是用后仿真来进行验证的。
3.生产导致的fail。这个问题出现的原因就要提到单晶硅的生产了。学过半导体物理的都知道单晶硅是规整的面心立方结构,它有好几个晶向,通常我们生长单晶是是按照111晶向进行提拉生长。但是由于各种外界因素,比如温度,提拉速度,以及量子力学的各种随机性,导致生长过程中会出现错位,这个就称为缺陷。缺陷产生还有一个原因就是离子注入导致的,即使退火也未能校正过来的非规整结构。这些存在于半导体中的问题,会导致器件的失效,进而影响整个芯片。所以为了在生产后能够揪出失效或者半失效的芯片,就会在设计时加入专门的测试电路,比如模拟里面的testmux,数字里面的scan chain(测逻辑),mbist(测存储),boundry scan(测io及binding),来保证交付到客户手上的都是ok的芯片。而那些失效或半失效的产品要么废弃,要么进行阉割后以低端产品卖出。这个就叫做dft测试。通常dft测试会按照需求在封装前或封装后进行测试,工厂里有专门的ate测试机台,用探针来连接测试的io进行dft测试。通常dft测试不会测试功能,因为这货是按时间收钱的..测试用例越简洁有效越好。而且用例太复杂,会影响出货速度,比如出100w的货,一块芯片测试一秒,单dft测试24小时不停就要11天多。