summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2013-09-17 23:00:59 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2013-09-17 23:00:59 -0700
commit3d8dc1217c3634963e36f793d475cb73622d8719 (patch)
treee3daf46c273ebc5a4005716f805213ab4b8245a1
parentefa6b54b5ed1549a39495a89db57c1189f4e5a93 (diff)
downloadabc-3d8dc1217c3634963e36f793d475cb73622d8719.tar.gz
abc-3d8dc1217c3634963e36f793d475cb73622d8719.tar.bz2
abc-3d8dc1217c3634963e36f793d475cb73622d8719.zip
Integrating input driving cell constraint into buffering/sizing.
-rw-r--r--src/map/scl/sclDnsize.c3
-rw-r--r--src/map/scl/sclSize.c21
-rw-r--r--src/map/scl/sclSize.h2
-rw-r--r--src/map/scl/sclUpsize.c3
4 files changed, 26 insertions, 3 deletions
diff --git a/src/map/scl/sclDnsize.c b/src/map/scl/sclDnsize.c
index 4bc21d28..b81b640f 100644
--- a/src/map/scl/sclDnsize.c
+++ b/src/map/scl/sclDnsize.c
@@ -53,7 +53,8 @@ void Abc_SclFindWindow( Abc_Obj_t * pPivot, Vec_Int_t ** pvNodes, Vec_Int_t ** p
// collect fanins, node, and fanouts
Vec_IntClear( vNodes );
Abc_ObjForEachFanin( pPivot, pNext, i )
- if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
+// if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
+ if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) > 0 )
Vec_IntPush( vNodes, Abc_ObjId(pNext) );
Vec_IntPush( vNodes, Abc_ObjId(pPivot) );
Abc_ObjForEachFanout( pPivot, pNext, i )
diff --git a/src/map/scl/sclSize.c b/src/map/scl/sclSize.c
index 0cc282a9..33b7474a 100644
--- a/src/map/scl/sclSize.c
+++ b/src/map/scl/sclSize.c
@@ -225,6 +225,16 @@ static inline float Abc_SclObjLoadValue( SC_Man * p, Abc_Obj_t * pObj )
// float Value = Abc_MaxFloat(pLoad->fall, pLoad->rise) / (p->EstLoadAve * p->EstLoadMax);
return (0.5 * Abc_SclObjLoad(p, pObj)->fall + 0.5 * Abc_SclObjLoad(p, pObj)->rise) / (p->EstLoadAve * p->EstLoadMax);
}
+static inline void Abc_SclTimeCi( SC_Man * p, Abc_Obj_t * pObj )
+{
+ if ( p->pPiDrive != NULL )
+ {
+ SC_Pair * pLoad = Abc_SclObjLoad( p, pObj );
+ SC_Pair * pTime = Abc_SclObjTime( p, pObj );
+ SC_Pair * pSlew = Abc_SclObjSlew( p, pObj );
+ Scl_LibHandleInputDriver( p->pPiDrive, pLoad, pTime, pSlew );
+ }
+}
void Abc_SclTimeNode( SC_Man * p, Abc_Obj_t * pObj, int fDept )
{
SC_Timing * pTime;
@@ -237,6 +247,12 @@ void Abc_SclTimeNode( SC_Man * p, Abc_Obj_t * pObj, int fDept )
float DeptFall = 0;
float Value = p->EstLoadMax ? Abc_SclObjLoadValue( p, pObj ) : 0;
Abc_Obj_t * pFanin;
+ if ( Abc_ObjIsCi(pObj) )
+ {
+ assert( !fDept );
+ Abc_SclTimeCi( p, pObj );
+ return;
+ }
if ( Abc_ObjIsCo(pObj) )
{
if ( !fDept )
@@ -319,6 +335,8 @@ void Abc_SclTimeNtkRecompute( SC_Man * p, float * pArea, float * pDelay, int fRe
Abc_SclComputeLoad( p );
Abc_SclManCleanTime( p );
p->nEstNodes = 0;
+ Abc_NtkForEachCi( p->pNtk, pObj, i )
+ Abc_SclTimeNode( p, pObj, 0 );
Abc_NtkForEachNode1( p->pNtk, pObj, i )
Abc_SclTimeNode( p, pObj, 0 );
Abc_NtkForEachCo( p->pNtk, pObj, i )
@@ -376,7 +394,8 @@ static inline void Abc_SclTimeIncAddFanins( SC_Man * p, Abc_Obj_t * pObj )
Abc_Obj_t * pFanin;
int i;
Abc_ObjForEachFanin( pObj, pFanin, i )
- if ( !pFanin->fMarkC && Abc_ObjIsNode(pFanin) )
+// if ( !pFanin->fMarkC && Abc_ObjIsNode(pFanin) )
+ if ( !pFanin->fMarkC )
Abc_SclTimeIncAddNode( p, pFanin );
}
static inline void Abc_SclTimeIncAddFanouts( SC_Man * p, Abc_Obj_t * pObj )
diff --git a/src/map/scl/sclSize.h b/src/map/scl/sclSize.h
index 86008e54..cee260ab 100644
--- a/src/map/scl/sclSize.h
+++ b/src/map/scl/sclSize.h
@@ -256,6 +256,7 @@ static inline void Abc_SclManCleanTime( SC_Man * p )
memset( p->pTimes, 0, sizeof(SC_Pair) * p->nObjs );
memset( p->pSlews, 0, sizeof(SC_Pair) * p->nObjs );
memset( p->pDepts, 0, sizeof(SC_Pair) * p->nObjs );
+/*
if ( p->pPiDrive != NULL )
{
SC_Pair * pSlew, * pTime, * pLoad;
@@ -269,6 +270,7 @@ static inline void Abc_SclManCleanTime( SC_Man * p )
Scl_LibHandleInputDriver( p->pPiDrive, pLoad, pTime, pSlew );
}
}
+*/
}
diff --git a/src/map/scl/sclUpsize.c b/src/map/scl/sclUpsize.c
index 09eadfa0..d7196216 100644
--- a/src/map/scl/sclUpsize.c
+++ b/src/map/scl/sclUpsize.c
@@ -222,7 +222,8 @@ void Abc_SclFindNodesToUpdate( Abc_Obj_t * pPivot, Vec_Int_t ** pvNodes, Vec_Int
// collect fanins, node, and fanouts
Vec_IntClear( vNodes );
Abc_ObjForEachFanin( pPivot, pNext, i )
- if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
+// if ( Abc_ObjIsNode(pNext) && Abc_ObjFaninNum(pNext) > 0 )
+ if ( Abc_ObjIsCi(pNext) || Abc_ObjFaninNum(pNext) > 0 )
Vec_IntPush( vNodes, Abc_ObjId(pNext) );
Vec_IntPush( vNodes, Abc_ObjId(pPivot) );
if ( pExtra )