可靠性设计不是简单地对所有逻辑复制三份,而是一个覆盖器件、配置存储器、用户逻辑、数据通路、电源时钟、在轨维护和验证流程的系统工程。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
核心原则是:
静态区域承载最小但最可靠的监控和恢复逻辑;
关键用户逻辑采用有边界的冗余,而不是无差别全芯片复制;
配置错误与用户数据错误分别处理;
局部重构必须有整片重配置和安全模式兜底;
任何可靠性措施都必须有故障注入和恢复时间指标。
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[输出]
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
flowchart TD
A[读取配置帧] --> B[CRC/ECC检查]
B --> C{发现配置错误?}
C -->|否| D[扫描下一帧]
C -->|可纠正| E[修复当前配置帧]
C -->|不可纠正| F[标记分区失效]
E --> G[记录地址和计数]
F --> H[局部重构或整片重配置]
G --> D
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: 备用或升级算法]
flowchart LR
A[建立静态设计] --> B[划分RP]
B --> C[定义固定接口]
C --> D[创建多个RM]
D --> E[建立Pblock]
E --> F[综合与实现静态设计]
F --> G[分别实现各RM]
G --> H[生成完整和部分比特流]
H --> I[仿真、验证与下载]