信号完整性研究2

来源:百度文库 编辑:神马文学网 时间:2024/04/28 15:39:23

信号完整性研究

默认分类 2009-09-17 01:35:03 阅读102 评论0 字号:大中

多年前,在我开始研究信号完整性问题时也曾经有过这样的疑问,随着对信号完整性理解的深入,便没有再仔细考虑。后来在产品开发过程中,朋友、同事经常向我提出这一问题。有些公司制作复杂电路板时,硬件总也调不通,于是找到我,当我解决了问题,并告诉他们,原因就在于没有处理好信号完整性设计,负责开发的硬件工程师也会提出同样的问题。他们通常的说法是:高速电路中会有问题,可是什么情况下必须进行专门的信号完整性设计?

    不断的有人问我,我不得不作更深入的思考。说实话,这个问题很难回答,或者说他们这种问法很难回答。他们的意思可以解释为,速度高了就要考虑信号完整性,低速板不存在这个问题,那总要有个临界频率,这个频率是多少?有人曾提出过这样的论点,当外部总线频率超过80MHz时,就要进行专门的分析设计,低于这一频率,不用考虑信号完整性问题。对这一论点,我不敢苟同。仔细分析,他们这种问法的背后是对信号完整性的一种误解。

    如果必须有一个答案的话,我想答案应该是:只要信号畸变到了无法容忍的程度就要考虑信号完整性问题。呵呵,看起来像是在胡说八道,不过这确实是能找到的最好的答案了。

    要想弄清这个问题,必须先了解信号完整性的实质到底是什么。产生信号完整性的原因很多,频率(值得推敲,暂且借用提问者的说法)只不过是其中的一个而已,怎么能单单用频率来强行地划分界线!顺便说一句,很多人说频率的影响,其实这个词很值得推敲。频率到底指的是哪个部分的频率?电路板上有主时钟频率,芯片内部主频,外部总线带宽,数字信号波形带宽,电磁辐射频率,影响信号完整性的频率到底指的是哪一个?问题根源在于信号上升时间。如果你不是很理解,可以到于博士信号完整性研究网学习。

    信号完整性最原始的含义应该是:信号是否能保持其应该具有的波形。很多因素都会导致信号波形的畸变,如果畸变较小,对于电路板不会产生影响,可是如果畸变很大,就可能影响电路的功能。系统频率(芯片内部主频以及外部频率)、电磁干扰、电源波纹噪声,数字器件开关噪声、系统热噪声等都会对信号产生影响,频率并不具有特殊的地位,你不能把所有的注意力都放在频率这个因素上。

    那么这里又会出现另一个问题,波形畸变多大,会对电路板功能产生影响。这没有确定统一的指标,和具体应用以及电路板的其他电气指标有关。对于数字信号而言,对畸变的容忍度较大。能有多大的容忍度,还要考虑电路板上的电源系统供电电压波纹有多大,系统的噪声余量有多大,所用器件对于信号建立时间和保持时间的要求是多少等等。对于模拟信号,相对比较敏感,容忍度较小,至于能容忍多大的畸变,和系统噪声,器件非线性特性,电源质量等等有关。

          是不是听起来很晦涩!确实,要说清楚这个问题并不容易,因为牵扯到了太多的因素在内。下面这个数字信号波形的例子能让你有一个简单直观的理解。

    这是一个受反射影响的方波数字信号,波形的畸变仅仅是反射的结果,没有迭加其他噪声。假设低电平逻辑小于0.7v,高电平大于2v。对于高电平来说,震荡的低谷部分可能会冲到2v以下,此时电路处于不定态,可能引起电路误动作。所以,迭加在高电平上的波纹幅度不能太大。由于电路存在噪声,电源也有波纹,这些最终都会迭加到信号波形上,所以你计算波纹幅度的时候要考虑这些因素,而这些因素和你的电路板其他部分设计有关。所以你无法确定一个统一的畸变标准,只能根据你具体电路的设计和应用综合考虑。最终的原则只有一个:通过信号完整性设计、电源完整完整性设计等手段,将总的信号畸变控制在一定范围内,保证电路板正常稳定工作。

   工程中,解决信号完整性的问题是一个系统的工程,并不是一两种方法就可以包打天下的。什么时候会碰到信号完整性问题也不是可以硬性的划一道线来区分,一句话,要根据你的实际情况来定。

    可能你会感觉,这么多不确定的因素,还怎么在最初设计的时候考虑信号完整性问题?嗯,没问题的,其实对于所有影响信号质量的因素,你都可以通过一定的设计技术来控制。对于电源波纹问题,那是电源完整性的问题,又是一个系统的工程。而其他的电磁干扰,电磁兼容等则是另外一个系统工程。

    总之,信号完整性问题涉及的知识较多,是一个跨学科的知识体系。网上关于信号完整性基础知识讲解很多,但很少有讲得很深入的。要想学好信号完整性,你需要有一定的精力投入,但可以告诉你,只要掌握学习方法,其实不难。一旦你学好它,回报是非常高的,毕竟这方面的人才现在是奇缺阿,很多公司给信号完整性工程师开价都在25W以上,如果你很牛的话,呵呵,决不是这个价。

           好了,废话就不多说了。对于信号完整性技术问题,我会在于博士信号完整性研究网的博士讲坛栏目进行深入探讨。

