New forge coding added
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
from typing import Any, Optional
|
||||
from unicodedata import name
|
||||
import nazca as nd
|
||||
import numpy as np
|
||||
|
||||
import os
|
||||
from .structures import *
|
||||
|
||||
|
||||
class gds_lib_load:
|
||||
def __init__(self,lib_path: Optional[str]=None,lib_name: Optional[str]=None,cell_name: Optional[str]=None,rename: Optional[str]=None, instantiate: bool=True,layermap: Any=None,cellsreused: Any=None) -> None:
|
||||
self.lib_name = lib_name
|
||||
self.rename = rename
|
||||
if (rename==None) : instantiate = False
|
||||
with nd.Cell(name=rename,instantiate=instantiate) as C:
|
||||
if (lib_path[-1]!="\\"):
|
||||
lib_path=lib_path+"\\"
|
||||
lib_name_gds=lib_name+".gds"
|
||||
lib_name_txt=lib_name+".txt"
|
||||
|
||||
nd.load_gds(filename=lib_path+lib_name_gds,
|
||||
cellname=cell_name,newcellname=cell_name,
|
||||
cellsreused=cellsreused,layermap=layermap,instantiate=True,
|
||||
scale=1.00).put(0,0,0)
|
||||
|
||||
if (os.path.isfile(lib_path+lib_name_txt)):
|
||||
f= open(lib_path+lib_name+'.txt',"r")
|
||||
str = f.read()
|
||||
exec(str)
|
||||
f.close()
|
||||
self.cell = C
|
||||
|
||||
def add_pin(self,pin_name=None,xya=(0,0,0),width=0.45,xs=None):
|
||||
self.cell._put_pin(name=pin_name,connect=xya,xs=xs,width=width)
|
||||
|
||||
|
||||
def generate_gds_lib(name,cell,with_txt=True):
|
||||
|
||||
with nd.Cell(name=name) as C:
|
||||
|
||||
inst = cell.put(0,0,0)
|
||||
|
||||
if (with_txt==True):
|
||||
if (os.path.exists("pdk_gds_lib")==False):
|
||||
os.mkdir("pdk_gds_lib")
|
||||
|
||||
filename = "pdk_gds_lib" + "\\" + name
|
||||
print(name)
|
||||
f = open(filename+".txt","w")
|
||||
ins_final = ""
|
||||
for pins in inst.ic_pins() :
|
||||
pin_name = pins[0] ## tuple first
|
||||
pin_pos = np.array(pins[1].xya())
|
||||
pin_width = np.array(pins[1].width)
|
||||
if (pin_width == None):
|
||||
pin_width = 0
|
||||
ins = pin_name+"= ["+str(pin_pos[0])+","+str(pin_pos[1])+","+str(pin_pos[2])+","+str(pin_width)+"] ; \n"
|
||||
ins_final = ins_final+ins
|
||||
f.write(ins_final)
|
||||
f.close()
|
||||
|
||||
nd.export_gds(filename=filename+'.gds',topcells=C)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user