From b1bc22f8e79ddab8303e16307f8e9859f9a0c837 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Thu, 7 Oct 2021 00:39:24 +0200 Subject: [PATCH] Bad computation of minimal area of stacked VIAs in Cumulus. * Bug: In cumulus/plugins.block.configuration.GaugeConf.expandMinArea(), The minimal length of the segment intermediate wires where computed for the minimal area using an integer division ( // ), which is stupid for less than 1.0 values. They are real quantities at this point... This was making the DRC of ls180 failing. --- cumulus/src/plugins/alpha/block/configuration.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cumulus/src/plugins/alpha/block/configuration.py b/cumulus/src/plugins/alpha/block/configuration.py index 3dd4fbf0..006b07f3 100644 --- a/cumulus/src/plugins/alpha/block/configuration.py +++ b/cumulus/src/plugins/alpha/block/configuration.py @@ -472,14 +472,16 @@ class GaugeConf ( object ): minArea = self._routingGauge.getRoutingLayer( depth ).getMinimalArea() extension = 0 if minArea: - minLength = DbU.fromPhysical( minArea // DbU.toPhysical( wireWidth, DbU.UnitPowerMicro ) + minLength = DbU.fromPhysical( minArea / DbU.toPhysical( wireWidth, DbU.UnitPowerMicro ) , DbU.UnitPowerMicro ) minLength = toFoundryGrid( minLength, DbU.SnapModeSuperior ); if isinstance(segment,Horizontal): + trace( 550, '\tminLength={}\n'.format(DbU.getValueString(minLength)) ) uMin = segment.getSource().getX() uMax = segment.getTarget().getX() segLength = abs( uMax - uMin ) if segLength < minLength: + trace( 550, '\texpand\n' ) extension = toFoundryGrid( (minLength - segLength)//2, DbU.SnapModeSuperior ) if uMin > uMax: extension = - extension