From c8d98a304ec8b74f328d76feb48090884f9c5c6f Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 20 Sep 2023 20:15:24 +0200 Subject: [PATCH] Always check that coreAb fit into coronaAb while building a chip. --- cumulus/src/plugins/block/block.py | 13 +++++++++++++ cumulus/src/plugins/chip/chip.py | 3 +++ 2 files changed, 16 insertions(+) diff --git a/cumulus/src/plugins/block/block.py b/cumulus/src/plugins/block/block.py index 741b2fcb..fd0792ef 100644 --- a/cumulus/src/plugins/block/block.py +++ b/cumulus/src/plugins/block/block.py @@ -484,6 +484,19 @@ class Block ( object ): trace( 550, '\tCORE AB is {}\n'.format(self.conf.cell.getAbutmentBox()) ) if self.conf.isCoreBlock: self.conf.setupICore() + minHCorona = self.conf.minHCorona + minVCorona = self.conf.minVCorona + innerBb = Box( self.conf.coreAb ) + innerBb.inflate( minHCorona, minVCorona ) + coronaAb = self.conf.corona.getAbutmentBox() + if innerBb.getWidth() > coronaAb.getWidth(): + raise ErrorMessage( 1, 'Core is too wide to fit into the corona, needs {} but only has {}.' \ + .format( DbU.getValueString(innerBb .getWidth()) + , DbU.getValueString(coronaAb.getWidth()) ) ) + if innerBb.getHeight() > coronaAb.getHeight(): + raise ErrorMessage( 1, 'Core is too tall to fit into the corona, needs {} but only has {}.' \ + .format( DbU.getValueString(innerBb .getHeight()) + , DbU.getValueString(coronaAb.getHeight()) ) ) self.conf.setRoutingBb( self.conf.cellPnR.getAbutmentBox() ) def flattenNets ( self ): diff --git a/cumulus/src/plugins/chip/chip.py b/cumulus/src/plugins/chip/chip.py index 4fa7a44e..91e5a724 100644 --- a/cumulus/src/plugins/chip/chip.py +++ b/cumulus/src/plugins/chip/chip.py @@ -99,11 +99,14 @@ class Chip ( Block ): trace( 550, '\tminHCorona={}\n'.format(DbU.getValueString( minHCorona ))) trace( 550, '\tminVCorona={}\n'.format(DbU.getValueString( minVCorona ))) else: + print( ' - Using harness.' ) self.padsCorona = harnessPads.Corona( self ) self.padsCorona.doLayout() innerBb = Box( self.conf.coreAb ) innerBb.inflate( minHCorona, minVCorona ) coronaAb = self.conf.corona.getAbutmentBox() + trace( 550, '\tinnerBb:{}\n'.format(innerBb) ) + trace( 550, '\tcoronaAb:{}\n'.format(coronaAb) ) if innerBb.getWidth() > coronaAb.getWidth(): raise ErrorMessage( 1, 'Core is too wide to fit into the corona, needs {} but only has {}.' \ .format( DbU.getValueString(innerBb .getWidth())