1:地弹

所谓“地弹”,是指芯片内部“地”电平相对于电路板“地”电平的变化现象。以电路板“地”为参考,就像是芯片内部的“地”电平不断的跳动,因此形象的称之为地弹(ground bounce)。当器件输出端有一个状态跳变到另一个状态时,地弹现象会导致器件逻辑输入端产生毛刺。

    那么“地弹”是如何产生的呢?

    首先我们要明白,对于任何封装的芯片,其引脚会存在电感电容等寄生参数。而地弹正是由于引脚上的电感引起的。

    我们可以用下图来直观的解释一下。图中开关Q的不同位置代表了输出的“0”“1”两种状态。假定由于电路状态装换,开关Q接通RL低电平,负载电容对地放电,随着负载电容电压下降,它积累的电荷流向地,在接地回路上形成一个大的电流浪涌。随着放电电流建立然后衰减,这一电流变化作用于接地引脚的电感LG,这样在芯片外的电路板“地”与芯片内的地之间,会形成一定的电压差,如图中VG。这种由于输出转换引起的芯片内部参考地电位漂移就是地弹。

    芯片A的输出变化,产生地弹。这对芯片A的输入逻辑是有影响的。接收逻辑把输入电压和芯片内部的地电压差分比较确定输入,因此从接收逻辑来看就象输入信号本身叠加了一个与地弹噪声相同的噪声。

    现在,集成电路的规模越来越大,开关速度不断提高,地弹噪声如果控制不好就会影响电路的功能,因此有必要深入理解地弹的概念并研究它的规律。

    本文只是概念性的阐述,对地弹的深入剖析将在后续文章中进行。

2  反射

