您的位置:控制工程论坛网论坛 » 教程与手册 » 容易被忽略的数字电路设计要点

junhong07

junhong07   |   当前状态:在线

总积分:7915  2024年可用积分:1

注册时间: 2008-01-15

最后登录时间: 2019-06-23

空间 发短消息加为好友

容易被忽略的数字电路设计要点

junhong07  发表于 2008/9/17 19:55:20      609 查看 0 回复  [上一主题]  [下一主题]

手机阅读

最近看到论坛上对fpga的讨论越来越偏重于嵌入式系统设计,在altera论坛上开始看到对nios感兴趣的人也越来越多。然而,过分倾向于sopc与dsp builder的应用毕竟不是很好的学习方法。要知道,这些都是一种实现工具,而实现的构思则源于逻辑算法的创造与模仿。在这论点上,硬件描述语言为我们提供一个很好的管道,来表达我们理想的数字系统设计。至于从硬件描述语言到门级电路的转换,则得依靠于合成工具,对各种不同的描述方式提供相对应的门级电路模式。愈精确的描述,才能产生更接近于理想的数字系统,因此一个有异于软件编程的论点出现了,行数越多的设计描述,有时反而让门级电路更为精简。至此,门级电路在可编程逻辑里的实现这关键部分得完全依赖于工具来完成。我们知道时序的吻合将决定一个数字系统的可行性,因此除了精确的硬件描述之外,正确的添加约束可有效的提高数字系统的实现可能性。当我们再为深入的做思考,芯片与芯片的时序如何达到吻合,电路板在什么操作频率上应该把传输线特性作为考究,fan-out与gound bounce的关系应该如何做考虑,trancient current所造成的vcc bounce应该如何解决,这几点都是作为一个数字系统设计师应该有充分了解的。

我们先来探讨fan-out与ground bounce的关系。一般上,我们知道fan-out不能过多,不然会造成不良后果。至于是什么不良后果,一般的解释对初学者来说都不是很明确,甚至有点模糊。我们就从fan-out开始做解释。当一个module的fan-out越大,举例(n MB x 1) Vs (m MB x 8)的记忆体来说,chip的用量也相对减少,因此耗电量也较小。然而,fan-out越大,也代表着同时操作的output pin也随着增大。在数字设计里,每个output pin对0的驱动就是通过自身的GND pin来做current sink。我们知道每个pin都有相应的电感值,而自感就是因应于电流所产生的。因为V=L(di/dt),所以当fan-out增大,(di/dt)也随着增大;当频率变得越高,(di/dt)也变得更大了。因自感而引起的电压差(V)就造成所谓的ground-bounce。对逻辑0来说,它的区分值是0 - 0.4V左右,因此它的noise margin也比逻辑1来得小。因此,因自感而引起的ground-bouce效应是非常被重视的。至于如何能在fan-out的数量与ground-bounce的控制之间取得平衡点,对于一个数字系统设计师来说,这是不可漠视的。

至于VCC bounce,这则是transcient current所引起的。何谓transcient current?就是逻辑1与逻辑0的转换瞬间,电流从VCC通过Q1与Q2直接传入GND,所引起的瞬间电流增大值。Q1与Q2就是控制逻辑1与逻辑0输出的switching transistor;当输出为逻辑1,Q1为ON,Q2为OFF;当输出为逻辑0,Q1为OFF,Q2为ON。我们知道每个pin都存在相应的电感值,而这瞬间的transcient current就是造成V(di/dt)忽然增高的主要原因,这就是所谓的VCC bounce。一般上,在高速设计里,VCC bounce所造成的负面影响不比ground bounce那般严重,然而它对信号完整性设计的影响是不容忽视的。或许有人会问,为什么VCC bounce会对高速设计有较微的负面影响呢?原因很简单,就是逻辑1的noise margin比起逻辑0来得高,因此对信号的bouncing值有较大的宽容性。我们所熟悉的decoupling capacitor就是针对于transcient current所做的解决方案。好了,现在transcient current解决了,然而,在逻辑芯片数量较多的数字系统里,为数不小的transcient current相加起来对电源又会造成什么程度的影响呢?这我就留在下一篇文章再详细叙述了。对有兴趣深入研究的朋友,我在这里先给个提示,就是你们留意电源输出是不是有一个480uF - 2200uF的capacitor是直接连去GND的。

