Rework precharge route supply horizontally

This commit is contained in:
mrg 2022-02-28 11:36:10 -08:00
parent 8b4ef9b6c1
commit 54bd022efc
2 changed files with 22 additions and 26 deletions

View File

@ -434,23 +434,24 @@ class layout():
inst = self.local_insts[i]
for pin in inst.get_pins(name):
try:
bins[pin.cy()].append(pin)
bins[pin.cy()].append((inst,pin))
except KeyError:
bins[pin.cy()] = [pin]
bins[pin.cy()] = [(inst,pin)]
for y, v in bins.items():
left_x = min([x.lx() for x in v])
right_x = max([x.rx() for x in v])
left_x = min([inst.lx() for (inst,pin) in v])
right_x = max([inst.rx() for (inst,pin) in v])
last_via = None
for pin in v:
for inst,pin in v:
if layer:
pin_layer = layer
else:
pin_layer = self.supply_stack[0]
last_via = self.add_via_stack_center(from_layer=pin.layer,
to_layer=pin_layer,
offset=pin.center())
offset=pin.center(),
min_area=True)
if last_via:
via_height=last_via.mod.second_layer_height

View File

@ -71,7 +71,7 @@ class precharge(design.design):
self.connect_poly()
self.route_en()
self.place_nwell_and_contact()
self.route_vdd_rail()
self.route_vdd()
self.route_bitlines()
self.connect_to_bitlines()
self.add_boundary()
@ -91,34 +91,29 @@ class precharge(design.design):
mults=self.ptx_mults,
tx_type="pmos")
def route_vdd_rail(self):
def route_vdd(self):
"""
Adds a vdd rail at the top of the cell
"""
# Adds the rail across the width of the cell
vdd_position = vector(0.5 * self.width, self.height)
layer_width = drc("minwidth_" + self.en_layer)
self.add_rect_center(layer=self.en_layer,
offset=vdd_position,
width=self.width,
height=layer_width)
pmos_pin = self.upper_pmos2_inst.get_pin("S")
# center of vdd rail
pmos_vdd_pos = vector(pmos_pin.cx(), vdd_position.y)
self.add_path(self.en_layer, [pmos_pin.center(), pmos_vdd_pos])
self.add_power_pin("vdd",
self.well_contact_pos,
directions=("V", "V"))
pmos_pos = pmos_pin.center()
self.add_path(pmos_pin.layer, [pmos_pos, self.well_contact_pos])
self.add_via_stack_center(from_layer=pmos_pin.layer,
to_layer=self.en_layer,
offset=pmos_pin.center(),
to_layer=self.supply_stack[0],
offset=self.well_contact_pos,
directions=("V", "V"))
self.add_min_area_rect_center(layer=self.en_layer,
offset=self.well_contact_pos,
width=self.well_contact.mod.second_layer_width)
self.add_layout_pin_rect_center(text="vdd",
layer=self.supply_stack[0],
offset=self.well_contact_pos)
def create_ptx(self):
"""
Create both the upper_pmos and lower_pmos to the module