Merge branch 'devel' into 'serge/changes'
# Conflicts: # Seabreeze/CMakeLists.txt # anabatic/CMakeLists.txt # anabatic/src/CMakeLists.txt # bootstrap/CMakeLists.txt # bora/CMakeLists.txt # crlcore/CMakeLists.txt # crlcore/src/cyclop/CMakeLists.txt # crlcore/src/pyCRL/CMakeLists.txt # crlcore/src/x2y/CMakeLists.txt # etesian/CMakeLists.txt # etesian/src/CMakeLists.txt # flute/CMakeLists.txt # flute/src/3.1/CMakeLists.txt # foehn/CMakeLists.txt # hurricane/CMakeLists.txt # hurricane/src/isobar/CMakeLists.txt # ispd/CMakeLists.txt # karakaze/CMakeLists.txt # katana/CMakeLists.txt # katana/src/CMakeLists.txt # oroshi/CMakeLists.txt # stratus1/CMakeLists.txt # tutorial/CMakeLists.txt # unicorn/CMakeLists.txt # unittests/CMakeLists.txt
This commit is contained in:
commit
1ea1a402e6
|
@ -18,9 +18,9 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(FLUTE REQUIRED)
|
find_package(FLUTE REQUIRED)
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost()
|
setup_boost()
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(FLUTE REQUIRED)
|
find_package(FLUTE REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
|
|
|
@ -3069,6 +3069,7 @@ namespace Anabatic {
|
||||||
if (wPitch > 1) segment->setFlags( SegWide );
|
if (wPitch > 1) segment->setFlags( SegWide );
|
||||||
if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag );
|
if (source->canDrag() or target->canDrag()) segment->setFlags( SegDrag );
|
||||||
if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref );
|
if (dir & Flags::UseNonPref) segment->setFlags( SegNonPref );
|
||||||
|
if (dir.contains(Flags::UseNonPref|Flags::OnVSmall)) segment->setFlags( SegOnVSmall );
|
||||||
|
|
||||||
return segment;
|
return segment;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ endif ( CHECK_DETERMINISM )
|
||||||
${QtX_INCLUDE_DIRS}
|
${QtX_INCLUDE_DIRS}
|
||||||
${Python_INCLUDE_DIRS}
|
${Python_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
set( includes anabatic/Constants.h
|
set( includes anabatic/Constants.h
|
||||||
anabatic/Configuration.h
|
anabatic/Configuration.h
|
||||||
anabatic/Matrix.h
|
anabatic/Matrix.h
|
||||||
|
|
|
@ -132,6 +132,7 @@ namespace Anabatic {
|
||||||
const BaseFlags Flags::NoMinLength = (1L << 37);
|
const BaseFlags Flags::NoMinLength = (1L << 37);
|
||||||
const BaseFlags Flags::NoSegExt = (1L << 38);
|
const BaseFlags Flags::NoSegExt = (1L << 38);
|
||||||
const BaseFlags Flags::NullLength = (1L << 39);
|
const BaseFlags Flags::NullLength = (1L << 39);
|
||||||
|
const BaseFlags Flags::OnVSmall = (1L << 40);
|
||||||
|
|
||||||
|
|
||||||
Flags::~Flags ()
|
Flags::~Flags ()
|
||||||
|
|
|
@ -278,6 +278,8 @@ namespace Anabatic {
|
||||||
if (flags & (VSmall|UseNonPref)) {
|
if (flags & (VSmall|UseNonPref)) {
|
||||||
cdebug_log(145,0) << "case: UseNonPref" << endl;
|
cdebug_log(145,0) << "case: UseNonPref" << endl;
|
||||||
|
|
||||||
|
if (flags & VSmall)
|
||||||
|
useNonPref.reset( Flags::UseNonPref );
|
||||||
AutoContact* subContact1 = AutoContactTurn::create( gcell, rp->getNet(), Session::getBuildContactLayer(rpDepth+1) );
|
AutoContact* subContact1 = AutoContactTurn::create( gcell, rp->getNet(), Session::getBuildContactLayer(rpDepth+1) );
|
||||||
AutoSegment::create( rpSourceContact, subContact1, Flags::Vertical|useNonPref );
|
AutoSegment::create( rpSourceContact, subContact1, Flags::Vertical|useNonPref );
|
||||||
rpSourceContact = subContact1;
|
rpSourceContact = subContact1;
|
||||||
|
|
|
@ -109,6 +109,7 @@ namespace Anabatic {
|
||||||
static const uint64_t SegNonPref = (1L<<37);
|
static const uint64_t SegNonPref = (1L<<37);
|
||||||
static const uint64_t SegAtMinArea = (1L<<38);
|
static const uint64_t SegAtMinArea = (1L<<38);
|
||||||
static const uint64_t SegNoMoveUp = (1L<<39);
|
static const uint64_t SegNoMoveUp = (1L<<39);
|
||||||
|
static const uint64_t SegOnVSmall = (1L<<40);
|
||||||
// Masks.
|
// Masks.
|
||||||
static const uint64_t SegWeakTerminal = SegStrongTerminal|SegWeakTerminal1|SegWeakTerminal2;
|
static const uint64_t SegWeakTerminal = SegStrongTerminal|SegWeakTerminal1|SegWeakTerminal2;
|
||||||
static const uint64_t SegNotAligned = SegNotSourceAligned|SegNotTargetAligned;
|
static const uint64_t SegNotAligned = SegNotSourceAligned|SegNotTargetAligned;
|
||||||
|
@ -202,6 +203,7 @@ namespace Anabatic {
|
||||||
inline bool isTerminal () const;
|
inline bool isTerminal () const;
|
||||||
inline bool isUnbreakable () const;
|
inline bool isUnbreakable () const;
|
||||||
inline bool isNonPref () const;
|
inline bool isNonPref () const;
|
||||||
|
inline bool isNonPrefOnVSmall () const;
|
||||||
inline bool isDrag () const;
|
inline bool isDrag () const;
|
||||||
inline bool isAtMinArea () const;
|
inline bool isAtMinArea () const;
|
||||||
inline bool isNotSourceAligned () const;
|
inline bool isNotSourceAligned () const;
|
||||||
|
@ -536,6 +538,7 @@ namespace Anabatic {
|
||||||
inline bool AutoSegment::isLocal () const { return not (_flags & SegGlobal); }
|
inline bool AutoSegment::isLocal () const { return not (_flags & SegGlobal); }
|
||||||
inline bool AutoSegment::isUnbreakable () const { return _flags & SegUnbreakable; }
|
inline bool AutoSegment::isUnbreakable () const { return _flags & SegUnbreakable; }
|
||||||
inline bool AutoSegment::isNonPref () const { return _flags & SegNonPref; }
|
inline bool AutoSegment::isNonPref () const { return _flags & SegNonPref; }
|
||||||
|
inline bool AutoSegment::isNonPrefOnVSmall () const { return (_flags & SegNonPref) and (_flags & SegOnVSmall); }
|
||||||
inline bool AutoSegment::isBipoint () const { return _flags & SegBipoint; }
|
inline bool AutoSegment::isBipoint () const { return _flags & SegBipoint; }
|
||||||
inline bool AutoSegment::isWeakTerminal () const { return (_rpDistance < 2); }
|
inline bool AutoSegment::isWeakTerminal () const { return (_rpDistance < 2); }
|
||||||
inline bool AutoSegment::isWeakTerminal1 () const { return (_rpDistance == 1); }
|
inline bool AutoSegment::isWeakTerminal1 () const { return (_rpDistance == 1); }
|
||||||
|
|
|
@ -110,6 +110,7 @@ namespace Anabatic {
|
||||||
static const BaseFlags NoMinLength ;
|
static const BaseFlags NoMinLength ;
|
||||||
static const BaseFlags NoSegExt ;
|
static const BaseFlags NoSegExt ;
|
||||||
static const BaseFlags NullLength ;
|
static const BaseFlags NullLength ;
|
||||||
|
static const BaseFlags OnVSmall ;
|
||||||
public:
|
public:
|
||||||
inline Flags ( uint64_t flags = NoFlags );
|
inline Flags ( uint64_t flags = NoFlags );
|
||||||
inline Flags ( const Hurricane::BaseFlags& );
|
inline Flags ( const Hurricane::BaseFlags& );
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
|
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 "${Bootstrap_SOURCE_DIR}/cmake_modules/")
|
list(INSERT CMAKE_MODULE_PATH 0 "${Bootstrap_SOURCE_DIR}/cmake_modules/")
|
||||||
find_package(Bootstrap REQUIRED)
|
find_package(Bootstrap REQUIRED)
|
||||||
# find_package(Python 3 REQUIRED COMPONENTS Interpreter Development )
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
print_cmake_module_path()
|
print_cmake_module_path()
|
||||||
|
|
|
@ -35,6 +35,7 @@ class Builder:
|
||||||
self._noCache = False
|
self._noCache = False
|
||||||
self._ninja = False
|
self._ninja = False
|
||||||
self._clang = False
|
self._clang = False
|
||||||
|
self._manylinux = False
|
||||||
self._noSystemBoost = False
|
self._noSystemBoost = False
|
||||||
self._macports = False
|
self._macports = False
|
||||||
self._devtoolset = 0
|
self._devtoolset = 0
|
||||||
|
@ -62,6 +63,7 @@ class Builder:
|
||||||
elif attribute == "noCache": self._noCache = value
|
elif attribute == "noCache": self._noCache = value
|
||||||
elif attribute == "ninja": self._ninja = value
|
elif attribute == "ninja": self._ninja = value
|
||||||
elif attribute == "clang": self._clang = value
|
elif attribute == "clang": self._clang = value
|
||||||
|
elif attribute == "manylinux": self._manylinux = value
|
||||||
elif attribute == "macports":
|
elif attribute == "macports":
|
||||||
self._macports = value
|
self._macports = value
|
||||||
if value: self._noSystemBoost = True
|
if value: self._noSystemBoost = True
|
||||||
|
@ -177,6 +179,7 @@ class Builder:
|
||||||
if self._bfd: command += [ "-D", "USE_LIBBFD:STRING=%s" % self._bfd ]
|
if self._bfd: command += [ "-D", "USE_LIBBFD:STRING=%s" % self._bfd ]
|
||||||
if self._qt4: command += [ "-D", "WITH_QT4:STRING=TRUE" ]
|
if self._qt4: command += [ "-D", "WITH_QT4:STRING=TRUE" ]
|
||||||
if self._openmp: command += [ "-D", "WITH_OPENMP:STRING=TRUE" ]
|
if self._openmp: command += [ "-D", "WITH_OPENMP:STRING=TRUE" ]
|
||||||
|
if self._manylinux: command += [ "-D", "USE_MANYLINUX:STRING=TRUE" ]
|
||||||
command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode
|
command += [ "-D", "CMAKE_BUILD_TYPE:STRING=%s" % self.buildMode
|
||||||
#, "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared
|
#, "-D", "BUILD_SHARED_LIBS:STRING=%s" % self.enableShared
|
||||||
, "-D", "CMAKE_INSTALL_PREFIX:STRING=%s" % self.installDir
|
, "-D", "CMAKE_INSTALL_PREFIX:STRING=%s" % self.installDir
|
||||||
|
|
|
@ -211,6 +211,7 @@ parser.add_option ( "--bfd" , action="store_true" ,
|
||||||
parser.add_option ( "--openmp" , action="store_true" , dest="openmp" , help="Enable the use of OpenMP in Gcc." )
|
parser.add_option ( "--openmp" , action="store_true" , dest="openmp" , help="Enable the use of OpenMP in Gcc." )
|
||||||
parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." )
|
parser.add_option ( "--ninja" , action="store_true" , dest="ninja" , help="Use Ninja instead of UNIX Makefile." )
|
||||||
parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." )
|
parser.add_option ( "--clang" , action="store_true" , dest="clang" , help="Force use of Clang C/C++ compiler instead of system default." )
|
||||||
|
parser.add_option ( "--manylinux" , action="store_true" , dest="manylinux" , help="Build target is manylinux (PyPY)." )
|
||||||
parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments" , help="Arguments to pass to make (ex: \"-j4 install\")." )
|
parser.add_option ( "--make" , action="store" , type="string", dest="makeArguments" , help="Arguments to pass to make (ex: \"-j4 install\")." )
|
||||||
parser.add_option ( "--project" , action="append" , type="string", dest="projects" , help="The name of a project to build (may appears any number of time)." )
|
parser.add_option ( "--project" , action="append" , type="string", dest="projects" , help="The name of a project to build (may appears any number of time)." )
|
||||||
parser.add_option ( "-t", "--tool" , action="append" , type="string", dest="tools" , help="The name of a tool to build (may appears any number of time)." )
|
parser.add_option ( "-t", "--tool" , action="append" , type="string", dest="tools" , help="The name of a tool to build (may appears any number of time)." )
|
||||||
|
@ -282,6 +283,7 @@ else:
|
||||||
if options.llvmtoolset: builder.llvmtoolset = options.llvmtoolset
|
if options.llvmtoolset: builder.llvmtoolset = options.llvmtoolset
|
||||||
if options.bfd: builder.bfd = "ON"
|
if options.bfd: builder.bfd = "ON"
|
||||||
if options.qt4: builder.qt4 = True
|
if options.qt4: builder.qt4 = True
|
||||||
|
if options.manylinux: builder.manylinux = True
|
||||||
if options.openmp: builder.openmp = True
|
if options.openmp: builder.openmp = True
|
||||||
if options.makeArguments: builder.makeArguments = options.makeArguments
|
if options.makeArguments: builder.makeArguments = options.makeArguments
|
||||||
#if options.svnMethod: builder.svnMethod = options.svnMethod
|
#if options.svnMethod: builder.svnMethod = options.svnMethod
|
||||||
|
|
|
@ -223,6 +223,20 @@ endif()
|
||||||
endmacro(setup_boost)
|
endmacro(setup_boost)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Setup Python, select detection depending on USE_MANYLINUX.
|
||||||
|
#
|
||||||
|
macro(setup_python)
|
||||||
|
set(pydevelArg "Development")
|
||||||
|
|
||||||
|
if (USE_MANYLINUX)
|
||||||
|
message(STATUS "Build for manylinux")
|
||||||
|
set(pydevelArg "Development.Module")
|
||||||
|
endif()
|
||||||
|
find_package(Python 3 REQUIRED COMPONENTS Interpreter ${pydevelArg} )
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Find Qt, the union of all the modules we need for the whole project.
|
# Find Qt, the union of all the modules we need for the whole project.
|
||||||
#
|
#
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
setup_qwt()
|
setup_qwt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(FLUTE REQUIRED)
|
find_package(FLUTE REQUIRED)
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
cmake_policy(SET CMP0054 NEW)
|
cmake_policy(SET CMP0054 NEW)
|
||||||
|
|
||||||
|
@ -28,7 +29,6 @@
|
||||||
find_package(Libbfd)
|
find_package(Libbfd)
|
||||||
endif()
|
endif()
|
||||||
find_package(BZip2 REQUIRED)
|
find_package(BZip2 REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(BISON REQUIRED)
|
find_package(BISON REQUIRED)
|
||||||
find_package(FLEX REQUIRED)
|
find_package(FLEX REQUIRED)
|
||||||
|
|
|
@ -11,6 +11,7 @@ from coriolis.CRL import AllianceFramework, Gds, LefImport, CellGa
|
||||||
RoutingGauge, RoutingLayerGauge
|
RoutingGauge, RoutingLayerGauge
|
||||||
from coriolis.helpers import l, u, n, overlay, io, ndaTopDir
|
from coriolis.helpers import l, u, n, overlay, io, ndaTopDir
|
||||||
from coriolis.helpers.overlay import CfgCache, UpdateSession
|
from coriolis.helpers.overlay import CfgCache, UpdateSession
|
||||||
|
from coriolis.Anabatic import StyleFlags
|
||||||
|
|
||||||
|
|
||||||
__all__ = [ "setup" ]
|
__all__ = [ "setup" ]
|
||||||
|
@ -27,7 +28,7 @@ def _routing ():
|
||||||
rg.setSymbolic( False )
|
rg.setSymbolic( False )
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'Metal1' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'Metal1' ) # metal
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction
|
, RoutingLayerGauge.Horizontal # preferred routing direction
|
||||||
, RoutingLayerGauge.PinOnly # layer usage
|
, RoutingLayerGauge.PinOnly # layer usage
|
||||||
, 0 # depth
|
, 0 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -39,7 +40,7 @@ def _routing ():
|
||||||
, u(0.0 ) )) # obstacle dW
|
, u(0.0 ) )) # obstacle dW
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'Metal2' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'Metal2' ) # metal
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction
|
, RoutingLayerGauge.Vertical # preferred routing direction
|
||||||
, RoutingLayerGauge.Default # layer usage
|
, RoutingLayerGauge.Default # layer usage
|
||||||
, 1 # depth
|
, 1 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -51,7 +52,7 @@ def _routing ():
|
||||||
, u(0.0 ) )) # obstacle dW
|
, u(0.0 ) )) # obstacle dW
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'Metal3' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'Metal3' ) # metal
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction
|
, RoutingLayerGauge.Horizontal # preferred routing direction
|
||||||
, RoutingLayerGauge.Default # layer usage
|
, RoutingLayerGauge.Default # layer usage
|
||||||
, 2 # depth
|
, 2 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -63,7 +64,7 @@ def _routing ():
|
||||||
, u(0.0 ) )) # obstacle dW
|
, u(0.0 ) )) # obstacle dW
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'Metal4' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'Metal4' ) # metal
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction
|
, RoutingLayerGauge.Vertical # preferred routing direction
|
||||||
, RoutingLayerGauge.Default # layer usage
|
, RoutingLayerGauge.Default # layer usage
|
||||||
, 3 # depth
|
, 3 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -75,7 +76,7 @@ def _routing ():
|
||||||
, u(0.0 ) )) # obstacle dW
|
, u(0.0 ) )) # obstacle dW
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'Metal5' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'Metal5' ) # metal
|
||||||
, RoutingLayerGauge.Vertical # preferred routing direction
|
, RoutingLayerGauge.Horizontal # preferred routing direction
|
||||||
, RoutingLayerGauge.Default # layer usage
|
, RoutingLayerGauge.Default # layer usage
|
||||||
, 4 # depth
|
, 4 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -87,7 +88,7 @@ def _routing ():
|
||||||
, u(0.0 ) )) # obstacle dW
|
, u(0.0 ) )) # obstacle dW
|
||||||
rg.addLayerGauge(
|
rg.addLayerGauge(
|
||||||
RoutingLayerGauge.create( tech.getLayer( 'MetalTop' ) # metal
|
RoutingLayerGauge.create( tech.getLayer( 'MetalTop' ) # metal
|
||||||
, RoutingLayerGauge.Horizontal # preferred routing direction
|
, RoutingLayerGauge.Vertical # preferred routing direction
|
||||||
, RoutingLayerGauge.PowerSupply # layer usage
|
, RoutingLayerGauge.PowerSupply # layer usage
|
||||||
, 5 # depth
|
, 5 # depth
|
||||||
, 0.0 # density (deprecated)
|
, 0.0 # density (deprecated)
|
||||||
|
@ -161,7 +162,9 @@ def _routing ():
|
||||||
cfg.anabatic.globalIterations = [ 1, 100 ]
|
cfg.anabatic.globalIterations = [ 1, 100 ]
|
||||||
cfg.anabatic.gcell.displayMode = 1
|
cfg.anabatic.gcell.displayMode = 1
|
||||||
cfg.anabatic.gcell.displayMode = (("Boundary", 1), ("Density", 2))
|
cfg.anabatic.gcell.displayMode = (("Boundary", 1), ("Density", 2))
|
||||||
cfg.katana.disableStackedVias = True
|
cfg.anabatic.netBuilderStyle = 'VH,3RL+'
|
||||||
|
cfg.anabatic.routingStyle = StyleFlags.VH
|
||||||
|
cfg.katana.disableStackedVias = False
|
||||||
cfg.katana.hTracksReservedLocal = 4
|
cfg.katana.hTracksReservedLocal = 4
|
||||||
cfg.katana.hTracksReservedLocal = [0, 20]
|
cfg.katana.hTracksReservedLocal = [0, 20]
|
||||||
cfg.katana.vTracksReservedLocal = 3
|
cfg.katana.vTracksReservedLocal = 3
|
||||||
|
|
|
@ -80,20 +80,20 @@ def _setup_techno():
|
||||||
setEnclosures( CONT, Poly2 , u(0.07) )
|
setEnclosures( CONT, Poly2 , u(0.07) )
|
||||||
setEnclosures( CONT, Metal1, u(0.12) )
|
setEnclosures( CONT, Metal1, u(0.12) )
|
||||||
VIA12 = createVia( tech, 'VIA12', 'Metal1', 'Via1', 'Metal2', u(0.26) )
|
VIA12 = createVia( tech, 'VIA12', 'Metal1', 'Via1', 'Metal2', u(0.26) )
|
||||||
setEnclosures( VIA12, Metal1, u(0.06) )
|
setEnclosures( VIA12, Metal1, (u(0.06), u(0.00)) )
|
||||||
setEnclosures( VIA12, Metal2, u(0.06) )
|
setEnclosures( VIA12, Metal2, (u(0.06), u(0.01)) )
|
||||||
VIA23 = createVia( tech, 'VIA23', 'Metal2', 'Via2', 'Metal3', u(0.26) )
|
VIA23 = createVia( tech, 'VIA23', 'Metal2', 'Via2', 'Metal3', u(0.26) )
|
||||||
setEnclosures( VIA23, Metal2, u(0.06) )
|
setEnclosures( VIA23, Metal2, (u(0.06), u(0.01)) )
|
||||||
setEnclosures( VIA23, Metal3, u(0.06) )
|
setEnclosures( VIA23, Metal3, (u(0.01), u(0.06)) )
|
||||||
VIA34 = createVia( tech, 'VIA34', 'Metal3', 'Via3', 'Metal4', u(0.26) )
|
VIA34 = createVia( tech, 'VIA34', 'Metal3', 'Via3', 'Metal4', u(0.26) )
|
||||||
setEnclosures( VIA34, Metal3, u(0.06) )
|
setEnclosures( VIA34, Metal3, (u(0.01), u(0.06)) )
|
||||||
setEnclosures( VIA34, Metal4, u(0.06) )
|
setEnclosures( VIA34, Metal4, (u(0.06), u(0.01)) )
|
||||||
VIA45 = createVia( tech, 'VIA45', 'Metal4', 'Via4', 'Metal5', u(0.26) )
|
VIA45 = createVia( tech, 'VIA45', 'Metal4', 'Via4', 'Metal5', u(0.26) )
|
||||||
setEnclosures( VIA45, Metal4, u(0.06) )
|
setEnclosures( VIA45, Metal4, (u(0.06), u(0.01)) )
|
||||||
setEnclosures( VIA45, Metal5, u(0.06) )
|
setEnclosures( VIA45, Metal5, (u(0.01), u(0.06)) )
|
||||||
VIA5T = createVia( tech, 'VIA5T', 'Metal5', 'Via5', 'MetalTop', u(0.26) )
|
VIA5T = createVia( tech, 'VIA5T', 'Metal5', 'Via5', 'MetalTop', u(0.26) )
|
||||||
setEnclosures( VIA5T, Metal5 , u(0.06) )
|
setEnclosures( VIA5T, Metal5 , (u(0.01), u(0.06)) )
|
||||||
setEnclosures( VIA5T, MetalTop, u(0.06) )
|
setEnclosures( VIA5T, MetalTop, (u(0.06), u(0.01)) )
|
||||||
|
|
||||||
Border = createBL( tech, 'Border', BasicLayer.Material.other, gds2Layer=63 )
|
Border = createBL( tech, 'Border', BasicLayer.Material.other, gds2Layer=63 )
|
||||||
|
|
||||||
|
|
|
@ -110,8 +110,8 @@ namespace {
|
||||||
inline int getNthRouting () const;
|
inline int getNthRouting () const;
|
||||||
inline void incNthRouting ();
|
inline void incNthRouting ();
|
||||||
inline RoutingGauge* getRoutingGauge () const;
|
inline RoutingGauge* getRoutingGauge () const;
|
||||||
inline void addPinSegment ( string name, Segment* );
|
inline void addPinComponent ( string name, Component* );
|
||||||
inline void clearPinSegments ();
|
inline void clearPinComponents ();
|
||||||
private:
|
private:
|
||||||
static int _unitsCbk ( lefrCallbackType_e, lefiUnits* , lefiUserData );
|
static int _unitsCbk ( lefrCallbackType_e, lefiUnits* , lefiUserData );
|
||||||
static int _layerCbk ( lefrCallbackType_e, lefiLayer* , lefiUserData );
|
static int _layerCbk ( lefrCallbackType_e, lefiLayer* , lefiUserData );
|
||||||
|
@ -131,7 +131,7 @@ namespace {
|
||||||
Net* _net;
|
Net* _net;
|
||||||
string _busBits;
|
string _busBits;
|
||||||
double _unitsMicrons;
|
double _unitsMicrons;
|
||||||
map< string, vector<Segment*> > _pinSegments;
|
map< string, vector<Component*> > _pinComponents;
|
||||||
static map<string,Layer*> _layerLut;
|
static map<string,Layer*> _layerLut;
|
||||||
vector<string> _unmatchedLayers;
|
vector<string> _unmatchedLayers;
|
||||||
vector<string> _errors;
|
vector<string> _errors;
|
||||||
|
@ -173,8 +173,8 @@ namespace {
|
||||||
inline const vector<string>& LefParser::getErrors () const { return _errors; }
|
inline const vector<string>& LefParser::getErrors () const { return _errors; }
|
||||||
inline void LefParser::pushError ( const string& error ) { _errors.push_back(error); }
|
inline void LefParser::pushError ( const string& error ) { _errors.push_back(error); }
|
||||||
inline void LefParser::clearErrors () { return _errors.clear(); }
|
inline void LefParser::clearErrors () { return _errors.clear(); }
|
||||||
inline void LefParser::addPinSegment ( string name, Segment* s ) { _pinSegments[name].push_back(s); }
|
inline void LefParser::addPinComponent ( string name, Component* comp ) { _pinComponents[name].push_back(comp); }
|
||||||
inline void LefParser::clearPinSegments () { _pinSegments.clear(); }
|
inline void LefParser::clearPinComponents () { _pinComponents.clear(); }
|
||||||
|
|
||||||
|
|
||||||
Library* LefParser::_mergeLibrary = nullptr;
|
Library* LefParser::_mergeLibrary = nullptr;
|
||||||
|
@ -520,6 +520,8 @@ namespace {
|
||||||
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
|
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
|
||||||
, parser->fromUnitsMicrons(polygon->y[ipoint]) ));
|
, parser->fromUnitsMicrons(polygon->y[ipoint]) ));
|
||||||
}
|
}
|
||||||
|
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[0])
|
||||||
|
, parser->fromUnitsMicrons(polygon->y[0]) ));
|
||||||
Rectilinear::create( blockageNet, blockageLayer, points );
|
Rectilinear::create( blockageNet, blockageLayer, points );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -577,7 +579,7 @@ namespace {
|
||||||
|
|
||||||
if (not isPad) parser->_pinStdPostProcess();
|
if (not isPad) parser->_pinStdPostProcess();
|
||||||
else parser->_pinPadPostProcess();
|
else parser->_pinPadPostProcess();
|
||||||
parser->clearPinSegments();
|
parser->clearPinComponents();
|
||||||
|
|
||||||
cerr << " - " << cellName
|
cerr << " - " << cellName
|
||||||
<< " " << DbU::getValueString(width) << " " << DbU::getValueString(height)
|
<< " " << DbU::getValueString(width) << " " << DbU::getValueString(height)
|
||||||
|
@ -667,7 +669,7 @@ namespace {
|
||||||
, parser->fromUnitsMicrons( r->yh )
|
, parser->fromUnitsMicrons( r->yh )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (segment) parser->addPinSegment( pin->name(), segment );
|
if (segment) parser->addPinComponent( pin->name(), segment );
|
||||||
//cerr << " | " << segment << endl;
|
//cerr << " | " << segment << endl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -678,7 +680,10 @@ namespace {
|
||||||
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
|
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[ipoint])
|
||||||
, parser->fromUnitsMicrons(polygon->y[ipoint]) ));
|
, parser->fromUnitsMicrons(polygon->y[ipoint]) ));
|
||||||
}
|
}
|
||||||
Rectilinear::create( net, layer, points );
|
points.push_back( Point( parser->fromUnitsMicrons(polygon->x[0])
|
||||||
|
, parser->fromUnitsMicrons(polygon->y[0]) ));
|
||||||
|
Rectilinear* rectilinear = Rectilinear::create( net, layer, points );
|
||||||
|
if (rectilinear) parser->addPinComponent( pin->name(), rectilinear );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (geoms->itemType(igeom) == lefiGeomClassE) {
|
if (geoms->itemType(igeom) == lefiGeomClassE) {
|
||||||
|
@ -722,20 +727,27 @@ namespace {
|
||||||
const RoutingLayerGauge* gaugeMetal2 = _routingGauge->getLayerGauge( 1 );
|
const RoutingLayerGauge* gaugeMetal2 = _routingGauge->getLayerGauge( 1 );
|
||||||
Box ab = _cell->getAbutmentBox();
|
Box ab = _cell->getAbutmentBox();
|
||||||
|
|
||||||
//cerr << " @ _pinStdPostProcess" << endl;
|
cerr << " @ _pinStdPostProcess" << endl;
|
||||||
|
|
||||||
for ( auto element : _pinSegments ) {
|
for ( auto element : _pinComponents ) {
|
||||||
string pinName = element.first;
|
string pinName = element.first;
|
||||||
vector<Segment*>& segments = element.second;
|
vector<Component*>& components = element.second;
|
||||||
vector<Segment*> ongrids;
|
vector<Segment*> ongrids;
|
||||||
|
|
||||||
for ( Segment* segment : segments ) {
|
for ( Component* component : components ) {
|
||||||
|
Segment* segment = dynamic_cast<Segment*>( component );
|
||||||
|
if (segment) {
|
||||||
|
if (component->getNet()->isSupply()) continue;
|
||||||
bool isWide = (segment->getWidth() >= getMinTerminalWidth());
|
bool isWide = (segment->getWidth() >= getMinTerminalWidth());
|
||||||
|
|
||||||
//cerr << " > " << segment << endl;
|
cerr << " > " << segment << endl;
|
||||||
|
if (not isVH())
|
||||||
|
cerr << "NOT isVH()" << endl;
|
||||||
|
else
|
||||||
|
cerr << "isVH()" << endl;
|
||||||
|
|
||||||
if (not segment->getNet()->isSupply()) {
|
|
||||||
if (isVH() and (segment->getLayer()->getMask() == metal1->getMask())) {
|
if (isVH() and (segment->getLayer()->getMask() == metal1->getMask())) {
|
||||||
|
cerr << "isVH()" << endl;
|
||||||
Vertical* v = dynamic_cast<Vertical*>( segment );
|
Vertical* v = dynamic_cast<Vertical*>( segment );
|
||||||
if (v) {
|
if (v) {
|
||||||
DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin()
|
DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin()
|
||||||
|
@ -772,16 +784,67 @@ namespace {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (isWide) ongrids.push_back( segment );
|
if (isWide) ongrids.push_back( segment );
|
||||||
}
|
}
|
||||||
|
Rectilinear* rectilinear = dynamic_cast<Rectilinear*>( component );
|
||||||
|
if (not (rectilinear->getLayer()->getMask() == metal1->getMask()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (rectilinear) {
|
||||||
|
cerr << " > " << rectilinear << endl;
|
||||||
|
vector<Box> boxes;
|
||||||
|
rectilinear->getAsRectangles( boxes );
|
||||||
|
|
||||||
|
if (component->getNet()->isSupply()) {
|
||||||
|
ongrids.push_back( Horizontal::create( rectilinear->getNet()
|
||||||
|
, rectilinear->getLayer()
|
||||||
|
, boxes.front().getYCenter()
|
||||||
|
, boxes.front().getHeight()
|
||||||
|
, _cell->getAbutmentBox().getXMin()
|
||||||
|
, _cell->getAbutmentBox().getXMax()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
for ( const Box& box : boxes ) {
|
||||||
|
DbU::Unit nearestX = gaugeMetal2->getTrackPosition( ab.getXMin()
|
||||||
|
, ab.getXMax()
|
||||||
|
, box.getXCenter()
|
||||||
|
, Constant::Nearest );
|
||||||
|
DbU::Unit xmin = std::min( box.getXMin(), nearestX - gaugeMetal2->getViaWidth()/2 );
|
||||||
|
DbU::Unit xmax = std::max( box.getXMax(), nearestX + gaugeMetal2->getViaWidth()/2 );
|
||||||
|
ongrids.push_back( Vertical::create( rectilinear->getNet()
|
||||||
|
, rectilinear->getLayer()
|
||||||
|
, (xmax+xmin)/2
|
||||||
|
, xmax-xmin
|
||||||
|
, box.getYMin()
|
||||||
|
, box.getYMax()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
// DbU::Unit neighbor = nearestY
|
||||||
|
// + ((nearestY > box.getYCenter()) ? 1 : -1) * gaugeMetal2->getPitch();
|
||||||
|
|
||||||
|
// if ( (box.getYMin() > neighbor)
|
||||||
|
// or (box.getYMax() < neighbor) ) {
|
||||||
|
// ongrids.push_back( Vertical::create( rectilinear->getNet()
|
||||||
|
// , rectilinear->getLayer()
|
||||||
|
// , box.getXCenter()
|
||||||
|
// , box.getWidth()
|
||||||
|
// , box.getYMin()
|
||||||
|
// , box.getYMax()
|
||||||
|
// )
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ongrids.empty()) {
|
if (ongrids.empty()) {
|
||||||
cerr << Warning( "LefParser::_pinStdPostProcess(): Pin \"%s\" has no terminal ongrid."
|
cerr << Warning( "LefParser::_pinStdPostProcess(): Pin \"%s\" has no terminal ongrid."
|
||||||
, pinName.c_str() ) << endl;
|
, pinName.c_str() ) << endl;
|
||||||
for ( Segment* segment : segments ) {
|
for ( Component* component : components ) {
|
||||||
NetExternalComponents::setExternal( segment );
|
NetExternalComponents::setExternal( component );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for ( Segment* segment : ongrids ) {
|
for ( Segment* segment : ongrids ) {
|
||||||
|
@ -797,9 +860,9 @@ namespace {
|
||||||
Box ab = getCell()->getAbutmentBox();
|
Box ab = getCell()->getAbutmentBox();
|
||||||
bool isCornerPad = (_cellGauge) and (_cellGauge->getSliceHeight() == _cellGauge->getSliceStep());
|
bool isCornerPad = (_cellGauge) and (_cellGauge->getSliceHeight() == _cellGauge->getSliceStep());
|
||||||
|
|
||||||
for ( auto element : _pinSegments ) {
|
for ( auto element : _pinComponents ) {
|
||||||
string pinName = element.first;
|
string pinName = element.first;
|
||||||
vector<Segment*>& segments = element.second;
|
vector<Component*>& segments = element.second;
|
||||||
vector<Segment*> ongrids;
|
vector<Segment*> ongrids;
|
||||||
|
|
||||||
if (segments.empty()) continue;
|
if (segments.empty()) continue;
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/ccore/cyclop>" -*-
|
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/ccore/cyclop>" -*-
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
|
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
|
||||||
${HURRICANE_INCLUDE_DIR}
|
${HURRICANE_INCLUDE_DIR}
|
||||||
${UTILITIES_INCLUDE_DIR}
|
${UTILITIES_INCLUDE_DIR}
|
||||||
|
|
|
@ -32,8 +32,6 @@
|
||||||
-lutil
|
-lutil
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
|
|
||||||
add_definitions( -DCORIOLIS_TOP="${CORIOLIS_TOP}"
|
add_definitions( -DCORIOLIS_TOP="${CORIOLIS_TOP}"
|
||||||
-DSYS_CONF_DIR="${SYS_CONF_DIR}"
|
-DSYS_CONF_DIR="${SYS_CONF_DIR}"
|
||||||
-DPYTHON_SITE_PACKAGES="${PYTHON_SITE_PACKAGES}"
|
-DPYTHON_SITE_PACKAGES="${PYTHON_SITE_PACKAGES}"
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/x2y> -*-
|
# -*- explicit-buffer-name: "CMakeLists.txt<crlcore/src/x2y> -*-
|
||||||
|
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
|
include_directories ( ${CRLCORE_SOURCE_DIR}/src/ccore
|
||||||
${HURRICANE_INCLUDE_DIR}
|
${HURRICANE_INCLUDE_DIR}
|
||||||
${UTILITIES_INCLUDE_DIR}
|
${UTILITIES_INCLUDE_DIR}
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
|
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
#find_package(KATABATIC REQUIRED)
|
#find_package(KATABATIC REQUIRED)
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
${Python_INCLUDE_DIRS}
|
${Python_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
set( includes etesian/Configuration.h
|
set( includes etesian/Configuration.h
|
||||||
etesian/Placement.h
|
etesian/Placement.h
|
||||||
etesian/FeedCells.h
|
etesian/FeedCells.h
|
||||||
|
|
|
@ -709,6 +709,7 @@ namespace Etesian {
|
||||||
cmess1 << " o Converting \"" << getCell()->getName() << "\" into Coloquinte." << endl;
|
cmess1 << " o Converting \"" << getCell()->getName() << "\" into Coloquinte." << endl;
|
||||||
cmess1 << ::Dots::asString(" - H-pitch" , DbU::getValueString(hpitch)) << endl;
|
cmess1 << ::Dots::asString(" - H-pitch" , DbU::getValueString(hpitch)) << endl;
|
||||||
cmess1 << ::Dots::asString(" - V-pitch" , DbU::getValueString(vpitch)) << endl;
|
cmess1 << ::Dots::asString(" - V-pitch" , DbU::getValueString(vpitch)) << endl;
|
||||||
|
cmess1 << ::Dots::asString(" - Slice height" , DbU::getValueString(sliceHeight)) << endl;
|
||||||
if (isFlexLib)
|
if (isFlexLib)
|
||||||
cmess1 << ::Dots::asString(" - Using patches for" , "\"FlexLib\"") << endl;
|
cmess1 << ::Dots::asString(" - Using patches for" , "\"FlexLib\"") << endl;
|
||||||
cmess2 << " o Looking through the hierarchy." << endl;
|
cmess2 << " o Looking through the hierarchy." << endl;
|
||||||
|
@ -749,11 +750,16 @@ namespace Etesian {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_surface = new coloquinte::Rectangle( (int)(topAb.getXMin() / hpitch)
|
||||||
|
, (int)(topAb.getXMax() / hpitch)
|
||||||
|
, (int)(topAb.getYMin() / vpitch)
|
||||||
|
, (int)(topAb.getYMax() / vpitch)
|
||||||
|
);
|
||||||
|
|
||||||
for ( Occurrence occurrence : getCell()->getTerminalNetlistInstanceOccurrences(getBlockInstance()) ) {
|
for ( Occurrence occurrence : getCell()->getTerminalNetlistInstanceOccurrences(getBlockInstance()) ) {
|
||||||
++instancesNb;
|
++instancesNb;
|
||||||
Instance* instance = static_cast<Instance*>(occurrence.getEntity());
|
Instance* instance = static_cast<Instance*>(occurrence.getEntity());
|
||||||
Box instanceAb = instance->getAbutmentBox();
|
Box instanceAb = _bloatCells.getAb( occurrence );
|
||||||
string masterName = getString( instance->getMasterCell()->getName() );
|
string masterName = getString( instance->getMasterCell()->getName() );
|
||||||
DbU::Unit length = (instanceAb.getHeight() / sliceHeight) * instanceAb.getWidth();
|
DbU::Unit length = (instanceAb.getHeight() / sliceHeight) * instanceAb.getWidth();
|
||||||
if (af->isRegister(masterName)) {
|
if (af->isRegister(masterName)) {
|
||||||
|
@ -843,10 +849,10 @@ namespace Etesian {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compute the space margin from the row length computed earlier
|
// Compute a bloat factor to be reach 1 - densityVariation density
|
||||||
double spaceMargin = (double) (totalLength - usedLength) / usedLength;
|
double bloatFactor = std::max(1.0, (1.0 - getDensityVariation()) * totalLength / usedLength);
|
||||||
double densityVariation = getDensityVariation();
|
// Limit the maximum size of cells after bloat to avoid placement issues
|
||||||
double bloatFactor = 1.0 + std::max(spaceMargin - densityVariation, 0.0);
|
int maxBloatSize = _surface->width() / 8;
|
||||||
if (bloatFactor != 1.0) {
|
if (bloatFactor != 1.0) {
|
||||||
ostringstream bf;
|
ostringstream bf;
|
||||||
bf << fixed << setprecision(2) << bloatFactor << "%";
|
bf << fixed << setprecision(2) << bloatFactor << "%";
|
||||||
|
@ -886,7 +892,7 @@ namespace Etesian {
|
||||||
++xsize;
|
++xsize;
|
||||||
|
|
||||||
// Take bloat into account to compute the size
|
// Take bloat into account to compute the size
|
||||||
xsize *= bloatFactor;
|
xsize = std::max(xsize, std::min(maxBloatSize, (int) (xsize * bloatFactor)));
|
||||||
|
|
||||||
cellX[instanceId] = xpos;
|
cellX[instanceId] = xpos;
|
||||||
cellY[instanceId] = ypos;
|
cellY[instanceId] = ypos;
|
||||||
|
@ -1032,11 +1038,6 @@ namespace Etesian {
|
||||||
if (_bloatCells.getSelected()->getName() != "disabled")
|
if (_bloatCells.getSelected()->getName() != "disabled")
|
||||||
cmess2 << stdCellSizes.toString(1) << endl;
|
cmess2 << stdCellSizes.toString(1) << endl;
|
||||||
|
|
||||||
_surface = new coloquinte::Rectangle( (int)(topAb.getXMin() / hpitch)
|
|
||||||
, (int)(topAb.getXMax() / hpitch)
|
|
||||||
, (int)(topAb.getYMin() / vpitch)
|
|
||||||
, (int)(topAb.getYMax() / vpitch)
|
|
||||||
);
|
|
||||||
_circuit->setupRows(*_surface, rowHeight);
|
_circuit->setupRows(*_surface, rowHeight);
|
||||||
_circuit->check();
|
_circuit->check();
|
||||||
_placementLB = new coloquinte::PlacementSolution ();
|
_placementLB = new coloquinte::PlacementSolution ();
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
check_distribution()
|
check_distribution()
|
||||||
setup_sysconfdir( "${CMAKE_INSTALL_PREFIX}" )
|
setup_sysconfdir( "${CMAKE_INSTALL_PREFIX}" )
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
${CONFIGURATION_INCLUDE_DIR}
|
${CONFIGURATION_INCLUDE_DIR}
|
||||||
${Python_INCLUDE_DIRS}
|
${Python_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
|
|
||||||
set( includes flute.h
|
set( includes flute.h
|
||||||
dl.h
|
dl.h
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(FLUTE REQUIRED)
|
find_package(FLUTE REQUIRED)
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
cmake_policy(SET CMP0054 NEW)
|
cmake_policy(SET CMP0054 NEW)
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(BZip2 REQUIRED)
|
find_package(BZip2 REQUIRED)
|
||||||
find_package(BISON REQUIRED)
|
find_package(BISON REQUIRED)
|
||||||
find_package(FLEX REQUIRED)
|
find_package(FLEX REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
if (USE_LIBBFD)
|
if (USE_LIBBFD)
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
${Python_INCLUDE_DIRS}
|
${Python_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
set( pyCpps ProxyProperty.cpp
|
set( pyCpps ProxyProperty.cpp
|
||||||
PythonAttributes.cpp
|
PythonAttributes.cpp
|
||||||
PyBreakpoint.cpp
|
PyBreakpoint.cpp
|
||||||
|
|
|
@ -14,10 +14,10 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
#setup_apple()
|
#setup_apple()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
|
setup_python()
|
||||||
|
|
||||||
set(QT_USE_QTXML "true")
|
set(QT_USE_QTXML "true")
|
||||||
find_package(Qt4 REQUIRED)
|
find_package(Qt4 REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
check_distribution()
|
check_distribution()
|
||||||
|
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
setup_python()
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(FLUTE REQUIRED)
|
find_package(FLUTE REQUIRED)
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
${Python_INCLUDE_DIRS}
|
${Python_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
find_package (Python 3 COMPONENTS Interpreter Development.Module )
|
|
||||||
set( includes katana/Constants.h
|
set( includes katana/Constants.h
|
||||||
katana/Block.h
|
katana/Block.h
|
||||||
katana/TrackCost.h
|
katana/TrackCost.h
|
||||||
|
|
|
@ -76,6 +76,16 @@ namespace {
|
||||||
cdebug_tabw(159,-1);
|
cdebug_tabw(159,-1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (segment->isNonPrefOnVSmall()) {
|
||||||
|
cdebug_log(159,0) << "Infinite cost from (NonPref on VSmall): " << segment << endl;
|
||||||
|
cost.setInfinite ();
|
||||||
|
cost.setOverlap ();
|
||||||
|
cost.setHardOverlap();
|
||||||
|
cost.setBlockage ();
|
||||||
|
cdebug_tabw(159,-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cost.getInterval().getVMax() > intersect.getVMax()) cost.setLeftOverlap();
|
if (cost.getInterval().getVMax() > intersect.getVMax()) cost.setLeftOverlap();
|
||||||
|
|
|
@ -152,6 +152,7 @@ namespace Katana {
|
||||||
bool TrackElement::isAnalog () const { return false; }
|
bool TrackElement::isAnalog () const { return false; }
|
||||||
bool TrackElement::isWide () const { return false; }
|
bool TrackElement::isWide () const { return false; }
|
||||||
bool TrackElement::isNonPref () const { return false; }
|
bool TrackElement::isNonPref () const { return false; }
|
||||||
|
bool TrackElement::isNonPrefOnVSmall () const { return false; }
|
||||||
bool TrackElement::isShortNet () const { return false; }
|
bool TrackElement::isShortNet () const { return false; }
|
||||||
// Predicates.
|
// Predicates.
|
||||||
bool TrackElement::hasSymmetric () const { return false; }
|
bool TrackElement::hasSymmetric () const { return false; }
|
||||||
|
|
|
@ -195,6 +195,7 @@ namespace Katana {
|
||||||
bool TrackSegment::isWide () const { return _base->isWide(); }
|
bool TrackSegment::isWide () const { return _base->isWide(); }
|
||||||
bool TrackSegment::isShortNet () const { return _base->isShortNet(); }
|
bool TrackSegment::isShortNet () const { return _base->isShortNet(); }
|
||||||
bool TrackSegment::isPriorityLocked () const { return _flags & PriorityLocked; }
|
bool TrackSegment::isPriorityLocked () const { return _flags & PriorityLocked; }
|
||||||
|
bool TrackSegment::isNonPrefOnVSmall () const { return _base->isNonPrefOnVSmall(); }
|
||||||
// Predicates.
|
// Predicates.
|
||||||
bool TrackSegment::hasSymmetric () const { return _symmetric != NULL; }
|
bool TrackSegment::hasSymmetric () const { return _symmetric != NULL; }
|
||||||
// Accessors.
|
// Accessors.
|
||||||
|
|
|
@ -106,6 +106,7 @@ namespace Katana {
|
||||||
virtual bool isVertical () const = 0;
|
virtual bool isVertical () const = 0;
|
||||||
virtual bool isWide () const;
|
virtual bool isWide () const;
|
||||||
virtual bool isNonPref () const;
|
virtual bool isNonPref () const;
|
||||||
|
virtual bool isNonPrefOnVSmall () const;
|
||||||
virtual bool isUnbreakable () const;
|
virtual bool isUnbreakable () const;
|
||||||
virtual bool isLocal () const;
|
virtual bool isLocal () const;
|
||||||
virtual bool isGlobal () const;
|
virtual bool isGlobal () const;
|
||||||
|
|
|
@ -82,6 +82,7 @@ namespace Katana {
|
||||||
virtual bool isAnalog () const;
|
virtual bool isAnalog () const;
|
||||||
virtual bool isWide () const;
|
virtual bool isWide () const;
|
||||||
virtual bool isShortNet () const;
|
virtual bool isShortNet () const;
|
||||||
|
virtual bool isNonPrefOnVSmall () const;
|
||||||
virtual bool isPriorityLocked () const;
|
virtual bool isPriorityLocked () const;
|
||||||
// Predicates.
|
// Predicates.
|
||||||
virtual bool hasSymmetric () const;
|
virtual bool hasSymmetric () const;
|
||||||
|
|
|
@ -14,11 +14,11 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
|
setup_python()
|
||||||
|
|
||||||
if (USE_LIBBFD)
|
if (USE_LIBBFD)
|
||||||
find_package(Libbfd)
|
find_package(Libbfd)
|
||||||
endif()
|
endif()
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
|
list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
|
||||||
find_package(Bootstrap REQUIRED)
|
find_package(Bootstrap REQUIRED)
|
||||||
setup_project_paths(CORIOLIS)
|
setup_project_paths(CORIOLIS)
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Bootstrap REQUIRED)
|
find_package(Bootstrap REQUIRED)
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
|
@ -19,7 +20,6 @@
|
||||||
cmake_policy(SET CMP0002 OLD)
|
cmake_policy(SET CMP0002 OLD)
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost()
|
setup_boost()
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development)
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
find_package(CORIOLIS REQUIRED)
|
find_package(CORIOLIS REQUIRED)
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
set_cmake_policies()
|
set_cmake_policies()
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
|
|
|
@ -19,12 +19,12 @@
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
if (USE_LIBBFD)
|
if (USE_LIBBFD)
|
||||||
find_package(Libbfd)
|
find_package(Libbfd)
|
||||||
endif()
|
endif()
|
||||||
find_package(BZip2 REQUIRED)
|
find_package(BZip2 REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF REQUIRED)
|
find_package(LEFDEF REQUIRED)
|
||||||
find_package(COLOQUINTE)
|
find_package(COLOQUINTE)
|
||||||
|
|
|
@ -21,13 +21,13 @@
|
||||||
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
setup_sysconfdir("${CMAKE_INSTALL_PREFIX}")
|
||||||
setup_boost(program_options)
|
setup_boost(program_options)
|
||||||
setup_qt()
|
setup_qt()
|
||||||
|
setup_python()
|
||||||
|
|
||||||
if (USE_LIBBFD)
|
if (USE_LIBBFD)
|
||||||
find_package(Libbfd)
|
find_package(Libbfd)
|
||||||
endif()
|
endif()
|
||||||
find_package(Libexecinfo REQUIRED)
|
find_package(Libexecinfo REQUIRED)
|
||||||
find_package(BZip2 REQUIRED)
|
find_package(BZip2 REQUIRED)
|
||||||
find_package(Python 3 REQUIRED COMPONENTS Interpreter Development.Module )
|
|
||||||
find_package(PythonSitePackages REQUIRED)
|
find_package(PythonSitePackages REQUIRED)
|
||||||
find_package(LEFDEF)
|
find_package(LEFDEF)
|
||||||
find_package(HURRICANE REQUIRED)
|
find_package(HURRICANE REQUIRED)
|
||||||
|
|
Loading…
Reference in New Issue