SEM IP应用--配置篇

作者: Chris Yuan FPGA,来源:FAE技术分享选集

一、什么是SEM

介绍SEM之前,需要先介绍一下SEU,SEU全称:Single Event Upset,中文译作单粒子翻转事件;单粒子翻转是指意外情况(辐射或高能粒子攻击)导致单个存储单元出现了状态错误;这种错误并不是永久性的,可以在重新编程或重新上电后恢复,但是如果不对错误进行及时纠正,可能就会导致设备运行与设计预期不符,出现功能异常。

针对这一问题,Xilinx推出了SEM IP, SEM全称是Soft Error Mitigation,SEM的作用就是通过ICAP不断扫描FPGA内部的CRAM(Configration RAM),来及时发现FPGA运行过程中出现的SEU错误,并完成错误纠正,以保证器件能及时恢复正常工作状态。SEM并不能完全避免SEU导致的软件错误,它只能帮助器件在发生SEU错误之后,从故障状态中恢复过来,在一定程度上,可以提高系统设计的可靠性。

这里需要注意一点:由于SEM会占用ICAP,如果设计中有其他应用(比如:multiboot/Partial Reconfiguration)也需要使用ICAP,那么就会出现ICAP的使用权冲突,需要注意ICAP的仲裁,这个官方有一个参考设计XAPP517。

下面主要从应用的角度出发,介绍一下,如何使用SEM IP。

二、SEM IP核配置

打开已有工程(本文以7Series FPGA为例),在Vivado IP Catalog中搜索SEM。

1.png

这里我们注意到有一个TMR SEM和SEM; TMR_SEM是针对AXI总线应用,在SEM Core上封装了AXI_lite和FIFO,如图2;SEM则是一个native版本的SEM裸核; 本文以native版本的SEM Core进行举例说明。

2.png

双击打开IP的配置页面,这里默认配置如下,非特殊需求,建议按照默认配置使用:

3.png

2.1 关于IP模式的选择
SEU本身在正常环境下就不易复现,错误注入功能可以在添加SEM IP后测试IP功能是否正常;纠错使能可以让器件从SEU错误中恢复,不至于长时间停留在错误状态,所以也建议勾选。

4.JPG

2.2 关于Error correction method的三种模式的区别
考虑到SEU本身是一个极低概率的事件,综合纠错能力与耗时,一般优选repair模式:

5.JPG

2.3 Enable error classification
错误分类使能,根据需求决定是否使能,使能分类功能,也需要使用外部的SPI flash,且会占用额外的flash空间。
2.4 clock frequency
频率选择主要考虑ICAP的频率限制,这个不同的器件的最大频率不一样,具体参考PG036。

6.JPG

2.5 Error injection shim
错误注入的通道,这里有两个选项:
A. Vivado Lab tool: 简单来说就是ILA 和 VIO, 可以将Inject error的引脚接到VIO,通过VIO模拟注入错误,如果不选择Vivado Lab Tool,即使连到VIO,注入也不会生效;
B. pin: 也就是将error injection port引到引脚上,通过外部device来完成错误注入;
我们可以思考一下为什么工具要在这里放置一个选项来确认error inject的输入来源?这个是否有必要?把inject Error通过pin注入和通过VIO注入有什么区别?
2.6 Data retrieval shim
数据提取通道,当使能replace 或 classification 的时候,需要使能spi flash作为Data retrieval shim,这个工具会提示,不做赘述。
配置完成后,选择OK,生成IP。
三、SEM Example Design使用
关于如何将IP例化到我们原来的工程,如何连接icap 和 error injection port等等,xilinx都已经为我们考虑好了,在Vivado design source界面选中生成好的SEM IP,右键选择 open IP example design;工具会导出一个已经例化好的参考设计。

7.JPG

强烈建议使用官方的example design进行二次开发,可以减少很多工作量。
由于example design是作为工程的顶层文件,所以设计中默认对输入时钟上BUFG处理,如果我们将example design例化进我们自己的顶层,我们的输入时钟可能来自MMCM/PLL,这个时候MMCM/PLL的输出可能已经加上了BUFG,如果在编译的时候出现BUFG级联的报错,可以将example design的bufg  bypass掉。

8.png

9.png

接下来就是考虑如何将example design和我们的原工程结合起来,我们先看一下example design 的框图:controller就是我们生成的SEM IP,configuratio Logic就是内部的动态配置单元;另外还有3个Shim模块:

A. HID Shim:就是一个VIO,将状态信号和错误注入信号接入VIO,完成对SEM的错误注入和状态观测,这个模块不是必要的,我们可以将状态信号引到IO进行观测,或者引到ILA等,这个用户自行决断;如果是通过VIO控制注入,在IP配置的时候就一定要选择Vivado Lab Tool.

B. EXT Shim:是外部flash的驱动模块,只有当使能replace/classification才需要使用这个模块;

C. MON Shim: 这个一个串口监控模块,串口模块可以通过打印信息判断当前SEM进入什么状态,串口模块也可以通过命令实现状态切换和错误注入等功能;这个模块实现的功能和HID模块实现的功能是一样的,只是一个是通过串口发命令,一个是通过JTAG/IO直接控制信号;另外,串口注入错误是独立于VIO或pin的一条路径,不管IP配置时选择Vivado Lab Tool还是pins都可以通过MON 串口完成错误注入。

10.png

接下来我们再看一下example design的顶层,其实就只有状态输出和串口两个信号,状态输出其实都可以不用引出,真正需要的就只有时钟和串口;但如果我们直接调用IP的话,其接口就是右边这个;所以十分推荐大家通过example design来简化设计。

11.png

关于IP的配置和example的调用就介绍这么多,下周我们将会发文介绍SEM IP调试相关的内容。
如果您在SEM使用方面有问题,欢迎联系:
simonyang@comtech.cn
charlesxu@comtech.cn

最新文章

最新文章