Add redundant implant for s8

This commit is contained in:
mrg 2020-06-15 10:08:07 -07:00
parent 355474ce2c
commit 4cb827c3d7
1 changed files with 26 additions and 10 deletions

View File

@ -11,7 +11,7 @@ from tech import drc, layer
from vector import vector
from sram_factory import factory
import logical_effort
from utils import round_to_grid
from globals import OPTS
class single_level_column_mux(pgate.pgate):
@ -119,6 +119,9 @@ class single_level_column_mux(pgate.pgate):
offset=nmos_upper_position)
self.connect_inst(["br", "sel", "br_out", "gnd"])
if OPTS.tech_name == "sky130":
self.add_implants()
def connect_poly(self):
""" Connect the poly gate of the two pass transistors """
@ -190,6 +193,19 @@ class single_level_column_mux(pgate.pgate):
self.add_path(self.col_mux_stack[2],
[br_pin.bc(), mid1, mid2, nmos_lower_d_pin.center()])
def add_implants(self):
"""
Add top-to-bottom implants for adjacency issues in s8.
"""
# Route to the bottom
ll = (self.nmos_lower.ll() - vector(2 * [self.implant_enclose_active])).scale(1, 0)
# Don't route to the top
ur = self.nmos_upper.ur() + vector(self.implant_enclose_active, 0)
self.add_rect("nimplant",
ll,
ur.x - ll.x,
ur.y - ll.y)
def add_pn_wells(self):
"""
Add a well and implant over the whole cell. Also, add the