FPGA可靠性设计与动态重构技术

FPGA技术江湖 2026-10-29 08:17

面向 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 主要故障机制

故障机制
主要对象
典型影响
主要对策
SEU
配置位、寄存器、BRAM
状态或逻辑功能翻转
TMR、ECC、Scrubbing
MBU
相邻配置位或存储位
一个码字或多个副本同时错误
交织、物理隔离、增强ECC
SET
组合逻辑、时钟、复位
瞬态脉冲、误触发
滤波、同步、冗余采样
SEL
器件寄生结构
过流、死机、永久损坏风险
外部限流、断电重启
TID
器件工艺和介质
参数漂移、时序恶化
器件筛选、辐射试验、降额
配置帧错误
配置SRAM
用户逻辑持续异常
CRC/ECC、SEM、Scrubbing
电源/热异常
电源、PLL、时钟
复位、失锁、任务降级
监控、切换、硬件保护

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

核心原则是:

  1. 静态区域承载最小但最可靠的监控和恢复逻辑;
  2. 关键用户逻辑采用有边界的冗余,而不是无差别全芯片复制;
  3. 配置错误与用户数据错误分别处理;
  4. 局部重构必须有整片重配置和安全模式兜底;
  5. 任何可靠性措施都必须有故障注入和恢复时间指标。

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 不同模块的推荐保护方式

模块
推荐保护
安全模式控制器
TMR、独立看门狗、非法状态恢复
任务状态机
TMR、状态超时、状态合法性检查
BRAM/URAM缓存
ECC、CRC、错误重载
高速数据链路
CRC、序号、重传、链路重训练
DSP数据通路
结果校验、范围检查、必要时重算
配置寄存器
镜像寄存器、奇偶校验、写后读回
时钟控制
PLL锁定监控、备用时钟、超时复位

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[仿真、验证与下载]

典型流程:

  1. 选择目标器件并建立工程;
  2. 将项目转换为PR/DFX流程;
  3. 划分静态区域和RP;
  4. 为RP定义固定接口;
  5. 创建两个或多个RM;
  6. 约束RP对应的Pblock;
  7. 完成综合、布局和布线;
  8. 生成完整配置和部分配置镜像;
  9. 验证RM兼容性;
  10. 在硬件上执行重构和恢复测试。

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多级镜像;
  • 独立看门狗;
  • 重构结果遥测;
  • 重构过程中关闭危险输出。

推荐的故障恢复顺序:

  1. 检测并记录错误;
  2. 隔离故障RP;
  3. 加载备用RM;
  4. 验证时钟、复位和接口握手;
  5. 成功后恢复业务;
  6. 失败时加载Recovery RM;
  7. 必要时执行整片重配置;
  8. 最终进入安全模式并等待地面指令。

10. 验证与故障注入

10.1 验证层次

flowchart TB
    A[RTL仿真] --> B[门级/时序仿真]
    B --> C[配置错误注入]
    C --> D[DFX重构验证]
    D --> E[板级电源与时钟测试]
    E --> F[辐射与环境试验]
    F --> G[在轨遥测与故障统计]

10.2 故障注入项目

类别
注入示例
期望结果
状态机
翻转状态位
回到安全状态
TMR
单副本翻转
多数表决保持正确
BRAM
单bit、双bit和多bit错误
ECC纠正或报告不可纠正
配置帧
配置位翻转
SEM/Scrubbing检测并修复
链路
CRC错误、丢包、乱序
丢弃、重传或重新对齐
时钟
PLL失锁、时钟停止
切换或复位
重构
部分比特流错误
回滚或加载备用RM
电源
欠压、过流
保护、关断和重启
PL Reload
NoC/IO/地址不兼容
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可靠性设计与动态重构技术图1 
FPGA可靠性设计与动态重构技术图2 

FPGA可靠性设计与动态重构技术图3
FPGA可靠性设计与动态重构技术图4

FPGA技术江湖广发江湖帖

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


FPGA技术江湖微信交流群

FPGA可靠性设计与动态重构技术图5

加群主微信,备注姓名+学校/公司+专业/岗位进群


FPGA技术江湖QQ交流群

FPGA可靠性设计与动态重构技术图6

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

FPGA可靠性设计与动态重构技术图7


关于科技区角:国内科技展会垂直内容策划服务商,提供从论坛内容全案策划、会展市场化IP打造到精准专业观众一站式邀约服务,以产业内容吸引高质量B端人群,打通展会从议题设计、演讲嘉宾邀约、宣传预热、精准邀观到供需对接全链路。
声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。
FPGA
more
分享一个完全开源、纯Verilog实现的FPGA项目
FPGA校招 | 诺瓦FPGA大神觉醒计划
AI 替你搬砖!AMD 开源 FPGA 开发助手
京微齐力 FPGA & HPU:以异构可编程芯片赋能多行业智能化发展
从 CUDA 迁移到 ROCm,FPGA / 嵌入式 AI |AMD 嵌入式峰会深圳站
Xilinx FPGA的BANK标号命令规则
FPGA,物理AI、Agent算力、Chiplet封装重构行业新格局
AI算力大狂欢下,FPGA的新生之道
FPGA龙头,前三季度净利最高预增248%
FPGA全行业落地全景:工业自动化领域真实应用案例解析
Copyright © 2025-成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号