Skip to content

Commit

Permalink
Ring Resonator : rounding fix
Browse files Browse the repository at this point in the history
Convert parameters to integer database, then perform calculations.
Avoid floating point errors.
  • Loading branch information
lukasc-ubc committed Nov 14, 2015
1 parent db046da commit 9e738c7
Showing 1 changed file with 12 additions and 11 deletions.
23 changes: 12 additions & 11 deletions klayout_dot_config/pymacros/SiEPIC_EBeam_PCells.lym
Original file line number Diff line number Diff line change
Expand Up @@ -245,31 +245,32 @@ class DoubleBus_Ring(pya.PCellDeclarationHelper):
# Create the ring resonator:
layout_Ring(self.cell, SiLayerN, self.r+self.w/2, self.r+self.g+self.w, self.r, self.w, self.npoints)

# w = int(round(self.w/dbu))
# r = int(round(self.r/dbu))
w = int(round(self.w/dbu))
r = int(round(self.r/dbu))
g = int(round(self.g/dbu))

# Create the two waveguides
wg1 = pya.Box(0, -self.w/2/dbu, (self.w+2*self.r)/dbu, self.w/2/dbu)
wg1 = pya.Box(0, -w/2, w+2*r, w/2)
self.cell.shapes(SiLayerN).insert(wg1)
y_offset = 2*self.r + 2*self.g + 2*self.w
wg2 = pya.Box(0, round((y_offset-self.w/2)/dbu), round((self.w+2*self.r)/dbu), round((y_offset+self.w/2)/dbu))
y_offset = 2*r + 2*g + 2*w
wg2 = pya.Box(0, y_offset-w/2, w+2*r, y_offset+w/2)
self.cell.shapes(SiLayerN).insert(wg2)

# Create the pins, as short paths:
pin_length = 0.2
pin = pya.Path([pya.Point(0, 0), pya.Point(pin_length/dbu, 0)], self.w/dbu)
pin_length = 200 # database units, = 0.2 microns
pin = pya.Path([pya.Point(0, 0), pya.Point(pin_length, 0)], w)
self.cell.shapes(LayerPinRecN).insert(pin)
pin = pya.Path([pya.Point((self.w+2*self.r-pin_length)/dbu, 0), pya.Point((self.w+2*self.r)/dbu, 0)],self.w/dbu )
pin = pya.Path([pya.Point(w+2*r-pin_length, 0), pya.Point(w+2*r, 0)],w )
self.cell.shapes(LayerPinRecN).insert(pin)
pin = pya.Path([pya.Point(0, (y_offset)/dbu), pya.Point(pin_length/dbu, (y_offset)/dbu)], self.w/dbu)
pin = pya.Path([pya.Point(0, y_offset), pya.Point(pin_length, y_offset)], w)
self.cell.shapes(LayerPinRecN).insert(pin)
pin = pya.Path([pya.Point((self.w+2*self.r-pin_length)/dbu, (y_offset)/dbu), pya.Point((self.w+2*self.r)/dbu, (y_offset)/dbu)], self.w/dbu)
pin = pya.Path([pya.Point(w+2*r-pin_length, y_offset), pya.Point(w+2*r, y_offset)], w)
self.cell.shapes(LayerPinRecN).insert(pin)



# Create the device recognition layer
dev = pya.Box(0, -self.w*3/dbu, (self.w+2*self.r)/dbu, (y_offset+self.w*3)/dbu )
dev = pya.Box(0, -w*3, w+2*r, y_offset+w*3 )
self.cell.shapes(LayerDevRecN).insert(dev)


Expand Down

0 comments on commit 9e738c7

Please sign in to comment.