||
电路设计漫谈之 75: 设计的robustness
Robustness 金山词霸上翻译为坚固性,健壮性。对于电子系统来说,是指设计的产品是否皮实耐用,不但在正常状况下能正常工作,在没预想到的环境下也能工作,至少能自我保护不至于损坏,当回到正常环境时能恢复工作。
这点说起来容易做起来其实很困难。开过汽车的人知道,好车和坏车在正常天气下正常的路面上匀速行驶时差别可能不大。但雨雪天气,走山路,遇上泥泞路段时表现会差别很大。电路设计其实是一个道理,robustness设计完善的系统,抗干扰性和适应环境的能力都会高出一筹。记得当年电话刚普及时,由于线路紧张采用了一根电话线复用多路的数字环路技术。Motorola的一款产品据说放在室外能抗机关枪的打击J. 我们设计产品不至于到这个程度,但掌握一些增强robustness的技术,以及一开始就考虑到这些因素的影响还是必须的。
这里以一个Ethernet Switch的设计为例粗略探讨一下电路设计除了功能设计之外,还需要考虑的robustness 设计。功能设计部分很清晰,就是设计者要按着产品规范要求,设计相应的电路或者逻辑实现要求的功能。这些是必须的,但往往初级工程师就局限于了这些功能性的实现,其结果是就在后期的stress 测试时需要不停的打补丁。以下是几点要在初期就考虑的跟robustness有关的设计考虑。
1. Reset。 复位是一个系统最基本的功能。一个复杂点的系统要有清晰的reset tree设计。谁先被复位,谁在谁的控制下复位,要有清晰的定义和推演。有的逻辑一旦释放了复位,就开始处理数据,如果这时数据在某些上游逻辑模块还没有准备好,以及该逻辑没有足够强的容错能力的话,很容易就进入不期望的状态,严重者会导致死机。
复位要有hard reset和soft reset,后者会保持复位前的一些状态参量。一定要用power supervisor芯片做上电复位的产生,不要怕浪费这点成本。那些所谓的RC复位电路不可靠的。测试几块电路板甚至几十块成功都不能说明问题。量大了一定有出问题的。
2. Power Cycling。一个可靠的系统要能经受住大量电源上下电的测试。好多电路在这个环节会出问题。表面现象好像是上下电的问题,其实它涉及到系统级逻辑关系划分和数据流的处理。除了基本的比如要遵循芯片和CPU等的power sequencing要求之外,还要仔细分析数据的流向,在每个阶段对数据做检验,尽量使得错误的数据不传导到下游的逻辑。
3. 数据完整性验证。例如在Ethernet/IP Switch如果不需要支持Jumbo Packet的话,有的逻辑模块中的FIFO或者buffer可能只支持1500 bytes左右的数据,超出了要么产生溢出错误,严重的会使得Buffer的数据跟计数器不一致,从而对后来正确的packets也不能正常处理了。当Power up或者做电缆插拔的瞬间,可能会出现大量或长或短的不符合规范的数据包,这时要么在上游把这些数据丢掉,要么每个模块都要增加处理这种数据的能力。
4. 例外数据的处理能力。上边两点也谈到这个问题。往往设计者只是按照标准的规范来做数据的处理,但实际应用中由于传输的错误,或者有意无意的数据发送者会发出不符合规范的数据包。一个robust的设计要考虑到这些例外的情况,无论是在状态机,数据处理,还是在buffering的时候,任何非法的数据不能导致逻辑进入不可预知的状态。
好多情况下memory中的数据,内部总线传送的数据都会加上parity check,目的也是如此。
5. 温度与设计余量。器件的指标都是跟温度相关的。比如一个电源模块标称值输出5V 10A是指在正常室温下。当环境温度升到70度时输出电流可能会只有标称值的50-70%。设计余量还有诸如电容的耐压值等。留下50%的冗余度是很常见的。
5. Fail Safe。这个在前边有个漫谈专门讲过。比如电源或者其他数据接口的过压过流保护。有些设备要求在这些极端情况下要能正常工作。有些可以允许有数据错误甚至系统短暂失效,但当干扰消失后,需要恢复正常工作。类似的设计可以参考像little fuse, analog device等公司相应的application notes或者reference design。他们的参考设计都是通过相应机构认证的。严格按照那些要求做,可以减少设计时间以及增加产品的可靠性。
6. 接口。接口的设计要求有比较多的规范。最常见的如ESD,EMI,EMC。不同的领域还有自己特殊的要求,有些是强制性的。工业控制等领域对接口的要求,相比电信网络等要求要更严格一些。这些接口的保护基本有现成的方案供参考,一般可以在器件的资料或者Fail Safe中所述的参考设计中找到。
7. Transient 瞬态。这个是最难处理的。好多失效时因为瞬态的状态下,比如开关机,高能量信号(大电压或者电流)对其它部分的瞬态影响等。这种情形在发生问题时不容易重复,因为具体使用环境差别很大。本人视为电路设计宝典的The Circuit Designer’s Companion (Tim Williams) 探讨的大多是一些常规设计之外的例外情形,有一大部分是关于瞬态的考虑的。这里就不探讨了,推荐这本书看N遍J
影响一个设计的因素千差万别,不可能对所有系统的设计有个全面的描述。这里谈的指示几个基本的,有共性的因素。关键的是在设计一个电路或者系统的一开始,除了那些必须支持的功能指标性设计外,还要考虑到使用的方方面面以及各种例外情况。最低的要求是:当出现例外情况时系统不能当机,也就是当回到正常情形时能恢复正常工作。