PMC-100是Arm推出的可编程存储器内建自测试(MBIST)控制器,专为SoC设计中嵌入式存储器的测试与诊断而设计。作为硬件实现的自动化测试解决方案,它通过直接与存储器接口交互,能够高效执行各种测试算法,显著提升芯片量产测试效率和现场可靠性监控能力。
该控制器具有三大核心能力:
PMC-100的寄存器模型是其可编程性的核心体现,主要分为以下几类:
这些寄存器共同构成了一个完整的测试执行环境,工程师通过合理配置可以构建从简单到复杂的各种测试场景。
PMC100_LSPR寄存器定义当前循环的起始位置,其位域结构如下:
| 位域 | 名称 | 类型 | 复位值 | 描述 |
|---|---|---|---|---|
| [31:5] | 保留 | - | - | 保留位,必须视为UNK/SBZP |
| [4:0] | LS | RO | UNKNOWN | 循环起始指针 |
技术细节:
实战技巧:
由于LS字段是只读的,调试时可以通过监控该寄存器值的变化来验证循环结构是否正确执行。如果发现LS值未按预期更新,可能表明循环控制流存在问题。
PMC100_LCR实现类似C语言的for循环控制机制,特别适用于内存保护逻辑测试场景。寄存器结构如下:
| 位域 | 名称 | 类型 | 复位值 | 描述 |
|---|---|---|---|---|
| [31] | LLEN | RW | UNKNOWN | LOOP-Last操作使能位 |
| [30:24] | 保留 | - | - | 保留位 |
| [23:16] | LCI | RW | UNKNOWN | 循环计数初始值 |
| [15:8] | 保留 | - | - | 保留位 |
| [7:0] | LC | RO | UNKNOWN | 当前循环计数值 |
工作流程:
配置示例:
c复制// 设置循环10次
PMC100_LCR.LCI = 9; // 10-1
PMC100_LCR.LLEN = 1; // 使能LOOP-Last
PMC100_CTRL.EXECO = 0; // 必须设置为0
PMC100_TCCR用于生成内部测试继续脉冲,模拟外部TC引脚的功能。这在需要周期性执行测试的场景中非常有用。
| 位域 | 名称 | 类型 | 复位值 | 描述 |
|---|---|---|---|---|
| [31:16] | TCCI | RW | UNKNOWN | 测试继续计数器初始值 |
| [15:0] | TCC | RO | UNKNOWN | 当前计数器值 |
工作特性:
典型应用:
在线测试场景中,可以配置TCCR实现周期性的存储器检测。例如设置TCCI=0xFFFF,将在65536个时钟周期后自动触发一次测试继续操作。
该算法专为在线测试设计,具有非破坏性特点,可在系统运行时透明地执行。算法核心是通过交替访问相邻存储单元,验证位线、字线等关键电路的可靠性。
算法流程:
关键参数:
该算法主要检测以下类型的故障:
覆盖范围:
需要注意的是,该算法对地址解码器故障的覆盖有限,生产测试应配合使用March C等算法以获得更全面的覆盖。
初始化阶段:
c复制// 设置循环参数
PMC100_LCR.LCI = 循环次数-1;
PMC100_LCR.LLEN = 1;
// 配置测试模式
PMC100_CTRL.FP = 0xAA; // 设置固定模式
PMC100_CTRL.EXECO = 0;
// 设置地址范围
PMC100_LOWADDR = 起始地址;
PMC100_HIGHADDR = 结束地址;
启动测试:
c复制PMC100_CTRL.PEEN = 1; // 使能处理单元
监控状态:
c复制while(PMC100_STATUS.BUSY) {
// 等待测试完成
}
if(PMC100_STATUS.ERROR) {
// 处理错误
}
对于需要长期运行的在线测试,推荐以下配置:
示例配置:
c复制// 每65536周期执行一次测试
PMC100_TCCR.TCCI = 0xFFFF;
PMC100_CTRL.TCCEN = 1;
// 每次测试执行16次循环后暂停
PMC100_LSCR.LSCI = 15;
PMC100_LSCR.LSCEN = 1;
// 启用突发地址模式
PMC100_CTRL.BAMEN = 1;
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 测试无法启动 | PEEN未正确设置 | 检查PMC100_CTRL.PEEN=1 |
| 循环次数不正确 | LCI值设置错误 | 确认LCI=所需循环次数-1 |
| 测试提前终止 | LSCR配置不当 | 检查LSCEN和LSCI设置 |
| 错误报告不准确 | MER寄存器未正确配置 | 设置合适的错误掩码 |
| 性能不达标 | BAMEN未启用 | 在合适场景启用突发地址模式 |
利用CoreSight接口:
分阶段验证:
信号完整性检查:
在实际项目中,我们发现多数问题源于寄存器配置顺序不当。建议严格按照以下初始化顺序:
这种顺序可避免测试意外启动导致的配置不一致问题。