Export Cell::flattenNets() & revlevant Cell flags.

This commit is contained in:
Jean-Paul Chaput 2020-12-27 12:21:14 +01:00
parent 49ffe1e1ba
commit b0ae6be652
5 changed files with 59 additions and 11 deletions

View File

@ -646,6 +646,9 @@ namespace Etesian {
_cellsToIds.insert( make_pair(getString(instance->getName()),instanceId) ); _cellsToIds.insert( make_pair(getString(instance->getName()),instanceId) );
_idsToInsts.push_back( instance ); _idsToInsts.push_back( instance );
// cerr << "FIXED id=" << instanceId
// << " " << instance << " size:(" << xsize << " " << ysize
// << ") pos:(" << xpos << " " << ypos << ")" << endl;
++instanceId; ++instanceId;
dots.dot(); dots.dot();
} }
@ -710,8 +713,9 @@ namespace Etesian {
|coloquinte::YFlippable; |coloquinte::YFlippable;
} else { } else {
instances[instanceId].attributes = 0; instances[instanceId].attributes = 0;
//cerr << "FIXED: " << instance << " size:(" << xsize << " " << ysize // cerr << "FIXED id=" << instanceId
// << ") pos:(" << xpos << " " << ypos << ")" << endl; // << " " << instance << " size:(" << xsize << " " << ysize
// << ") pos:(" << xpos << " " << ypos << ")" << endl;
} }
_cellsToIds.insert( make_pair(instanceName,instanceId) ); _cellsToIds.insert( make_pair(instanceName,instanceId) );

View File

