[摘要] 本文结合ES8000项目高速背板的研发,阐述了Ansoft软件的使用,以及Hspice程序的编写方法.[关键词] Ansoft软件 Hspice 高速信号仿真1 序言在es8100项目中,我们的背板采用2.5Gb/s的串行信号进行传输,这个速率用目前用Cadence进行仿真已经显得力不从心,况且背板信号仿真还要牵涉到接插件的性能,包括过孔的性能已经成为影响信号质量的重要因数,对过孔的建模和仿真是一个必须突破的技术难题,传统的办法是用等效或集总参数进行建模,这种方法的仿真结果达不到理想的精度,而且不能精确定位部通过孔的参数,所以我们采用Aadence、Ansoftlink以及Spicelink三种软件配合使用,提取三维结构件(过孔)的spice模型,并分析过孔的tdr波形,最后我们用hspice 编写完成整个信号链路的TDR及眼图仿真,分析在不同情况下的阻抗连续性和抖动性能、眼睛开度。2 Asoft软件的使用下面介绍一下结合高速背板仿真设计中的流程对各个软件的使用方法进行说明。2.1 三维结构件性能参数的提取在超高速设计中,过孔的性能成为设计中至关重要的一个环节,所以必须提取它的参数并对它进行优化。提取三维结构件的性能参数分为两个步骤。1) 进行三维结构件的结构建立,ansoft软件本身(如HFSS、SPICELINK)具有三维建模的能力,但是用起来非常复杂,所以我们采用cadence软件提取过孔的三维原型,然后通过软件ANSOFTLINKS转变成ANSOFT认识的数据格式。首先我们利用cadence软件建立一个过孔,如图1所示,注意过孔的尺寸必须要与实际使用的过孔尺寸相同,具体的步骤可以参考cadence软件的使用手册,然后建立一个元器件,使它的封装调用该过孔,最后在原理图中调用这个器件,要注意的一点是在原理图中该元器件必须接地,否则不能转化为ANSOFT能够认识的数据格式。2) 将CADENCE的原理图数据到入到allegro中,需注意的一点是必须设置好叠层结构,使它与实际使用的板子的叠层相同,接下来的一个步骤是设置好平面层的antipad,设置步骤如下:1.选择add shape solid fill 画出一个区域,注意选择的平面应该是平面层(即地平面、电源层),选择的区域大小大于antipad尺寸的3倍。2.选择void shape挖出antipad的位置尺寸。3.选择shape fill命令覆盖solid fill 和antipad之间的空间,并赋该平面层的网络为地。4.选择edit z-copy将这个层的结构拷贝到其它的平面层。这样整个cadence的三维建模已经结束,调用allegro软件的命令ansoft write neutral命令将原先的pcb文件转换为 .anf 文件。2.2 Ansoftlinksansoftlinks是ansoft电磁场仿真工具与主流eda软件的接口工具,它可以快速读取cadence、avant、mentor等eda软件的数据信息,操作步骤如下:1)选择file import anf命令将cadence软件中生成的anf软件读入,软件的界面见下面的图2。2)将net中的ground选项选中。3) 选择edit layerstack, 调整顶层和底层外的空气层的厚度为2mm。4) 选择 edit via,不改变via的材料,但是将via fill改为100%。5) 选择file export export solid model 将三维结构模型转化为ansoft的三维电磁场模型 (.sm3文件)。2.3 spicelinkSpicelink 是ansoft公司专用的寄生参数提取器,它通过精确求解三维电磁场。提取三维结构和各种分离部件的精确RLC寄生参数,自动生成SPICE等效电路,从而方便各种SPICE仿真器的使用。提取寄生参数的步骤如下:1. 建立工程文件,导入sm3文件。2. 选择需要的参数(request parameter…),将所有的直流、交流及电容全部选上。3. 按照实际PCB的结构编辑三维模型(Draw…)。在这里首先完成将所有相同种类物质的合并,采用solid unite命令合并所有相同的材料进行,注意这些材料必须在结构上相连才能合并,顶层上的空气层和底层下的空气层就只能分别作为独立的两层物质,要注意的一点是必须将不在走线层的过孔焊盘和周围的fr4介质进行合并,见下面的图2。重命名材料并改变他们的显示属性,采用edit attribute by click,将金属材料设为实体,将非金属材料设为透视体。4. 定义材料(setup material…)绘制完模型后,用户可以从材料库中选择已有的材料来定义模型材料,也可以根据需要,自己定义材料。在实际使用中,我们采用cu作为作为过孔材料,fr4为介质材料,外围为空气。5. 设置导体(setup conductor…),采用auto setup来完成设置。6. 定义端口和边界(setup boundaries…),边界已经有cadence软件建立三维结构时候已经完成,关键是端口,在这里,端口是电流进入和出来的地方。对于差分线队,端口应是对称的。7. 设置求解(setup solution),将全部选项选上。8. 仿真运行(solve parameter),将所有的支流、交流、电容、电阻、电感参数选上,系统自动运行并将计算出三维模型的寄生参数。9. 参数后处理(reduce matrices…),主要分为三步,第一步floatinfinity即将无限远浮地。第二步groundnet with gnd即将地网络接地,第三步 change fequence 即将工作频率设为1.25e+009HZ。10. 输出spice模型(export circuit equivalent…)选择format为hspice, 电容、电阻、电感注意应该选择上面reduce后的结果,位于globmtrx目录下。最后选择create equivalent…生成最后的spice模型。3 Hspicehspice程序的编写是以spice语言的结构来描述仿真链路的结构。具体spice的语法可以参考硬件设计园地中专业小组的” hspice.pdf ”, 下面我将编程中主要的几个重要部分进行一下设计说明。3.1 信号源的编写在设计中我们经常要测试信号链路的阻抗情况和它的抖动特征,所以经常用到的信号源主要主要有以下两个,TDR源和眼图测试码,在我们的设计中,将这两个源都作为Macro,并且参数可以调用时候设定。下面我结合实际的源码进行说明:(1) 差分眼图信号源.MACRO df_eye_src outp outn ref lo=0v hi=0.6v tr=125ps ui=400ps ro=50 ff=0.1xp outp1 outp ref rcfiltn rflt=ro tdflt='ff*tr'xn outn1 outn ref rcfiltn rflt=ro tdflt='ff*tr'Vp outp1 ref PWL +0ns 'hi/2-lo/2' +'tr/2' hi 'ui-tr/2' hi +'ui+tr/2' hi '2*ui-tr/2' hi +'2*ui+tr/2' hi '3*ui-tr/2' hi +'3*ui+tr/2' hi '4*ui-tr/2' hi +'4*ui+tr/2' hi '5*ui-tr/2' hi +'5*ui+tr/2' lo '6*ui-tr/2' lo +'6*ui+tr/2' hi '7*ui-tr/2' hi +'7*ui+tr/2' lo '8*ui-tr/2' lo +'8*ui+tr/2' hi '9*ui-tr/2' hi +'9*ui+tr/2' hi '10*ui-tr/2' hi +'10*ui+tr/2' lo '11*ui-tr/2' lo +'11*ui+tr/2' lo '12*ui-tr/2' lo +'12*ui+tr/2' lo '13*ui-tr/2' lo +'13*ui+tr/2' lo '14*ui-tr/2' lo +'14*ui+tr/2' lo '15*ui-tr/2' lo +'15*ui+tr/2' hi '16*ui-tr/2' hi +'16*ui+tr/2' lo '17*ui-tr/2' lo +'17*ui+tr/2' hi '18*ui-tr/2' hi +'18*ui+tr/2' lo '19*ui-tr/2' lo +'19*ui+tr/2' lo '20*ui-tr/2' lo+'20*ui 'hi/2-lo/2' +RVn outn1 ref PWL +0ns 'hi/2-lo/2' +'tr/2' lo 'ui-tr/2' lo +'ui+tr/2' lo '2*ui-tr/2' lo +'2*ui+tr/2' lo '3*ui-tr/2' lo +'3*ui+tr/2' lo '4*ui-tr/2' lo +'4*ui+tr/2' lo '5*ui-tr/2' lo +'5*ui+tr/2' hi '6*ui-tr/2' hi +'6*ui+tr/2' lo '7*ui-tr/2' lo +'7*ui+tr/2' hi '8*ui-tr/2' hi +'8*ui+tr/2' lo '9*ui-tr/2' lo +'9*ui+tr/2' lo '10*ui-tr/2' lo +'10*ui+tr/2' hi '11*ui-tr/2' hi +'11*ui+tr/2' hi '12*ui-tr/2' hi +'12*ui+tr/2' hi '13*ui-tr/2' hi +'13*ui+tr/2' hi '14*ui-tr/2' hi +'14*ui+tr/2' hi '15*ui-tr/2' hi +'15*ui+tr/2' lo '16*ui-tr/2' lo +'16*ui+tr/2' hi '17*ui-tr/2' hi +'17*ui+tr/2' lo '18*ui-tr/2' lo +'18*ui+tr/2' hi '19*ui-tr/2' hi +'19*ui+tr/2' hi '20*ui-tr/2' hi +'20*ui 'hi/2-lo/2' +R *k28.5 testcode:1111_1010_1100_0001_0100.eom上面是一个差分的眼图测试源,测试码是1111_1010_1100_0001_0100.其中,lo代表低电平,hi代表高电平,tr代表上升眼的时间,ui代表信号周期,ro是输出电阻,ff代表滤波参数,在这个信号源中,为了模拟实际的信号情况(即10%电平到90%电平之间的时间是tr,我们采用四级滤波,滤除高频信号,使输出信号跟实际信号相同。要说明的最后一点是必须在最后的地方加上+R,标示测试码重复循环。(2)tdr源tdr源主要用来测试信号线的阻抗情况,下面的源码.MACRO df_tdr_src outp outn ref lo=0v hi=0.6v tr=125ps ro=50 ff=0.1xp outp1 outp ref rcfiltn rflt=ro tdflt='ff*tr'xn outn1 outn ref rcfiltn rflt=ro tdflt='ff*tr'vp outp1 ref pwl+0ns lo+0.5ns lo+'0.5ns+tr' hi+150ns hivn outn1 ref pwl+0ns hi+0.5ns hi+'0.5ns+tr' lo+150ns lo.EOM可以看出tdr源实际上是一个上升沿,关于参数的说明可以参照上面的眼图测试码的说明。3.2 线形和叠层的设计通过叠层的设计模仿我们信号线实际使用的叠层结构,具体源码如下*define the Line structure.SHAPE core POLYGON VERTEX +=(0mm 0mm 0.0125mm 0.0178mm 0.2165mm 0.0178mm 0.229mm 0mm )*DEFINE THE LAYERSTACK.LAYERSTACK bkstack BACKGROUND=AIR +LAYER=(pec,0.04mm)+LAYER=(fr4,0.287mm)+LAYER=(fr4,0.366mm)+LAYER=(pec,0.04mm)我们在设计中采用多边形来描述线形,其中(0mm 0mm)代表左下脚,其中( 0.0125mm 0.0178mm)代表左上脚,其中(0.2165mm 0.0178mm)代表 脚右上脚,其中(0.229mm 0mm)代表 右下脚,在描述线形时,必须以顺时针方向描述。描述叠层实际上描述传输线跟平面层之间的相互位置关系,在这里,我们将下面的平面层作为基准平面,即高度为0mm,然后逐步描述各个材料层得高度,以上面例子为例,最下面层是0.04mm的铜(pec是指良导体),然后是0.287mm的fr4,再接着是0.366mm的fr4(要说明一点是这个高度已经包括了实际传输线的高度),最上面一层0.04mm的铜。这样描述后决定了传输线在平面层中的位置。3.3 传输线模型的描述当线形和叠层描述都结束以后,下面我们要做的一件事情是定义一个W element来描述有损的信号线,下面是一个差分信号线的W element模型:.MODEL c2sl_wd W MODELTYPE=FieldSolver LAYERSTACK=bkstack +FSOPTIONS=accusim RLGCFILE=c2sl_wd.rlgc +CONDUCTOR=(SHAPE=poly_wd MATERIAL=cu ORIGIN=(0mm,0.42mm) TYPE=SIGNAL) +CONDUCTOR=(SHAPE=poly_wd MATERIAL=cu ORIGIN=(0.66mm,0.42mm) TYPE=SIGNAL)Welement是有损传输线的模型,在我们的设计中,我们采用场分析来分析传输线,所以还必须首先定义场分析模型,具体定义如下:.FSOPTIONS accusim ACCURACY=HIGH GRIDFACTOR=6 +PRINTDATA=YES ComputeRo=yes ComputeRs=yes ComputeGo=yes ComputeGd=yes在上面的场分析模型中,.FSOPTIONS是关键字,accusim是模型的名字,后面是参数:ACCURACY指精度,氛围高、中、低三个等级。PRINTDATA指是否打印出输出数据。 ComputeRo、ComputeRs、 ComputeGo、 ComputeGd分别指是否场分析模型是否计算直流阻抗矩阵、趋肤阻抗矩阵、静态电导矩阵和介质损耗矩阵。现在我们来分析一下W element的描述,.Model是关键字,后面跟着的是模型名字,再后面W的是指模型是一个Welement。MODELTYPE是指模型的种类,这里我们采用场分析模型。 LAYERSTACK是指叠层,将以前我们定义的叠层赋给它即可。FSOPTIONS是指场分析模型,RLGCFILE是指产生传输线的R、L、G、C参数的文件。下面的两个+CONDUCTOR分别描述两根差分传输线。其中里面用到了线形、线材和差分线的位置。3.4传输线的描述传输线是描述实际系统中用到最多的描述,下面是一个实际差分传输线的设计wa1 ain_1 ain_2 0 avia_1i avia_2i 0 +N=2 +L=0.02 +FSMODEL=c2mL_top +INCLUDERSIMAG=YES +FGD=20e9从上面的设计中我们应该注意的地方是· 传输线的描述是从关键字W开始的。· 0在hspice中代表参考地平面。· L是传输线长度,N是传输线的数量,FSMODEL是传输线模型,INCLUDERSIMAG是指是否计算趋肤效应,FGD是设定了介质损耗不变的截至频率。· 在描述多根传输线时,必须保证不能出现重命名情况出现。3.5 过孔和接插件的调用上面我们已经提取乐过孔的spice模型,另外可以从供应商那里得到接插件的spice模型,那么如何在程序中调用它们呢,调用子电路的模型主要有以下几点,下面我结合实际的差分线过孔模型调用例子来说明:xavia3 ain_1 ain_2 aout_1 aout_2 0 cp2vcp2v是一个差分过孔的spice模型,下面是它的spice 文件* BEGIN ANSOFT HEADER* node 1 via1_src1* node 2 via2_src2* node 3 via1_Sink* node 4 via2_Sink* node 5 Ground_Bias* Format: HSPICE* Model: 3D Lumped Model* Type: RLC* Project: cp2v* Cap: d:/maxwell/default/highspeed/cp2v.pjt/cap.pjt/globmtrx/reduce3.lvl* Ind: d:/maxwell/default/highspeed/cp2v.pjt/acind.pjt/globmtrx/reduce3.lv* + l* Res: d:/maxwell/default/highspeed/cp2v.pjt/acind.pjt/globmtrx/reduce3.lv* + l* Notes: cp2v spice model* END ANSOFT HEADER.SUBCKT cp2v 1 2 3 4 5C001 6 5 7.67194E-013C002 7 5 7.70899E-013C001_002 6 7 8.21054E-014V001 1 8 DC 0V002 2 9 DC 0L001 8 10 4.56311E-010F001L002 10 8 V002 0.36099L002 9 11 4.50582E-010F002L001 11 9 V001 0.36558R001 10 6 0.0102407F001R002 6 10 V002 0.176395R002 11 7 0.0103758F002R001 7 11 V001 0.174098V003 6 12 DC 0V004 7 13 DC 0L003 12 14 4.56311E-010F003L004 14 12 V004 0.36099L004 13 15 4.50582E-010· 调用子电路必须以字母X开头。· 管脚的顺序必须与模型中的管脚顺序相同,在上面的cp2v模型中,我们从上面的说明部分知道,模型共有5个节点,前面两个是输入脚,后两个是输出脚,最后一个是参考电平面。从.SUBCKT cp2v 1 2 3 4 5这一句知道子电路的调用顺序是输入节点、输出节点、参考地,所以实际编写子程序调用一定要和这个顺序相同,即先输入管脚后输出管脚,最后是参考地。· 多根子程序调用也不能出现重命名现象。以上几部分内容是编写hspice程序的要点,只要掌握了上面几点,并做到细心,hspice 程序就可以完成。4 结束语本文阐述了高速信号(超Gb/s的速率)仿真分析的整个过程,虽然过程比较复杂,但是提供了一种准确进行高速仿真的方法,经过网络事业部es8100项目背板设计的验证,证明仿真分析结果比较准确,对前期的设计起到了很好的引导作用。