Add npc enclosure to poly contacts

This commit is contained in:
mrg 2020-06-11 11:53:59 -07:00
parent f973dd6a5c
commit 098219d56c
1 changed files with 16 additions and 9 deletions

View File

@ -7,7 +7,7 @@
#
import hierarchy_design
import debug
from tech import drc
from tech import drc, layer
import tech
from vector import vector
from sram_factory import factory
@ -44,7 +44,8 @@ class contact(hierarchy_design.hierarchy_design):
self.add_comment("well_type: {}\n".format(well_type))
self.is_well_contact = implant_type == well_type
# If we have a special tap layer, use it
self.layer_stack = layer_stack
self.dimensions = dimensions
@ -196,17 +197,19 @@ class contact(hierarchy_design.hierarchy_design):
if "npc" not in tech.layer:
return
npc_enclose_poly = drc("npc_enclose_poly")
npc_enclose_offset = vector(npc_enclose_poly, npc_enclose_poly)
# Only add for poly layers
if self.first_layer_name == "poly":
self.add_rect(layer="npc",
offset=self.first_layer_position,
width=self.first_layer_width,
height=self.first_layer_height)
offset=self.first_layer_position - npc_enclose_offset,
width=self.first_layer_width + 2 * npc_enclose_poly,
height=self.first_layer_height + 2 * npc_enclose_poly)
elif self.second_layer_name == "poly":
self.add_rect(layer="npc",
offset=self.second_layer_position,
width=self.second_layer_width,
height=self.second_layer_height)
offset=self.second_layer_position - npc_enclose_offset,
width=self.second_layer_width + 2 * npc_enclose_poly,
height=self.second_layer_height + 2 * npc_enclose_poly)
def create_first_layer_enclosure(self):
# this is if the first and second layers are different
@ -218,7 +221,11 @@ class contact(hierarchy_design.hierarchy_design):
self.first_layer_minwidth)
self.first_layer_height = max(self.contact_array_height + 2 * self.first_layer_vertical_enclosure,
self.first_layer_minwidth)
self.add_rect(layer=self.first_layer_name,
if self.is_well_contact and self.first_layer_name == "active" and "tap" in layer:
first_layer_name = "tap"
else:
first_layer_name = self.first_layer_name
self.add_rect(layer=first_layer_name,
offset=self.first_layer_position,
width=self.first_layer_width,
height=self.first_layer_height)