Initial import of cumulus
This commit is contained in:
parent
b84e0e47c4
commit
c1ab67d1ac
|
@ -0,0 +1,67 @@
|
|||
PROJECT(CUMULUS)
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0)
|
||||
IF(COMMAND CMAKE_POLICY)
|
||||
CMAKE_POLICY(SET CMP0003 NEW)
|
||||
ENDIF(COMMAND CMAKE_POLICY)
|
||||
|
||||
IF(APPLE)
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND sw_vers -productVersion
|
||||
OUTPUT_VARIABLE OSX_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
MESSAGE(STATUS "OSX_VERSION='${OSX_VERSION}'")
|
||||
IF(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
|
||||
MESSAGE(STATUS "OSX < 10.6")
|
||||
ELSE(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386;ppc") # for QT4.5 32bits on snow leopard
|
||||
ENDIF(${OSX_VERSION} MATCHES "^10\\.[012345]\\.?")
|
||||
ENDIF(APPLE)
|
||||
|
||||
SET(CMAKE_C_FLAGS_DEBUG "-g -Wall" CACHE STRING "Debug options." FORCE)
|
||||
SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall" CACHE STRING "Debug options." FORCE)
|
||||
#SET(CMAKE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
|
||||
#SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
|
||||
#SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
|
||||
#SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "-pg" CACHE STRING "Debug options." FORCE)
|
||||
|
||||
# This macro has to be included in all the tools CMakeLists.txt as it's
|
||||
# the sole means of localizing other tools/projects.
|
||||
MACRO(SETUP_PROJECT_PATHS project)
|
||||
IF( NOT("$ENV{${project}_TOP}" STREQUAL "") )
|
||||
MESSAGE("-- ${project}_TOP is set to $ENV{${project}_TOP}")
|
||||
SET(PROJECT_MODULE_PATH "${DESTDIR}$ENV{${project}_TOP}/share/cmake/Modules/")
|
||||
LIST(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_MODULE_PATH}")
|
||||
ENDIF( NOT("$ENV{${project}_TOP}" STREQUAL "") )
|
||||
|
||||
IF( NOT("$ENV{${project}_USER_TOP}" STREQUAL "") )
|
||||
MESSAGE("-- ${project}_USER_TOP is set to $ENV{${project}_USER_TOP}")
|
||||
SET(PROJECT_MODULE_PATH "${DESTDIR}$ENV{${project}_USER_TOP}/share/cmake/Modules/")
|
||||
LIST(INSERT CMAKE_MODULE_PATH 0 "${PROJECT_MODULE_PATH}")
|
||||
ENDIF( NOT("$ENV{${project}_USER_TOP}" STREQUAL "") )
|
||||
|
||||
LIST(REMOVE_DUPLICATES CMAKE_MODULE_PATH)
|
||||
ENDMACRO(SETUP_PROJECT_PATHS project)
|
||||
|
||||
SETUP_PROJECT_PATHS(VLSISAPD)
|
||||
SETUP_PROJECT_PATHS(CORIOLIS)
|
||||
|
||||
STRING(REGEX MATCH "^/usr" IS_USR "$ENV{CORIOLIS_TOP}")
|
||||
STRING(REGEX MATCH "^/opt" IS_OPT "$ENV{CORIOLIS_TOP}")
|
||||
IF(IS_USR OR IS_OPT)
|
||||
MESSAGE("-- Using system-wide /etc.")
|
||||
SET(SYS_CONF_DIR "/etc" CACHE STRING "System configuration directory (/etc)" FORCE)
|
||||
ELSE(IS_USR OR IS_OPT)
|
||||
MESSAGE("-- Using install tree /etc.")
|
||||
SET(SYS_CONF_DIR "etc" CACHE STRING "System configuration directory (/etc)" FORCE)
|
||||
ENDIF(IS_USR OR IS_OPT)
|
||||
|
||||
FIND_PACKAGE(PythonLibs REQUIRED)
|
||||
FIND_PACKAGE(PythonSitePackages REQUIRED)
|
||||
FIND_PACKAGE(VLSISAPD REQUIRED)
|
||||
FIND_PACKAGE(HURRICANE REQUIRED)
|
||||
FIND_PACKAGE(CORIOLIS REQUIRED)
|
||||
|
||||
SET_LIB_LINK_MODE()
|
||||
|
||||
ADD_SUBDIRECTORY(src)
|
|
@ -0,0 +1,6 @@
|
|||
|
||||
set ( pysources ${CMAKE_CURRENT_SOURCE_DIR}/placeandroute.py
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/ref.py
|
||||
)
|
||||
|
||||
install ( FILES ${pysources} DESTINATION ${PYTHON_SITE_PACKAGES}/cumulus )
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,157 @@
|
|||
from Hurricane import *
|
||||
import Hurricane
|
||||
import CRL
|
||||
|
||||
import re
|
||||
|
||||
###########
|
||||
## GetXY ##
|
||||
###########
|
||||
def pyGetXY ( masterCell, pathname, refname ) :
|
||||
'''This function returns the coordinates of a reference thanks to its name and the path of the instance it belongs to'''
|
||||
|
||||
## MasterCell ##
|
||||
if pathname != "" :
|
||||
myPath = Path ( masterCell, pathname )
|
||||
tInst = myPath.getTailInstance()
|
||||
masterCell = tInst.getMasterCell()
|
||||
|
||||
## Reference ##
|
||||
myRef = None
|
||||
for el in masterCell.getReferences():
|
||||
if str(el.getName()) == refname :
|
||||
myRef = el
|
||||
break
|
||||
|
||||
# Error : if no reference found in mastercell
|
||||
if myRef == None :
|
||||
err = "\n[Stratus ERROR] GetRefXY : No reference found with name " + refname + " in masterCell " + str(masterCell.getName()) + ".\n"
|
||||
raise err
|
||||
|
||||
## Occurrence of the Reference ##
|
||||
myOccurrence = Occurrence ( myRef, myPath )
|
||||
bb = myOccurrence.getBoundingBox()
|
||||
|
||||
return ( getValue(bb.getXCenter()), getValue(bb.getYCenter()) )
|
||||
|
||||
##############
|
||||
## PlaceRef ##
|
||||
##############
|
||||
def pyPlaceRef ( cell, name, x, y ) :
|
||||
'''This function creates a reference thanks to its coordinates'''
|
||||
|
||||
UpdateSession.open()
|
||||
|
||||
Reference ( cell
|
||||
, name
|
||||
, DbU_lambda ( x ), DbU_lambda ( y )
|
||||
)
|
||||
|
||||
UpdateSession.close()
|
||||
|
||||
##################
|
||||
## PlaceContact ##
|
||||
##################
|
||||
def pyPlaceContact ( net, layer, x, y, width, height ) :
|
||||
'''This function creates a contact'''
|
||||
|
||||
UpdateSession.open()
|
||||
|
||||
Contact ( net, layer, DbU_lambda(x), DbU_lambda(y), DbU_lambda(width), DbU_lambda(height) )
|
||||
|
||||
UpdateSession.close()
|
||||
|
||||
##############
|
||||
## PlacePin ##
|
||||
##############
|
||||
def pyPlacePin ( net, direct, placementStatus, layer, x, y, width, height ) :
|
||||
'''This function creates a pin'''
|
||||
|
||||
size = 0
|
||||
for loc in net.getPins():
|
||||
size += 1
|
||||
|
||||
UpdateSession.open()
|
||||
|
||||
Pin ( net, str(net.getName()) + "." + str(size)
|
||||
, direct
|
||||
, placementStatus
|
||||
, layer
|
||||
, DbU_lambda(x), DbU_lambda(y)
|
||||
, DbU_lambda(width), DbU_lambda(height)
|
||||
)
|
||||
|
||||
if ( not net.IsSupply() ) :
|
||||
CRL.createPartRing ( net.getCell(), net.getName() )
|
||||
|
||||
UpdateSession.close()
|
||||
|
||||
##################
|
||||
## PlaceSegment ##
|
||||
##################
|
||||
def pyPlaceSegment ( net, layer, x1, y1, x2, y2, width ) :
|
||||
'''This function creates a segment'''
|
||||
|
||||
UpdateSession.open()
|
||||
|
||||
if x1 == x2 : Vertical ( net, layer, DbU_lambda(x1), DbU_lambda(width), DbU_lambda(y1), DbU_lambda(y2) )
|
||||
elif y1 == y2 : Horizontal ( net, layer, DbU_lambda(y1), DbU_lambda(width), DbU_lambda(x1), DbU_lambda(x2) )
|
||||
|
||||
UpdateSession.close()
|
||||
|
||||
###################
|
||||
## CopyUpSegment ##
|
||||
###################
|
||||
def pyCopyUpSegment ( masterCell, pathname, netname, newnet ) :
|
||||
'''This function copies the segment of an instance in the current cell'''
|
||||
|
||||
## MasterCell ##
|
||||
if pathname != "" :
|
||||
myPath = Path ( masterCell, pathname )
|
||||
transformation = myPath.getTransformation()
|
||||
|
||||
tInst = myPath.getTailInstance()
|
||||
masterCell = tInst.getMasterCell()
|
||||
|
||||
## Net ##
|
||||
myNet = None
|
||||
for el in masterCell.getNets():
|
||||
if str(el.getName()) == netname :
|
||||
myNet = el
|
||||
break
|
||||
|
||||
# Error : if no net found in mastercell
|
||||
if myNet == None :
|
||||
err = "\n[Stratus ERROR] CopyUpSegment : No net found with name " + netname + " in masterCell " + str(masterCell.getName()) + ".\n"
|
||||
raise err
|
||||
|
||||
mySegment = None
|
||||
for mySegment in myNet.getSegments():
|
||||
# Error : copy only of CALU segments
|
||||
if str ( mySegment.getLayer().getName() ) not in ( "CALU1", "CALU2", "CALU3", "CALU4", "CALU5", "CALU6" ) :
|
||||
err = "\n[Stratus ERROR] CopyUpSegment : The segments of net " + netname + " are not of type CALU.\n"
|
||||
raise err
|
||||
|
||||
myLayer = mySegment.getLayer()
|
||||
myWidth = mySegment.getWidth()
|
||||
|
||||
pointSource = mySegment.getSourcePosition()
|
||||
pointTarget = mySegment.getTargetPosition()
|
||||
|
||||
transformation.ApplyOn ( pointSource )
|
||||
transformation.ApplyOn ( pointTarget )
|
||||
|
||||
## Occurrence of the segment ##
|
||||
myOccurrence = Occurrence ( mySegment, myPath )
|
||||
|
||||
if pointSource.getY() == pointTarget.getY() :
|
||||
Horizontal ( newnet, myLayer, pointSource.getY(), myWidth, pointSource.getX(), pointTarget.getX() )
|
||||
elif pointSource.getX() == pointTarget.getX() :
|
||||
Vertical ( newnet, myLayer, pointSource.getX(), myWidth, pointSource.getY(), pointTarget.getY() )
|
||||
|
||||
# Error : if no segment found
|
||||
if not mySegment:
|
||||
err = "\n[Stratus ERROR] CopyUpSegment : No segment found with net " + netname + " in masterCell " + str(masterCell.getName()) + ".\n"
|
||||
raise err
|
||||
|
||||
|
Loading…
Reference in New Issue