数字电路基础回顾:组合逻辑、时序逻辑、状态机、时钟域等核心概念

DFT(可测试性设计)工程师的核心工作,是在芯片设计流程中提前植入可观测、可控制的结构,以便流片后能够高效地完成制造测试与良率分析。然而,DFT 的一切手段——无论是扫描链(Scan Chain)、内建自测试(BIST)、边界扫描(JTAG),还是 ATPG 向量生成——都建立在数字电路的基本行为之上。如果对组合逻辑与时序逻辑的边界、状态机的迁移机制、时钟域与异步信号的处理缺乏系统认知,DFT 结构的设计将寸步难行。本章不是简单罗列教科书概念,而是从 DFT 工程视角重新梳理这些核心基础,帮助你建立“可测试性”思维。

数字电路核心概念与DFT映射关系 组合逻辑 无记忆 · 输出仅由当前输入决定 关键:传播延迟、竞争冒险 DFT关注:故障传播路径 时序逻辑 有记忆 · 输出由输入+状态决定 关键:建立/保持时间、亚稳态 DFT关注:扫描单元替换 状态机 Moore / Mealy 型 关键:状态编码、复位状态 DFT关注:状态可达性 时钟域 同步/异步时钟域 关键:CDC同步、时钟门控 DFT关注:扫描时钟树 可测试性设计 (DFT) 扫描链 · ATPG · BIST · JTAG 核心:可控性 + 可观测性 目标:故障覆盖率最大化 测试与故障模型 Stuck-At · Transition · Path Delay IDDQ · 存储单元故障 关键:故障覆盖率与良率 理解底层电路行为 → 设计高效的DFT结构 → 实现高覆盖率测试

上图展示了数字电路四大核心概念与 DFT 之间的映射关系。组合逻辑与时序逻辑是电路的基本构成单元,状态机是时序逻辑的抽象表达,时钟域则决定了时序逻辑的同步边界。DFT 工程师需要在这四个维度上同时施加可测试性设计,才能确保芯片在制造后能够被有效测试。下面我们逐一深入剖析。

组合逻辑:无记忆的决策网络

核心原理:组合逻辑电路的特点是输出仅取决于当前输入信号的组合,与历史状态无关。它由与门、或门、非门、异或门等基本门电路构成,没有存储元件。从数学角度看,组合逻辑可以用布尔函数描述,其行为是确定性的——给定一组输入,必然产生唯一输出。在 DFT 语境下,组合逻辑的测试目标是验证每个逻辑门的输入输出关系是否因制造缺陷而改变,最常见的故障模型是固定故障(Stuck-At Fault),即某个节点被永久固定在逻辑 0 或逻辑 1。

判断方法:识别一个电路是否为组合逻辑,可以检查其是否包含触发器、锁存器或存储器等状态元件。如果电路中没有反馈回路且没有时钟端口,那么它必然是组合逻辑。在 RTL 代码中,组合逻辑通常由 assign 语句或 always @(*) 块描述。对于 DFT 工程师而言,组合逻辑的测试难度在于如何将内部节点的故障传播到可观测的输出端口,以及如何从输入端口直接控制内部节点。

DFT 工程视角:组合逻辑的测试覆盖率取决于可控性和可观测性。扫描链技术通过将时序单元替换为扫描单元,使得测试向量可以串行移入内部节点,从而间接控制组合逻辑的输入;同时,组合逻辑的输出可以被捕获到扫描单元中,再串行移出进行观测。因此,组合逻辑的测试质量与扫描链的设计质量直接相关。

案例拆解:考虑一个 32 位 ALU 中的加法器模块。该模块由全加器级联而成,属于纯组合逻辑。在 ATPG 阶段,工具会针对每个全加器的进位输出节点生成 Stuck-At 0 和 Stuck-At 1 的测试向量。假设某个全加器的进位输出存在 Stuck-At 0 故障,ATPG 工具需要找到一组输入,使得该节点的正常值应为 1,且该故障能够传播到 ALU 的最终输出端口。如果该节点距离输出端口较远,中间经过多级逻辑,测试向量生成难度会显著增加。此时,DFT 工程师可以通过插入测试点(Test Point)来增强可观测性,例如在关键节点引出观测线到扫描链。

