[摘要] 本文结合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 Ansoftlinks

ansoftlinks是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 spicelink
Spicelink 是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 Hspice
hspice程序的编写是以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.1
xp 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'
+R

Vn 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.1
xp 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 hi

vn 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 cp2v
cp2v是一个差分过孔的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 5
C001 6 5 7.67194E-013
C002 7 5 7.70899E-013
C001_002 6 7 8.21054E-014
V001 1 8 DC 0
V002 2 9 DC 0
L001 8 10 4.56311E-010
F001L002 10 8 V002 0.36099
L002 9 11 4.50582E-010
F002L001 11 9 V001 0.36558
R001 10 6 0.0102407
F001R002 6 10 V002 0.176395
R002 11 7 0.0103758
F002R001 7 11 V001 0.174098
V003 6 12 DC 0
V004 7 13 DC 0
L003 12 14 4.56311E-010
F003L004 14 12 V004 0.36099
L004 13 15 4.50582E-010

·         调用子电路必须以字母X开头。
·      管脚的顺序必须与模型中的管脚顺序相同,在上面的cp2v模型中,我们从上面的说明部分知道,模型共有5个节点,前面两个是输入脚,后两个是输出脚,最后一个是参考电平面。从.SUBCKT cp2v 1 2 3 4 5这一句知道子电路的调用顺序是输入节点、输出节点、参考地,所以实际编写子程序调用一定要和这个顺序相同,即先输入管脚后输出管脚,最后是参考地。
·         多根子程序调用也不能出现重命名现象。
以上几部分内容是编写hspice程序的要点,只要掌握了上面几点,并做到细心,hspice 程序就可以完成。
4 结束语
本文阐述了高速信号(超Gb/s的速率)仿真分析的整个过程,虽然过程比较复杂,但是提供了一种准确进行高速仿真的方法,经过网络事业部es8100项目背板设计的验证,证明仿真分析结果比较准确,对前期的设计起到了很好的引导作用。

Ansoft 软件(spicelink)利用 和Hspice程序的编写及其参数的选择相关推荐

  1. 利用PROGISP实现ARDUINO IDE编写的程序的下载以及如何把AVR单片机做成ARDUINO板

    首先讲讲题目的由来吧.我做的东西原本是利用ARDUINO MEGA2560及各种模块搭建起来的,程序自然也是用ARDUINO IDE写的.但这种东拼西凑的产品自然不够好,更主要的是,之前ARDUINO ...

  2. 软件 2.0 时代的程序分析

    作者 | 张昕 整理 | 晴天 作者经历: 2020.9 – 现在,北京大学计算机系助理教授 2017.9 – 2020.8,美国麻省理工学院计算机与人工智能实验室博士后 2017,博士,美国佐治亚理 ...

  3. Ansoft Links 3.0 (EDA接口程序)

    Ansoft_ansys_hfss_12.1.rar FEKO 视频教学.rar GLAD V4.7.zip Altera Quartus II v7.2 SP3 1DVD\ Ansoft Links ...

  4. Python制作小软件——4. 利用PyInstaller打包成exe文件

    在前面:Python制作小软件--3. 利用PyQt5实现界面中的功能,介绍完了Python中如何呼唤出我们的界面后 最后最重要的就是将我们做好的东西,全部打包成一个.exe可执行文件.这里我们使用的 ...

  5. python写软件实例-30分钟学会用Python编写简单程序

    原标题:30分钟学会用Python编写简单程序 参与文末每日话题讨论,赠送异步新书 异步图书君 学习目标 知道有序的软件开发过程的步骤. 了解遵循输入.处理.输出(IPO)模式的程序,并能够以简单的方 ...

  6. 小程序在wxml里转数字_2020年利用名片小程序开启数字化营销的方法

    数字营销是什么意思?所谓数字营销,就是指借助于互联网.电脑通信技术和数字交互式媒体来实现营销目标的一种营销方式.数字营销将尽可能地利用先进的计算机网络技术,以更有效.省钱地谋求新的市场的开拓和新的消费 ...

  7. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  8. 单片机 10种软件滤波方法的示例程序

    单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1.限副滤波 /*  A值可根据实际情况调整     v ...

  9. 软件Release版本异常捕获程序(BugReport)

    软件Release版本异常捕获程序(BugReport) http://wangzai9931.blog.51cto.com/168627/164084 2009-06-08 23:09:43 标签: ...

最新文章

  1. python 博弈论 库_SHAP:Python的可解释机器学习库
  2. 第四次作业 结对编程-黄金点游戏
  3. handler机制的原理_5分钟了解Handler错误使用场景
  4. 动态规划最大子段和问题
  5. 信息论2——单维连续信源
  6. XSS 注入漏洞处理
  7. 序列化加密字段_自动加密可序列化的类
  8. spring-boot发送邮件失败 AuthenticationFailedException: 535 Authentication Failed
  9. Drupal 修复远程代码执行漏洞
  10. C# winform程序运行在XP
  11. Zabbix 3.4.2 install Configuration
  12. Atitit 卡片管理指南规范 attilax总结(内部身份卡,饭卡,交通卡 银行卡等)
  13. 飞控硬件在环之GPS模拟器
  14. 让SlickEdit 自动编译Keil C51工程
  15. 增值税下调对财务软件的影响
  16. wincc做皮带动画_wincc 如何做动画
  17. WPS表格插入制作折线图表教程
  18. 华为理工女,8年熬出头......
  19. TensorFlow2.0 Guide官方教程 学习笔记20 -‘Effective TensorFlow 2‘
  20. 42表盘直径是从哪测量_手表表盘尺寸怎么量

热门文章

  1. unity之VR模拟消防安全隐患排查综合方案(家庭/校园/商场/地铁/工厂/办公室)
  2. Oracle数据库对象
  3. char*cstr 转 ushort
  4. ATtiny13与Proteus仿真-TM1637简单时钟仿真
  5. 关于海外客户的设计交付体验与思考
  6. 钉钉小程序实现富文本编辑
  7. 信大第三届超越杯团体赛 题解
  8. 基于动态骨骼的动作识别方法ST-GCN
  9. [LoadRunner]录制启动时报“The JVM could not be started……”错误解决方案
  10. 百度地图 实现指定区域外添加遮罩效果 适用全省市