Skip to content

Commit cc9f294

Browse files
committed
use more conservative metric for metal mergeing in array to power rail routing
1 parent 269386e commit cc9f294

1 file changed

Lines changed: 26 additions & 8 deletions

File tree

compiler/modules/capped_replica_bitcell_array.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -629,16 +629,34 @@ def _strap_m3_merge_width(self, vert, from_layers, strap_layer):
629629
return c.first_layer_width if vert else c.first_layer_height
630630

631631
def _strap_merge_minsep_seg(self, rail_layer, w_fb):
632+
"""Merge spacing: max over ``supply_stack`` of ``minwidth_L+L_to_L`` and adjacent ``L0_to_L1`` if in DRC; else rail-only."""
632633
pw = self._pwr_stack()
633634
if pw:
634-
m = pw[0]
635-
mn = drc("minwidth_{}".format(m))
636-
same = "{}_to_{}".format(m, m)
637-
sp = drc(same) if same in drc else 0.0
638-
return m, max(self.supply_rail_pitch, mn + sp)
639-
same = "{}_to_{}".format(rail_layer, rail_layer)
640-
sp = drc(same) if same in drc else 0.0
641-
return rail_layer, max(self.supply_rail_pitch, w_fb + sp)
635+
ms = 0.0
636+
for lyr in pw:
637+
wkey = "minwidth_{}".format(lyr)
638+
if wkey not in drc:
639+
continue
640+
skey = "{}_to_{}".format(lyr, lyr)
641+
sp = drc(skey) if skey in drc else 0.0
642+
ms = max(ms, drc(wkey) + sp)
643+
for i in range(len(pw) - 1):
644+
a, b = pw[i], pw[i + 1]
645+
for pair in ("{}_to_{}".format(a, b), "{}_to_{}".format(b, a)):
646+
if pair in drc:
647+
ms = max(ms, drc(pair))
648+
break
649+
if ms <= 0:
650+
wkey = "minwidth_{}".format(pw[0])
651+
if wkey in drc:
652+
sk = "{}_to_{}".format(pw[0], pw[0])
653+
ms = drc(wkey) + (drc(sk) if sk in drc else 0.0)
654+
return pw[0], ms
655+
wkey = "minwidth_{}".format(rail_layer)
656+
mw = drc(wkey) if wkey in drc else w_fb
657+
skey = "{}_to_{}".format(rail_layer, rail_layer)
658+
sp = drc(skey) if skey in drc else 0.0
659+
return rail_layer, mw + sp
642660

643661
def _bridge_close_strap_taps(self):
644662
"""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."""

0 commit comments

Comments
 (0)