引言
现场可编程门阵列(Field Programmable Gate Array,FPGA)是基于SRAM的一种硬件电路可重配置电子逻辑器件,可通过将硬件描述语言编译生成的硬件配置比特流编程到FPGA中,而使其硬件逻辑发生改变。FPGA在电子设计中的灵活性和通用性使其在航天、通信、医疗和工控等重要领域得到了广泛的应用。然而,FPGA中的硬件逻辑电路容易受到SEU(Single Event Upset)和SETs(Single Event Transients)故障的影响,从而导致系统失效。FPGA电路失效降低了基于FPGA的嵌入式系统的稳定性和寿命,同时会严重限制它在生产和生活各个方面的应用范围。系统备份、系统故障恢复和系统多模冗余设计是防止系统失效的有效方法。FPGA动态局部可重构技术是一种可应用于系统故障恢复的新兴技术,它可以在FPGA系统运行的过程中,动态地改变FPGA内部的部分逻辑电路块的逻辑功能,同时又不会影响其他逻辑的正常运转;二模冗余技术是一种典型的系统冗余容错设计方法,它为系统的重要模块设置备份模块,保证系统出现故障时依然可以稳定可靠地运转。基于上述思想,本文设计了一种基于FPGA动态可重构技术的二模冗余MIPS处理器。
1 总体方案
Xilinx公司的XC5VLX110T开发板是一个内含ML509芯片、具备内部逻辑块可动态配置能力的FPGA开发板。Verilog是一种结构化可综合的硬件描述语言,通过它可以很快地实现数字逻辑电路的结构级系统建模。本文以Xilinx公司的XC5VLX110T开发板作为系统开发平台,以Verilog语言开发了一种基于二模冗余结构的MIPS处理器系统。系统整体结构如图1所示。
系统的主要组成部分如表1所列。
IMEM是一个采用Xilinx公司IP生成器生成的FPGA内建存储器,由于MIPS处理器运行过程中不会改变指令存储器的内容,所以它被设计为无时钟门控的单端口只读存储器,存放MIPS处理器系统要执行的指令。IMEM的数据位宽为32位,存储深度为1 024。DMEM同样也是使用IP生成器生成的存储器,它存放MIPS处理器执行过程中所需的数据,是具有时钟边沿控制和使能控制的可读写单端口存储器。DMEM的数据位宽为32位,存储深度为1 024。MIPS模块是一个包含完整数据通路、ALU和控制逻辑的使用Verilog语言描述的单周期MIPS处理器,它的指令集大小为32,所有的指令均为整型操作指令。此处理器模块含有指令存储器和数据存储器外部接口,它是系统核心模块,所以被设计为FPGA中的可重构区域。ERR_VERIF模块是故障检测模块,它能对两MIPS系统的执行结果进行对比,并生成相应的故障控制信号;BIST模块也称为内建自测试模块,只有系统发生故障时,此模块才启动运行。它用来测试各子系统的正确性,并输出测试结果。
在图1中,以虚线框起来的部分为FPGA中的可重构区域。图中有两个可重构区域,上一个区域为主子系统区,下面一个区域为主子系统区的备份区。
2 工作原理
系统上电复位后,在两MIPS内部逻辑均正常的情况下,系统执行过程为:指令存储器根据系统复位后的指令执行地址将指令从IMEM中取出,送入两个MIPS系统中;两个MIPS处理器分别在指令的指示下完成相应的工作,然后将执行结果输出到ERR_VERIF模块、DMEM和IMEM模块;ERR_VERIF模块分析系统是否正常运转,然后将分析结果信息输出到FPGA上的LED灯A上。
当其中一个MIPS处理器的内部逻辑发生故障时,可假定为图1中上方的主MIPS区域故障。系统执行过程为:ERR_VERIF故障检测模块检测到系统的子区域出现故障,然后发出故障位置检测控制信号;此时,BIST模块接收到检测控制信息后,启动内建自测试系统,将故障测试向量输入MIPS系统。在开启了BIST模块后,系统的指令输入将不再来自IMEM模块,而是由BIST模块提供。同时,指令的执行结果也不会写回到DMEM模块中,而是反馈到BIST模块中。MIPS根据测试向量进行运算,然后将运算结果反馈给BIST单元。BIST单元的测试要进行多次,以确保对故障的准确判断。BIST得到执行结果后,对测试结果进行分析并判定当前MIPS系统是否正常运行,最后分别将分析结果输出到FPGA上的LED灯B、C上。
ERR_VERIF模块的故障分析方法为比较法。它将执行同样指令且同步运行的两个子系统的执行结果进行比较,当发现结果不一致时,就表示其中一个子系统出现了故障,这时需要使用BIST模块去主动定位故障位置。而BIST进行故障分析的方法与ERR_VERIF模块使用的方法本质上是相同的,但是实现方式不同。BIST模块将被测试模块产生的输出与BIST内部存储好的预期的输出进行比较,来测试被测模块是否出现故障。
检测出的故障情况有3种:主子系统故障、备份子系统工作正常;主子系统正常、备份子系统故障;主系统子系统和备份子系统均出错。BIST模块检测出故障情况后,会将故障情况显示于故障灯(也就是A、B、C)上。当3个故障灯中有灯亮时,则表示系统出现故障。灯A、B亮,表示主子系统出现故障;灯A、C亮,表示备份子系统出现故障;灯A、B、C亮,表示两子系统均出现了故障。在出现故障后,系统会根据具体情况,对系统输出进行调整。当主子系统出现故障而备份子系统未出现故障时,系统输出则来自备份子系统;当备份子系统出现故障而主子系统未出现故障,系统输出则来自主子系统。当两子系统都出现了问题时,则需要停机维护。当其中一个子系统出现故障时,需要将无故障的子系统比特流重新下载入FPGA系统中。在下载时,系统的工作无需停止。