4. BIST控制器架构
内建自测试(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。
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.3 BIST控制器状态机设计
BIST控制器是一个有限状态机,负责管理测试的整个生命周期。典型的状态机包含以下核心状态:
- IDLE(空闲态): 等待BIST启动信号。此时LFSR和MISR保持复位状态,被测电路正常工作。
- SHIFT_IN(移位输入态): 将测试向量从LFSR串行或并行加载到被测电路的扫描链中。
- CAPTURE(捕获态): 施加一个或多个系统时钟脉冲,让被测电路对测试向量做出响应。
- SHIFT_OUT(移位输出态): 将捕获到的响应移出扫描链,同时送入MISR进行压缩。
- DONE(完成态): 所有测试向量应用完毕,输出最终签名,并置位完成标志。
4.3.1 状态转移图
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和状态机按照以下时序协同工作:
- 初始化: 状态机处于IDLE态,LFSR加载种子(Seed),MISR复位至全零或全一状态。
- 向量生成与施加: 状态机进入SHIFT_IN态,LFSR在每个时钟周期产生一个新的伪随机向量,通过扫描链输入到被测逻辑。
- 响应捕获: 状态机进入CAPTURE态,施加一个系统时钟,被测逻辑的响应被捕获到扫描链中。
- 响应压缩: 状态机进入SHIFT_OUT态,扫描链中的响应被移出,同时MISR对响应进行压缩。在此阶段,LFSR同时生成下一个测试向量(流水线操作)。
- 循环与完成: 重复步骤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中广泛应用。