1. 星载FPGA内存系统概述

星载FPGA内存系统并不是地面嵌入式系统的简单“上天版本”。同一颗卫星在轨运行时,FPGA及其外挂存储器要同时承受空间辐射、宽温循环、供电波动和长期不可维修等多重约束。理解这些约束如何转化为对存储数据的威胁,是后续学习ECC编码、擦洗、冗余与容错设计的前提。本章先建立整体认知:星载环境到底特殊在哪里,FPGA能用哪些内存,为什么必须做数据保护,以及本课程将按什么线索展开。

1.1 星载环境的三类特殊约束

星载环境对内存系统的影响可以归纳为辐射、温度与可靠性三个维度。

辐射效应是最核心的威胁。高能粒子穿过存储单元时,可能直接翻转一个或多个比特,称为单粒子翻转(SEU);若粒子能量足够高,还可能引发单粒子锁定(SEL)或单粒子功能中断(SEFI)。SEU是“软错误”,掉电即消失,但会持续污染数据直到被纠正或覆盖;SEL则可能造成持续大电流,必须靠断电保护电路处理。此外,长期累积的电离总剂量(TID)会导致器件参数漂移,最终失效。

温度与供电方面,卫星在轨经历从深冷到高温的循环,存储器读写时序余量随之变化;太阳能帆板供电与蓄电池切换也会带来电压波动。这些因素本身不直接翻转比特,但会降低时序裕量,使原本安全的访问在极端条件下出错。

不可维修性决定了设计哲学:地面系统可以重启、换件,星载系统一旦发射就只能依靠自身容错。因此数据保护不能是“出问题再补救”,而必须在设计阶段就嵌入到存储访问的每一次读写中。

1.2 FPGA可用的内存类型

星载FPGA内部及周边通常涉及以下几类存储资源,它们的辐射敏感性和用途差异很大。

  • 配置存储器(CRAM):决定FPGA逻辑功能。SRAM型FPGA的配置位对SEU敏感,翻转可能导致逻辑功能改变,通常需要配置擦洗或三模冗余保护。
  • 块RAM(BRAM):片内高速存储,常用于缓存、FIFO和查找表。BRAM同样受SEU影响,是ECC和擦洗的重点对象。
  • 分布式RAM与寄存器:由查找表和触发器构成,容量小但分布广,翻转影响局部逻辑,通常结合TMR使用。
  • 外挂存储器:包括SRAM、SDRAM、NOR/NAND Flash等。SRAM速度快但密度低、易受SEU;SDRAM密度高但需刷新,刷新过程本身也可能引入错误;Flash用于存储程序或关键数据,需关注位翻转与坏块。

不同内存的“错误代价”不同:CRAM翻转可能让整个设计失效,BRAM翻转污染的是数据,外挂存储翻转则可能让程序或参数出错。因此保护策略必须按对象分层设计。

1.3 数据保护需求与课程框架

数据保护的目标可以概括为三个层次:检错(发现错误)、纠错(恢复正确数据)、容错(在错误发生时系统仍能完成任务)。对应到工程手段,主要包括:

  • 错误检测与纠正码(ECC):如汉明码、SECDED,用于BRAM和外挂存储;
  • 存储器擦洗(Scrubbing):周期性读取并纠正累积错误,防止多位翻转;
  • 冗余与表决:TMR、双机比较,用于关键逻辑和配置;
  • 刷新与重写:针对SDRAM和Flash的周期性维护;
  • 地址与数据完整性校验:防止访问错位或总线错误。

本课程后续将沿着“威胁—机制—实现—验证”的线索展开:先讲清SEU与ECC的数学基础,再进入FPGA内部BRAM ECC的具体实现,然后讨论外挂存储器的保护、擦洗策略、冗余设计,最后落到在轨验证与故障注入测试。每一章都会给出可操作的参数、代码片段或判断依据,而不是停留在概念层面。

星载FPGA内存系统:环境威胁 → 存储对象 → 保护手段 星载环境威胁 辐射效应 SEU / SEL / SEFI TID 累积损伤 温度与供电 宽温循环 电压波动 / 时序余量 不可维修性 发射后无法换件 必须设计内嵌容错 长期在轨 错误累积 需周期性维护 FPGA内存对象 配置存储器 CRAM 决定逻辑功能 · 需擦洗/TMR 块RAM BRAM 缓存/FIFO · ECC重点 分布式RAM/寄存器 局部逻辑 · 常配TMR 外挂SRAM/SDRAM 高密度 · 需刷新/ECC NOR/NAND Flash 程序/参数 · 坏块管理 数据保护手段 ECC 检错纠错 汉明码 / SECDED · 单比特纠、双比特检 存储器擦洗 Scrubbing 周期读取纠正 · 防多位累积 冗余与表决 TMR / 双机比较 · 关键逻辑 刷新与重写 SDRAM刷新 · Flash重写 地址/数据完整性校验 防访问错位 · 总线保护 作用 防护 课程线索:威胁分析 → ECC数学基础 → BRAM ECC实现 → 外挂存储保护 → 擦洗策略 → 冗余设计 → 在轨验证与故障注入

1.4 一个直观的示例:BRAM单比特翻转

为了把抽象威胁落到具体数字,考虑一个教学示例。假设某星载FPGA的BRAM工作频率为100 MHz,数据位宽32 bit,配置为SECDED(单纠双检)ECC,每32 bit数据附加7 bit校验位。若某轨道环境下单比特翻转率约为每比特每天 1×10⁻⁷ 次,则一个 1 Mbit 的BRAM阵列每天预期翻转次数约为:

1×10⁶ bit × 1×10⁻⁷ /bit/天 = 0.1 次/天

这意味着平均每10天就会出现一次单比特错误。若没有ECC,这个错误会一直留在存储单元中,直到被新数据覆盖;若两次翻转恰好落在同一个ECC码字内,就会形成双比特错误,SECDED只能检测而无法纠正。因此,擦洗周期必须远小于“同一码字内累积两次翻转”的平均时间。按上述速率,一个码字(39 bit)内出现两次翻转的平均时间约为:

1 / (39 × (1×10⁻⁷)² × 86400) ≈ 7.6×10⁴ 天

这个数字看起来很大,但注意它随轨道环境恶化会急剧下降,且实际中还存在多位翻转(MCU)和工艺差异。工程上通常把擦洗周期设为秒级到分钟级,而不是依赖这个理论值。这个示例说明:ECC负责“纠正已发生的单比特错误”,擦洗负责“防止错误累积成不可纠正状态”,两者必须配合。

学习建议:本章只需建立“环境威胁—存储对象—保护手段”的对应关系。后续章节会逐一展开ECC编码、Verilog实现、擦洗状态机和故障注入测试,遇到具体参数时再回头对照本章的框架。

1.5 本章小结