4. BIST控制器架构:LFSR、MISR与状态机设计

内建自测试(BIST)的核心在于将测试向量生成与响应分析功能集成到芯片内部。本章深入剖析BIST控制器的三大关键组件:线性反馈移位寄存器(LFSR)用于生成伪随机测试向量,多输入特征寄存器(MISR)用于压缩输出响应,以及有限状态机(FSM)用于协调整个测试流程。理解这三者的协同工作是掌握BIST设计与调试的基础。

4.1 线性反馈移位寄存器(LFSR)

LFSR是BIST中最常用的测试向量生成器。它由一个移位寄存器和一组异或(XOR)反馈网络构成。通过选择合适的本原多项式,LFSR可以遍历除全零状态外的所有状态,生成具有良好随机特性的伪随机序列。

关键指标: LFSR的周期长度由反馈多项式的阶数决定。对于一个n阶本原多项式,LFSR的周期为 2n - 1。例如,一个16位的LFSR可以产生65535个不同的伪随机向量。

4.1.1 标准型(External-XOR)与模块化(Internal-XOR)架构

特性 标准型(External-XOR) 模块化(Internal-XOR)
反馈路径 XOR门位于移位寄存器链外部 XOR门插入在寄存器单元之间
关键路径 较长,XOR门串联在反馈回路中 较短,XOR门分布在寄存器之间
最高频率 受限于反馈回路的总延迟 通常更高,适合高速设计
面积 略小 略大(需要更多布线资源)
应用场景 低速、面积敏感型设计 高速、性能优先型设计

以下是一个4位标准型LFSR的结构示意图,其本原多项式为 P(x) = x4 + x3 + 1。

标准型LFSR结构 (P(x)=x⁴+x³+1) FF0 FF1 FF2 FF3 XOR 串行输出

4.1.2 LFSR的Verilog实现示例

// 16位LFSR,本原多项式:x^16 + x^14 + x^13 + x^11 + 1
module lfsr_16bit (
    input  wire       clk,
    input  wire       rst_n,
    input  wire       en,
    output wire [15:0] lfsr_out
);

    reg [15:0] lfsr_reg;

    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            lfsr_reg <= 16'h0001; // 避免全零状态
        else if (en) begin
            // 反馈多项式:bit 15 = bit 0 XOR bit 2 XOR bit 3 XOR bit 5
            lfsr_reg <= {lfsr_reg[14:0],
                         lfsr_reg[0] ^ lfsr_reg[2] ^ lfsr_reg[3] ^ lfsr_reg[5]};
        end
    end

    assign lfsr_out = lfsr_reg;

endmodule

4.2 多输入特征寄存器(MISR)

MISR是LFSR的扩展,它允许并行输入数据。在BIST中,MISR用于将电路的多位输出响应压缩成一个特征签名(Signature)。测试结束时,将实际签名与预期签名(通过仿真获得)进行比较,即可判断电路是否存在故障。

设计要点: MISR的压缩过程是有损的,存在“混淆”(Aliasing)风险——即故障响应被压缩成与无故障相同的签名。选择高阶本原多项式(如32位或64位)可以将混淆概率降低至 1/2n,在工程实践中可以忽略不计。

4.2.1 MISR结构

MISR在每个时钟周期将外部输入数据与当前寄存器状态进行XOR运算,然后执行移位操作。其数学表达式为:

S(t+1) = A · S(t) ⊕ X(t)

其中,S(t)为当前状态,A为反馈矩阵,X(t)为当前输入向量。

4位MISR结构(带并行输入) 输入数据 d[3] d[2] d[1] d[0] FF0 FF1 FF2 FF3 XOR XOR XOR XOR 签名输出

4.3 BIST控制器状态机设计

BIST控制器是一个有限状态机,负责管理测试的整个生命周期。典型的状态机包含以下核心状态:

  • IDLE(空闲态): 等待BIST启动信号。此时LFSR和MISR保持复位状态,被测电路正常工作。
  • SHIFT_IN(移位输入态): 将测试向量从LFSR串行或并行加载到被测电路的扫描链中。
  • CAPTURE(捕获态): 施加一个或多个系统时钟脉冲,让被测电路对测试向量做出响应。
  • SHIFT_OUT(移位输出态): 将捕获到的响应移出扫描链,同时送入MISR进行压缩。
  • DONE(完成态): 所有测试向量应用完毕,输出最终签名,并置位完成标志。

