在開發3D Layout的自動化程式,某些時候我們需要取得Layout的一些訊息,偏偏函式庫不提供對應的函數,這時候就只能透過EDB的函式庫來抓取。但是如何才能從AEDT函式連結到專案對應到的EDB呢?這時候就可以透過下面指令來達成:
DB = edb.Database.Attach(int(oProject.GetEDBHandle()))
當中GetEDBHandle()可以取得現在開啟當中的Project對應到的資料庫編號,此時用edb.Database.Attach()輸入編號便可以返回資料庫物件做資料的抓取了。以下範例便是透過EDB抓到3D Layout所有的net及net連接的元件及pin,並將其輸出到AEDT的訊息視窗。
import clr
clr.AddReference('Ansys.Ansoft.Edb')
clr.AddReference('Ansys.Ansoft.SimSetupData')
import Ansys.Ansoft.Edb as edb
import ScriptEnv
ScriptEnv.Initialize("Ansoft.ElectronicsDesktop")
oDesktop.RestoreWindow()
oProject = oDesktop.GetActiveProject()
oDesign = oProject.GetActiveDesign()
oEditor = oDesign.GetActiveEditor()
def getNetInfo():
DB = edb.Database.Attach(int(oProject.GetEDBHandle()))
cells = list(DB.TopCircuitCells)
for i in cells:
if i.GetName() == (oDesign.GetName() if ';' not in oDesign.GetName() else oDesign.GetName().split(';')[1]):
layout = i.GetLayout()
break
net_info = {}
for n in layout.Nets:
netname = n.GetName()
net_info[netname] = {}
for i in n.PadstackInstances:
if len(i.GetName()) == 0:
continue
try:
net_info[netname][i.GetComponent().GetName()] += [i.GetName()]
except:
net_info[netname][i.GetComponent().GetName()] = [i.GetName()]
return net_info
AddWarningMessage(str(getNetInfo()))
(圖一) 輸出net, net連接到的元件及pin |
沒有留言:
張貼留言