找回密码
立即注册
搜索
发回帖 发新帖

6696

积分

0

好友

811

主题
发表于 11 小时前 | 查看: 4| 回复: 0

面向 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[输出]

三取二表决逻辑可以用如下与或表达式实现:

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 可靠性设计,最终应形成如下闭环:

    1. 器件与辐射评估;
    2. TMR/ECC/CRC/看门狗;
    3. 配置 CRC/SEM/Scrubbing;
    4. Golden 与 Backup 镜像;
    5. DFX 局部动态重构;
    6. 整片重配置和安全模式;
    7. 故障注入、DRC、pr_verify 和辐射试验。

    TMR 保护关键用户逻辑,ECC 保护存储器,CRC 保护传输,SEM 和 Scrubbing 保护配置存储器,DFX 实现功能替换和故障隔离。

    真正可靠的系统不是“不会出错”,而是能够在出错后识别故障、隔离故障、选择可信镜像、完成重构并在规定时间内恢复任务。

    本文内容结合 Vivado 知识库与工程验证流程整理。




    上一篇:嵌入式故障录波黑匣子设计:环形缓冲、预触发与Flash落盘方案
    下一篇:AMD 正式发布 Ross AI 助手:FPGA 开发安装配置实战教程
    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /1 下一条

    手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

    GMT+8, 2026-10-28 15:05 , Processed in 0.087965 second(s), 42 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2025-2026 云栈社区.

    快速回复 返回顶部 返回列表