1. 从“大锅饭”到“精装修”:为什么我们需要细粒度TMR?
大家好,我是老张,在FPGA可靠性设计这个坑里摸爬滚打了十几年,从早期的航天载荷到后来的高能物理探测器,没少跟单粒子翻转(SEU)和单粒子瞬态脉冲(SET)这些“太空捣蛋鬼”打交道。刚开始做三模冗余(TMR)的时候,想法很简单粗暴:把整个设计复制三份,再加个表决器,齐活!这就像给房子做抗震,不管三七二十一,把整栋楼用钢架再包两层。结果呢?资源占用直接飙到300%以上,功耗也高得吓人,项目还没上天,功耗预算就先“上天”了。最关键的是,那个负责“拍板”的表决器自己还是个“裸奔”状态,一旦它被粒子打中出错,整个冗余系统就全完了。
这就是传统粗粒度TMR的尴尬。它提供的是一种“大锅饭”式的保护,看似全面,实则浪费严重,且存在明显的单点故障。后来我们遇到了更棘手的场景:在一些高能物理实验中,粒子束流强度极高,SEU/SET的发生频率不再是“几年一遇”,而是“分秒必争”。粗粒度的保护根本来不及反应,一个SET在数据路径上窜过,可能同时污染三个冗余模块共享的线路,导致表决器收到三个一样的错误结果,保护彻底失效。
所以,细粒度TMR 技术应运而生。它的核心思想不再是“整体复制”,而是“精准加固”。就像给房子的承重墙、关键梁柱进行重点抗震加固,而不是把整个建筑再裹一遍。我们把需要保护的设计,按照逻辑功能、数据流或者模块边界,划分成更小的“颗粒”,然后针对这些颗粒单独实施TMR。这样做,目标更明确,资源用在刀刃上,容错响应也更及时。
但问题来了,“颗粒”到底应该多细?怎么划分?这就是我们今天要深入探讨的四种主流细粒度策略:局部TMR(LTMR)、分布式TMR(DTMR)、全局TMR(GTMR)和块TMR(BTMR)。每一种策略,都是资源、功耗、保护强度三者之间的一场精密权衡。没有最好的,只有最适合你当前项目约束的。接下来,我就结合我踩过的坑和成功的案例,带你把这四种策略的里里外外、适用场景和隐藏陷阱,一次聊透。
2. 四大细粒度策略深度拆解:你的设计该穿哪件“防护服”?
面对不同的故障模型、资源预算和设计复杂度,你需要像挑选防护服一样,为你的FPGA设计挑选合适的TMR策略。下面我们就来一件件试穿,看看它们各自的“尺码”和“防护等级”。
2.1 局部TMR(LTMR):轻量级的“重点防护”
LTMR的策略非常聚焦:只保护触发器(Flip-Flop)。它把设计中的所有触发器都复制成三份,在它们的输出端插入一个表决器,确保最终输出的状态是多数正确的。至于组合逻辑(那些与门、或门、加法器等)和数据输入路径,LTMR选择让它们“共享”。
实战场景与代码示意: 假设你有一个关键的状态机,它的状态寄存器至关重要。用LTMR,你的代码可能从这样:
reg [2:0] state;
always @(posedge clk) begin
if (reset) state <= IDLE;
else state <= next_state;
end
变成这样(概念示意,实际由工具自动插入):
// 三个冗余的触发器
reg [2:0] state_0, state_1, state_2;
// 表决器实例化
voter voter_inst (
.in0(state_0),
.in1(state_1),
.in2(state_2),
.out(state)
);
always @(posedge clk) begin
if (reset) begin
state_0 <= IDLE; state_1 <= IDLE; state_2 <= IDLE;
end else begin
state_0 <= next_state; // 共享同一个next_state组合逻辑
state_1 <= next_state;
state_2 <= next_state;
end
end
优点显而易见:面积和功耗开销最小,通常只比原始设计增加30%-50%。因为它只增加了触发器和少量表决器。
但它的“命门”也同样明显:
- 不防SET:这是LTMR最致命的弱点。因为三个触发器的数据输入(
next_state)是同一套组合逻辑产生的。如果一个高能粒子击中这段组合逻辑,产生一个毛刺(SET),这个错误脉冲会同时传递给三个触发

346

被折叠的 条评论
为什么被折叠?



