制造一颗芯片为什么那么慢

admin
Sun, 23 Apr 2023 00:38:00 +0000
语音芯片知识点, 新闻资讯

做芯片是一个复杂的系统工程。涉及到了数字、模拟、SRAM、仿真、验证、物理设计，但也还仅限于芯片设计的范畴，并且不包括其它重要的芯片设计工作，比如处理器架构、各种算法的加速、以及比较特殊的射频、固态存储、FPGA等等。站在更高的角度看整个芯片的开发流程，芯片设计仅仅是个开端，后面还有制造、封装、测试、系统、软件、产品等等。那么今天来说下芯片测试的问题。

芯片测试

芯片测试本身就是一个大杂烩。我个人认为它可以分为两大类：出厂前的测试和出厂后的测试（这个“厂”是制造芯片的工厂，或者叫做芯片的代工厂）。前者主要是确保芯片在制造过程中没有产生缺陷（比如金属线没有短路/断路）并且芯片上基本的元件达到了技术指标（比如逻辑门足够快）。后者主要是确保芯片在功能上没有缺陷（比如是否能处理某些特殊情况）并且达到了芯片这一级的各项指标（比如整体功耗、数据传输速度等等）。

芯片的生产是一个流水作业，流水线上的每一个环节都不能太慢。测试设备比较昂贵，每块芯片占用测试设备的时间是决定生产成本的一个重要因素。所以出厂前的测试，需要在尽可能短的时间内能尽可能多地找出有缺陷的芯片，同时还不要轻易丢掉没有缺陷的芯片，这就产生了一门学问，叫Design For Testability（DFT）。

芯片上的晶体管数以十亿计，金属连接更是不计其数，要想在短时间内对它们做个遍历并不是件容易的事。例如处理奇偶校验码异常的电路，在没有发生异常的时候是不工作的。根据我个人的经验，一个复杂的电路，花在验证上的工作量大于设计的工作量，而验证工作又有相当大一部分是做各种异常情况的处理。为验证而做的仿真中，可以通过在testbench中人为制造异常而迅速验证相关电路。然而，当电路设计做到了芯片上，内部节点很难从外部直接控制。

出厂后的测试它们要让芯片跑起来。在这里主要谈谈它们的区别。验证的主要手段是仿真，即让一个虚拟的芯片跑起来，而测试是真刀真枪地把应用跑在芯片上、系统上。仿真所能覆盖的范围通常只是芯片的一部分，其它东西比如外围设备，以及跟外围设备通信的接口电路基本上都是用模型来代替。这些模型是否正确，是否能代表所有的实际情况，常常存在或多或少的不确定性。另外，因为仿真的速度很慢，比较难在仿真中跑一个复杂的实际应用（仿真的速度大概是实际芯片运行速度的百万分之一）

从流片到第一批芯片从fab出来，大概需要几个月的时间。拿到第一批芯片之后，把它们焊上电路板，接上各种外围设备，然后开始系统级的测试。这个时候，以前的仿真中没有出现的问题就可能会曝露出来。修改一次电路板，包括电路板的重新生产，大约几周时间，花费远低于一次芯片流片。当然，这些高速信号的问题，有时候是跟电路板的设计和芯片上接口电路的设计都有关，这又是一个团队合（che）作（pi）的好机会。最后剩下的就是芯片里面的问题了。跑仿真的时候出现了问题，可以比较容易通过检查芯片内部节点的波形来debug。然而在系统测试中，芯片内部的情况大多只能通过读寄存器来debug。

当然，有一些芯片上的bug极其隐蔽，不仅流片之前没有发现，芯片做好之后仍然没有在测试中曝露出来，一直到产品上市之后才被发现。一个著名的案例就是某硅谷大厂曾经召回了存在浮点运算bug的芯片，损失数亿美元。这样的问题足以说明测试工作在芯片开发流程中是多么重要。当一块芯片流片回来，把一个仿真改一改，让它跑在真正的芯片上，之前跑仿真的时候，屏幕上打印的中间结果慢得像蜗牛在爬，而现在是唰唰飞过，快得眼睛不能适应，心中暗暗感叹：多少伟大的公司是通过流片来做仿真….

?