组合逻辑特性 DFT 影响 应对策略
无记忆,输出仅由当前输入决定 测试向量生成相对直接,但内部节点可控性差 通过扫描链提供内部节点控制
传播延迟影响时序收敛 路径延迟故障(Transition Fault)需要特殊测试 使用 at-speed 测试,配合时钟控制
竞争冒险可能导致毛刺 测试时可能产生误判 在测试模式中插入稳定逻辑或屏蔽毛刺

时序逻辑:状态与记忆的载体

核心原理:时序逻辑电路包含存储元件(触发器、锁存器),其输出不仅取决于当前输入,还取决于电路的历史状态。时序逻辑是数字系统中实现状态记忆、数据缓存、流水线控制的核心。从 DFT 角度看,时序逻辑既是测试的难点,也是测试的突破口——因为扫描链正是利用时序单元的移位特性来实现内部节点的可控与可观测。

操作流程:在 DFT 设计中,标准单元库中的普通触发器(D Flip-Flop)会被替换为扫描触发器(Scan Flip-Flop)。扫描触发器在功能模式与测试模式之间切换:功能模式下,数据从 D 端输入;测试模式下,数据从扫描输入端口(SI)输入,通过扫描使能信号(SE)控制。多个扫描触发器首尾相连形成扫描链,测试向量通过扫描链串行移入,测试响应再串行移出。这一过程的核心是理解触发器的建立时间(Setup Time)与保持时间(Hold Time)约束,确保在测试时钟下数据能够正确采样。

// 扫描触发器简化 RTL 描述
module scan_dff (
    input  wire clk,
    input  wire rst_n,
    input  wire se,    // scan enable
    input  wire si,    // scan input
    input  wire d,     // functional input
    output reg  q
);
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            q <= 1'b0;
        else if (se)
            q <= si;   // 测试模式:从扫描链移入
        else
            q <= d;    // 功能模式:正常数据
    end
endmodule

案例拆解:假设一个 64 位计数器模块,由 64 个触发器级联构成。在功能模式下,计数器按照时钟递增;在测试模式下,这 64 个触发器被配置为一条扫描链。ATPG 工具生成测试向量时,首先将测试数据通过扫描链移入所有触发器,然后切换到功能模式施加一个时钟脉冲,最后再切换回测试模式将响应移出。整个过程需要精确控制扫描使能信号和时钟脉冲的时序。如果扫描链设计不当,例如触发器之间的组合逻辑路径过长,可能导致测试时钟频率受限,进而影响测试时间。

风险提示:时序逻辑中的亚稳态问题是 DFT 测试中的隐形杀手。当触发器的数据输入在时钟边沿附近变化时,输出可能进入不确定状态。在扫描链移位过程中,如果扫描使能信号与时钟边沿的时序关系处理不当,可能导致移位数据错误。因此,DFT 工程师必须确保扫描使能信号在时钟有效沿前后保持稳定,通常通过时钟门控或专用测试时钟树来实现。

状态机:时序逻辑的抽象建模

核心原理:状态机(Finite State Machine, FSM)是时序逻辑的高级抽象,用于描述系统在不同状态之间迁移的行为。状态机分为 Moore 型(输出仅取决于当前状态)和 Mealy 型(输出取决于当前状态和输入)。在 DFT 测试中,状态机的核心挑战是状态可达性——某些状态可能由于复位逻辑或状态编码问题而无法进入,导致相关故障无法被测试。

判断方法:识别 RTL 中的状态机,通常查找 always @(posedge clk) 块中的 case 语句,且状态变量为寄存器类型。状态机的复位状态至关重要,DFT 测试通常从复位状态开始,确保所有触发器处于已知初始值。如果复位逻辑存在缺陷,扫描链的初始移位可能失败。

