Use layer instead of special flags for wells

This commit is contained in:
Matt Guthaus 2019-11-26 13:22:52 -08:00
parent 909321326d
commit 102758881a
4 changed files with 8 additions and 13 deletions

View File

@ -8,7 +8,7 @@
import contact import contact
import design import design
import debug import debug
from tech import drc from tech import layers
from vector import vector from vector import vector
from globals import OPTS from globals import OPTS
from sram_factory import factory from sram_factory import factory
@ -141,7 +141,7 @@ class pgate(design.design):
max_y_offset = self.height + 0.5 * self.m1_width max_y_offset = self.height + 0.5 * self.m1_width
self.nwell_position = middle_position self.nwell_position = middle_position
nwell_height = max_y_offset - middle_position.y nwell_height = max_y_offset - middle_position.y
if drc("has_nwell"): if layers["nwell"]:
self.add_rect(layer="nwell", self.add_rect(layer="nwell",
offset=middle_position, offset=middle_position,
width=self.well_width, width=self.well_width,
@ -153,7 +153,7 @@ class pgate(design.design):
pwell_position = vector(0, -0.5 * self.m1_width) pwell_position = vector(0, -0.5 * self.m1_width)
pwell_height = middle_position.y - pwell_position.y pwell_height = middle_position.y - pwell_position.y
if drc("has_pwell"): if layers["pwell"]:
self.add_rect(layer="pwell", self.add_rect(layer="pwell",
offset=pwell_position, offset=pwell_position,
width=self.well_width, width=self.well_width,

View File

@ -152,7 +152,8 @@ class ptx(design.design):
self.active_offset = vector([self.well_enclose_active] * 2) self.active_offset = vector([self.well_enclose_active] * 2)
# Well enclosure of active, ensure minwidth as well # 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.cell_well_width = max(self.active_width + 2 * self.well_enclose_active,
self.well_width) self.well_width)
self.cell_well_height = max(self.tx_width + 2 * self.well_enclose_active, self.cell_well_height = max(self.tx_width + 2 * self.well_enclose_active,

View File

@ -46,6 +46,7 @@ layer["thkox"] = (8, 0)
layer["poly"] = (9, 0) layer["poly"] = (9, 0)
layer["contact"] = (10, 0) layer["contact"] = (10, 0)
layer["active_contact"] = (10, 0) layer["active_contact"] = (10, 0)
layer["poly_contact"] = None
layer["metal1"] = (11, 0) layer["metal1"] = (11, 0)
layer["via1"] = (12, 0) layer["via1"] = (12, 0)
layer["metal2"] = (13, 0) layer["metal2"] = (13, 0)
@ -89,10 +90,6 @@ drclvs_home=os.environ.get("DRCLVS_HOME")
drc = design_rules("freepdk45") drc = design_rules("freepdk45")
drc["body_tie_down"] = 0
drc["has_pwell"] = True
drc["has_nwell"] = True
#grid size #grid size
drc["grid"] = 0.0025 drc["grid"] = 0.0025

View File

@ -37,13 +37,14 @@ GDS["zoom"] = 0.5
layer={} layer={}
layer["vtg"] = (-1, 0) layer["vtg"] = (-1, 0)
layer["vth"] = (-1, 0) layer["vth"] = (-1, 0)
layer["contact"] = (47, 0)
layer["pwell"] = (41, 0) layer["pwell"] = (41, 0)
layer["nwell"] = (42, 0) layer["nwell"] = (42, 0)
layer["active"] = (43, 0) layer["active"] = (43, 0)
layer["pimplant"] = (44, 0) layer["pimplant"] = (44, 0)
layer["nimplant"] = (45, 0) layer["nimplant"] = (45, 0)
layer["poly"] = (46, 0) layer["poly"] = (46, 0)
layer["poly_contact"] = None
layer["contact"] = (47, 0)
layer["active_contact"] = (48, 0) layer["active_contact"] = (48, 0)
layer["metal1"] = (49, 0) layer["metal1"] = (49, 0)
layer["via1"] = (50, 0) layer["via1"] = (50, 0)
@ -78,10 +79,6 @@ drclvs_home=os.environ.get("DRCLVS_HOME")
drc = design_rules("scn4me_sub") 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 #grid size is 1/2 a lambda
drc["grid"]=0.5*_lambda_ drc["grid"]=0.5*_lambda_