1. DFT概述:什么是可测性设计、为什么需要DFT、DFT在芯片开发流程中的位置、常见的DFT技术概览

1.1 什么是可测性设计?

可测性设计,英文叫 Design for Test,简称 DFT。说白了,就是我们在设计芯片的时候,提前把「测试」这件事考虑进去。

你想想看,一颗芯片流片回来,你怎么知道它能不能用?总不能拿放大镜一个个晶体管去检查吧?所以我们需要一种方法,能快速、高效地判断芯片有没有制造缺陷。

我个人习惯把 DFT 理解为「给芯片装上一套体检系统」。就像人需要定期体检一样,芯片在出厂前也必须经过严格的测试。这套体检系统不是流片后才加的,而是在设计阶段就规划好的。

核心思想: 在芯片内部增加额外的测试电路,让测试人员能够从外部控制芯片内部节点的状态,并能观测到内部节点的响应。

我在项目中遇到过不少新人,他们觉得 DFT 是「额外的工作」,是「浪费面积」。嗯,这种想法其实很危险。没有 DFT 的芯片,就像没有安全带的汽车——平时看着省事,真出了问题就晚了。

1.2 为什么需要DFT?

这个问题其实很直接。一颗芯片从设计到量产,中间要经历晶圆制造、封装、老化测试等多个环节。每个环节都可能引入缺陷。

举个例子,晶圆制造过程中,哪怕是一粒微小的灰尘落在光刻胶上,都可能导致金属线短路或断路。这种缺陷在显微镜下都很难发现,但通过 DFT 测试,几秒钟就能定位。

具体来说,DFT 的必要性体现在这几个方面:

  • 降低测试成本: 自动测试设备(ATE)是按秒计费的。DFT 做得好,测试时间从几秒降到零点几秒,省下的钱可不是小数目。
  • 提高测试覆盖率: 没有 DFT,你可能只能测试芯片的输入输出引脚。有了 DFT,你可以测试芯片内部的每一个寄存器、每一条路径。
  • 加速良率分析: 当芯片良率出现波动时,DFT 数据能帮你快速定位是哪个工艺步骤出了问题。
  • 支持故障诊断: 芯片失效了,DFT 能告诉你「是哪个逻辑门坏了」,而不是让你拿着示波器瞎猜。

我的经验: 曾经有一个项目,因为 DFT 覆盖率不够,导致一批芯片在客户那里频繁失效。我们花了整整两个月才定位到问题——一个很隐蔽的桥接故障。如果当时 DFT 做得更充分,这个故障在量产测试阶段就能被筛掉。

1.3 DFT在芯片开发流程中的位置

DFT 不是独立存在的,它贯穿整个芯片开发流程。我习惯把流程分成这几个阶段:

阶段 DFT相关工作 说明
架构设计 DFT架构规划 确定测试策略、选择DFT技术、规划测试接口
RTL设计 DFT逻辑插入 插入扫描链、BIST控制器、边界扫描等
综合 DFT综合优化 确保DFT逻辑不被优化掉,满足时序约束
物理设计 DFT物理实现 时钟树综合、扫描链重排序、电源规划
测试向量生成 ATPG 自动生成测试向量,评估测试覆盖率
量产测试 ATE测试 将测试向量加载到ATE上,执行实际测试

你看,从架构设计到量产测试,DFT 工程师几乎在每个环节都要参与。我个人建议,DFT 的规划一定要在项目启动时就介入。等到 RTL 都写完了再想 DFT 的事,那就太晚了。

注意: 很多团队把 DFT 放在后端流程里,这是不对的。DFT 应该与前端设计并行推进。我曾经见过一个项目,因为 DFT 规划晚了,导致扫描链插入后时序不收敛,最后不得不重新综合,整个项目延期了三个月。

1.4 常见的DFT技术概览

DFT 技术有很多种,但最常用的就那么几个。我按使用频率给大家介绍一下:

1.4.1 扫描链(Scan Chain)

这是最基础、最核心的 DFT 技术。原理很简单:把芯片里的普通寄存器替换成扫描寄存器,然后把这些扫描寄存器串成一条或几条链。

测试的时候,通过扫描链把测试数据「灌」进去,然后让芯片跑一个时钟周期,再把结果「扫」出来。这样就能检查芯片内部的逻辑是否正确。

// 扫描寄存器的简化Verilog代码
module scan_flipflop (
    input  clk,
    input  si,      // 扫描输入
    input  se,      // 扫描使能
    input  d,       // 正常数据输入
    output so       // 扫描输出
);
    reg q;
    always @(posedge clk) begin
        if (se)
            q <= si;  // 扫描模式
        else
            q <= d;   // 正常模式
    end
    assign so = q;
endmodule

我在项目中遇到过最头疼的问题就是扫描链的时序。扫描链太长,测试时间就长;扫描链太短,又需要更多的测试引脚。这个平衡需要根据芯片的规模和测试成本来权衡。

1.4.2 内建自测试(BIST)

BIST 就是让芯片自己测试自己。主要用在存储器测试上,比如 SRAM、ROM 等。

BIST 控制器会生成测试模式,写入存储器,然后读出来比较。如果发现不一致,就报告故障。

为什么存储器要用 BIST?因为存储器的单元太多了,如果用扫描链去测,测试向量会大到无法想象。BIST 可以在芯片内部高速运行,测试效率极高。

1.4.3 边界扫描(Boundary Scan)

这个技术主要用于 PCB 级的测试。它遵循 IEEE 1149.1 标准,也就是我们常说的 JTAG。

边界扫描在芯片的每个 I/O 引脚上都加一个边界扫描单元,这些单元串成一条链。通过 JTAG 接口,你可以控制每个引脚的状态,也可以读取每个引脚的值。

说白了,边界扫描就是给芯片的「手脚」装上了传感器。板级调试的时候,这个功能特别有用。

1.4.4 其他DFT技术

  • 测试点插入: 在逻辑覆盖率不够的地方,手动插入观测点或控制点。
  • 压缩技术: 减少测试数据量,降低测试时间。比如 X-tolerant 压缩、MISR 等。
  • 延迟测试: 检测芯片能否在目标频率下正常工作,主要针对路径延迟故障。

我的建议: 对于初学者,先把扫描链和 BIST 搞明白。这两个技术覆盖了 90% 以上的测试需求。边界扫描可以等有板级调试需求时再深入学习。

1.5 本章小结

DFT 不是什么高深莫测的技术,它就是我们给芯片装的一套「体检系统」。没有它,芯片的质量就无法保证。

记住几个关键点:

  • DFT 要尽早规划,最好在架构设计阶段就开始
  • 扫描链是基础,BIST 是存储器测试的利器
  • 测试覆盖率不是越高越好,要平衡成本和收益
  • DFT 不是后端的事,它需要前端和后端的紧密配合

下一章,我会带大家深入扫描链的设计细节。到时候咱们聊聊扫描链的时钟怎么处理、怎么避免扫描链上的竞争冒险。嗯,这些都是实战中经常踩的坑。