mirror of https://github.com/VLSIDA/OpenRAM.git
Add npc enclosure to poly contacts
This commit is contained in:
parent
f973dd6a5c
commit
098219d56c
|
|
@ -7,7 +7,7 @@
|
||||||
#
|
#
|
||||||
import hierarchy_design
|
import hierarchy_design
|
||||||
import debug
|
import debug
|
||||||
from tech import drc
|
from tech import drc, layer
|
||||||
import tech
|
import tech
|
||||||
from vector import vector
|
from vector import vector
|
||||||
from sram_factory import factory
|
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.add_comment("well_type: {}\n".format(well_type))
|
||||||
|
|
||||||
self.is_well_contact = implant_type == 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.layer_stack = layer_stack
|
||||||
self.dimensions = dimensions
|
self.dimensions = dimensions
|
||||||
|
|
||||||
|
|
@ -196,17 +197,19 @@ class contact(hierarchy_design.hierarchy_design):
|
||||||
if "npc" not in tech.layer:
|
if "npc" not in tech.layer:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
npc_enclose_poly = drc("npc_enclose_poly")
|
||||||
|
npc_enclose_offset = vector(npc_enclose_poly, npc_enclose_poly)
|
||||||
# Only add for poly layers
|
# Only add for poly layers
|
||||||
if self.first_layer_name == "poly":
|
if self.first_layer_name == "poly":
|
||||||
self.add_rect(layer="npc",
|
self.add_rect(layer="npc",
|
||||||
offset=self.first_layer_position,
|
offset=self.first_layer_position - npc_enclose_offset,
|
||||||
width=self.first_layer_width,
|
width=self.first_layer_width + 2 * npc_enclose_poly,
|
||||||
height=self.first_layer_height)
|
height=self.first_layer_height + 2 * npc_enclose_poly)
|
||||||
elif self.second_layer_name == "poly":
|
elif self.second_layer_name == "poly":
|
||||||
self.add_rect(layer="npc",
|
self.add_rect(layer="npc",
|
||||||
offset=self.second_layer_position,
|
offset=self.second_layer_position - npc_enclose_offset,
|
||||||
width=self.second_layer_width,
|
width=self.second_layer_width + 2 * npc_enclose_poly,
|
||||||
height=self.second_layer_height)
|
height=self.second_layer_height + 2 * npc_enclose_poly)
|
||||||
|
|
||||||
def create_first_layer_enclosure(self):
|
def create_first_layer_enclosure(self):
|
||||||
# this is if the first and second layers are different
|
# 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_minwidth)
|
||||||
self.first_layer_height = max(self.contact_array_height + 2 * self.first_layer_vertical_enclosure,
|
self.first_layer_height = max(self.contact_array_height + 2 * self.first_layer_vertical_enclosure,
|
||||||
self.first_layer_minwidth)
|
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,
|
offset=self.first_layer_position,
|
||||||
width=self.first_layer_width,
|
width=self.first_layer_width,
|
||||||
height=self.first_layer_height)
|
height=self.first_layer_height)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue