<!-- 抽签结果:方向2-FPGA教学干货 | 子话题扩展:SRAM型FPGA抗SEU设计(TMR+EDAC+扫描复位) | 切入角度C(对比拆解:错误做法 vs 正确做法) | 读者画像3(有FPGA基础的在职工程师,向航天方向拓展) -->
为什么SRAM型FPGA在轨"裸奔"不行
SRAM单元本质是六管交叉耦合,一颗20~50 MeV的质子或重离子穿过栅极,就能把存储的"1"翻成"0"。地面测试根本复现不了这个量级——GTRS(总剂量辐照)和SEU是两回事:前者慢慢烧穿氧化物,后者瞬间改数据。航天场景下两者都要防,但SEU是"静默出错",危害更大。
错误做法: 只在顶层包一个TMR宏,BRAM和配置寄存器全裸着。一颗重离子打在ADC通路里的BRAM,采样数据直接错,下游FIR滤波全废,而且没有任何告警。
正确做法: 分层保护,逻辑归逻辑,存储归存储。
BRAM侧启用FPGA原语的EDAC属性(单bit纠错+双bit检错),配置寄存器(DMA地址、滤波器系数、中断向量)走SBC检错,检出后触发局部软复位。
每60秒至2分钟,对全部触发器和BRAM做一次"读-比-写"恢复。窗口期内新出现的SEU靠TMR和EDAC扛住,窗口期末统一清零。设计时两个要点:扫描期间数据通路必须冻结或冗余备份;扫描时序不能引入新的跨时钟域问题。
"TMR把整个设计三副本一拍就行了。" 不行。三副本必须来自同一次综合,但物理布局要地理分散(place constraint加region打散),否则一颗重离子同时打穿三个相邻副本——这叫multiplexed SEU,TMR直接失效。
不能。TMR保护的是逻辑路径(组合网络+FF),EDAC保护的是存储元素(BRAM、分布式RAM、寄存器堆),两者保护对象完全不同,必须同时部署。
核心理念一致(TMR+EDAC+扫描),差异主要在工具链自动化程度和原语命名上。方法论通用,切换时重点看EDAC原语是否支持双bit检错以及扫描接口的时序规格。
TMR管逻辑、EDAC管存储、扫描管兜底,三层缺一不可,且TMR布局必须地理分散。思考:如果你的星载设计同时用到DSP切片和BRAM,SEU打中DSP内部的系数寄存器后,你的EDAC能否覆盖到?
每个人卡住的地方不一样——有人在TMR布局上吃过multiplexed SEU的亏,有人在扫描窗口和星载实时性之间纠结过。与其自己对着工具链翻文档,不如点击右下角客服窗口,让老师帮你诊断当前设计里SEU防护的盲区,1对1梳理适合你项目复杂度的保护方案。
未经许可,禁止转载!