From 3b021800afb48f34e5ad8ab471e2cef6a3685aa7 Mon Sep 17 00:00:00 2001 From: Lukas Chrostowski Date: Thu, 23 Feb 2023 01:03:40 -0800 Subject: [PATCH] wg_heater PCell with compact model Former-commit-id: 183395c74ede0e71015ad9f0c485a995b2224d31 --- Lumerical_EBeam_CML/EBeam/wg_heater.ice | Bin 0 -> 234153 bytes .../EBeam_v2023_01_12.cml.REMOVED.git-id | 1 - .../EBeam_v2023_02_23.cml.REMOVED.git-id | 1 + .../EBeam_v2023_01_12.cml.REMOVED.git-id | 1 - .../EBeam_v2023_02_23.cml.REMOVED.git-id | 1 + .../wg_heater.py | 72 +++++++++++++++--- 6 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 Lumerical_EBeam_CML/EBeam/wg_heater.ice delete mode 100644 Lumerical_EBeam_CML/EBeam_v2023_01_12.cml.REMOVED.git-id create mode 100644 Lumerical_EBeam_CML/EBeam_v2023_02_23.cml.REMOVED.git-id delete mode 100644 klayout/EBeam/EBeam_v2023_01_12.cml.REMOVED.git-id create mode 100644 klayout/EBeam/EBeam_v2023_02_23.cml.REMOVED.git-id rename klayout/EBeam/pymacros/{pcells_EBeam_Beta => pcells_EBeam}/wg_heater.py (63%) diff --git a/Lumerical_EBeam_CML/EBeam/wg_heater.ice b/Lumerical_EBeam_CML/EBeam/wg_heater.ice new file mode 100644 index 0000000000000000000000000000000000000000..d17054b02c08e4faecd330458eef1fd6a025635a GIT binary patch literal 234153 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 literal 0 HcmV?d00001 diff --git a/Lumerical_EBeam_CML/EBeam_v2023_01_12.cml.REMOVED.git-id b/Lumerical_EBeam_CML/EBeam_v2023_01_12.cml.REMOVED.git-id deleted file mode 100644 index 7aa60319..00000000 --- a/Lumerical_EBeam_CML/EBeam_v2023_01_12.cml.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -04f359a9db457c72721fc48ee0fe45201dfc7316 \ No newline at end of file diff --git a/Lumerical_EBeam_CML/EBeam_v2023_02_23.cml.REMOVED.git-id b/Lumerical_EBeam_CML/EBeam_v2023_02_23.cml.REMOVED.git-id new file mode 100644 index 00000000..b8babde8 --- /dev/null +++ b/Lumerical_EBeam_CML/EBeam_v2023_02_23.cml.REMOVED.git-id @@ -0,0 +1 @@ +0e910ef82b23e859cd5b19ef7416fc1dbbf826a9 \ No newline at end of file diff --git a/klayout/EBeam/EBeam_v2023_01_12.cml.REMOVED.git-id b/klayout/EBeam/EBeam_v2023_01_12.cml.REMOVED.git-id deleted file mode 100644 index 7aa60319..00000000 --- a/klayout/EBeam/EBeam_v2023_01_12.cml.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -04f359a9db457c72721fc48ee0fe45201dfc7316 \ No newline at end of file diff --git a/klayout/EBeam/EBeam_v2023_02_23.cml.REMOVED.git-id b/klayout/EBeam/EBeam_v2023_02_23.cml.REMOVED.git-id new file mode 100644 index 00000000..b8babde8 --- /dev/null +++ b/klayout/EBeam/EBeam_v2023_02_23.cml.REMOVED.git-id @@ -0,0 +1 @@ +0e910ef82b23e859cd5b19ef7416fc1dbbf826a9 \ No newline at end of file diff --git a/klayout/EBeam/pymacros/pcells_EBeam_Beta/wg_heater.py b/klayout/EBeam/pymacros/pcells_EBeam/wg_heater.py similarity index 63% rename from klayout/EBeam/pymacros/pcells_EBeam_Beta/wg_heater.py rename to klayout/EBeam/pymacros/pcells_EBeam/wg_heater.py index 0387b108..23ca7b2f 100644 --- a/klayout/EBeam/pymacros/pcells_EBeam_Beta/wg_heater.py +++ b/klayout/EBeam/pymacros/pcells_EBeam/wg_heater.py @@ -49,9 +49,11 @@ def __init__(self): self.param("mllayer", self.TypeLayer, "Metal contact layer", default=TECHNOLOGY['M2_router']) self.param("metal_width", self.TypeDouble, "Metal contact width", default=10) + self.param("wg_width", self.TypeDouble, "Waveguide width (microns)", default = 0.5, readonly=True) self.param("pinrec", self.TypeLayer, "PinRec Layer", default = TECHNOLOGY['PinRec']) self.param("devrec", self.TypeLayer, "DevRec Layer", default = TECHNOLOGY['DevRec']) self.param("pinrecm", self.TypeLayer, "PinRecM Layer (metal)", default=TECHNOLOGY['PinRecM']) + self.param("text", self.TypeLayer, "Text Layer", default = LayerInfo(10, 0)) self.cellName="wg_heater" @@ -60,8 +62,11 @@ def display_text_impl(self): return "%s_%s" % (self.cellName, self.length) def coerce_parameters_impl(self): - self.path = DPath([DPoint(0,0), DPoint(self.length,0)], 0.5) - print(self.waveguide_type) + params = [t for t in self.waveguide_types if t['name'] == self.waveguide_type] + if not params: + raise Exception ('Waveguides.XML not correctly configured') + from SiEPIC.extend import to_itype + self.wg_width = float(params[0]['width']) def can_create_from_shape_impl(self): return self.shape.is_path() @@ -82,15 +87,22 @@ def produce_impl(self): if self.layout.technology_name == '': self.layout.technology_name = self.technology_name - from SiEPIC.extend import to_itype - from SiEPIC.utils.layout import make_pin + + # fetch the parameters dbu = self.layout.dbu - - - # Draw the waveguide geometry, new function in SiEPIC-Tools v0.3.90 - from SiEPIC.utils.layout import layout_waveguide4 - self.waveguide_length = layout_waveguide4(self.cell, self.path, self.waveguide_type, debug=False) + ly = self.layout + shapes = self.cell.shapes + from SiEPIC.utils import get_technology_by_name, load_Waveguides_by_Tech + TECHNOLOGY = get_technology_by_name('EBeam') + params = [t for t in self.waveguide_types if t['name'] == self.waveguide_type] + layer = [wg['layer'] for wg in params[0]['component']] + try: + layer.remove('DevRec') + except: + pass + if not layer: + raise Exception ('Waveguides.XML not correctly configured') # fetch design layers LayermlN = self.layout.layer(self.mllayer) @@ -98,6 +110,18 @@ def produce_impl(self): LayerPinRecN = self.layout.layer(self.pinrec) LayerDevRecN = self.layout.layer(self.devrec) LayerPinRecM = self.layout.layer(self.pinrecm) + LayerWG = ly.layer(TECHNOLOGY[layer[0]]) + LayerTextN = ly.layer(self.text) + + + from SiEPIC.extend import to_itype + from SiEPIC.utils.layout import make_pin + dbu = self.layout.dbu + w = to_itype(self.wg_width,dbu) + + # Draw the waveguide geometry + path = DPath([DPoint(0,0), DPoint(self.length,0)], self.wg_width) + self.cell.shapes(LayerWG).insert(path.simple_polygon()) # draw metal heater path = DPath([DPoint(0,0), DPoint(self.length,0)], self.mh_width) @@ -117,4 +141,32 @@ def produce_impl(self): make_pin(self.cell, "elec1", [self.metal_width / 2, self.mh_width/2], ml_width, LayerPinRecM, 90) make_pin(self.cell, "elec2", [self.length-self.metal_width / 2, self.mh_width/2], ml_width, LayerPinRecM, 90) - # print("EBeam.%s: length %.3f um, complete" % (self.cellName, self.waveguide_length)) + # Create the pins on the waveguides + make_pin(self.cell, "opt1", [0,0], w, LayerPinRecN, 180) + make_pin(self.cell, "opt2", [to_itype(self.length,dbu),0], w, LayerPinRecN, 0) + + # Compact model information + t = Trans(Trans.R0, 0, 0) + cml = 'EBeam' + if cml: + text = Text ('Lumerical_INTERCONNECT_library=Design kits/%s' % cml, t) + shape = shapes(LayerDevRecN).insert(text) + shape.text_size = 0.1/dbu + t = Trans(Trans.R0, 0, w*2) + model = 'wg_heater' + if model: + text = Text ('Component=%s' % model, t) + shape = shapes(LayerDevRecN).insert(text) + shape.text_size = 0.1/dbu + t = Trans(Trans.R0, 0, -w*2) + text = Text \ + ('Spice_param:wg_length=%.3fu' %\ + (self.length), t ) + shape = shapes(LayerDevRecN).insert(text) + shape.text_size = 0.1/dbu + + # Create the device recognition layer -- make it 1 * wg_width away from the waveguides. + h = max(w*3*dbu, self.mh_width/2) + box1 = Box(0, -to_itype(h,dbu), to_itype(self.length,dbu), to_itype(h,dbu)) + shapes(LayerDevRecN).insert(box1) +