叶雷 贾海鹏
【摘要】本文简要地对冗余备份的必要性作出了初步分析,并以自动修复为设计目标建立模型并加以论证。
【关键词】VHDL:Very high speed integraded circuit Hardware Description Language;超高速集;成电路硬件描述语言;FPGA:Field-Programable Gate Array;现场可编程门阵列
1.绪论
在当前电子产品日新月异的飞速发展下,社会生产力得到了急速的提升。在我们享受电子产品带来的各种便利的同时,其副作用也开始逐步凸现出来,最明显的外在表现就是随着电子产品集成度越来越高,速度越来越快,功能变得极度细化,各种专业的单功能芯片越来越多,这使得最终的产品的组成也不断趋于复杂化。
复杂化的副作用就是因元器件的种类和数量(包含集成电路内部的晶体管)不断攀升造成产品可靠性的不断下降。依据串联结构的可靠性模型计算可以使用下面的公式:
λGs=ΣNiλGiΠQi
其中各参数的定义如下:
λGs:设备总失效率;
Ni:第i种元器件数量;
λGi:第i种元器件的通用失效率;
ΠQi:第i种元器件的通用质量系数。
从公式中我们可以看出,随着元器件的种类和数量增加,设备的失效率呈非线性变化,也就是说,即使每一个元器件的可靠性都很高,在数量的堆积下也会导致设备整体的可靠性下滑。这里有一个简单的例子,那就是美国的航天飞机,据说上面的每一个元器件的可靠性都达到了六个9(99.9999%)以上,但整个航天飞机的可靠性却不足50%。同理,现在的集成电路的使用的硅单晶纯度达到14个9甚至更高,却因为集成的晶体管规模动辄数以亿计,从而使得良品率过于低下而导致造价高昂。
解决这个问题一般依靠两种方式,其一是继续通过提升单个组成部分或元器件的可靠性来完成,另一种则是在这种串联模型的基础上增加一个或多个并联模型,从而降低整体故障的风险。我们在这里只讨论后一种,这种方式通常也被称作冗余备份设计。
2.冗余备份设计的历史和发展
冗余备份设计起源很早,已经很难考证其由来,但是真正让人们大规模认识到其必要性还是来自19世纪后期发生的“爱迪生电灯事件”。事件起源于发明大王爱迪生发明白炽灯后,为了推广白炽灯成立了专门的公司花大力气进行推销,初期却应者寥寥。通过分析发现,爱迪生的电灯公司采用的是这样的控制模型,如图1所示。
图1
这是一个标准的串联模型,从发电厂到控制开关再到一长串用户,所经过的各个节点都是串在一起,用户没有独立的控制权,所有的电灯开关都掌握在发电厂的手里。同时,尽管爱迪生的白炽灯在走出实验室的时候已经拥有了上千小时的寿命,但是在庞大而脆弱的串联结构下表现糟糕,失效率和接入用户数量成正比,结果就是只要其中一处发生故障(断路),整个线路就全部瘫痪,令维修人员疲于奔命。
为了解决这个问题,爱迪生的电灯公司将控制模型作了这样的改进如图2所示。
图2
经过改进以后,用户接入模式由串行改为并行,单个用户故障(断路)不会影响其他用户,大大提升了整个配电系统的可靠性。这也成为现代供电系统的基本模型。从某种意义上来讲,假设用户的功能和用电级别相同,就可以把并联在同一供电网络内的用户视作互为备份。这就好比几条相互独立的生产线生产相同的产品时,其中一条故障,其余正常工作的生产线可以接替其任务继续维持生产,有必要的情况下,在建立生产线的同时就需要提前建立备用的生产线以备随时接替故障的生产线。
这样的备份模式最大的问题在于需要人工干预。也就是说,故障部分的工作任务需要人工参与,把它承担的功能转移到其他的备份上。在通常的情况下,这样的备份方式当然没有问题,但是在一些特殊情况下就不适合了,例如使用探测器在深海、火山或者外空间之类的区域执行任务,或者在执行特殊的军事命令的时候,操作人员无法现场维修或与设备失去联络的情况下,就需要设备具有一定的自我修复的能力,以维持一些必需的基本功能的运行。这也是未来冗余备份设计的发展趋势之一。
3.自动修复的冗余备份设计
需要具备自动修复的冗余备份功能,通常情况下应当满足下面几个条件:
(1)复杂度不宜过高,过于复杂的设计同样会降低系统的可靠性,
(2)成本控制:冗余设计本身必定会带来额外的成本,在不到万不得已的情况下,尽可能减少冗余备份的数量;
(3)部件通用化:使用最大化设计的模式,让每个独立的功能模块都具有完成或辅助完成其他功能模块的能力,尽量避免使用专用元器件;
(4)根据使用环境,尽量裁减次要功能:从理论上讲,理想的冗余备份就是制造一套或多套和原件相同的产品,用于随时替换故障的部分,但这显然不可能,也不现实。应当依据各个部分的重要等级和易损程度,对冗余设计的必要性作出评估。
设计具备自动修复的冗余备份功能,基本设计原则应当遵循下列原则:
(1)功能完善且独立,可以完全代替故障模块继续运行;
(2)具有独立的故障诊断电路,能与其他并行工作的功能模块实时同步工作状态,以便随时可以执行功能移交的操作;
(3)具有防死锁设计,以免出现相互判断对方故障,造成系统钳死;
(4)模块之间采用电路相互隔离的措施,防止严重硬件故障造成灾难扩散。
依据上述原则,设计出一个简化的实验方案,功能结构简图如图3所示。
如图3中所示,我们的目标是对两个执行单元进行控制,并且为了提高运行的稳定性,对控制功能区作了冗余备份的设计,分别为功能区A和功能区B,因二者软硬件功能结构完全相同,故采用模块化设计,以便于生产和维护。从功能最小化的角度上看,正常运行的时候只需要一个功能模块即可,出现故障时可以通过人工干预,更换故障功能模块。然而在某些特定情况下,我们需要功能模块迅速自动进行功能的移交转移,在不中断当前运行任务的情况下继续工作,以达到自动修复的目标。在这种情况下,功能单元的设计可以遵循下面的设计方案来进行。
(1)主控单元
主控单元作为整个功能模块的核心,应当具备两个基本的功能模式,即工作模式和故障模式。
在处于工作模式的时候,必须在执行对两个执行单元的控制任务的同时,依据执行单元的反馈信息,对下一步的控制指令进行相应的调整,并执行对看门狗电路的喂狗操作,在看门狗发出故障信号的时候,将故障信号通过通信单元将自检结果发送出去,发送完毕后停止喂狗操作以关闭指令通道,交出对故障部分的功能控制权,严重的情况下自我封闭并通知电源,对本模块进行断电保护。
在处于故障模式的时候,只接收执行单元的反馈信息,计算执行单元的控制指令但不发送,需要实时对工作中的功能模块进行监视,分析对方发送来的自检信号,一旦发现对方的自检出现故障,立即开始进行喂狗操作,将控制执行单元的指令发送出去,接替故障单元的功能,进入工作模式。
从上述的需求进行分析,主控单元为了保证系统工作的实时性,应当优先采用具有并行处理能力的元器件,利用多个任务同时执行的优势将故障造成的工作中断压缩到最小。在实时性要求不高的场合下,再考虑使用顺序执行的处理器或其他元器件。在本次的试验中,采用CPLD作为主控单元的核心,利用可编程的VHDL语言的并发执行的特点可以将各功能分解安排进不同的进程。如果需要的计算量比较大,可以将CPLD更换为容量更大、功能更多的FPGA。
(2)看门狗
看门狗的基本原理是计数器,利用喂狗信号来对计数器的计数值进行清零。在超出等待时间还没有等到喂狗信号,计数器产生溢出信号,这个信号一方面用于通知主控单元,另一面用于关闭该看门狗所监视的功能指令的使能,避免错误的指令被执行单元所执行。看门狗可以使用独立的专用元器件来构建,也可以将这部分功能集成到CPLD/FPGA内部,以节约成本。
(3)缓冲器
缓冲器由带有使能的驱动电路和隔离器件组成,以避免干扰或其他意外情况造成故障。隔离器件根据使用的环境不同有所差别,低电压弱电流的情况下通常可以使用光电耦合器,高电压强电流下则需要使用继电器等元器件予以保护。
(4)通信单元
依据工作环境、运行指标等因素,可以选择串行通信或并行通信,根据实际情况来选用通信器件,或直接使用自定义的通信协议,将通信功能也集成到CPLD/FPGA内部,然后在外部使用电流差分、LVDS等方式完成接口之间的匹配。
以上述功能框架设计出的控制模型,经过仿真验证,基本上满足了我们对控制目标不间断切换控制的需求,在进一步完善软件后,还可以实现两个功能区各自执行一个控制目标的半冗余设计,从而满足部分损坏但不致命的情况,再度提高整个系统的可靠性。
当然,这种所谓的“修复”,从本质意义上并不算是修复,只能是替换。因此,“自动修复”从广义的角度上讲,最终目标应当是融合生物技术,模仿生物本身拥有的生长恢复的能力来进行新陈代谢——从电子到仿生,还需要漫长的探索和研究。