许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  基于HFSS脚本的集成电路设计仿真(3):与Cadence无缝协同

基于HFSS脚本的集成电路设计仿真(3):与Cadence无缝协同

阅读数 8
点赞 0
article_banner

在版图设计阶段,射频集成电路工程师们通常需要将Cadence所输出的GDS文件 导入到HFSS中,并进行后续建模和仿真。这个过程相当繁琐且枯燥。如若我们能用Python脚本完成GDS的全自动导入,版图设计的效率将会得到极大的提升。

本篇文章,我们将以两层金属(VM1,VM2)结构为例,介绍相关的代码实现。该代码经过极其简单的修改,即可应用于任意层数金属的情况。若有不足之处,还望大家多多指教。

1. 准备工作

在编程之前,需要大家完成下列准备工作。

1.1 金属层GDS Number,电导率,厚度,和纵坐标获取

  • 鼠标右击"Layer" --> Columns --> GDS Number
  • 这里涉及到PDK 保密的问题,作者不方便告诉大家“电导率,厚度,Z坐标”信息的获取渠道。各公司、课题组应该都有自己的方法,烦请诸位读者自行研究。VM1,VM2信息汇总如下
名称 厚度 电导率 Z坐标 GDS Number
VM1 1.2 um 2.5e7 206 um 32
VM2 2.3 um 2.5e7 208.2 um 38

1.2 介质层信息获取

  • 烦请读者根据所用PDK,自行获取

1.3 GDS文件导出

  • CIW: File --> Export --> Stream,自行完成GDS文件的导出。这里,我的GDS文件命名为"demo.gds"。

1.4 新建空白HFSS工程文件

  • 这里,作者将其命名为tutorial

2. 代码实现

2.1 新建设计

  • 当前工程下,新建设计“Design1”
  • 将求解模式选择为DirvenModal
import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oProject = oDesktop.SetActiveProject("tutorial")
oProject.InsertDesign("HFSS", "Design1", "DrivenModal", "")

2.2 VM1和VM2的导入

GDS_no = [32, 38]
Metal  = ["VM1", "VM2"]
Sigma  = [2.5e7, 2.5e7]
Z      = ["200.6um", "208.2um"]
t      = ["1.2um", "2.3um"]

2.3 新建金属材料VM1, VM2

oDefinitionManager = oProject.GetDefinitionManager()

for index in len(GDS_no):
	oDefinitionManager.AddMaterial(
		[
			"NAME:"+Metal[index],
			"CoordinateSystemType:=", "Cartesian",
			"BulkOrSurfaceType:="	, 1,
		[
			"NAME:PhysicsTypes",
			"set:="			, ["Electromagnetic"]
		],
			"permittivity:="	, "1",
			"conductivity:="	, Sigma[index]
		])

2.4 新建空气盒子和介质层

  • 详情参见下文3.3和3.4小节

2.5 GDS文件导入

  • 根据“GDS Number”导入“demo.GDS"文件,并命名为对应的金属层
for index in range(len(GDS_no)):
	oEditor.ImportGDSII(
		[
			"NAME:options",
			"FileName:="		, "demo.gds",
			"FlattenHierarchy:="	, True,
			"ImportMethod:="	, 1,
		[
			"NAME:LayerMap",
			[
				"NAME:LayerMapInfo",
				"LayerNum:="		, GDS_no[index],
				"DestLayer:="		, Metal[index],
				"layer_type:="		, "signal"
			]
		],
			"OrderMap:="	, [			"entry:="		, [			"order:="		, 0,			"layer:="		, Metal[index]]]
		])
  • 获得所有“Sheets”的名称,并合并成String
	oObject_Names = oEditor.GetObjectsInGroup( "Sheets" )

        if (len(oObject_Names)):

                oObjects = ""
		for oObject_Name in oObject_Names:
			oObjects = oObjects + oObject_Name + ","
  • 移到指定的Z坐标
		oEditor.Move(
			[
				"NAME:Selections",
				"Selections:="		, oObjects,
				"NewPartsModelFlag:="	, "Model"
			], 
			[
				"NAME:TranslateParameters",
				"TranslateVectorX:="	, "0um",
				"TranslateVectorY:="	, "0um",
				"TranslateVectorZ:="	, Z[index]
			])
  • 生成指定厚度的金属
		oEditor.SweepAlongVector(
			[
				"NAME:Selections",
				"Selections:="		, oObjects,
				"NewPartsModelFlag:="	, "Model"
			], 
			[
				"NAME:VectorSweepParameters",
				"DraftAngle:="		, "0deg",
				"DraftType:="		, "Round",
				"CheckFaceFaceIntersection:=", False,
				"SweepVectorX:="	, "0um",
				"SweepVectorY:="	, "0um",
				"SweepVectorZ:="	, t[index]
			])
  • 赋予材料属性
		oEditor.AssignMaterial(
			[
				"NAME:Selections",
				"AllowRegionDependentPartSelectionForPMLCreation:=", True,
				"AllowRegionSelectionForPMLCreation:=", True,
				"Selections:="		, oObjects,
			], 
			[
				"NAME:Attributes",
				"MaterialValue:="	, "\""+Metal[index]+"\"",
				"SolveInside:="		, False,
				"ShellElement:="	, False,
				"ShellElementThickness:=", "nan ",
				"IsMaterialEditable:="	, True,
				"UseMaterialAppearance:=", False,
				"IsLightweight:="	, False
			])     

3. 运行结果

  • 几秒钟即完成了全套工作 \(^_^)/

4. 特别说明

  • 对于多层金属结构,只需要回到2.2小节修改金属层信息即可使用本代码
  • GDS文件请提供完整路径名
  • 如果希望自动端口添加、S参数仿真和SP文件输出,可以复用以下文章的代码


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空