板子焊得漂漂亮亮,我却连门都找不到——聊聊测试性设计
板子回来了。六层,绿油油,焊得挺漂亮,BGA 排得整整齐齐。我拿着原理图和飞针程序在实验室坐了一下午,收工时把探针放回盒子里,承认一件事:这块板子,我测不了。
不是不想测。是没地方下针。
0402 的小电容全挤在 BGA 边上,过孔塞了油,关键的复位、时钟、电源好这几路信号藏在两颗芯片中间的走线上,外面一层接地铜皮盖得死死的。想测?先拆。拆完再焊回去,那块板子还是不是原来那块,谁心里都没底。
那次之后我落下个毛病——画原理图的时候会突然停下来,问自己一句:这个信号要是坏了,我怎么知道?
测试性设计,说到底就管两件事
能把一个节点拉高或者拉低,这叫可控性。能把一个节点上的电平读出来,这叫可观测性。听着简单吧?可绝大多数测不动的板子,问题都出在这两条上。
所有测试手段——飞针、针床、边界扫描、片上自测试,甚至你拿万用表去戳——拆开看,都是在做这两件事的组合。给输入,看输出。中间那个黑盒子,你只能靠这两根绳子把它拽出来。
搞装修的人懂这个道理。水管埋墙里最好看,可一旦漏了,你得砸墙。所以靠谱的水电师傅会留检修口,会在弯头那儿多留一段,会在图纸上标清楚哪根管子通哪儿。他大概没听过测试性设计这个词,可干的活一模一样。
电路板飞针测试探针接触焊盘实拍
为什么现在的板子越来越测不动
不是我们退步了。是球越做越小,脚越做越多,信号越跑越快。
针床要接触焊盘,就得在焊盘上留出位置,还得扛住探针压下来的机械力。可当你把 0201 的元件贴到 0.4 毫米间距的焊球旁边,位置从哪来?更别说高速差分对——你往上加一个测试点,等于在传输线上挂了个小电容,回波损耗立刻变脸。测得准和信号好,这两件事在物理上就在打架。
芯片那边更极端。一颗 SoC 里面几百万个触发器,外面露出来的引脚就几百根。你怎么用几百根引脚去看几百万个点的状态?
答案是:不看。让它自己走。
这就是扫描链的思路。测试模式下,把电路里那些触发器串起来,串成一条长长的移位寄存器。数据从一根引脚灌进去,每个时钟往前挪一格,绕一大圈再从另一根引脚出来。芯片内部那些平时看不见的节点,被一根一根推到了引脚上。用时间换空间。慢。但真的看得见。
板级层面是另一套玩法:边界扫描,也叫 JTAG。每颗支持它的芯片都在引脚上装了一圈小开关,几颗芯片手拉手串成一条链,几根线就能把板上几百个网络的连通性、短路、虚焊过一遍。以前得做一台针床才能干的事,现在一根排线加一台调试器就包了大半。
JTAG边界扫描菊花链拓扑连接示意图
一个真实的坑
一个真实的坑
有个产品,上下电时序上出了鬼。复位释放和某一路电源建立的先后关系没留观测点,出问题的时候只能在 0.4 毫米间距的焊球缝里盲扎探针,扎了两天半,眼睛都快瞎了,还是只能猜。
后来改版,我把那几个中间状态引到一个空闲 GPIO 上,一根走线,一个引脚。出问题的时候读一下电平,二十分钟定位到具体是哪一级跳变晚了。
别误会,我不是来吹这个改动的。我是想说,救命的那个设计,成本大概是一根走线加一个引脚。而它的代价,是两天半的通宵和一批报废的板子。
内建自测试:把考官请进考场
内建自测试:把考官请进考场
存储器 BIST 是最常见的一类。片上自己生成测试图形,自己写进去,自己读出来比对,只吐一个答案:通过,或者不通过。你不需要把几万个存储单元的状态搬出来,你要的只是那个结论。
逻辑 BIST 类似,只不过它对付的是随机逻辑,图形生成、响应压缩,背后一堆算法。模拟电路就麻烦了。模拟量是连续的,噪声、失配、寄生电容都在说话,你很难把坏字说清楚。所以模拟部分到今天还是靠留观测引脚、靠系统级功能测试兜底。这块地方一时半会儿看不到统一解。
厂商为什么愿意花面积、花功耗去做这些?因为钱。晶体管的成本在降,测试的成本不降。这两条线一交叉,测试就从工艺问题变成了经济问题。
还有现场可编程的门阵列,上电自己跑一遍自检,板子还没干活先自己报个平安。这种做法在通信设备里已经很常见了。
几个流传很广的误解
几个流传很广的误解
一个是把它当成测试部门的事。可测试性是在原理图和版图阶段定下来的,测试工程师拿到板子的时候能改的东西已经很少。他只能告诉你哪里测不了,改不了。
另一个是觉得测试点越多越好。不是。测试点本身是寄生,是阻抗不连续。有些位置加了,反而把信号完整性搞垮,测试全过,产品到客户手里出问题。这笔账不好算。
还有覆盖率崇拜。故障覆盖率是个必要但不充分的东西。卡在某个数字上很舒服,可剩下那一点没覆盖的,往往就是真要命的那个。而且覆盖率越高,测试向量越长,台机时间越长——那是实打实烧掉的钱。
边界也得说清楚。测试性设计让问题暴露得更快,它不解决设计本身的隐患。间歇性失效、温度漂移、长期老化,这些它管不了。测试逻辑自己也会失效;扫描链会把时序路径重新拼一遍,可能带出新的时序问题;测试模式下的翻转率还特别高,功耗能到功能模式的好几倍,散热没跟上,测着测着片子就烫了。
所以它不是银弹。它更像给房子装的烟感——不能防火,但至少能让火在烧穿楼板之前响一声。
什么算够用?我的土办法是:关键状态能被读出来,关键输入能被强行置住,两条都满足,剩下的靠功能测试兜。不追满分,追够用。
画原理图的时候,多问一句:这个信号要是死了,我从哪儿知道?
问得多了,你会发现要改的地方其实不多。一两根走线,一两个空闲引脚,一个能读出状态的寄存器位。成本小得让你不好意思。
可它换回来的,可能是又一个没关空调的梅雨夜。