在航天应用中,为了降低单粒子翻转对运行中的FPGA产生的影响,采用三模冗余的方式对程序进行处理,步骤如下:
1)编写原始程序(此处随意举例)
2)对工程进行编译,生成报告如下。
从图中可以看出,总的count为9,count*area为2.0。从生成的RTL网表中看出使用了一个D触发器。
3)将工程配置为三模冗余模式。(也可以采用同样的方式将模块或者寄存器配置为三模冗余方式)。配置方法为在模块之后添加“/* synthesis syn_radhardlevel=tmr */”,如下图所示。
4、再次对工程进行编译,生成报告如下。
从图中可以看出总的count由原来的9增加到12,count*area由原来的2.0增加到5.0。说明资源量不是直接变为3倍,而是综合优化之后的资源量。
从生成的RTL网表中看出,之前只使用了一个D触发器,现在是三个D触发器,并且在三个触发器之后增加了仲裁机制。可以得出结论,三模冗余成功了。
PS:Xilinx的FPGA也可以使用TMR Tool工具进行三模处理,但是对于新型号的FPGA由于限制不再支持。但可以自己写三模程序,思路与三模之后的RTL网表一致,三个模块结果进行仲裁(!!!将每个bit信号先两两取与门,再将生成的三个信号取或门!!!)。