Skip to content
Snippets Groups Projects
Commit cdff192c authored by David Lanzendörfer's avatar David Lanzendörfer
Browse files

Moving essential stuff into PDK

parent 4b137bdd
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ import gdsfactory as gf
from gdsfactory.components.compass import compass
from librepdk.structure import LibrePDKStructure
import librepdk.helper as lph
class ViaStripe(LibrePDKStructure):
device_layers = ['nwell','ndiffusion','pdiffusion', 'poly', 'pwell',]
......@@ -52,10 +53,10 @@ class ViaStripe(LibrePDKStructure):
vlid = self.config.get_layer_id(vln)
space = self.config.get_min_spacing((vln,vln))
vdim = self.config.get_via_size(vln)
vs = self.to_nm(vdim)
vs = lph.to_nm(self.config, vdim)
vr = gf.components.rectangle(size=(vs,vs), layer=vlid)
dxy = self.to_nm(-vdim/2)
via << vr.move(self.snap_to_grid([dxy,dxy]))
dxy = lph.to_nm(self.config, -vdim/2)
via << vr.move([dxy,dxy])
# find spacing of largest via layer
if vdim > maxdim:
maxdim = vdim
......@@ -91,17 +92,17 @@ class ViaStripe(LibrePDKStructure):
h = hn
# centering the via group
sp = self.to_nm(spacing+maxdim)
sp = lph.to_nm(self.config, spacing+maxdim)
varr = gf.components.array(component=via, spacing=(sp, sp), columns=col, rows=row)
if self.less_vias:
dcpx = (self.to_nm(w+spacing)-varr.xsize)/2
dcpy = (self.to_nm(h+spacing)-varr.ysize)/2
dcpx = (lph.to_nm(self.config, w+spacing)-varr.xsize)/2
dcpy = (lph.to_nm(self.config, h+spacing)-varr.ysize)/2
else:
dcpx = dcpy = self.to_nm((maxdim+spacing)/2)
dcpx = dcpy = lph.to_nm(self.config, (maxdim+spacing)/2)
self << varr.move(self.snap_to_grid([dcpx, dcpy]))
self << varr.move(lph.snap_to_grid(self.config, [dcpx, dcpy]))
s = (self.to_nm(w),self.to_nm(h))
s = (lph.to_nm(self.config, w),lph.to_nm(self.config, h))
for mln in metalstackup:
lid = self.config.get_layer_id(mln)
r1 = gf.components.rectangle(size=s, layer=lid)
......
def value_to_grid(config, val):
g = config.get_grid()
r = int(round(val/g)*int(g))
return r
def to_nm(config, val):
if val == 0:
return 0
ret = val.m_as(config.ureg.m)/config.get_dbunit()
return value_to_grid(config, ret)
def snap_to_grid(config, val):
x = value_to_grid(config, val[0])
y = value_to_grid(config, val[1])
return [x,y]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment