SEMX — Xilinx 7 系列 FPGA SEU 软错误缓解栈
面向 XC7K325T 的在轨 SEU 缓解方案:
- BITSECC 回读逐位比对与 RBCRC 片上检测(POST_CRC/FRAME_ECCE2)双通道, 支持帧级/位级错误定位与受控修复(默认检测门关闭写入)
- semxd 巡逻守护(systemd + dpkg 部署,arm64/amd64 包)
- sds3_bitstream Python 库:7 系列位流解析、帧寻址、ECC/CRC
- OpenOCD XC7 回读/遥测扩展(maiar fork semx 分支子模块)
- Vivado 测试工程与交叉验证工具(SEM IP 注入/遥测)
License: MIT — Jonah Liu liujiahan@gmail.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
SEMX — Soft Error Mitigation for Xilinx
SEMX 是 SDS³(Software Defined Satellite Service Stack)的功能组件,面向 Xilinx 7 系列 SRAM 型 FPGA(当前验证器件 XC7K325T)提供单粒子翻转(SEU)缓解能力:周期性校验配置存储器,检出由 SEU 引起的配置位翻转,并在安全门约束下按帧执行局部热修复。此外提供基于 SEM IP 的 SEU 注入验证能力——仅要求 JTAG 与时钟的最小硬件方案,可 在地面无辐射环境下评估用户 FPGA 设计的 SEU 敏感度。
工作原理
背景:配置存储器与单粒子翻转
SRAM 型 FPGA 的逻辑功能、布线和存储初始化全部由片上配置存储器 (configuration memory,SRAM 单元阵列)决定。空间辐射环境中的高能粒子 可能在配置存储器中引发单粒子翻转(SEU):一个或多个配置位被改变,并 一直保持到下次重配置。翻转积累到一定程度会导致逻辑功能异常,因此需要 周期性校验配置存储器并在发现差异时修复(这一过程称为 scrubbing)。
RBCRC:片上回读 CRC 与帧 ECC
RBCRC(Readback CRC)是 7 系列 FPGA 器件预先存在的配置自检机制, 由片上专用硬件实现,不占用用户逻辑与外部链路,是常开的第一道检测:
POST_CRC后,配置逻辑以独立后台时钟 (如 6 MHz)持续扫描全部配置帧,重算 CRC 并与配置时寄存的参考值 比较;不一致时置位STAT.CRC_ERROR,可选拉低 INIT_B (POST_CRC_INIT_FLAG)给出带外硬件告警。FRAME_ECCE2原语输出每帧 13 位 Hamming SECDED 状态——ECCERROR/ECCERRORSINGLE、出错 FAR、SYNWORD/SYNBIT/SYNDROME,可将单比特错误定位到帧内具体 字与位。POST_CRC_ACTION支持HALT、CONTINUE(仅指示)、CORRECT_AND_HALT、CORRECT_AND_CONTINUE(自动纠正单比特), 可按产品策略选择。DESYNC收尾、IR 退出配置指令)后自动恢复。BITSECC:配置回读校验与选择性重写
BITSECC 是 SEMX 在 RBCRC 之上的外部增强通道:配置存储器回读 校验与选择性重写,补齐 RBCRC 所缺的逐位取证与受控修复能力。名称与 接口无关(当前实现为 JTAG,架构预留 ICAP/SelectMAP 支持):
JPROGRAM、全局清空或全局启动;写 事务统一以DESYNC收尾,写后回读复核。混合策略
两通道硬件独立、互为备份,组合部署而非二选一:
CORRECT_AND_*模式 虽可自动纠正单比特,但对设计策略无甄别能力,多比特翻转仅能检测。组合与独立使用
两通道可按任务阶段选择组合或独立部署:
POST_CRC=DISABLE的位流即可 在位流级关闭后台扫描,守护服务无需改动(遥测探测自动回退 unsupported,绝不伪报健康)。适用于在轨 SEU 敏感度统计:掩码 逐位比较在每次巡逻给出精确的翻转位置清单(FAR / 字 / 位),既不 存在自动纠正对事件的掩盖,也消除了回读与后台扫描并发的伪标志 干扰,便于按帧地址、块类型累积 SEU 截面、位置敏感度与多比特翻转 比例。代价是检出延迟为巡逻周期量级。SEU 注入验证:仅 JTAG + 时钟的最小硬件方案
帧 ECC 硬件交叉验证(见测试报告) 的 SEM 轨实现顺带产出了一种硬件需求极低的 SEU 注入验证方案,主要用途是 在地面无辐射环境下评估用户 FPGA 设计的 SEU 敏感度——加速器辐照试验 前的低成本预筛与定位手段:
frame_ecc模型已经 21 个硬件向量校准并固化为 回归测试,syndrome 与帧内位置的映射逐位确定。性能评估
以 XC7K325T(28,292 帧 × 101 字 ≈ 286 万字)与本仓库参考配置估算:
POST_CRC_FREQ=6)≈ 0.48 sCORRECT_AND_CONTINUE)说明:扫描周期按”每时钟 1 字”一阶估算,轮次实测待补;扫描频率可经
POST_CRC_FREQ调整,响应时间与频率成反比。当前构建写门禁用 (write_gate=disabled),修复行为受控,BITSECC 修复延迟为设计估算。巡逻守护服务:错误报告与审计
守护服务(semxd)对在轨试验的价值在于结构化、可追溯的错误记录:
healthy(本周期无掩码后差异)、suspect(存在差异或 RBCRC 报警)、identity-mismatch(加载设计与黄金绑定不符,如回退 到出厂位流)、unknown(链路或软件异常,绝不伪报健康)。suspect-difference:掩码后差异统计(帧数 / 字数 / 位数 / 比例) 与示例帧清单(每帧 FAR、差异字数、差异位数,最多 32 例);rbcrc-crc-error:STAT 寄存器CRC_ERROR置位(含完整 STAT 值),即片上后台扫描检出配置翻转;identity-mismatch:差异比例超身份门限,拒绝误判;cycle-error:回读 / 探测失败的异常信息;/var/opt/sds3/semx/log/audit.jsonl),每条记录含 UTC 毫秒时间戳、事件名、 semxd 版本,10 MB 自动轮转;当前状态快照在state.json;运行日志 经journalctl -u semx-daemon.service查看。审计文件可直接用于 在轨 SEU 计数、位置分布与敏感性统计的地面回收分析。安装、配置项与判读细节见 docs/semx-daemon-ops.md。
术语解释
功能特性
POST_CRC=ENABLE在线检测部署支持,片上遥测经 CRC32 保护的 USER2 协议输出,支持错误定位(FAR/ECC 细节)。/var/opt/sds3/semx/下用户自主部署的数据(启动校验绑定);空配置 自动恢复(STAT DONE_IN 低时自动加载部署位流并复核)。仓库结构
openocd/为 Git submodule:Maiar 维护的 OpenOCD fork 的semx分支(上游官方 master + SEMX 专用补丁),克隆本仓库后执行git submodule update --init(或克隆时加--recursive)获取。快速开始
环境要求:Python 3(解析器与守护服务)、Vivado(位流构建,2019.2 实 测)、实板巡逻需运行定制 OpenOCD 的主机、OpenOCD 支持的任意 JTAG 适 配器及目标 7 系列 FPGA。所有配置操作经 OpenOCD 统一完成,不依赖特定 厂商的适配器驱动或设备。
守护服务的安装、配置与判读见 docs/semx-daemon-ops.md。
文档
安全须知
写配置功能默认禁用。除显式授权的受限实验外,所有写配置 SRAM 的命令必 须保持拒绝状态;敏感资源和未知帧默认只读。
许可证
MIT。版权所有:Jonah Liu liujiahan@gmail.com。
归属
SEMX 是 Maiar Lab SDS³ 开源卫星计算软件栈的功能组件,与
sds3_ttc、sds3_firmware等组件共同构成星上服务体系。