面向 Xilinx FPGA(现 AMD FPGA)在低轨星座、卫星通信、软件定义载荷和高可靠嵌入式系统中的工程实践。
版本说明:Vivado 命令、器件能力和 Segmented Configuration 细节会随器件系列及 Vivado 版本变化。本文给出的 Tcl 用于说明流程,实际项目应以目标器件的 Vivado Help、器件数据手册和相应版本的官方用户指南为准。
摘要
FPGA 在低轨卫星中通常承担基带处理、协议处理、星间链路、高速接口和载荷算法等任务。与地面系统相比,轨道环境会引入单粒子翻转、单粒子瞬态、单粒子闩锁和总剂量效应;同时,卫星通常无法现场维修,因此必须在设计阶段建立可检测、可隔离、可纠正、可重构的闭环。
可靠性设计不是简单地对所有逻辑复制三份,而是一个覆盖器件、配置存储器、用户逻辑、数据通路、电源时钟、在轨维护和验证流程的系统工程。Vivado 的 DFX(Dynamic Function eXchange)进一步允许在不停止静态逻辑的情况下替换指定功能分区,使同一片 FPGA 能够执行多种载荷算法、实现在线升级,或在故障后加载备用模块。
本文给出一套从故障模型到 Vivado DFX实现、从仿真到在轨恢复的完整方法。
1. 可靠性设计目标
1.1 可靠性闭环
可靠性设计的基本闭环如下:
flowchart LR
A[故障发生] --> B[故障检测]
B --> C[错误隔离]
C --> D{可纠正?}
D -->|是| E[ECC/TMR/重传]
D -->|否| F[局部重构或整片重配置]
E --> G[任务恢复]
F --> G
G --> H[故障计数与遥测]
H --> I[地面分析与策略更新]
设计目标通常包括:
在规定时间内检测故障; 避免单点故障扩散到整机; 对可纠正错误自动恢复; 对不可纠正错误回滚到可信镜像; 在恢复期间关闭危险输出,例如射频发射; 向地面提供错误类型、地址、次数和恢复结果; 保证重构后的接口、时钟和状态重新建立。
1.2 主要故障机制
2. 可靠性总体架构
适合低轨载荷的分层结构如下:
flowchart TB
subgraph System[系统任务层]
W[Watchdog]
M[安全模式与任务降级]
T[遥测、日志与故障计数]
end
subgraph Config[配置与重构层]
S[SEM/配置错误检测]
R[Scrubbing]
D[DFX/局部重构]
G[Golden/Backup/Recovery镜像]
end
subgraph Logic[用户逻辑层]
V[TMR与多数表决]
Q[安全状态机]
C[CRC、序号、超时与重传]
end
subgraph Memory[存储层]
E[BRAM/URAM/FIFO ECC]
I[数据交织与双副本]
end
subgraph Device[器件与物理层]
P[电源、温度、时钟监控]
X[Pblock、时钟区域与物理隔离]
end
System --> Config
Config --> Logic
Logic --> Memory
Memory --> Device
核心原则是:
静态区域承载最小但最可靠的监控和恢复逻辑; 关键用户逻辑采用有边界的冗余,而不是无差别全芯片复制; 配置错误与用户数据错误分别处理; 局部重构必须有整片重配置和安全模式兜底; 任何可靠性措施都必须有故障注入和恢复时间指标。
3. 逻辑级容错设计
3.1 三模冗余 TMR
对于关键状态机、控制寄存器、任务调度和安全输出,可以使用三模冗余:
flowchart LR
I[输入] --> A[逻辑副本A]
I --> B[逻辑副本B]
I --> C[逻辑副本C]
A --> V[Majority Voter]
B --> V
C --> V
V --> O[输出]
三取二表决逻辑为:
Verilog示例:
assign voted_data =
(data_a & data_b) |
(data_a & data_c) |
(data_b & data_c);
TMR必须同时处理以下问题:
三个副本是否真正独立; voter是否为单点故障; 状态反馈是否仍然共用单份寄存器; 综合是否将三个等价副本合并; 布局是否把三个副本放在同一局部区域; 时钟和复位是否造成共同故障。
因此,TMR应与综合保护和物理约束配合使用:
set_property DONT_TOUCH true [get_cells -hierarchical *tmr_a*]
set_property DONT_TOUCH true [get_cells -hierarchical *tmr_b*]
set_property DONT_TOUCH true [get_cells -hierarchical *tmr_c*]
set_property KEEP true [get_nets -hierarchical *tmr_vote*]
实际约束对象应以综合后的层次名称为准。不能仅凭 RTL 中的实例名判断三个副本已经完成物理隔离。
3.2 安全状态机
关键状态机必须有非法状态恢复路径:
always_ff @(posedge clk) begin
if (reset) begin
state <= IDLE;
end else begin
case (state)
IDLE: state <= RUN;
RUN: state <= CHECK;
CHECK: state <= IDLE;
default: state <= SAFE;
endcase
end
end
建议同时增加:
状态转移超时; 命令序列校验; 参数范围检查; 非法操作码处理; 业务模块局部复位; 发射机关闭和功放保护; 故障恢复后的重新初始化。
3.3 不同模块的推荐保护方式
4. 存储器和数据通路保护
4.1 ECC和CRC的职责边界
ECC主要保护存储过程,CRC主要保护传输过程:
数据写入 BRAM -> ECC
数据在 FIFO 中 -> ECC/奇偶校验
数据跨链路传输 -> CRC/序号/重传
数据进入任务模块 -> 端到端校验
SEC-DED ECC通常可以实现单比特纠正和双比特检测,但无法保证任意多比特错误都能纠正。因此对关键数据应进一步使用:
双副本或三副本; 逻辑数据交织; 数据刷新; 任务重算; 软件校验和; 错误后丢帧而不是继续使用未知数据。
4.2 多比特翻转与交织
将逻辑相邻的bit分散到不同物理位置,可以降低MBU对单个ECC码字的破坏概率:
逻辑数据: D0 D1 D2 D3 D4 D5
物理布局: D0 D8 D16 D24 D1 D9 ...
交织深度应根据器件BRAM结构、预期粒子影响范围和ECC码字宽度确定,不能只凭经验固定一个数值。
5. 配置存储器可靠性
5.1 配置错误检测
FPGA配置SRAM发生翻转后,可能导致用户逻辑持续异常。设计应启用目标器件支持的配置监控机制,包括:
配置帧CRC; Frame ECC; 配置错误状态寄存器; 错误计数; 错误注入; Golden Image恢复; 配置状态遥测。
5.2 Scrubbing流程
flowchart TD
A[读取配置帧] --> B[CRC/ECC检查]
B --> C{发现配置错误?}
C -->|否| D[扫描下一帧]
C -->|可纠正| E[修复当前配置帧]
C -->|不可纠正| F[标记分区失效]
E --> G[记录地址和计数]
F --> H[局部重构或整片重配置]
G --> D
Scrubbing可以分为:
被动刷新:检测到错误后修复; 主动刷新:周期性扫描和修复; 盲刷新:周期性重新写入,不逐帧判断。
对于长期无人值守系统,通常采用“配置错误检测 + 主动Scrubbing + 不可恢复时整片重配置”的组合。
5.3 SEM方案
AMD/Xilinx SEM方案主要用于配置存储器软错误缓解,典型功能包括:
配置帧扫描; 可纠正错误处理; 不可纠正错误检测; 错误注入; 错误状态和计数输出。
SEM并不替代TMR、BRAM ECC、看门狗或任务恢复。应将SEM的状态接口接入故障管理控制器,并明确每类错误的动作:
6. 时钟、复位、电源和热设计
6.1 时钟
时钟网络具有高扇出和全局影响,应采用:
外部时钟监控; PLL/MMCM锁定检测; 备用时钟源; 时钟切换后的稳定等待; 专用时钟资源; 异步输入同步; 复位释放同步。
不建议使用普通组合逻辑直接门控关键时钟。
6.2 复位
复位应分层管理:
flowchart TB
P[上电复位] --> G[全局安全复位]
W[Watchdog] --> G
C[配置错误] --> G
L[PLL失锁] --> G
G --> D1[时钟域复位]
G --> D2[接口复位]
G --> D3[业务模块局部复位]
复位释放应与对应时钟同步,并避免一个异步复位信号同时成为全设计单点故障。
6.3 SEL、电源和热
单粒子闩锁或电源异常可能无法由FPGA内部逻辑恢复,因此需要外部电源控制器实现:
过流检测; 欠压和过压检测; 上电时序控制; 硬件关断; 重新上电; FPGA电流遥测; 温度超限降级。
可采用如下任务降级策略:
温度正常 -> 全性能运行
温度升高 -> 降频或关闭非关键模块
温度超限 -> 停止高功耗载荷和射频发射
温度严重异常 -> 进入安全模式并重新上电
7. Vivado DFX动态功能重构
7.1 核心概念
Vivado DFX的核心对象包括:
Static Region:静态区域; Reconfigurable Partition,RP:可重构分区; Reconfigurable Module,RM:可重构模块; Partial Bitstream:部分比特流; Pblock:物理区域约束; Abstract Shell:用于隔离和加速实现的抽象外壳。
flowchart TB
S[Static Region]
S --> CLK[时钟与复位]
S --> CFG[配置与重构控制器]
S --> IF[外部接口与任务管理]
S --> RP[Reconfigurable Partition]
RP --> A[RM_A: 基带模式A]
RP --> B[RM_B: 基带模式B]
RP --> C[RM_C: 备用或升级算法]
静态区域应保留:
时钟和复位; 配置控制; 故障管理; 最低限度通信; 安全模式; RP边界接口。
7.2 DFX适用场景
DFX适合:
在轨更新基带算法; 在通信、测控和载荷模式之间切换; 加载不同协议或编码模块; 局部故障隔离; 降低多功能系统的硬件数量; 在不停止静态逻辑的情况下更换业务模块。
DFX不应被理解为“整个FPGA随时换程序”。真正可重构的只是定义明确、物理边界稳定的RP。
8. Vivado传统DFX实现流程
8.1 设计步骤
flowchart LR
A[建立静态设计] --> B[划分RP]
B --> C[定义固定接口]
C --> D[创建多个RM]
D --> E[建立Pblock]
E --> F[综合与实现静态设计]
F --> G[分别实现各RM]
G --> H[生成完整和部分比特流]
H --> I[仿真、验证与下载]
典型流程:
选择目标器件并建立工程; 将项目转换为PR/DFX流程; 划分静态区域和RP; 为RP定义固定接口; 创建两个或多个RM; 约束RP对应的Pblock; 完成综合、布局和布线; 生成完整配置和部分配置镜像; 验证RM兼容性; 在硬件上执行重构和恢复测试。
8.2 启用DFX
项目级Tcl示例:
set_property PR_FLOW 1 [current_project]
IP Integrator中的可重构容器可配置为:
set_property CONFIG.ENABLE_DFX {true} [get_bd_cells <rp_container>]
执行后应重新验证Block Design,更新输出产品,并重新执行综合和实现。
8.3 Pblock约束
create_pblock pblock_rp
add_cells_to_pblock [get_pblocks pblock_rp] \
[get_cells -hierarchical <rp_instance>]
resize_pblock [get_pblocks pblock_rp] \
-add {CLOCKREGION_X2Y2:CLOCKREGION_X3Y3}
Pblock应同时考虑:
时钟区域完整性; BRAM、DSP、URAM资源; 高速收发器和硬核边界; 静态区到RP的接口布线; 资源余量; TMR副本的物理隔离; 未来RM的最大资源需求。
Pblock过小会导致资源不足和布线失败,过大则会侵占静态区域并扩大重构范围。
8.4 Block Design Container
在IP Integrator场景中,RM通常应由Block Design Container承载。容器应具有稳定的接口、固定的边界和可重构属性。不要通过简单层次化模块替代DFX所需的容器结构,否则可能在实现阶段出现分区识别或接口一致性问题。
9. 可靠性与DFX结合
动态重构控制器本身必须是高可靠模块。推荐架构如下:
stateDiagram-v2
[*] --> RUNNING
RUNNING --> ERROR_DETECTED: CRC/ECC/TMR/watchdog
ERROR_DETECTED --> ISOLATE: 关闭异常业务输出
ISOLATE --> LOAD_RM: 选择备用RM
LOAD_RM --> VERIFY_RM: 部分配置完成
VERIFY_RM --> RUNNING: 接口握手成功
VERIFY_RM --> LOAD_BACKUP: 校验失败
LOAD_BACKUP --> RUNNING: 备用RM成功
LOAD_BACKUP --> FULL_RECONFIG: 多次失败
FULL_RECONFIG --> SAFE_MODE: 完整配置失败
FULL_RECONFIG --> RUNNING: Golden Image成功
重构控制器建议具备:
TMR状态机; 重构超时; 部分比特流CRC; 版本号和目标分区检查; 重构失败回滚; Golden、Operational、Backup、Recovery多级镜像; 独立看门狗; 重构结果遥测; 重构过程中关闭危险输出。
推荐的故障恢复顺序:
检测并记录错误; 隔离故障RP; 加载备用RM; 验证时钟、复位和接口握手; 成功后恢复业务; 失败时加载Recovery RM; 必要时执行整片重配置; 最终进入安全模式并等待地面指令。
10. 验证与故障注入
10.1 验证层次
flowchart TB
A[RTL仿真] --> B[门级/时序仿真]
B --> C[配置错误注入]
C --> D[DFX重构验证]
D --> E[板级电源与时钟测试]
E --> F[辐射与环境试验]
F --> G[在轨遥测与故障统计]
10.2 故障注入项目
pr_verify拒绝 |
10.3 关键指标
故障覆盖率可以定义为:
还需要测量:
故障检测时间; 错误纠正时间; 局部重构时间; 整片重配置时间; 业务中断时间; 错误误报率; 未检测故障率; 重构后的接口恢复时间; 重构后数据一致性。
10.4 Vivado报告和检查
建议将以下结果纳入CI或发布门禁:
report_drc -file reports/drc.rpt
report_timing_summary -file reports/timing_summary.rpt
report_utilization -file reports/utilization.rpt
report_power -file reports/power.rpt
report_methodology -file reports/methodology.rpt
DFX项目还应保留:
每个RM的实现日志; Pblock和资源报告; post-route DCP; pr_verify结果;NoC .ncr文件;PDI和bitstream版本信息; Golden与Variant的配置差异记录。
11. 常见错误与改进方法
11.1 误把TMR当作完整可靠性方案
TMR只能缓解部分用户逻辑错误,不能解决:
配置存储器持续错误; BRAM数据损坏; 电源闩锁; 时钟失锁; voter自身故障; 软件任务死锁。
应将TMR与ECC、CRC、Scrubbing、看门狗和外部电源保护组合使用。
11.2 Pblock只按资源数量划分
Pblock不仅是资源盒子,还决定:
时钟可达性; 静态/RP接口布线; DFX边界稳定性; TMR物理隔离; 未来RM是否可实现。
必须在布局布线后检查实际占用和时序,而不是只看综合资源百分比。
11.3 变体中修改PS、NoC或boot路径
对于Versal PL Reload,变体不能随意改变PS域、boot路径、NoC物理路由或boot分区IO。未来功能需求应尽量在Golden设计中预留为超集。
11.4 只验证功能,不验证恢复
正常功能仿真只能证明“无故障时能工作”。可靠性验证必须证明:
故障能否被检测; 检测后是否进入正确状态; 重构是否成功; 重构失败是否回滚; 数据是否保持一致; 恢复时间是否满足任务要求。
12. 推荐的项目落地路线
阶段一:需求与器件选型
明确轨道、任务寿命和辐射环境; 获取目标器件的TID、SEE和SEL数据; 确定允许的业务中断时间; 选择宇航级器件或论证COTS加固方案。
阶段二:静态可靠性架构
建立安全模式和故障管理控制器; 规划时钟、电源、复位和监控; 划分TMR、ECC、CRC和数据重算边界; 预留Golden、Backup和Recovery镜像。
阶段三:DFX架构
确定静态区域和RP; 固定RP接口; 评估最大RM资源需求; 设计Pblock和物理隔离; 规划局部重构和整片重配置路径。
阶段四:实现和验证
执行综合、布局、布线和时序分析; 执行DRC和方法学检查; 运行故障注入; 生成完整和部分配置镜像; 运行 pr_verify;进行板级、温度、电源和辐射验证。
阶段五:在轨运维
周期性Scrubbing; 错误统计和遥测; 远程加载经过认证的镜像; 失败自动回滚; 保留最小安全模式; 根据在轨错误率更新任务策略。
结语
面向低轨星座的FPGA可靠性设计,最终应形成如下闭环:
器件与辐射评估
↓
TMR/ECC/CRC/看门狗
↓
配置CRC/SEM/Scrubbing
↓
Golden与Backup镜像
↓
DFX局部动态重构
↓
整片重配置和安全模式
↓
故障注入、DRC、pr_verify和辐射试验
TMR保护关键用户逻辑,ECC保护存储器,CRC保护传输,SEM和Scrubbing保护配置存储器,DFX实现功能替换和故障隔离。
真正可靠的系统不是“不会出错”,而是能够在出错后识别故障、隔离故障、选择可信镜像、完成重构并在规定时间内恢复任务。
【注】本文由Agent结合Vivado知识库总结生成,略有删减。
- -THE END- -
往期精选


FPGA技术江湖广发江湖帖
无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。
FPGA技术江湖微信交流群

加群主微信,备注姓名+学校/公司+专业/岗位进群
FPGA技术江湖QQ交流群

备注姓名+学校/公司+专业/岗位进群
