Correct drive of the Pin in AP driver.
* Bug: In CRL::ApDriver::DumpSegments(), when saving RoutingPads build on Pin *not* at the top level (that is, Pin from an instance), use the pin's orientation to choose the segment type. * NORTH/SOUTH becomes a Vertical. * EAST/WEST becomes an Horizontal. Formerly, the segment direction was guessed only for the bounding box, leading to segments in incorrect directions leading to DRC errors (in nmigen/ALU16, net "b(10)"). * Bug: In CRL/symbolic/cmos/technology.py, forgotten import for WarningMessage.
This commit is contained in:
parent
837de500aa
commit
2af531991e
|
@ -307,7 +307,7 @@ class Configuration ( object ):
|
||||||
self._doSendReport = False
|
self._doSendReport = False
|
||||||
self._nightlyMode = False
|
self._nightlyMode = False
|
||||||
self._dockerMode = False
|
self._dockerMode = False
|
||||||
self._chrootMode = False
|
self._chrootMode = None
|
||||||
self._logs = { 'alliance':None, 'coriolis':None, 'benchs':None }
|
self._logs = { 'alliance':None, 'coriolis':None, 'benchs':None }
|
||||||
self._fds = { 'alliance':None, 'coriolis':None, 'benchs':None }
|
self._fds = { 'alliance':None, 'coriolis':None, 'benchs':None }
|
||||||
self._ccbBin = None
|
self._ccbBin = None
|
||||||
|
@ -358,9 +358,11 @@ class Configuration ( object ):
|
||||||
self._alcBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/allianceInstaller.sh'
|
self._alcBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/allianceInstaller.sh'
|
||||||
self._ccbBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/ccb.py'
|
self._ccbBin = self._srcDir + '/' + GitRepository.getLocalRepository(self._coriolisRepo) + '/bootstrap/ccb.py'
|
||||||
self._benchsDir = self._srcDir + '/' + GitRepository.getLocalRepository(self._benchsRepo ) + '/benchs'
|
self._benchsDir = self._srcDir + '/' + GitRepository.getLocalRepository(self._benchsRepo ) + '/benchs'
|
||||||
|
self._masterHost = self._detectMasterHost()
|
||||||
return
|
return
|
||||||
|
|
||||||
def _detectMasterHost ( self ):
|
def _detectMasterHost ( self ):
|
||||||
|
if self._chrootMode is None: return 'unknown'
|
||||||
if self._chrootMode: return 'chrooted-host'
|
if self._chrootMode: return 'chrooted-host'
|
||||||
|
|
||||||
masterHost = 'unknown'
|
masterHost = 'unknown'
|
||||||
|
@ -438,7 +440,7 @@ class Configuration ( object ):
|
||||||
otherArgs.append( '--devtoolset=8' )
|
otherArgs.append( '--devtoolset=8' )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
|
||||||
elif target == 'Ubuntu18' or target == 'Debian9':
|
elif target == 'Ubuntu18' or target == 'Debian9' or target == 'Debian10':
|
||||||
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
|
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
|
||||||
|
|
||||||
|
@ -536,6 +538,7 @@ parser.add_option ( "--root" , action="store" , type="string", dest=
|
||||||
parser.add_option ( "--profile" , action="store" , type="string", dest="profile" , help="The targeted OS for the build." )
|
parser.add_option ( "--profile" , action="store" , type="string", dest="profile" , help="The targeted OS for the build." )
|
||||||
(options, args) = parser.parse_args ()
|
(options, args) = parser.parse_args ()
|
||||||
|
|
||||||
|
|
||||||
conf = Configuration()
|
conf = Configuration()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -551,6 +554,7 @@ try:
|
||||||
if options.rmSource or options.rmAll: conf.rmSource = True
|
if options.rmSource or options.rmAll: conf.rmSource = True
|
||||||
if options.rmBuild or options.rmAll: conf.rmBuild = True
|
if options.rmBuild or options.rmAll: conf.rmBuild = True
|
||||||
|
|
||||||
|
|
||||||
if conf.doAlliance: conf.openLog( 'alliance' )
|
if conf.doAlliance: conf.openLog( 'alliance' )
|
||||||
if conf.doCoriolis: conf.openLog( 'coriolis' )
|
if conf.doCoriolis: conf.openLog( 'coriolis' )
|
||||||
if conf.doBenchs: conf.openLog( 'benchs' )
|
if conf.doBenchs: conf.openLog( 'benchs' )
|
||||||
|
|
|
@ -440,7 +440,7 @@ class Configuration ( object ):
|
||||||
otherArgs.append( '--devtoolset=8' )
|
otherArgs.append( '--devtoolset=8' )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 6, otherArgs , fdLog=self.fds['coriolis'] ) )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 1, otherArgs+['--doc'], fdLog=self.fds['coriolis'] ) )
|
||||||
elif target == 'Ubuntu18' or target == 'Debian9':
|
elif target == 'Ubuntu18' or target == 'Debian9' or target == 'Debian10':
|
||||||
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
|
if target == 'Ubuntu18': otherArgs.append( '--qt5' )
|
||||||
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
|
commands.append( CoriolisCommand( self.ccbBin, self.rootDir, 3, otherArgs, fdLog=self.fds['coriolis'] ) )
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
|
|
||||||
from helpers import l, u, n
|
from helpers import l, u, n
|
||||||
|
from helpers.io import WarningMessage
|
||||||
import helpers.io
|
import helpers.io
|
||||||
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
|
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
|
||||||
|
|
||||||
|
|
|
@ -238,6 +238,7 @@ void DumpContacts(ofstream& ccell, Cell *cell)
|
||||||
Segment* segment = NULL;
|
Segment* segment = NULL;
|
||||||
RoutingPad* rp = NULL;
|
RoutingPad* rp = NULL;
|
||||||
bool external = false;
|
bool external = false;
|
||||||
|
const char* direction = NULL;
|
||||||
|
|
||||||
for ( Net* net : cell->getNets() ) {
|
for ( Net* net : cell->getNets() ) {
|
||||||
string netName = toMBKName( net->getName() );
|
string netName = toMBKName( net->getName() );
|
||||||
|
@ -261,18 +262,22 @@ void DumpContacts(ofstream& ccell, Cell *cell)
|
||||||
if (pin and (rp->getOccurrence().getPath().getHeadInstance() != NULL)) {
|
if (pin and (rp->getOccurrence().getPath().getHeadInstance() != NULL)) {
|
||||||
Box bb ( pin->getBoundingBox() );
|
Box bb ( pin->getBoundingBox() );
|
||||||
rp->getOccurrence().getPath().getTransformation().applyOn( bb );
|
rp->getOccurrence().getPath().getTransformation().applyOn( bb );
|
||||||
if (bb.getWidth() > bb.getHeight()) {
|
//if (bb.getWidth() > bb.getHeight()) {
|
||||||
|
if ( (pin->getAccessDirection() == Pin::AccessDirection::NORTH)
|
||||||
|
or (pin->getAccessDirection() == Pin::AccessDirection::SOUTH)) {
|
||||||
x1 = bb.getCenter().getX();
|
x1 = bb.getCenter().getX();
|
||||||
x2 = x1;
|
x2 = x1;
|
||||||
y1 = bb.getYMin();
|
y1 = bb.getYMin();
|
||||||
y2 = bb.getYMax();
|
y2 = bb.getYMax();
|
||||||
width = bb.getWidth();
|
width = bb.getWidth();
|
||||||
|
direction = "UP";
|
||||||
} else {
|
} else {
|
||||||
x1 = bb.getXMin();
|
x1 = bb.getXMin();
|
||||||
x2 = bb.getXMax();
|
x2 = bb.getXMax();
|
||||||
y1 = bb.getCenter().getY();
|
y1 = bb.getCenter().getY();
|
||||||
y2 = y1;
|
y2 = y1;
|
||||||
width = bb.getHeight();
|
width = bb.getHeight();
|
||||||
|
direction = "RIGHT";
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
continue;
|
continue;
|
||||||
|
@ -287,8 +292,10 @@ void DumpContacts(ofstream& ccell, Cell *cell)
|
||||||
} else
|
} else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const char* direction = "RIGHT";
|
if (not direction) {
|
||||||
|
direction = "RIGHT";
|
||||||
if ( (x1 == x2) and (y1 != y2) ) direction = "UP";
|
if ( (x1 == x2) and (y1 != y2) ) direction = "UP";
|
||||||
|
}
|
||||||
|
|
||||||
if (x1 > x2) std::swap( x1, x2 );
|
if (x1 > x2) std::swap( x1, x2 );
|
||||||
if (y1 > y2) std::swap( y1, y2 );
|
if (y1 > y2) std::swap( y1, y2 );
|
||||||
|
|
Loading…
Reference in New Issue