SI解释4
谈了通道响应,再之前又谈了好几篇的S参数相关的内容。可以说S参数是我们了解无源通道的最主要手段。S参数可以用仿真软件提取出来,或者用VNA实测出来。这里我们主要介绍下仿真。
之前我们说过ibis的仿真,它主要用于低速信号的有源仿真。这里的S参数仿真则主要用于高速信号的无源仿真。提取s参数的工具有很多,目前用的比较多的是Ansys/Sigrity等。个人觉得高速信号用Ansys比较多,低速和电源用Sigrity用的比较多,或者还有Ansys组件里面的SIWAVE。这里用来提取高速链路的是Ansys的HFSS 3D LAYOUT软件。HFSS 3D LAYOUT可以直接导入PCB文件,端口设置更加简便。HFSS则更加灵活,用起来比它复杂一点。就好比一个是C语言另一个是C++的感觉。
用3D LAYOUT提取S参数主要分以下几个步骤:这里简要总结一下,具体的可以参考HFSS 3D LAYOUT User Guide。
- 提前在Allegro文件中设置好叠层信息。
- 在3D LAYOUT环境下导入PCB文件,这里需要选择一下需要仿真的网络名,GND网络是肯定需要带上的。这个步骤几乎所有可以导入PCB进行仿真的软件都会有这步操作,毕竟不需要的网络需要被剔除,这样才能提高仿真的速度,减小计算量。
3. 如果在HFSS里面仿真,需要手动添加空气盒子,而在3D LAYOUT中空气盒子是自动产生。
当然也可以让你再调节一下盒子的边缘。
4. 设置端口
在3D LAYOUT中,元器件可以被分成好几类,比如下图所示的RLC,IC,IO,Other等。对于普通的RLC器件可以设置为简单的RLC SPICE模型,或者对精度要求高点,可以导入S参数模型,比如常用的AC电容。下图左侧是一条从PCB上截下来的一条RapidIO走线。
而IC,IO,Other的分类,如果设置为了IC的话,则会多出一个die properties的功能
可以在器件pad上自动生成一个PEC的圆柱,用来模拟BGA的焊球。当然这个圆柱的形状可以微调,最上方也会产生一个PEC的平面,最后自动生成同轴端口。这个操作给仿真带来了极大的方便。不再需要像HFSS那样手工自建端口。
发送和接收端的元件都需要设置元件的类型,并生成端口。
5.设置材料属性
在3D LAYOUT中也需要设置材料的Dk,Df参数,只不过不同于HFSS,它没有整个建模模型的各个组件的列表,而是在Project Manager下面的materials下进行材料设置。具体设置的材料名要与叠层里面介质的材料名一致。
别忘了介质设置为Dj模型,在SI仿真中大多使用这种模型,材料参数随频率变化。
6. 设置扫频频率
设置完我们的扫频频率之后,运行仿真,就可以得到PCB板上一个完整链路的S参数了。这个参数可以保存下来,比如用来在ADS中进行全链路的仿真,或者TDR的仿真等。
在SI问题中,对信号影响比较大的就是反射,而阻抗的不连续是主要原因,因此在高速无源链路中经常要做的就是保持阻抗的连续性或者说一致性。比如一个信号从BGA芯片的信号从die出来到Package的一段走线,再到BGA的焊球,再到Fanout以及PCB的走线。中间还有换层的过孔Via。每一个地方都是阻抗的不连续点。
要想整个链路反射最小,就需要对各个不连续点进行阻抗的优化,以便提高整个链路的阻抗连续性。而优化不连续点阻抗的常用方式就是反焊盘的优化。例如一个常用8mil的换层过孔的阻抗会低于50ohm常规特性阻抗。特性阻抗正比于单位长度电感除以电容,此时过孔呈现容性偏大,所以阻抗会偏低,如果需要把这段过孔的阻抗提高的话,就需要挖大反焊盘使得寄生电容减小,从而提高阻抗。原理简单来说就是这样。
反焊盘优化,主要工具是HFSS。反焊盘优化的几个常用的应用场景如下:
- 换层过孔。
高速线换层的时候,需要过孔换层,并且还会有伴随地孔,用来帮助高速信号修正回流路径。反焊盘常常是根据走线本身的特性阻抗挖成椭圆形的。过孔到周围GND层的距离与过孔这段“走线”的寄生电容相关。当然具体反焊盘是否要挖,挖多大,还与线本身的特性阻抗有关,如果差分阻抗本身就是85ohm的要求。那有可能不需要额外挖大,也能满足阻抗一致性要求,因为过孔本身的阻抗一般也在80ohm左右。如果挖大了反焊盘反而会使得这个地方的阻抗变大,超过85ohm,同样造成阻抗不连续。
下图是一对差分换层过孔,经过12层的GND层。
2. AC耦合电容
对于高速信号,一般链路上都会连接AC耦合电容,这个地方也是阻抗不连续点。一般在电容下方需要挖空一层,以补偿电容这个位置阻抗的减小。电容在建模的时候直接以COPPER材料建模即可。
3. BGA
例如下图一对PN信号线外加周围3个GND的信号。BGA出线的时候一般都会在焊盘和换层过孔处挖反焊盘。这里算是场景一和三的叠加。主要需要注意的地方就是这个焊球模型上的同轴端口建模。在HFSS中建立端口最常用的wave port,因为它有一个deembed功能,能够自由伸长端口,看TDR时候,会很好用,但是这个wave port,需要贴着空气盒子,对于传输线容易贴着空气盒子的组件还好,遇到一些不容易贴着空气盒子的Pad,比如这里的BGA的盘,就需要借助一段50ohm的同轴线来把端口延长到空气盒子边缘。最上面用一整块PEC把周围的GND的PAD连在一起,以构造一个完整的参考平面。
4. 连接器
连接器的情况与BGA类似,也是根据实际的连接器尺寸,端口的位置也使用同轴的方式建模会比较方便。同时要注意,为了避免最上方的PEC层与下面的信号盘有可能短路在一起。可以用小铜块把每个Pad上统一垫高一下。
当然除了以上几个常用场景之外,对于一些复杂的连接器模型,比如光模块连接器的模型,自己建模会比较麻烦,有时候官方会提供连接器的3D模型,可以导入到HFSS。然后自己添加端口进行仿真。比如下面这种复杂的光模块连接器,显然这个连接器太复杂,需要使用导入3D模型的方式。
HFSS因为建模比较自由,还可以建模去模拟背钻;模拟走线的上下边缘梯形的情况;设置铜箔粗糙度;还有板材的Dk,Df的值,也是用上一篇提到的Dj模型等等。对于反焊盘优化,最重要的是看TDR,因为这里用HFSS建模的部分只是链路中的一个阻抗不连续的局部位置。如果各个位置都优化好了,自然整个链路的阻抗的连续性会比较好。在设置hfss TDR的时候,默认是按照扫频最高频率的上升时间来模拟tdr激励的,所以要想看到更好的细节最好建议把扫频频率调到5倍的最高信号频率。另外前面提的使用wave port的deembed功能可以把端口走线与关注的阻抗变化的位置区分开。
例如对于第一个过孔的场景的TDR图,如果没有用deembed功能前观察TDR如下图。
对前面的端口用deembed -30mm之后,可以明显看到走线的阻抗与过孔的阻抗突变位置被区分开了,易于观察。
最后需要想提一下,HFSS的local variables变量的设置,在优化反焊盘的时候,可能需要对某一个尺寸作为变量进行扫参,以仿真出一组对比数据,这时候就需要把尺寸参数建立为变量,这样在Optim设置的时候就可以扫参,以得到最优的反焊盘尺寸参数。
前面聊了高速信号的无源仿真,无源仿真主要是阻抗优化和S参数提取。S参数这是对高速链路的一个重要评价手段。但是现代SERDES接口里面有丰富的加重均衡模块,有的模块是非线性的。如果只靠S参数对无源链路进行评估的时候,你有可能会遇到一种情况,S参数的插损和回损仿真结果不太好,或者离Spec比较临界。这时候可以用IBIS AMI模型,做时域眼图的仿真。
在SI篇10里面,我们谈了IBIS仿真。一个IBIS模型就是一个.ibs文件,里面有描述端口类型及对应的V/I曲线等数据。而一个IBIS-AMI模型则除了包含一个.ibs文件之外,还包含有一个算法模块,这是由于SERDES接口里面包含有均衡模块,其实也就是一种信号处理算法。在IBIS-AMI模型中体现在.ami和一个动态链接库的文件(比如在windows系统下就是一个.dll文件)。所以IBIS-AMI相比于IBIS模型就是多了这么两个实现算法的文件.ami和动态链接库。
- 对于IBIS-AMI的仿真,从框架上就包含以下三个层级,无源通道可以是我们提取出来的无源链路的S参数模型,红色框内就包含了.ibs里的驱动端口。绿色框则最终包含了算法Algorithmic的模型
2. IBIS-AMI的仿真工具这里主要介绍ADS。有的也会用Sigrity或者一些专用的比如SiSoft公司的工具。在ADS中,会自动识别AMI模型的文件类型,对其Model Type进行检查。AMI模型的Model Type有两种:Init-Only和Getwave-Only。具体的根据.ami文件里Init Returns impluse和Getwave Exits两个参数的TRUE和FALSE决定。有的AMI模型可能同时支持两者。根据一个仿真TX/RX模型的类型的支持,可以把仿真分类以下9类。
其实这两种类型的区别就在于,Init模式支持静态的全LTI系统的仿真,而Getwave模式则支持TX/RX端动态的均衡,前者是全链路都是线性,后者在链路中可能包含一部分非线性部分(比如Adaptation RX EQ)。这两种模式对应到仿真软件的仿真模式分别对应Statistical模式和Time Domain模式。下图中的最后两列绿色部分是推荐的仿真方式。
看下图会比较好理解静态和动态运算的过程。对于通道响应还不是太理解的话可以回看一下SI篇11。如果是LTI的线性运算会直接用卷积运算,如果是非线性的则需要用Gte()或者Gre()的函数来运算。
3. ADS仿真
仿真链路主要包括提取的无源通道S参数,官方的IBIS-AMI模型中可能还会提供芯片的package部分的S参数,然后TX,RX端口。
下一步就是导入AMI模型文件,对于TX端,可以在AMI的标签页查看到一些.ami文件里显示的参数信息,比如下图中的Getwave Exits的参数。还有FFE的参数,下图中的TXPRECURSOR,TXPOSTCURSOR这些,是不是觉得蛮眼熟的,这些其实在SI篇11中有提到。一般TX FFE都会提供PRECURSOR/POSTCURSOR/DIFFCTRL用来调节去加重的参数。
RX端的AMI标签页的设置如下图,对应均衡器的一些参数,很多都是自适应的,大部分都可以选择default值,或者根据芯片官方的参考手册里提供的推荐值进行设置即可。例如像Xilinx或者Intel的FPGA的AMI模型的使用就都有对应的User Guide提供参数设置的详细指导。
下图就是一个8Gbps的PCIE3.0的进RX前和在RX后观测到的眼图,可以发现,虽然在进RX之前的眼图不尽如人意,不过RX端经过内部的自适应均衡器使得眼图得以睁大。这也是AMI模型融入芯片内部实际包含的非线性均衡算法模块,使得相比于纯无源的线性LTI仿真会得到更加准确的结果。当然最后RX的眼图有点“双眼皮”还可以调节一下FFE参数进行优化。