SI解释3
上一篇为止我们总结了一下关于S参数的一些应用,总共10点(实际也许还不止)。最后在时域的应用尤其是TDR用的很多。还有几个关于Sp转TDR小细节,没有在上一篇里面写完。这次我们单独提一下。
- 窗
在得到S参数之后,可以通过IFT得到冲激响应,还有阶跃响应。但是不管是VNA仪器还是我们用HFSS,ADS等软件里,做IFT都是对一定频率范围做变换,所以不可避免需要做频率截断。频率截断使得原来的频率响应相当于乘以了一个长方形窗口函数。
这样其变换到时域以后,就会产生很多的侧叶,如下图所示。
这样转出来的TDR曲线也会产生很多毛刺。所以为了压掉这些侧叶,就需要在这之前让变换结果先过一个滤波器(窗函数)。常用的窗函数如下,这里的1和6起不到单独压侧叶的作用,一般在软件里不太选不用。
2. 分辨率
如果使用S参数转换为TDR的时候,像Keysight的VNA可以选择window的min,normal,max。这是对应了不同的分辨率。例如min对应的是0.45/Fmax的上升时间。也就是说分辨率是最好的(Fmax是扫频最高频率)。但是使用max的时候,是对应1.48/Fmax,不过可以得到更大的动态范围。当对DUT需要更高的分辨率的时候选择min的设置。当需要更全面的反应各个阻抗不连续点,那怕某一处的反射系数很小的时候,不让小反射的地方淹没,需要更大的动态范围,则选择max的设置。
3. low pass & band pass
在S参数转换成TDR的时候,会选择low pass或者bandpass,lowpass经常用于可以通过从DC到指定频点的宽带DUT,比如我们常用的传输线。bandpass则会制定转换的频率范围,更适合一些窄带DUT。
IBIS模型是一种行为级的模型,这是相对于HSPICE电路模型而言的。看过IBIS模型里面你会发现有很多电压电流(I/V曲线)查找表,而不是详细的电路节点。各个IO端口的特性曲线事先已经得到,并记录在一张表格里,因此实际仿真的时候速度相比于SPICE模型要快很多。另外一般芯片原厂都会提供IBIS模型,但是不会提供HSPICE模型,即使一些IP原厂给的HSPICE模型也是经过加密的模块形式。
既然谈到SI仿真这个话题,先来总体把SI仿真分个类:
- 按信号速率上分可以分为低速信号仿真,高速信号仿真。通常认为小于1Gbps速度的为低速信号,大于1Gbps的是高速信号。低速信号通常都是跑时域仿真,就是会把发送端的IO和接收端的IO模型再加上中间的链路模型组合在一起,然后给发送端施加一个激励去看接受端的时域波形的情况。而高速信号的话,则更侧重于频域仿真,同时也兼顾时域仿真。我们的IBIS模型仿真的作用就是针对低速信号时域仿真。
2. 从仿真的链路来分可以分为有源仿真和无源仿真。有源仿真其实就是带信号源的时域仿真,无源仿真是针对无信号源的无源信号链路进行的频域仿真。当然这里的无源频域仿真主要就是S参数的仿真,经过前面的介绍,应该对S参数已经不再陌生了。
大致分类如此,但是都是可以相互共存的,只是分类规则不一样而已。并且IBIS模型/HSPICE模型/S参数模型/集总电路模型,这些模型在同一个链路里面都是可以相互连接的。我们这次谈的IBIS模型的地位在低速信号仿真领域是最常用的工具。当然也不是说对于低速几百Mhz的信号,你就不能去做个无源仿真了?当然可以,也可以仿个S参数看看插损的情况,道理都是通用的。只是对于低速信号来说可能更多时候关注的点在于信号边沿的单调性,信号过冲等,而插损的指标(其实就是幅度)如果不是特别特别长的链路,损耗都会很小,所以就不是作为重点关注对象。而高速数字信号则反过来了。
那么说了这些,我们常用的低速接口一般都有哪些呢?工作中最常用到的应该就是I2C,SPI接口了。前者是OD门,一般400Khz左右的速率,后者是CMOS电平,一般可以跑几十Mhz量级。当然差分的信号如LVDS接口也可以用IBIS仿真,LVDS一般可以跑到800Mbps左右。当然DDR3,DDR4都可以用IBIS模型跑仿真。数字接口类型非常多,这里就不一 一例举。
关于IBIS详细的内容,还是要去看IBIS的Spec文档,这里主要从仿真的角度去总结一下IBIS使用的一些套路。IBIS模型仿真的常用软件:Allegro自带的SigXplorer,或者ADS等等。这次我们主要还是以SigXplorer来介绍。用它有个好处就是可以直接把链路从Allegro的PCB板上提取出来比较方便。如果中间的链路使用的是S参数模型,那就建议用ADS来进行仿真了。
使用SigXplorer步骤:
- 获得发送端和接收端芯片的IBIS模型。一般如果使用一些知名厂商,如TI之类的芯片,在官网上是可以下载到IBIS模型的,类似下图。有的时候用到的一些芯片实在没有IBIS模型,其实如果知道它的电平接口类型(LVCMOS/SSTL等),及工艺(多少纳米工艺)。则可以找相近的芯片的IO端口的模型来替代。因为同一种工艺的同样的电平类型的IO口,电气性能是类似的。比如FPGA的IO类型比较多,所以它的IBIS模型有时候就可以拿来做替代。
2. 得到IBIS模型之后,需要在Allegro软件里面将它转化为DML格式。这个是Allegro可以识别的IBIS模型文件格式。这个可以在Allegro里面直接进行转换。转换完成后在DML Models里面就会出现转换好的模型了。
3. 针对待仿真的网络所涉及到的器件赋模型。RLC可以使用软件默认的模型,如下图先运行Auto Setup,把板子里的RLC全部赋上默认的模型,然后芯片需要手动指定DML格式的模型。如下图,需要点选你要赋模型的芯片位号,然后Find Model,并找到对应的刚刚转换好的DML模型。
4. 使用Allegro Setup->SI Design Setup 这个wizard将要仿真的信号网络等参数都设置一下,包括需要仿真的网络,一些DC电源网络的真实电压值等。
5. 在Analysis->Preference下面设置仿真器的相关参数,不过大部分都使用默认即可。需要注意的就是trace solver的仿真器一般都选择Bem2D即可,仿真速度较快。如果要仿真差分信号还需要勾选Differential extraction mode。
6. 使用Analysis->Probe功能,点选要仿真的网络(这个网络一定要在前面的第4步wizard里选择过才行),提取网络拓扑,Allegro会自动打开SigXplorer软件,然后设置仿真激励。
这里要注意的是提取的拓扑结构一般传输线的阻抗都是根据设置的PCB叠层自动计算出来的。如果拓扑中的传输线的阻抗离50ohm偏差较大,可以修改一下叠层,从而改变阻抗的值。另外在SigXp把拓扑提取出来之后,也可以在这个拓扑上做自由修改,比如增加端口,添加电阻电容,传输线等组件,这些都是可以在左边面板里选取的。最后保存为.top后缀的拓扑,下次可直接打开。下图的拓扑是一个output buffer 输出,一段fanout线,一个33ohm串阻,再到传输线和一个过孔最后到接收侧。
6. 启动仿真。一般默认会显示所有发送端口和接收端口的波形。
对于低速接口来说,比较关注的就是沿上的过冲,台阶,回沟是否会影响到触发门限。当然如果信号仿真下来过冲较大,可以增加始端串阻,减小FPGA驱动能力。如果边沿有台阶,说明驱动不足,可以减小始端串阻,增加FPGA驱动能力(前提是输出是FPGA芯片)。
IBIS模型目前用在复杂拓扑低速接口和DDR的时域仿真上居多。提到低速信号仿真,基本都是用IBIS模型。当然如果有办法得到HSPICE模型当然是也可以做同样的仿真。后来IBIS又演变出一个IBIS-AMI模型,这个东西就是在IBIS中添加了高速数字发送和接收端加重器和均衡器的算法部分后得到的,用于高速数字时域仿真。IBIS仿真就先谈到这里。
在之前介绍S参数的时候(SI篇8),我们提到插损在时域的傅里叶反变换其实就是这个无源通道的冲激响应。例如下图h(t):
当一个位元通过这个通道的时候,就会得到一个输出响应,如c(t)输入,得到y(t)输出。
如果是很多个位元或者说UI通过了这个通道,那么得到的结果也许是下面这样,*号代表时域卷积:
最后所有这些输出波形叠在一起看就得到了眼图:
理想情况下我们通道的冲击响应是一个尖峰。
但是实际情况由于通道存在反射,损耗等因素综合的影响,最后的冲激响应,会有一个很大的拖尾。如下图箭头位置:
这个拖尾,可以把它称作POST-CURSOR,如果越高,那么就会引起很大的码间干扰(ISI)。就是010101的信号通过这个通道,可能1刚变到0电平的门限,又马上要变回1了,没有落到0电平的最低点再回升。最后就变成下图这样的输出,可以看到信号明显在通道的作用下,来不及返回到最低点,就又变回1。这样的结果只能是眼图闭合。
那么如何解决呢?前面我们引出了眼图这个概念。先从频域来看下无源通道的特性。
对于一个无源通道,从它的S21插损曲线可以看出,对于数字信号这样的宽带信号中高频分量的衰减要大于低频分量,当一个数字信号到达接收侧之后,这种不同频率成分衰减的不均匀会导致眼图变小甚至闭合。在对待高速数字信号的时候,其实最终判断这个信号行不行,一般都是看眼图在接收侧是否满足一定的眼高眼宽要求。但是现代高速SERDES接口都是允许数字信号有一定衰减的,比如PCIe2.0的信号输出幅度大约为800mV,接收侧只需要120mV左右的眼高即可正确被识别,所以衰减并不可怕,可怕的往往是不同频率成分衰减的不均匀,导致眼图闭合。前面看到的通道响应的大拖尾,也主要是因为大的通道插损以及低高频分量损耗的不统一而引起的。
那么有什么办法来解决这个问题呢? 既然低频分量的衰减比高频分量小,那么就可以在发送端先把高频分量加增益,来补偿通道上多的衰减,这就是预加重(pre-emphasis),但是这种方法现在不常用了,现在比较常用的是对低频分量在发送端先衰减掉一点,来把通道上与高频分量衰减的差值尽量补齐。这就是去加重(de-emphasis)。现在多数SERDES接口的TX都有去加重模块(FFE)。那在接收侧也对应的均衡模块,其作用其实与加重有一点点类似,也是多衰减一点低频分量,保证最后低频高频分量衰减均衡,眼图可以睁开。常用的线性均衡器如CTLE,当然也有非线性的DFE。
好了,有了解决办法,我们再回到时域角度。在实际工程调试中,调节芯片的TX端FFE,通常可以通过人为配置芯片寄存器去调节,接受侧的CTLE,DFE模块一般都是自适应的,不太需要人工干预。下面就以PCIe2.0接口的TX谈一下FFE对TX信号的变化,PCIe2.0 对输出TX信号只支持两个挡位的FFE,-3dB和-6dB。由下图可以看到原始信号,和-3dB,-6dB去加重之后的时域波形的变化。
一般芯片的serdes接口都会有MAIN CURSOR,PRE-CURSOR,POST-CURSOR三个调节参数,对信号调节起主要作用的是:MAIN主要影响输出摆幅,POST则对输出信号去加重。
最后去加重调节过的信号位元(UI)在经过物理通道以后,得到的响应类似于被矫正到了拖尾明显下压的效果,如下图。
这样总的输出就会得到一个整体的矫正。虽然幅度是比原来没有做去加重时候减小了,但是至少眼图是睁开了。毕竟之前说过了,衰减不可怕,可怕的是眼图闭合。