From 102758881a4abf349d314b8b2dbad14c6a7aef1a Mon Sep 17 00:00:00 2001 From: Matt Guthaus Date: Tue, 26 Nov 2019 13:22:52 -0800 Subject: [PATCH] Use layer instead of special flags for wells --- compiler/pgates/pgate.py | 6 +++--- compiler/pgates/ptx.py | 3 ++- technology/freepdk45/tech/tech.py | 5 +---- technology/scn4m_subm/tech/tech.py | 7 ++----- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/compiler/pgates/pgate.py b/compiler/pgates/pgate.py index 9113146b..a7974cd2 100644 --- a/compiler/pgates/pgate.py +++ b/compiler/pgates/pgate.py @@ -8,7 +8,7 @@ import contact import design import debug -from tech import drc +from tech import layers from vector import vector from globals import OPTS from sram_factory import factory @@ -141,7 +141,7 @@ class pgate(design.design): max_y_offset = self.height + 0.5 * self.m1_width self.nwell_position = middle_position nwell_height = max_y_offset - middle_position.y - if drc("has_nwell"): + if layers["nwell"]: self.add_rect(layer="nwell", offset=middle_position, width=self.well_width, @@ -153,7 +153,7 @@ class pgate(design.design): pwell_position = vector(0, -0.5 * self.m1_width) pwell_height = middle_position.y - pwell_position.y - if drc("has_pwell"): + if layers["pwell"]: self.add_rect(layer="pwell", offset=pwell_position, width=self.well_width, diff --git a/compiler/pgates/ptx.py b/compiler/pgates/ptx.py index 3cc767d7..3cdf1a7c 100644 --- a/compiler/pgates/ptx.py +++ b/compiler/pgates/ptx.py @@ -152,7 +152,8 @@ class ptx(design.design): self.active_offset = vector([self.well_enclose_active] * 2) # Well enclosure of active, ensure minwidth as well - if drc("has_{}well".format(self.well_type)): + well_name = "{}well".format(self.well_type) + if layer[well_name]): self.cell_well_width = max(self.active_width + 2 * self.well_enclose_active, self.well_width) self.cell_well_height = max(self.tx_width + 2 * self.well_enclose_active, diff --git a/technology/freepdk45/tech/tech.py b/technology/freepdk45/tech/tech.py index 4ffeb4fe..ff55bcc7 100644 --- a/technology/freepdk45/tech/tech.py +++ b/technology/freepdk45/tech/tech.py @@ -46,6 +46,7 @@ layer["thkox"] = (8, 0) layer["poly"] = (9, 0) layer["contact"] = (10, 0) layer["active_contact"] = (10, 0) +layer["poly_contact"] = None layer["metal1"] = (11, 0) layer["via1"] = (12, 0) layer["metal2"] = (13, 0) @@ -89,10 +90,6 @@ drclvs_home=os.environ.get("DRCLVS_HOME") drc = design_rules("freepdk45") -drc["body_tie_down"] = 0 -drc["has_pwell"] = True -drc["has_nwell"] = True - #grid size drc["grid"] = 0.0025 diff --git a/technology/scn4m_subm/tech/tech.py b/technology/scn4m_subm/tech/tech.py index 6edaf7aa..60dc8421 100644 --- a/technology/scn4m_subm/tech/tech.py +++ b/technology/scn4m_subm/tech/tech.py @@ -37,13 +37,14 @@ GDS["zoom"] = 0.5 layer={} layer["vtg"] = (-1, 0) layer["vth"] = (-1, 0) -layer["contact"] = (47, 0) layer["pwell"] = (41, 0) layer["nwell"] = (42, 0) layer["active"] = (43, 0) layer["pimplant"] = (44, 0) layer["nimplant"] = (45, 0) layer["poly"] = (46, 0) +layer["poly_contact"] = None +layer["contact"] = (47, 0) layer["active_contact"] = (48, 0) layer["metal1"] = (49, 0) layer["via1"] = (50, 0) @@ -78,10 +79,6 @@ drclvs_home=os.environ.get("DRCLVS_HOME") drc = design_rules("scn4me_sub") -drc["body_tie_down"] = 0 -drc["has_pwell"] = True -drc["has_nwell"] = True - #grid size is 1/2 a lambda drc["grid"]=0.5*_lambda_