作者: Chris Yuan,来源:FPGA FAE技术分享选集
书接上文,前面我们介绍了IP核配置和调用的相关注意事项,现在我们基于Zynq7020实际上板看看调试的一些细节。
对于纯逻辑的器件,由于没有PS部分,所以只需要考虑PL部分ICAP权限共享的问题;对于SOC平台。我们知道PS也具有加载程序的能力,PS完成加载主要是通过PCAP完成;PCAP和ICAP只是接口,加载动作都是通过configuration logic;zynq在上电后boot过程,PS需要通过PCAP来完成对PL的编程,bootloader结束后,仍会默认保持对PCAP的控制权限;这样SEM的ICAP则无法接入configuration logic来完成初始化,所以如果我们只是按照纯逻辑器件例化SEM后正常启动,我们会发现SEM IP一直停留在initialization state:
图1 Zynq Configuration Logic框图为了解决以上问题,需要用户在Zynq完成启动后的初始化过程中,将寄存器PCAP_PR(addr: 0xF8007000, Bit 27,参考UG585)清零,将Configuration logic的访问权限交给ICAP。
参考图3,在初始化阶段增加以下代码,将PCAP_PR寄存器清除:
由于SEU是在正常环境下是一个极低概率事件,所以为了测试IP是否生效,所以需要进行错误注入,强制SEU错误发生;从而验证IP是否能正常检错、纠错。
错误注入有两种方式:1、通过error inject port进行注入,Error inject port可以是通过VIO输入或者通过外部pin输入,不同的输入方式需要在IP配置的时候选择对应的模式,否则注入无法生效。2、通过串口进行注入,串口注入是独立于方式1的,不论IP配置什么模式,都可以通过串口进行注入。
两种注入方式本质上是一样的,其实都是给IP发命令,只是接口的形式不一样,在讲具体的命令协议前,我们先梳理一下IP的几种工作状态,这样有助于我们去理解命令的内容。
上电之后自动进入initialization初始化,检查链路状态,如果OK,则进入Observation开始扫描;注入错误需先进入IDLE状态,再输入注入命令;注入完成后,SEM自动回到IDLE;再从IDLE发命令进入Observation开始扫描;找到错误后,SEM会自行修复;如果是遇到无法修复的错误,则SEM会进入IDLE,且将Status_uncorrectable置高,且无法再进入Observation。建议通过MON串口来进行命令控制,串口波特率9600,格式:8-N-1;
进入IDLE的命令:”I” ,输入单字符”I”;可进入IDLE;
进入Observation: “O”,输入单字符”O”;可进入Observation;
获取当前状态: “S” , 状态报告的内容可以参考图6;图5 命令演示
注入命令输入”N”+”Inject_address(10xHex)” ;这里是以7系列为例,所以是10位16进制数,其他系列器件可能会不一样,但是一样的是内容与Inject_address的内容一致,需要包括高4位的控制字。地址有两种模式:线性帧地址(Linear Frame address)和物理帧地址格式;线性帧地址需要将高2位置高,物理帧地址不用。图7 注入错误命令演示
图8 线性帧地址命令格式
当SEM发生状态切换,会输出对应的打印信息,信息以”SC”开头,具体内容如下:SEM从可纠错与不可纠错、必要错误和非必要错误排列组合分成4种错误类型;
参考图6,输入命令”I” , SEM 回复”SC 00”,表示进入IDLE状态;
输入命令”O” , SEM回复”SC 02”, 表示进入到Observation状态;SEM从可纠错与不可纠错、必要错误和非必要错误排列组合分成4种错误类型;
关于可纠错和不可纠错的定义可以参考图12,根据不同的模式的纠错能力,有一定区别; 必要错误和非必要错误其实很好理解,我们一个设计,可能只会用到50%的资源,那么被利用的50%如果发生错误,那么就是必要错误,是需要纠错的;如果是没有用到的空间发生错误,或者是无效空间,以及被MASK空间,就是属于一个非必要的错误,对于非必要错误,SEM不会处理,所以不会进入Correction状态。图12 Correctable and Uncorrectable1. 上电启动,启动后通过串口打印如下信息,可以看到初始化成功,进入Observation状态;2. 进入IDLE状态
注入错误前,我们首先需要明确注入的有效地址范围,这个不同型号最大地址有所不同,获取最大地址的方法参考图6,通过”S”命令,所得到的MF,即是Max Frame 最大帧地址,这里使用的是7Z020,MF=0x01F0C; 我们取中间地址0x00F86进行注入;可以看到输入注入命令后,先是打印SC 10,进入Injection状态,然后打印SC 00,自动回到IDLE状态;
注入后,需要进入Observation状态,IP才会开始扫描工作;输入”O”,回到Observation状态,打印SC 02;然后IP自己打印了扫描到的错误结果;可以看到位置以及错误类型;同时我们也可以通过Vivado VIO看到essential拉高,与串口打印的FC 40相符。
参考文献:
1. PG036 《Soft Error Mitigation Controller v4.1 product guide》
2. UG585 《Zynq 7000 SoC Technical Reference Manual》
如果您在SEM方面有问题,欢迎联系:
simonyang@comtech.cn
charlesxu@comtech.cn