前面讲过,对于数字信号的方波而言,含有丰富的高频谐波分量,边沿越陡峭,高频成分越多。而pcb上的走线对于高频信号而言相当于传输线,信号在传输线中传播时,如果遇到特性阻抗不连续,就会发生反射。反射可能发生在传输线的末端,拐角,过孔,元件引脚,线宽变化,T型引线等处。总之,无论什么原因引起了传输线的阻抗发生突变,就会有部分信号沿传输线反射回源端。

    反射形成机理很复杂,这包含了很多电磁领域的复杂的知识,本文不准备深入讨论,如果你真的很想知道,可以给我留言,我专门讲解。

    工程中重要的是反射量的大小。表征这一现象的最好的量化方法就是使用反射系数。反射系数是指反射信号与入射信号幅值之比,其大小为:(Z2-Z1)/ (Z2+Z1)。Z1是第一个区域的特性阻抗,Z2是第二个区域的特性阻抗。当信号从第一个区域传输到第二个区域时,交界处发生阻抗突变,因而形成反射。举个例子看看反射能有多大,假设Z1=50欧姆,Z2=75欧姆,根据公式得到反射系数为:(75-50)/(75+50)=20%。如果入射信号幅度是3.3v,反射电压达到了3.3*20%=0.66v。对于数字信号而言,这是一个很大的值。你必须非常注意他的影响。    实际电路板上的反射可能非常复杂,反射回来的信号还会再次反射回去,方向与发射信号相同,到达阻抗突变处又再次反射回源端,从而形成多次反射,一般的资料上都用反弹图来表示。多次的反弹是导致信号振铃的根本原因,相当于在信号上叠加了一个噪声。为了电路板能正确工作,你必须想办法控制这个噪声的大小,噪声预算是设计高性能电路板的一个非常重要的步骤。

3 理解临界长度

很多人对于PCB上线条的临界长度这个概念非常模糊,甚至很多人根本不知道这个概念,如果你设计高速电路板却不知道这个概念,那可以肯定,最终做出的电路板很可能无法稳定工作,而你却一头雾水,无从下手调试。

    临界长度在业界说法很混乱,有人说3英寸,有人说1英寸,我还听说过很多其他的说法,多数是因为对这个概念理解有误造成的。很多人说,奥,走线太长会引起信号反射,走线很短的话不会产生反射。这种说法是非常错误的,把好几个概念像搅浆糊一样混在一起。那么临界长度到底是什么,是多少,为什么要关注临界长度?

    理解临界长度的最好方法就是从时间角度来分析。信号在pcb走线上传输需要一定的时间,普通FR4板材上传输时间约为每纳秒6英寸,当然表层走线和内层走线速度稍有差别。当走线上存在阻抗突变就会发生信号反射,这和走线长度无关。但是,如果走线很短,在源端信号还没上升到高电平时,反射信号就已经回到源端,那么发射信号就被淹没在上升沿中,信号波形没有太大的改变。走线如果很长,发射端信号已经到达高电平,反射信号才到达源端,那么反射信号就会叠加在高电平位置,从而造成干扰。那么走线长度就有一个临界值,大于这个值,返回信号叠加在高电平处,小于这个值反射信号被上升沿淹没。这个临界值就是临界长度,注意,这种定义非常不准确,因为只考虑了一次反射情况,这里只是为了理解概念需要,暂时这样说。

    那么准确的定义是什么?实际中反射都是发生多次的,虽然第一次信号反射回到源端的时间小于信号上升沿时间,但是后面的多次反射还会叠加在高电平位置,对信号波形造成干扰。那么,临界长度的合理定义应该是:能把反射信号的干扰控制在可容忍的范围内的走线长度。这一长度上的信号往返时间要比信号上升时间小很多。试验中发现的经验数据为,当信号在pcb走线上的时延高于信号上升沿的20%时,信号会产生明显的振铃。对于上升时间为1ns的方波信号来说,pcb走线长度为0.2*6=1.2inch以上时,信号就会有严重的振铃。所以临界长度就是1.2inch,大约3cm。

    你可能注意到了,又是信号上升时间!

4  信号上升时间与带宽

2009-06-30 12:34

 

在前文中我提到过,要重视信号上升时间,很多信号完整性问题都是由信号上升时间短引起的。本文就谈谈一个基础概念:信号上升时间和信号带宽的关系。

对于数字电路,输出的通常是方波信号。方波的上升边沿非常陡峭,根据傅立叶分析,任何信号都可以分解成一系列不同频率的正弦信号,方波中包含了非常丰富的频谱成分。

