Various bug fixes in the cumulus trackAvoid system.

This commit is contained in:
Jean-Paul Chaput 2023-07-19 21:56:13 +02:00
parent 6b1f57d7f1
commit 01b0489f58
3 changed files with 17 additions and 12 deletions

View File

@ -1397,14 +1397,15 @@ class BlockConf ( GaugeConf ):
self.ioPinsCounts = {}
self.ioPinsArg = ioPins
self.ioPadsArg = ioPads
self.cfg.etesian.aspectRatio = None
self.cfg.etesian.spaceMargin = None
self.cfg.etesian.latchUpDistance = None
self.cfg.block.spareSide = None
self.cfg.block.vRailsPeriod = None
self.cfg.katana.dumpMeasures = None
self.cfg.spares.htreeRootOffset = CfgDefault(3)
self.cfg.spares.htreeOffset = CfgDefault(5)
self.cfg.etesian.aspectRatio = None
self.cfg.etesian.spaceMargin = None
self.cfg.etesian.latchUpDistance = None
self.cfg.block.spareSide = None
self.cfg.block.vRailsPeriod = None
self.cfg.katana.dumpMeasures = None
self.cfg.spares.useFeedTrackAvoid = CfgDefault(False)
self.cfg.spares.htreeRootOffset = CfgDefault(3)
self.cfg.spares.htreeOffset = CfgDefault(5)
self.chipConf = ChipConf( self )
self.etesian = None
self.katana = None

View File

@ -107,10 +107,10 @@ class HTree ( object ):
gaugeConf.setStackPosition( contact, x, y )
gaugeConf.createVertical ( contact, forkContact, x, 0 )
trackAvoidBox = Box( x, forkContact.getY(), x, y )
if forkContact.getY() > contact.getY():
trackAvoidBox.inflate( 0, 0, 0, self.spares.conf.sliceHeight )
trackAvoidBox.inflate( 0, 0, 0, self.spares.conf.sliceHeight )
gaugeConf.addTrackAvoid( trackAvoidBox )
self.spares.trackAvoid( trackAvoidBox )
if gaugeConf.cfg.spares.useFeedTrackAvoid and forkContact.getY() > contact.getY():
self.spares.trackAvoid( trackAvoidBox )
if len(leaf.buffers) > 1:
tl1Contact = gaugeConf.rpAccessByPlugName( leaf.buffers[1], bufferConf.input, ckNet, GaugeConf.DeepDepth|GaugeConf.HAccess )
tl2Contact = gaugeConf.rpAccessByPlugName( leaf.buffers[2], bufferConf.input, ckNet )

View File

@ -1141,6 +1141,10 @@ class Spares ( object ):
nodes.
"""
trace( 540, ',+', '\tSpares.trackAvoid() {}\n'.format( box ))
if self.conf.isCoreBlock:
coreCell = self.conf.corona
else:
coreCell = self.conf.core
yoffset = 0
if self.conf.isCoreBlock:
yoffset = self.conf.icore.getTransformation().getTy()
@ -1159,7 +1163,7 @@ class Spares ( object ):
orientation = Transformation.Orientation.MY
y += sliceHeight
transf = Transformation( x, y, orientation )
instance = self.conf.feedsConf.createFeed( self.conf.corona )
instance = self.conf.feedsConf.createFeed( coreCell )
instance.setTransformation( transf )
instance.setPlacementStatus( Instance.PlacementStatus.FIXED )
trace( 540, '\ttrackAvoid, feed: {} @{}\n'.format(instance,transf) )