在一般情况下,ground bounce对逻辑的影响会比vcc bounce来得大,这是因为个别noise margin的不同而造成的。还有,所谓的逻辑影响不是单纯的逻辑错误那么简单,在某些个别情况,逻辑电平往往进入无法分辨为1或0的情况,这跟metastability的情形有点类似,然而,其分别在于metastability是随着clock cycle以触发沿为界限而恢复逻辑电平,而ground bounce所造成的情况则是有点"asynchronous"的意味。不论如何,这两种情况都对逻辑,尤其是组合逻辑设计造成一定的影响。

之前,我们只考虑了基于电感特性所造成的bouncing情况。然而,在实际上还有几点比如电容特性也是在高速设计里需要有所留意的。我们知道,在基于对传输线特性的考究,每个芯片的管脚除了带有电感值之外,还带有电容值。因为布线的差距,所以每个管脚都有不同的电感与电容值。然而,最短的传输线都是比其他较长的拥有较低的电感与电容值的,而这所谓最短的传输线,通常就是处于芯片中心两旁的管脚。因此,我们一般上都会看到高速数字芯片的VCC和GND都是在芯片中心处的两旁,而一般低速数字芯片的VCC和GND就处于芯片的对角线,这是很不利于高速数字系统设计的。除此之外,我们之前所提到的关于fan-out的数量不能太多,不然会造成ground bounce,那只是基于对电感的考虑;如果再加入对电容的考虑,那就是造成额外delay time的原因。要知道,fan-out的数量越大,就代表电容并联的数量越多,因此整体的电容有效值也跟着增大。一般上,我们考虑每100 pF会造成3 ns的delay,不过,不同的制造技术会令这数值有所改变。对于搞fpga设计的人来说,在做static timing分析的时候,都会留意到fan-out数量较多的地方,因应的delay time也会较大,这就是造成这现象的原因。对于这现象的解决方案是:在基于电路板的系统上,除了考虑合适的布线,在适当的地方加上适当数量的buffer可以有效的减低电容值;在基于fpga的系统上,除了尽量减低与平均分布fan-out的数量之外,得考虑在synthesis时加上logic duplication。

地弹效应是因由电感而产生的,电容所造成的主要效应是延时。地弹效应的发生是源于Simultaneously Switching Outputs (SSO)对管脚电感的瞬间变化所引起的。一般上,不同的芯片都有提供对于每个VCC与GND组最大SSO的参考数字,只要在做设计时确定不高于SSO,而在设计板子时也谨守高速设计的规则,都不会造成太大的问题。在fpga设计上,除了谨慎留意fan-out的数量外,在设定 i/o slew rate 的时候也不能盲目的把 slow 都设定成 fast,须知这会增加 di/dt,地弹效应也相应增加了。除此之外,需知fast i/o slew rate对pure resistive load不会有太大的改进,其主要用处是减低capacitive load (电容性负载) 所造成的延时效应。最后,还是老生常谈,紧记电感是因由电流产生的,电容是因由电压产生的。


在高速设计的领域里,对电气的物理特性有充分了解是很大程度必须要掌握的。有时在设计上面对问题,不能只单纯的从传统调试方式去解决问题。比方说,如果一个多路数字音频传输设计不断面临噪音的问题,症结不一定就出自接地不完好这一论点上。如果仿真和测试都没有找出什么问题,就应该往其他方面的可能性去寻求出路,比如想想是不是coupling出了什么问题。一般上,如果AC coupling的电容值和传输信号的run-length不协调,往往这就是问题所在,而不关系乎于接地不良好,而导致噪音不被GND过滤这一惯性的想法。当然,如果有TDR作为调试条件的,那又另当别论。作为后话,如果调试条件不是很充足的话,比如只有osicilloscope和logic analyzer,在调试过程里的尽量发挥想象力,不能苟泥于惯性的想法。如果有spectrum analyzer和测试eye-diagram的条件,就得充分了解和利用调试工具去解决问题。在很多情况里,基于deterministic jitter和random jitter就可以探讨出很多常被忽略可又足以致命的问题来。
1楼 0 0 回复