MPSoC上电时ScanClear和MBIST的执行情况分析

作者:Peter Zhou,AMD赛灵思开发者

问题背景:

在MPSoC上电时硬件的Scan Clear和MBIST会执行,根据UG1085 Chapter39 System Test and Debug章节,MBIST_DONE寄存器是只读的,表明了测试已完成,MBIST_GOOD寄存器也是只读的,表明了测试的结果。但是用户在上电后去读这两个寄存器却发现这两个值为0,是否表明测试没有完成或者测试失败了呢?

这个问题会有些疑惑,需要深入分析,本文讲述了如何对上述情况进行分析,以便用户能更好的理解Scan Clear和MBIST的功能。

情况分析:

根据UG1085 Chapter39 System Test and Debug章节描述,PMU有一些全局寄存器被用于控制和设置MBIST memory控制器的状态。有五个控制和状态寄存器的,分别是:

MBIST_RST 控制着reset信号,可以读写;
MBIST_PG_EN 控制着PG_EN信号,可以读写;
MBIST_SETUP 控制着setup信号,可以读写;
MBIST_DONE 表明test已经完成,只读;
MBIST_GOOD 表明test结果,只读;

如果要开始MBIST的操作,则需要设置全部的三个控制寄存器,即MBIST_RST、MBIST_PG_EN、MBIST_SETUP,当MBIST操作完成后,软件会清除这三个bit的所有trigger寄存器。MBIST_DONE bit将拉高置1,MBIST_GOOD提供了Test操作状态的查询功能:0表示failure,1表示success。MBIST_DONE和MBIST_GOOD都是只读寄存器,并且当上述三个控制寄存器的trigger寄存器被硬件清除的时候,硬件也会自动清除这两个状态只读寄存器。

这样就会导致用户读这两个状态寄存器的时候,读出来的是0.

我们确认了MBIST_DONE和MBIST_GOOD信号是在boot ROM阶段被清除的。 所以即使你在上电时,在FSBL的刚开始的阶段打印出这两个状态寄存器的值,打印的结果依然会是0. 因为MBIST_DONE和MBIST_GOOD信号是在boot ROM阶段被清除了。

但是,同时我们会在MBIST 发生failure的时候,将MBIST 或者Scan Clear的error信息上报到PMU_GLOBAL_.ERROR_STATUS_2寄存器的PB_ERR bit中去。那么,因为设置了PB_ERR这个bit,所以boot up的行为就取决于PBR_BOOT_ERROR EFUSE这个寄存器了,而且PS_ERROR_OUT信号需要assert。

注意,MBIST的failure不会挂住boot的流程,除非有一个特殊的eFUSE寄存器被设置了,ROM的boot流程将跳过error并继续跑下去,要想在此error发生时停止boot流程的唯一方式是要设置好 PBR_BOOT_ERROR 这个eFUSE寄存器。

同时请注意,与MBIST error相关的bit在ERROR_EN_2 enable的情况下,对应于的ERROR_STATUS_2 bits的寄存器中,此bit会在boot ROM中被设置的。

ERROR_STATUS_1 和 ERROR_STATUS_2 bits 的介绍,请参考 UG1085 Table 6-12.
ERROR_STATUS_2[25] PMU ROM code experienced an error during the preboot process.

这个bit25的error,即表明了PMU在ROM code的preboot的执行阶段,遇到了一个error,用户可以观察此error,来间接表明是否有MBIST或Scan clear的error发生。

这样一来,文章开头所述的疑惑就可以很清楚了。不必以MBIST_DONE和MBIST_GOOD为判断依据,而是应该以ERROR_STATUS_2[25]为判断依据。

最新文章

最新文章