From 3f42981fb2f7b7c72e9189e41035688dc791749c Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 26 Jun 2021 14:37:37 +0200 Subject: [PATCH] Fix too narrow blockages areas for the SRAM/macro wrapper. * In Cumulus/plugins/block/macro.py, the METAL3 blokage was too narrow on the left side, allowing use of METAL3 track too close from internal components. The METAL5 blockages around jumpers where also too narrow. Thoses problems where seen with the density filler which put wires everywhere. --- cumulus/src/plugins/alpha/macro/macro.py | 36 ++++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/cumulus/src/plugins/alpha/macro/macro.py b/cumulus/src/plugins/alpha/macro/macro.py index 6002e299..09f96286 100644 --- a/cumulus/src/plugins/alpha/macro/macro.py +++ b/cumulus/src/plugins/alpha/macro/macro.py @@ -141,6 +141,10 @@ class Macro ( object ): minSpacingMetal2 = gaugeMetal2.getLayer().getMinimalSpacing() minSpacingMetal3 = gaugeMetal3.getLayer().getMinimalSpacing() minSpacingMetal4 = gaugeMetal4.getLayer().getMinimalSpacing() + pitchMetal2 = gaugeMetal2.getPitch() + pitchMetal3 = gaugeMetal3.getPitch() + pitchMetal4 = gaugeMetal4.getPitch() + pitchMetal5 = gaugeMetal5.getPitch() useJumper = False xMinAdjust = 0 yMinAdjust = 0 @@ -149,18 +153,18 @@ class Macro ( object ): if self.cell.getName().lower() == 'spblock_512w64b8w': print( ' o Ad-hoc patch for "{}".'.format(self.cell.getName()) ) useJumper = True - xMinAdjust = 3*self.rg.getPitch( gaugeMetal5.getLayer() ) + xMinAdjust = self.rg.getPitch( gaugeMetal5.getLayer() ) pitch = gaugeMetal2.getPitch() if xMinAdjust % pitch: xMinAdjust += pitch - (xMinAdjust % pitch) for net in self.cell.getNets(): for component in net.getComponents(): if isinstance(component,Rectilinear) and component.getLayer() == blockageMetal2: - bb = component.getBoundingBox() - bb.inflate( minSpacingMetal2 + xMinAdjust - , minSpacingMetal2 + u(0.19) - , minSpacingMetal2 - , minSpacingMetal2 ) + bb = Box( component.getBoundingBox() ) + bb.inflate( 2*pitchMetal5 + xMinAdjust + , pitchMetal2 + u(0.19) + , pitchMetal2 + , pitchMetal2 ) Horizontal.create( component.getNet() , blockageMetal2 , bb.getYCenter() @@ -174,23 +178,19 @@ class Macro ( object ): , bb.getXMin() , bb.getXMax() ) elif isinstance(component,Rectilinear) and component.getLayer() == blockageMetal3: - bb = component.getBoundingBox() - bb.inflate( 2*minSpacingMetal3, minSpacingMetal3/2 ) + bb = Box( component.getBoundingBox() ) + deltaAbXMin = bb.getXMin() + minSpacingMetal3/2 - ab.getXMin() + bb.inflate( pitchMetal3 + deltaAbXMin + , minSpacingMetal3/2 + , pitchMetal3 + , pitchMetal3 + ) Vertical.create( component.getNet() , blockageMetal3 , bb.getXCenter() , bb.getWidth() , bb.getYMin() , bb.getYMax() ) - elif isinstance(component,Rectilinear) and component.getLayer() == blockageMetal4: - bb = component.getBoundingBox() - bb.inflate( minSpacingMetal4 ) - Horizontal.create( component.getNet() - , blockageMetal4 - , bb.getYCenter() - , bb.getHeight() - , bb.getXMin() - , bb.getXMax() ) if self.cell.getName().lower() in [ 'pll', 'gds_pll', 'cmpt_pll' ]: print( ' o Ad-hoc patch for "{}".'.format(self.cell.getName()) ) self.innerAb = ab @@ -289,7 +289,7 @@ class Macro ( object ): for gauge in [ gaugeMetal3, gaugeMetal3, gaugeMetal4, gaugeMetal5 ]: bb = bvia1.getPlate( gauge.getLayer() ).getBoundingBox() bb.merge( bvia2.getPlate( gauge.getLayer() ).getBoundingBox() ) - bb.inflate( gauge.getLayer().getMinimalSpacing() ) + bb.inflate( gauge.getPitch() ) Pad.create( blockageNet , gauge.getLayer().getBlockageLayer() , bb )