Generalize active and poly stacks

This commit is contained in:
Matt Guthaus 2019-12-13 14:56:14 -08:00
parent 3ad7c8a8b5
commit f71cfe0d9d
6 changed files with 10 additions and 10 deletions

View File

@ -1019,7 +1019,7 @@ class pbitcell(bitcell_base.bitcell_base):
# add well contacts # add well contacts
# connect pimplants to gnd # connect pimplants to gnd
offset = vector(0, self.gnd_position.y) offset = vector(0, self.gnd_position.y)
self.add_via_center(layers=("active", "contact", "metal1"), self.add_via_center(layers=self.active_stack,
offset=offset, offset=offset,
directions=("H", "H"), directions=("H", "H"),
implant_type="p", implant_type="p",
@ -1027,7 +1027,7 @@ class pbitcell(bitcell_base.bitcell_base):
# connect nimplants to vdd # connect nimplants to vdd
offset = vector(0, self.vdd_position.y) offset = vector(0, self.vdd_position.y)
self.add_via_center(layers=("active", "contact", "metal1"), self.add_via_center(layers=self.active_stack,
offset=offset, offset=offset,
directions=("H", "H"), directions=("H", "H"),
implant_type="n", implant_type="n",

View File

@ -168,7 +168,7 @@ class pgate(design.design):
def add_nwell_contact(self, pmos, pmos_pos): def add_nwell_contact(self, pmos, pmos_pos):
""" Add an nwell contact next to the given pmos device. """ """ Add an nwell contact next to the given pmos device. """
layer_stack = ("active", "contact", "metal1") layer_stack = self.active_stack
# To the right a spacing away from the pmos right active edge # To the right a spacing away from the pmos right active edge
contact_xoffset = pmos_pos.x + pmos.active_width \ contact_xoffset = pmos_pos.x + pmos.active_width \
@ -221,7 +221,7 @@ class pgate(design.design):
def add_pwell_contact(self, nmos, nmos_pos): def add_pwell_contact(self, nmos, nmos_pos):
""" Add an pwell contact next to the given nmos device. """ """ Add an pwell contact next to the given nmos device. """
layer_stack = ("active", "contact", "metal1") layer_stack = self.active_stack
pwell_position = vector(0, -0.5 * self.m1_width) pwell_position = vector(0, -0.5 * self.m1_width)

View File

@ -177,7 +177,7 @@ class precharge(design.design):
well_contact_pos = self.upper_pmos1_inst.get_pin("D").center().scale(1, 0) \ well_contact_pos = self.upper_pmos1_inst.get_pin("D").center().scale(1, 0) \
+ vector(0, self.upper_pmos1_inst.uy() + contact.well.height / 2 \ + vector(0, self.upper_pmos1_inst.uy() + contact.well.height / 2 \
+ drc("well_extend_active")) + drc("well_extend_active"))
self.add_via_center(layers=("active", "contact", "metal1"), self.add_via_center(layers=self.active_stack,
offset=well_contact_pos, offset=well_contact_pos,
implant_type="n", implant_type="n",
well_type="n") well_type="n")

View File

@ -191,7 +191,7 @@ class ptristate_inv(pgate.pgate):
supplies AFTER the wells are created supplies AFTER the wells are created
""" """
layer_stack = ("active", "contact", "metal1") layer_stack = self.active_stack
drain_pos = self.nmos1_inst.get_pin("S").center() drain_pos = self.nmos1_inst.get_pin("S").center()
vdd_pos = self.get_pin("vdd").center() vdd_pos = self.get_pin("vdd").center()

View File

@ -124,7 +124,7 @@ class ptx(design.design):
# This is not actually instantiated but used for calculations # This is not actually instantiated but used for calculations
self.active_contact = factory.create(module_type="contact", self.active_contact = factory.create(module_type="contact",
layer_stack=("active", "contact", "metal1"), layer_stack=self.active_stack,
dimensions=(1, self.num_contacts)) dimensions=(1, self.num_contacts))
@ -373,7 +373,7 @@ class ptx(design.design):
[source_positions,drain_positions] = self.get_contact_positions() [source_positions,drain_positions] = self.get_contact_positions()
for pos in source_positions: for pos in source_positions:
contact=self.add_via_center(layers=("active", "contact", "metal1"), contact=self.add_via_center(layers=self.active_stack,
offset=pos, offset=pos,
size=(1, self.num_contacts), size=(1, self.num_contacts),
directions=("H","V"), directions=("H","V"),
@ -387,7 +387,7 @@ class ptx(design.design):
for pos in drain_positions: for pos in drain_positions:
contact=self.add_via_center(layers=("active", "contact", "metal1"), contact=self.add_via_center(layers=self.active_stack,
offset=pos, offset=pos,
size=(1, self.num_contacts), size=(1, self.num_contacts),
directions=("H","V"), directions=("H","V"),

View File

@ -175,7 +175,7 @@ class single_level_column_mux(pgate.pgate):
# Add it to the right, aligned in between the two tx # Add it to the right, aligned in between the two tx
active_pos = vector(self.bitcell.width, active_pos = vector(self.bitcell.width,
self.nmos_upper.by() - 0.5 * self.poly_space) self.nmos_upper.by() - 0.5 * self.poly_space)
self.add_via_center(layers=("active", "contact", "metal1"), self.add_via_center(layers=self.active_stack,
offset=active_pos, offset=active_pos,
implant_type="p", implant_type="p",
well_type="p") well_type="p")