use more conservative metric for metal mergeing in array to power rail routing

This commit is contained in:
Jesse Cirimelli-Low 2026-05-14 11:18:31 -07:00
parent 269386e6b8
commit cc9f294992
1 changed files with 26 additions and 8 deletions

View File

@ -629,16 +629,34 @@ class capped_replica_bitcell_array(bitcell_base_array):
return c.first_layer_width if vert else c.first_layer_height return c.first_layer_width if vert else c.first_layer_height
def _strap_merge_minsep_seg(self, rail_layer, w_fb): def _strap_merge_minsep_seg(self, rail_layer, w_fb):
"""Merge spacing: max over ``supply_stack`` of ``minwidth_L+L_to_L`` and adjacent ``L0_to_L1`` if in DRC; else rail-only."""
pw = self._pwr_stack() pw = self._pwr_stack()
if pw: if pw:
m = pw[0] ms = 0.0
mn = drc("minwidth_{}".format(m)) for lyr in pw:
same = "{}_to_{}".format(m, m) wkey = "minwidth_{}".format(lyr)
sp = drc(same) if same in drc else 0.0 if wkey not in drc:
return m, max(self.supply_rail_pitch, mn + sp) continue
same = "{}_to_{}".format(rail_layer, rail_layer) skey = "{}_to_{}".format(lyr, lyr)
sp = drc(same) if same in drc else 0.0 sp = drc(skey) if skey in drc else 0.0
return rail_layer, max(self.supply_rail_pitch, w_fb + sp) ms = max(ms, drc(wkey) + sp)
for i in range(len(pw) - 1):
a, b = pw[i], pw[i + 1]
for pair in ("{}_to_{}".format(a, b), "{}_to_{}".format(b, a)):
if pair in drc:
ms = max(ms, drc(pair))
break
if ms <= 0:
wkey = "minwidth_{}".format(pw[0])
if wkey in drc:
sk = "{}_to_{}".format(pw[0], pw[0])
ms = drc(wkey) + (drc(sk) if sk in drc else 0.0)
return pw[0], ms
wkey = "minwidth_{}".format(rail_layer)
mw = drc(wkey) if wkey in drc else w_fb
skey = "{}_to_{}".format(rail_layer, rail_layer)
sp = drc(skey) if skey in drc else 0.0
return rail_layer, mw + sp
def _bridge_close_strap_taps(self): def _bridge_close_strap_taps(self):
"""Close strap taps: m3 bars (min-area width) on too-close centers; m4 too when rail is stack top; ends at outer m3 along rail.""" """Close strap taps: m3 bars (min-area width) on too-close centers; m4 too when rail is stack top; ends at outer m3 along rail."""