大猪蹄子的个人博客

大猪蹄子

【技术 Xilinx-5】SEM IP的应用

2026 / 11 / 2

感谢X圣,前面忘了,后面忘了

SEM(Soft Error Mitigation,软错误缓解)是什么?众所周知,FPGA内部是没有固定的连线配置的,需要靠bit来配置CRAM来实现具体功能的——那么在辐射环境下,这个CRAM是有可能在工作中产生位翻转导致配置功能不正常,这种情况就称为软错误。

如何在正常工作下检测、缓解错误就是SEM要解决的问题。根据不同需求有不同修复方案,因此并不能做到100%修复,这里只能叫缓解,而不是完全修复或纠正了。

这个功能很明显跟制造厂商有关,不属于我们能手搓通用代码那种。Xilinx的IP列表里提供了SEM IP,根据这个接口我们能在Xilinx FPGA上实现和测试该功能,其他家各自加油。

IP接口介绍

SEM IP只有1页配置,各个设置说明如下:

  • Enable Error Injection:是否启用错误注入,和下面Error Injection Shim绑定使用,一般在测试时验证FPGA SEM功能是否正常,然后在正式版中关掉

  • Enable Error Correction:是否启用自动纠错,因为纠错会动CRAM,如果你想要严格定位出错位置和原因就可以不开这个选项,让它检测到出错的时候不去纠错,你手动去Debug。你要纠错的话就会细分出下列三种不同方案:

    • Repair:最简单,FPGA配置是一个一个配置帧组成的,它能够靠ECC修复每个帧的一个比特错误,同一帧两个比特错误就没招了

    • Enhanced Repair:略微复杂,但是比上一个能修复每个帧内的相邻两个比特错误,但是需要额外的BRAM和逻辑资源

    • Replace:最直接,有问题直接替换掉整个配置帧,修复能力极强,但是需要额外的Flash支持,同时修复配置帧也会有扰动正常工作中功能的风险

  • Enable Error Classification:是否错误分类,和下面Data Retrieval Shim绑定使用,因为FPGA配置帧有大量空白数据,通过分类可以知道位错误是空白区域还是实际使用的重要数据区域(也就是后面端口的essential),但是这个功能也需要外部Flash;不开的话,统一都算essential

  • Controller Clock Frequency:时钟,频率越高,纠错越快嘛

  • Error Injection Shim:错误注入方式,现在都是用串口转monitor接口测试了

  • Data Retrieval Shim:外部Flash连接方式,其实只有SPI x1可选

设置完成后的接口例化如下,可根据实际情况选用

测试工程

测试工程点击此处下载 ,配置为猪蹄板XI050D,工程为Vivado 2024.2,IP配置为Enable Error Injection+Enable Error Correction+Enhanced Repair+Disable Error Classification

测试流程如下(从烧录完bit\ltx,打开对应串口开始):

  1. 测试正常待机场景:上位机点击三场景测试正常检查,串口返回观测扫描中,无错误;ila直接采集,心跳脉冲正常,status_correction、status_uncorrectable低,o_sem_error_cnt无计数

  2. 测试可纠错场景:上位机点击三场景->可纠错注入,串口注入一个可纠错位(没接flash,所以这里没开Error Classification分类);ila可观察到status_correction拉高后拉低、status_uncorrectable无变化,o_sem_error_cnt+1

  3. 测试不可纠错场景:上位机点击三场景->不可纠错注入,串口向同一帧注入两个不同位置的位错误;ila可观察到status_correction拉高后拉低、status_uncorrectable在前者拉低前拉高,o_sem_error_cnt[7]拉高具体的细节(什么最大帧地址之类的)解析,各位就根据ai大人的指示慢慢参透吧,反正工程已经跑起来了。对于正常使用来说,最多让它做到区分错误、自动纠正就行;你给我错误地址,我没原厂那个技术也分析解决不了啊……

注意事项

  1. SEM会使用到ICAP原语接口,如果你的工程别的地方也有使用,自己记得加仲裁

版本更新

261102:初始版本