延时开始SEM功能的扫描(二)

作者:Ivy Guo,AMD工程师;来源:AMD开发者社区

上次介绍了如何推迟SEM IP的扫描。 在Versal器件中, SEM功能的实现发生了很大变化,整个解决方案是基于library实现的。下面我们一起看一下如何推迟XilSEM扫描功能的开始。

参考<如何使能Versal的XilSEM功能> 一文, 我们建立一个使能了XilSEM功能的设计。 观察CIPS中XilSEM对应的选项:

图1:CIPS中XilSEM对应的选项.jpg

本次测试以CRAM的扫描为例 (NPI扫描方法相同):

Enable Configuration RAM soft error mitigation选项下面有两个小选项: Error correction capability, 根据设计需求可以选择为Detect & Correct, 或者Detect Only. 本次我们需要关注的是’Scan Strategy’ 这个选项, 默认是’Immediate Start’, 还有一个是’Deferred Start’ . 这个选项是问是否在配置完成后立即开始CRAM扫描工作, 还是推迟扫描的开始直至收到指令。

图2:指令.jpg

接下来:

图2-2.jpg

是问选择使用硬件第一轮扫描结果作为ECC golden校验值, 还是使用软件生成配置文件时计算出来的golden校验值。 这个选项对本次测试无影响。 可以任意选择。

高级选项’Enable PMC_PL_GPO for status signals into PL’, 是把XilSEM的错误状态输出到PL里面,可以通过PL的GPIO或者逻辑监测XilSEM的运行情况. 该选项对本次测试结果亦无影响. 可以按需选择。

图3.jpg

综上,我们测试以下两种配置:

1、Immediate Scan

 图4:配置.jpg


2、Deferred Scan

图5.jpg

由于Deferred Start必须由用户发起请求,XilSEM的工作才能开始.查看XilSEM Example Design的source文件发现如下定义:

  /* Initialize CRAM scan if not initialized
        * This is applicable when CRAM Scan is set for deferred start up.
        */
       (void)XSem_CmdCfrGetStatus(&CfrStatusInfo);
       IsInitDone = CfrStatusInfo.Status & CRAM_STATUS_INIT_DONE_MASK;
       if (IsInitDone != CRAM_STATUS_INIT_DONE_MASK) {
             Status = XSem_CfrApiInitCram();
             if (XST_SUCCESS != Status) {
                    xil_printf("CRAM Initialization failed\n\r");
                    goto END;
             } else {
                    xil_printf("CRAM Initialization Done\n\r");
             }
       } else {
             xil_printf("CRAM scan is configured for immediate start\n\r");
       }

检测是否完成CRAM扫描对应的初始化工作,没有,则调用XSem_CfrApiInitCram来完成。
后续在插错测试中,调用:

       Status = XSem_CfrApiStartScan();
       if (XST_SUCCESS != Status) {
             xil_printf("Start Scan Failed\n\r");
             goto END;


启动扫描工作.
基于VCK190开发板, 分别生成xsa文件以及对应的pdi和elf文件. 为便于查看XilSEM扫描的状态,我们需要用到以下寄存器:

SEM_CRAM_SCAN_STATUS (PLM_RTCA) Register
Register Name   SEM_CRAM_SCAN_STATUS
Absolute Address            0x00F2014084 (PLM_RTCA)
Description        XILSEM CRAM Scan Status Register
https://docs.xilinx.com/r/en-US/am012-versal-register-reference/SEM_CRAM_SCAN_STATUS-PLM_RTCA-Register

图6.jpg

图7.jpg

测试结果:

下载执行Immediate Scan的pdi文件:

图8:测试结果.jpg

看低四位寄存器, OBSERVATION_STATE以及CRAM_IN_DESIGN已经被置为1, 说明CRAM的扫描工作已经初始化完毕,并且正常进入了监测状态。

接下来下载Cram Scan的elf文件:

图9:Cram Scan的elf文件.jpg

由于elf文件里面默认有插错测试, 所以CORRECTABLE_ERR以及ECC_CORRECTION_DONE对应置位,表明有检测到ECC error,并且已经纠正。

对比测试Deferred Scan的效果. 先下载pdi文件:

图10:下载pdi文件.jpg

下载结束后, 对应寄存器的位全为0. 说明XilSEM的工作没有开始。

紧接着执行一次elf文件:

图11:elf文件.jpg

发现寄存器的返回值和Immediate Scan执行elf后的状态一样了. 说明XilSEM的扫描功能已经被启动, 并且依次执行了插错测试等。

通过这种设置, 我们可以根据需要’无限’延迟XilSEM的扫描开始, 需要时再启动。

最新文章

最新文章