4.3.1 状态转移图

BIST控制器状态机 IDLE 等待bist_start SHIFT_IN 加载测试向量 CAPTURE 捕获响应 SHIFT_OUT 移出+MISR压缩 DONE 输出签名 bist_start shift_done capture_done !all_vectors_done all_vectors_done bist_done_clear

4.3.2 状态机Verilog实现框架

module bist_controller (
    input  wire       clk,
    input  wire       rst_n,
    input  wire       bist_start,
    output reg        scan_en,
    output reg        capture_en,
    output reg        misr_en,
    output reg        bist_done
);

    // 状态编码
    localparam IDLE      = 3'b000,
               SHIFT_IN  = 3'b001,
               CAPTURE   = 3'b010,
               SHIFT_OUT = 3'b011,
               DONE      = 3'b100;

    reg [2:0] state, next_state;
    reg [9:0] shift_counter; // 假设扫描链长度为1024
    reg [7:0] vector_counter; // 假设共256个测试向量

    // 状态寄存器
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            state <= IDLE;
        else
            state <= next_state;
    end

    // 次态逻辑与输出逻辑
    always @(*) begin
        next_state = state;
        scan_en    = 1'b0;
        capture_en = 1'b0;
        misr_en    = 1'b0;
        bist_done  = 1'b0;

        case (state)
            IDLE: begin
                if (bist_start)
                    next_state = SHIFT_IN;
            end

            SHIFT_IN: begin
                scan_en = 1'b1;
                if (shift_counter == 1023)
                    next_state = CAPTURE;
            end

            CAPTURE: begin
                capture_en = 1'b1;
                next_state = SHIFT_OUT;
            end

            SHIFT_OUT: begin
                scan_en = 1'b1;
                misr_en = 1'b1;
                if (shift_counter == 1023) begin
                    if (vector_counter == 255)
                        next_state = DONE;
                    else
                        next_state = SHIFT_IN;
                end
            end

            DONE: begin
                bist_done = 1'b1;
                if (!bist_start)
                    next_state = IDLE;
            end
        endcase
    end

    // 计数器逻辑(略)
    // ...

endmodule
调试陷阱: 在ATE联合调试中,常见的BIST控制器问题包括:(1) 状态机在SHIFT_IN/SHIFT_OUT阶段因时钟门控导致移位不完整;(2) MISR签名在测试结束时未正确锁存;(3) 异步复位信号在ATE测试模式下毛刺导致状态机误触发。建议在仿真阶段使用覆盖率驱动的验证方法,确保所有状态转移路径都被覆盖。

4.4 三组件协同工作流程

在完整的BIST测试周期中,LFSR、MISR和状态机按照以下时序协同工作:

  1. 初始化: 状态机处于IDLE态,LFSR加载种子(Seed),MISR复位至全零或全一状态。
  2. 向量生成与施加: 状态机进入SHIFT_IN态,LFSR在每个时钟周期产生一个新的伪随机向量,通过扫描链输入到被测逻辑。
  3. 响应捕获: 状态机进入CAPTURE态,施加一个系统时钟,被测逻辑的响应被捕获到扫描链中。
  4. 响应压缩: 状态机进入SHIFT_OUT态,扫描链中的响应被移出,同时MISR对响应进行压缩。在此阶段,LFSR同时生成下一个测试向量(流水线操作)。
  5. 循环与完成: 重复步骤2-4,直到所有测试向量应用完毕。状态机进入DONE态,输出MISR中的最终签名。
阶段 LFSR行为 MISR行为 状态机控制信号
IDLE 保持种子值 保持复位 scan_en=0, capture_en=0
SHIFT_IN 每个时钟移位,生成新向量 保持(或移位清零) scan_en=1
CAPTURE 暂停移位 暂停 capture_en=1
SHIFT_OUT 继续移位(流水线) 每个时钟压缩输入数据 scan_en=1, misr_en=1
DONE 停止 输出最终签名 bist_done=1
工程实践: 在高速BIST设计中,建议将LFSR和MISR的移位操作与扫描链的移位操作解耦。通过引入“影子寄存器”(Shadow Register),可以在一个时钟周期内完成向量加载和响应捕获,从而将测试时间缩短近一半。这种技术称为“并行加载BIST”(Parallel BIST),在存储器和高速逻辑BIST中广泛应用。