案例拆解:考虑一个 UART 协议的接收状态机,包含 IDLE、START、DATA、STOP 四个状态。在 DFT 测试中,如果仅测试 IDLE 和 DATA 状态,而 START 和 STOP 状态中的故障未被覆盖,则测试覆盖率不完整。为了测试所有状态,ATPG 工具需要生成一系列输入序列,驱动状态机遍历所有状态。然而,如果状态机中存在冗余状态或不可达状态,这些状态中的故障将无法被测试。此时,DFT 工程师可以通过状态编码优化或插入测试专用状态来提升可达性。

状态机类型 输出特性 DFT 测试关注点
Moore 输出仅由当前状态决定 状态寄存器故障可通过输出直接观测
Mealy 输出由状态和输入共同决定 需要同时控制输入和状态,测试向量更长
混合型 部分输出与状态相关,部分与输入相关 需要分别验证状态相关和输入相关的输出路径

时钟域:同步与异步的边界

核心原理:时钟域是指由同一时钟源驱动的所有时序逻辑的集合。在复杂 SoC 中,存在多个时钟域,例如 CPU 核心时钟、外设总线时钟、存储器接口时钟等。时钟域之间的信号交互称为跨时钟域(CDC)传输,如果处理不当,会导致亚稳态传播和数据错误。在 DFT 测试中,时钟域的设计直接影响扫描链的划分和测试时钟的分配。

操作流程:DFT 工程师在规划扫描链时,通常会将同一时钟域的触发器放在同一条扫描链中,以避免跨时钟域的时序问题。对于跨时钟域信号,需要在功能设计中插入同步器(通常为两级触发器),但在测试模式下,同步器可能被旁路或特殊处理。此外,时钟门控(Clock Gating)是降低功耗的常用手段,但在测试模式下,所有时钟门控必须被强制打开,以确保所有触发器都能被时钟驱动。

工程实践:在 DFT 编译阶段,工具会生成测试时钟树(Test Clock Tree),用于在测试模式下统一分配时钟。测试时钟树与功能时钟树相互独立,确保测试时钟的偏斜(Skew)可控。对于多时钟域设计,通常使用 OCC(On-Chip Clock Controller)电路来生成 at-speed 测试所需的时钟脉冲,避免依赖外部高速测试设备。

案例拆解:假设一个芯片包含 1.2V 核心电压域的 500MHz 时钟域和 1.8V IO 电压域的 100MHz 时钟域。在扫描链设计时,如果错误地将两个时钟域的触发器混在一条扫描链中,测试时钟频率必须降低到 100MHz 以下,导致测试时间大幅增加。更严重的是,跨时钟域的移位路径可能产生保持时间违例,导致测试数据错误。正确的做法是分别构建两条扫描链,每条链使用各自的测试时钟,并通过异步 FIFO 或握手逻辑完成测试数据的跨域传输。

常见误区:初学者容易混淆功能时钟与测试时钟的关系。在功能模式下,时钟由 PLL 或外部晶振提供;在测试模式下,时钟由测试设备或 OCC 提供。DFT 工程师必须确保测试时钟的占空比、频率和相位满足所有触发器的时序要求,否则即使扫描链结构正确,测试也可能失败。

总结复盘:数字电路基础是 DFT 设计的基石。组合逻辑决定了测试向量的生成难度,时序逻辑提供了扫描链的实现载体,状态机影响了测试覆盖率的上限,时钟域则约束了扫描链的划分与测试时钟的分配。DFT 工程师需要在这四个维度上协同设计,才能实现高覆盖率、低测试成本、高可靠性的测试方案。在实际项目中,建议在 RTL 设计阶段就同步规划 DFT 结构,避免后期返工。每一次扫描链的插入、每一个测试点的添加,都源于对底层电路行为的深刻理解。