mirror of https://github.com/VLSIDA/OpenRAM.git
use more conservative metric for metal mergeing in array to power rail routing
This commit is contained in:
parent
269386e6b8
commit
cc9f294992
|
|
@ -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."""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue