Skip to content

Commit

Permalink
debug for GSiP pin rounding error
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasc-ubc committed Jan 19, 2018
1 parent 9f346e6 commit 3fefed6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
11 changes: 7 additions & 4 deletions klayout_dot_config/python/SiEPIC/extend.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,9 @@ def print_parameter_values(self):
2) text on layer PinRec, inside the box
'''
def find_pins(self, verbose=True, polygon_devrec=None):
if verbose:
print("SiEPIC.extend.find_pins()")

from .core import Pin
from . import _globals
from .utils import get_technology
Expand All @@ -348,8 +351,8 @@ def find_pins(self, verbose=True, polygon_devrec=None):
# iterate through all the PinRec shapes in the cell
it = self.begin_shapes_rec(LayerPinRecN)
while not(it.at_end()):
if verbose:
print(it.shape().to_s())
# if verbose:
# print(it.shape().to_s())
# Assume a PinRec Path is an optical pin
if it.shape().is_path():
if verbose:
Expand Down Expand Up @@ -592,8 +595,8 @@ def identify_nets(self, verbose=False):
for p1 in c1.pins:
for p2 in c2.pins:
if verbose:
print( " - Components, pins: [%s-%s, %s, %s, %s], [%s-%s, %s, %s, %s]"
% (c1.component, c1.idx, p1.pin_name, p1.center, p1.rotation, c2.component, c2.idx, p2.pin_name, p2.center, p2.rotation) )
print( " - Components, pins: [%s-%s, %s, %s, %s], [%s-%s, %s, %s, %s]; difference: %s"
% (c1.component, c1.idx, p1.pin_name, p1.center, p1.rotation, c2.component, c2.idx, p2.pin_name, p2.center, p2.rotation, p1.center-p2.center) )
# check that pins are facing each other, 180 degree
check1 = ((p1.rotation - p2.rotation)%360) == 180

Expand Down
28 changes: 14 additions & 14 deletions klayout_dot_config/tech/GSiP/pymacros/GSiP Library.lym
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ class Waveguide(PCellDeclarationHelper):
self.cell.shapes(LayerPinRecN).insert(Text("pin2", t, 0.3/dbu, -1))

LayerDevRecN = self.layout.layer(TECHNOLOGY['DevRec'])

# Compact model information
angle_vec = angle_vector(pts[0]-pts[1])/90
halign = 0 # left
Expand Down Expand Up @@ -186,11 +186,11 @@ class Waveguide(PCellDeclarationHelper):
pt3=pts[0] + Point(-self.width/dbu,0)

t = Trans(angle, False, pts[0])
text = Text ('Lumerical_INTERCONNECT_library=Design kits/GSiP', t, 0.1/dbu, -1)
text = Text ('Lumerical_INTERCONNECT_library=Design kits/ebeam', t, 0.1/dbu, -1)
text.halign=halign
shape = self.cell.shapes(LayerDevRecN).insert(text)
t = Trans(angle, False, pt2)
text = Text ('Component=wg_strip_integral_1550', t, 0.1/dbu, -1)
text = Text ('Component=ebeam_wg_integral_1550', t, 0.1/dbu, -1)
text.halign=halign
shape = self.cell.shapes(LayerDevRecN).insert(text)
t = Trans(angle, False, pt3)
Expand Down Expand Up @@ -502,21 +502,21 @@ class Ring_Modulator_DB(pya.PCellDeclarationHelper):
# Create the pins, as short paths:
from SiEPIC._globals import PIN_LENGTH as pin_length

shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 - (w_Si3 / 2 + taper_length) + pin_length/2, 0),
pya.Point(x0 - (w_Si3 / 2 + taper_length) - pin_length/2, 0)], w))
shapes(LayerPinRecN).insert(pya.Text("opt1", pya.Trans(pya.Trans.R0,x0 - (w_Si3 / 2 + taper_length), 0))).text_size = 0.5/dbu
shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 - (w_Si3 / 2. + taper_length) + pin_length/2., 0),
pya.Point(x0 - (w_Si3 / 2. + taper_length) - pin_length/2., 0)], w))
shapes(LayerPinRecN).insert(pya.Text("opt1", pya.Trans(pya.Trans.R0,x0 - (w_Si3 / 2. + taper_length), 0))).text_size = 0.5/dbu

shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 + (w_Si3 / 2 + taper_length) - pin_length/2, 0),
pya.Point(x0 + (w_Si3 / 2 + taper_length) + pin_length/2, 0)], w))
shapes(LayerPinRecN).insert(pya.Text("opt2", pya.Trans(pya.Trans.R0,x0 + (w_Si3 / 2 + taper_length), 0))).text_size = 0.5/dbu
pya.Point(x0 + (w_Si3 / 2 + taper_length) + pin_length/2., 0)], w))
shapes(LayerPinRecN).insert(pya.Text("opt2", pya.Trans(pya.Trans.R0,x0 + (w_Si3 / 2. + taper_length), 0))).text_size = 0.5/dbu

shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 - (w_Si3 / 2 + taper_length) + pin_length/2, y_offset),
pya.Point(x0 - (w_Si3 / 2 + taper_length) - pin_length/2, y_offset)], w))
shapes(LayerPinRecN).insert(pya.Text("opt3", pya.Trans(pya.Trans.R0,x0 - (w_Si3 / 2 + taper_length), y_offset))).text_size = 0.5/dbu
shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 - (w_Si3 / 2. + taper_length) + pin_length/2., y_offset),
pya.Point(x0 - (w_Si3 / 2. + taper_length) - pin_length/2., y_offset)], w))
shapes(LayerPinRecN).insert(pya.Text("opt3", pya.Trans(pya.Trans.R0,x0 - (w_Si3 / 2. + taper_length), y_offset))).text_size = 0.5/dbu

shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 + (w_Si3 / 2 + taper_length) - pin_length/2, y_offset),
pya.Point(x0 + (w_Si3 / 2 + taper_length) + pin_length/2, y_offset)], w))
shapes(LayerPinRecN).insert(pya.Text("opt4", pya.Trans(pya.Trans.R0,x0 + (w_Si3 / 2 + taper_length), y_offset))).text_size = 0.5/dbu
shapes(LayerPinRecN).insert(pya.Path([pya.Point(x0 + (w_Si3 / 2. + taper_length) - pin_length/2., y_offset),
pya.Point(x0 + (w_Si3 / 2. + taper_length) + pin_length/2., y_offset)], w))
shapes(LayerPinRecN).insert(pya.Text("opt4", pya.Trans(pya.Trans.R0,x0 + (w_Si3 / 2. + taper_length), y_offset))).text_size = 0.5/dbu

# Create the device recognition layer
shapes(LayerDevRecN).insert(pya.Box(x0 - (w_Si3 / 2 + taper_length), -w/2.0 - 12.5/dbu, x0 + (w_Si3 / 2 + taper_length), y0 + r_m1_out + w_m1_out+h_via ))
Expand Down

0 comments on commit 3fefed6

Please sign in to comment.