4. 硬件冗余技术(下):TMR的粒度选择与优化
好,咱们接着聊TMR。上一节我们把三模冗余的基本原理讲透了,这一节重点说说粒度——说白了,就是你在哪个层次做三份拷贝。
我个人习惯把TMR的粒度分成三个层级:系统级、模块级、门级。每个层级各有各的脾气,选错了,功耗和面积直接爆炸。
4.1 TMR的粒度选择
4.1.1 系统级TMR
系统级TMR,就是把整个芯片复制三份。三个独立的芯片跑同样的程序,输出通过多数表决器决定。
- 优点:设计最简单,几乎不需要修改原有逻辑
- 缺点:面积和功耗直接翻三倍,而且三个芯片的同步是个大麻烦
- 适用场景:对可靠性要求极高、对成本不敏感的系统,比如卫星上的主控计算机
我踩过的坑:
我曾经在一个星载项目中用了系统级TMR,结果三个芯片的时钟相位差一直调不好。最后不得不在每个芯片入口加FIFO做同步,面积又多了10%。
4.1.2 模块级TMR
模块级TMR,是把芯片内部的关键模块复制三份。比如CPU里的ALU、寄存器堆、Cache控制器,每个都做成三份。
- 优点:比系统级灵活,可以只保护关键路径
- 缺点:模块间的接口需要做同步,设计复杂度上升
- 适用场景:大部分航天级芯片的标配做法
嗯,这里要注意:模块级TMR的投票器位置很关键。我建议把投票器放在模块的输出端,而不是内部每个寄存器后面。否则面积会失控。
4.1.3 门级TMR
门级TMR,就是每个逻辑门都复制三份。这是最细粒度的冗余,也是面积开销最大的。
- 优点:能检测并纠正任意单点故障
- 缺点:面积翻三倍以上(因为还要加投票器),功耗也翻三倍
- 适用场景:极少用,除非是那种一颗单粒子翻转就能要命的场景
警告:门级TMR的布线复杂度极高。三个副本之间的走线必须等长,否则时序会出问题。我曾经见过一个项目,门级TMR做完后时序收敛不了,最后不得不降频运行。
4.2 TMR的局限性
TMR不是万能的。你想想看,如果它完美无缺,那所有芯片都用TMR不就行了?
4.2.1 功耗问题
三倍冗余意味着三倍功耗。对于星载设备来说,功耗是硬约束。我见过一个项目,TMR做完后功耗超标40%,最后不得不降级成DMR(双模冗余)加检错。
4.2.2 面积问题
面积不只是三倍。投票器、同步逻辑、时钟树,这些都会额外增加面积。实际经验是:模块级TMR的面积大约是原来的3.2到3.5倍。
4.2.3 同步问题
这是最头疼的。三个副本的时钟必须严格对齐,否则投票器会输出错误结果。我习惯的做法是:
- 三个副本共用同一个时钟源
- 时钟树做平衡设计
- 在投票器前加一级同步寄存器
小技巧:如果三个副本的路径延迟差异较大,可以在每个副本输出端加一个可编程延迟链。这样可以在测试阶段手动调整对齐。
4.3 TMR的优化技术
既然TMR有这么多局限,那怎么优化呢?我常用的两个方法:局部TMR和选择性TMR。
4.3.1 局部TMR
局部TMR,就是只对芯片中容易出错的区域做三模冗余。比如:
- SRAM单元(最容易发生单粒子翻转)
- 状态机(一旦出错,系统行为不可预测)
- 关键控制信号路径
其他不那么关键的区域,比如数据通路,可以用检错码(ECC)来保护。这样面积和功耗能省不少。
4.3.2 选择性TMR
选择性TMR更精细。它不是对整个模块做TMR,而是对模块内部的特定路径做TMR。比如:
- 只对时序裕量不足的路径做TMR
- 只对扇出较大的节点做TMR
- 只对组合逻辑深度较大的路径做TMR
说白了,就是用EDA工具做故障注入分析,找出最脆弱的那些点,然后只保护它们。
我的经验:选择性TMR可以把面积开销控制在1.5倍以内,同时达到90%以上的故障覆盖率。性价比很高。
4.4 案例:基于TMR的FPGA抗辐照设计
最后,咱们看一个实际案例。我在一个低轨卫星项目中,用Xilinx的Kintex-7 FPGA做了一个抗辐照控制器。
设计思路是这样的:
- 把FPGA内部的关键状态机做成模块级TMR
- 把片上BRAM用ECC保护(而不是TMR,因为BRAM本身有纠错能力)
- 把配置存储器用TMR保护(FPGA的配置位一旦翻转,整个逻辑都会乱掉)
- 在FPGA外部加一个看门狗,检测三个副本是否同步
代码示例(Verilog,模块级TMR的投票器):
module voter #(
parameter WIDTH = 8
)(
input [WIDTH-1:0] a, b, c,
output [WIDTH-1:0] y
);
// 三选二多数表决
assign y = (a & b) | (b & c) | (a & c);
endmodule
这个投票器很简单,但很实用。注意:这里用的是组合逻辑,没有加寄存器。如果你需要流水线,可以在投票器前后各加一级寄存器。
避坑指南:投票器本身也可能被单粒子击中。所以投票器也要做三模冗余——三个投票器,每个的输出再送进一个投票器。嗯,听起来有点递归,但确实有必要。
实际测试结果:这个设计在轨运行了两年,没有发生过一次因单粒子翻转导致的系统故障。而同一颗卫星上另一个没有做TMR的FPGA,半年内就发生了三次故障。
所以,TMR虽然贵,但值这个价。
好了,这一节的内容就到这里。TMR的粒度选择,说白了就是面积、功耗、可靠性之间的权衡。没有最好的方案,只有最适合你项目的方案。