PMC-100是Arm推出的可编程内存内建自测试(MBIST)控制器IP核,采用微码驱动架构实现灵活的SRAM测试方案。其核心设计理念是通过硬件状态机执行存储在寄存器中的微指令序列,从而支持多种测试算法的动态配置。这种架构相比固定功能的MBIST控制器具有显著优势:在硅后阶段仍可通过微码更新来优化测试策略,而无需重新流片。
控制器内部包含三个关键模块:
关键特性:PMC-100在x-fast模式下会提前更新行地址,这种时序优化能将传统MBIST测试时间缩短15-20%,特别适合大容量SRAM的在线测试场景。
该算法设计用于在线测试场景,其核心特点是:
算法微码执行流程如下表所示:
| 微码地址 | 关键操作 | 技术要点 |
|---|---|---|
| P0 | 保持地址,读取数据到X寄存器 | 初始化基准值 |
| P1 | 递增地址,读取数据到Y寄存器 | 建立相邻单元数据关系 |
| P2 | 写入固定模式(FP) | 检测stuck-at故障 |
| P3 | 地址不变,写入FP的反码 | 验证位线驱动能力 |
| P4 | 回读验证 | 比较器实时检查数据一致性 |
verilog复制// 典型微码字段示例(P2指令)
assign psel = 2'b00; // 选择主端口
assign ao = 1'b1; // 地址递增
assign ua = 1'b0; // 保持当前地址
assign dpol = 1'b0; // 数据不反转
assign dreg = 2'b11; // 使用FP模式
assign trans = 2'b10; // 写操作
assign op = 4'b0000; // 基本写入
双端口内存需要特殊测试策略来验证:
PMC-100通过MBISTOLWADDR信号实现独立写地址控制,微码设计要点:
c复制// 算法伪代码示例
for (int i = 0; i < DEPTH; i++) {
write_port(addr[i], pattern); // 端口A写入
read_port(addr[i+offset], ~pattern); // 端口B验证
if (read_data != expected) {
error_count++;
}
}
March C-是经典的SRAM生产测试算法,其操作序列为:
math复制↑(w0); ↑(r0,w1); ↑(r1,w0); ↓(r0,w1); ↓(r1,w0); ↑(r0)
可检测以下故障类型:
PMC-100通过LOOP-LAL/LOOP-LAH指令实现地址递增/递减:
| 操作阶段 | 微码关键字段 | 故障覆盖目标 |
|---|---|---|
| 元素1 | UA=1, OP=0101 (LOOP-LAL) | 初始化所有单元为0 |
| 元素2 | DPOL=1, OP=0101 | 检测转换故障(0→1) |
| 元素5 | AO=1 (地址递减) | 验证地址译码对称性 |
实测数据:在28nm工艺节点,March C-对SRAM的故障覆盖率可达98.7%,平均测试时间为6.5ns/bit。
PMC-100提供四种保护逻辑测试模式:
地址保护潜伏故障检测
armasm复制LCR.LCI = addr_width - 1; // 测试所有地址位
AR.ARE = 0b10; // 使能ECC检查
数据保护单点故障检测
地址压缩技术:利用PMC100_CTRL.BAMEN位启用bank地址模式,测试时间可减少:
math复制T_new = T_original / (2^n + 1)
其中n为bank地址位数
并行测试:对多块SRAM同时发起测试时,需注意:
| 测试模式 | 故障覆盖率 | 测试时间 | 适用场景 |
|---|---|---|---|
| 短脉冲透明算法 | 85% | 1x | 在线监测 |
| March C- | 98% | 3x | 生产测试 |
| ECC全验证模式 | 99.9% | 8x | 汽车功能安全 |
实际项目中建议采用混合策略:生产测试用March C-,在线监测用短脉冲算法,定期执行完整ECC验证。