抛开枯燥的理论分析,我们用实验来直观的分析方波中的频率成分,看看不同频率的正弦信号是如何叠加成为方波的。首先我们把一个1.65v的直流和一个100MHz的正弦波形叠加,得到一个直流偏置为1.65v的单频正弦波。我们给这一信号叠加整数倍频率的正弦信号,也就是通常所说的谐波。3次谐波的频率为300MHz,5次谐波的频率为500MHz,以此类推,高次谐波都是100MHz的整数倍。图1是叠加不同谐波前后的比较,左上角的是直流偏置的100MHz基频波形,右上角时基频叠加了3次谐波后的波形,有点类似于方波了。左下角是基频+3次谐波+5次谐波的波形,右下角是基频+3次谐波+5次谐波+7次谐波的波形。这里可以直观的看到叠加的谐波成分越多,波形就越像方波。

图1

因此如果叠加足够多的谐波,我们就可以近似的合成出方波。图2是叠加到217次谐波后的波形。已经非常近似方波了,不用关心角上的那些毛刺,那是著名的吉博斯现象,这种仿真必然会有的,但不影响对问题的理解。这里我们叠加谐波的最高频率达到了21.7GHz。

图2

上面的实验非常有助于我们理解方波波形的本质特征,理想的方波信号包含了无穷多的谐波分量,可以说带宽是无限的。实际中的方波信号与理想方波信号有差距,但有一点是共同的,就是所包含频率很高的频谱成分。

现在我们看看叠加不同频谱成分对上升沿的影响。图3是对比显示。蓝色是基频信号上升边,绿色是叠加了3次谐波后的波形上升边沿,红色是基频+3次谐波+5次谐波+7次谐波后的上升边沿,黑色的是一直叠加到217次谐波后的波形上升边沿。

图3

通过这个实验可以直观的看到,谐波分量越多,上升沿越陡峭。或从另一个角度说,如果信号的上升边沿很陡峭,上升时间很短,那该信号的带宽就很宽。上升时间越短,信号的带宽越宽。这是一个十分重要的概念,一定要有一个直觉的认识,深深刻在脑子里,这对你学习信号完整性非常有好处。

这里说一下,最终合成的方波,其波形重复频率就是100MHz。叠加谐波只是改变了信号上升时间。信号上升时间和100MHz这个频率无关,换成50MHz也是同样的规律。如果你的电路板输出数据信号只是几十MHz,你可能会不在意信号完整性问题。但这时你想想信号由于上升时间很短,频谱中的那些高频谐波会有什么影响?记住一个重要的结论:影响信号完整性的不是波形的重复频率,而是信号的上升时间。

本文的仿真代码很简单,我把代码贴在这里,你可以自己在matlab上运行一下看看。

clc;    clear all;    pack;

Fs = 10e9;                    

Nsamp = 2e4;                  

t = [0:Nsamp-1].*(1/Fs);

f1 = 1e6;

x0 = 3.3/2;

x1 = x0 + 1.65*sin(2*pi*f1*t);

x3 = x0;

for n=1:2:3

    x3 = x3 + 3.3*2/(pi*n) * sin(2*pi*n*f1*t);

end

x5 = x0;

for n=1:2:5

    x5 = x5 + 3.3*2/(pi*n) * sin(2*pi*n*f1*t);

end

x7 = x0;

for n=1:2:7

    x7 = x7 + 3.3*2/(pi*n) * sin(2*pi*n*f1*t);

end

figure

subplot(221)

plot(x1)

subplot(222)

plot(x3)

subplot(223)

plot(x5)

subplot(224)

plot(x7)

x217 = x0;

for n=1:2:217

    x217 = x217 + 3.3*2/(pi*n) * sin(2*pi*n*f1*t);

end

figure

plot(x217)

figure

plot(x217,'k')

hold on

plot(x1,'b')

plot(x3,'g')

plot(x7,'r')

hold off

axis([8000 12000 -0.5 4])