@ -137,7 +137,7 @@ void Plug::setNet(Net* net)
if (net != getNet()) { if (net != getNet()) {
if (net and (getCell() != net->getCell())) if (net and (getCell() != net->getCell()))
throw Error( "Plug::setNet(): Can't set Net of plug %s to %s\n" throw Error( "Plug::setNet(): Can't set Net of plug %s to %s\n"
"Net belong to %s instead of %s." "Net belong to %s while plug belong to of %s."
, getString(this).c_str() , getString(this).c_str()
, getString(net).c_str() , getString(net).c_str()
, getString(net->getCell()).c_str() , getString(net->getCell()).c_str()

View File

@ -708,6 +708,39 @@ extern "C" {
} }
static PyObject* PyCell_flattenNets ( PyCell* self, PyObject *args )
{
cdebug_log(20,0) << "PyCell_flattenNets()" << endl;
Instance* instance = NULL;
PyObject* arg0 = NULL;
PyObject* arg1 = NULL;
HTRY
METHOD_HEAD ( "Cell.flattenNets()" )
__cs.init( "Cell.flattenNets" );
if (not PyArg_ParseTuple(args,"O&O&:Cell.flattenNets"
,Converter,&arg0
,Converter,&arg1
)) {
PyErr_SetString( ConstructorError, "Cell.flattenNets(): Takes exactly two parameters." );
return NULL;
}
if (arg0 == Py_None) {
cell->flattenNets( NULL, PyInt_AsLong(arg1) );
} else if (__cs.getObjectIds() == ":ent:int") {
cell->flattenNets( PYINSTANCE_O(arg0), PyInt_AsLong(arg1) );
} else {
string message = "Cell.flattenNets(): Bad type of parameter(s), \"" + __cs.getObjectIds() + "\".";
PyErr_SetString( ConstructorError, message.c_str() );
return NULL;
}
HCATCH
Py_RETURN_NONE;
}
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Attribute Method : "PyCell_destroyPhysical ()" // Attribute Method : "PyCell_destroyPhysical ()"
@ -778,6 +811,7 @@ extern "C" {
, { "setRouted" , (PyCFunction)PyCell_setRouted , METH_VARARGS, "Sets the cell routed status." } , { "setRouted" , (PyCFunction)PyCell_setRouted , METH_VARARGS, "Sets the cell routed status." }
, { "uniquify" , (PyCFunction)PyCell_uniquify , METH_VARARGS, "Uniquify the Cell and it's instances up to <depth>." } , { "uniquify" , (PyCFunction)PyCell_uniquify , METH_VARARGS, "Uniquify the Cell and it's instances up to <depth>." }
, { "getClone" , (PyCFunction)PyCell_getClone , METH_NOARGS , "Return a copy of the Cell (placement only)." } , { "getClone" , (PyCFunction)PyCell_getClone , METH_NOARGS , "Return a copy of the Cell (placement only)." }
, { "flattenNets" , (PyCFunction)PyCell_flattenNets , METH_VARARGS, "Perform a virtual flatten, possibly limited to one instance." }
, { "destroyPhysical" , (PyCFunction)PyCell_destroyPhysical , METH_NOARGS , "Destroy all physical components, including DeepNets (vflatten)." } , { "destroyPhysical" , (PyCFunction)PyCell_destroyPhysical , METH_NOARGS , "Destroy all physical components, including DeepNets (vflatten)." }
, { "destroy" , (PyCFunction)PyCell_destroy , METH_NOARGS , "Destroy associated hurricane object The python object remains." } , { "destroy" , (PyCFunction)PyCell_destroy , METH_NOARGS , "Destroy associated hurricane object The python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */ , {NULL, NULL, 0, NULL} /* sentinel */
@ -804,6 +838,18 @@ extern "C" {
PyTypeInheritedObjectDefinitions(Cell, Entity) PyTypeInheritedObjectDefinitions(Cell, Entity)
extern void PyCell_postModuleInit ()
{
PyObject* constant;
LoadObjectConstant(PyTypeCell.tp_dict,Cell::Flags::NoFlags ,"Flags_NoFlags");
LoadObjectConstant(PyTypeCell.tp_dict,Cell::Flags::BuildRings ,"Flags_BuildRings");
LoadObjectConstant(PyTypeCell.tp_dict,Cell::Flags::BuildClockRings ,"Flags_BuildClockRings");
LoadObjectConstant(PyTypeCell.tp_dict,Cell::Flags::BuildSupplyRings,"Flags_BuildSupplyRings");
LoadObjectConstant(PyTypeCell.tp_dict,Cell::Flags::NoClockFlatten ,"Flags_NoClockFlatten");
}
#endif // End of Shared Library Code Part. #endif // End of Shared Library Code Part.

View File

@ -872,6 +872,7 @@ extern "C" {
PyRoutingPad_postModuleInit(); PyRoutingPad_postModuleInit();
PyNet_postModuleInit(); PyNet_postModuleInit();
PyNetRoutingState_postModuleInit(); PyNetRoutingState_postModuleInit();
PyCell_postModuleInit();
PyInstance_postModuleInit(); PyInstance_postModuleInit();
PyQuery_postModuleInit(); PyQuery_postModuleInit();

View File

@ -1,7 +1,7 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // This file is part of the Coriolis Software.
// Copyright (c) UPMC 2006-2018, All Rights Reserved // Copyright (c) UPMC 2006-2020, All Rights Reserved
// //
// +-----------------------------------------------------------------+ // +-----------------------------------------------------------------+
// | C O R I O L I S | // | C O R I O L I S |
@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+ // +-----------------------------------------------------------------+
#ifndef PY_CELL_H #pragma once
#define PY_CELL_H
#include "hurricane/isobar/PyEntity.h" #include "hurricane/isobar/PyEntity.h"
#include "hurricane/Cell.h" #include "hurricane/Cell.h"
@ -40,8 +38,9 @@ namespace Isobar {
extern PyTypeObject PyTypeCell; extern PyTypeObject PyTypeCell;
extern PyMethodDef PyCell_Methods[]; extern PyMethodDef PyCell_Methods[];
extern PyObject* PyCell_Link ( Hurricane::Cell* object ); extern PyObject* PyCell_Link ( Hurricane::Cell* object );
extern void PyCell_LinkPyType (); extern void PyCell_LinkPyType ();
extern void PyCell_postModuleInit ();
#define IsPyCell(v) ((v)->ob_type == &PyTypeCell) #define IsPyCell(v) ((v)->ob_type == &PyTypeCell)
@ -52,5 +51,3 @@ namespace Isobar {
} // extern "C". } // extern "C".
} // Isobar namespace. } // Isobar namespace.
#endif // PY_CELL_H