157 if ( Rise == 0.0 && Fall == 0.0 )
166 if ( Rise == 0.0 && Fall == 0.0 )
229 if ( Rise == 0.0 && Fall == 0.0 )
245 if ( Rise == 0.0 && Fall == 0.0 )
343 pTime = ppTimes[pObj->
Id];
352 pTime = ppTimes[pObj->
Id];
361 pTime = ppTimes[pObj->
Id];
395 pTime = ppTimes[pObj->
Id];
400 pTime = ppTimes[pObj->
Id];
407 pTime = ppTimes[pObj->
Id];
412 pTime = ppTimes[pObj->
Id];
501 *ppTimesNew[
Abc_NtkCi(pNtkNew,i)->
Id ] = *ppTimesOld[ pObj->
Id ];
506 *ppTimesNew[
Abc_NtkCo(pNtkNew,i)->
Id ] = *ppTimesOld[ pObj->
Id ];
537 int nSizeOld, nSizeNew, i;
539 nSizeOld = p->
vArrs->nSize;
540 if ( nSizeOld >= nSize )
542 nSizeNew = fProgressive? 2 * nSize : nSize;
543 if ( nSizeNew < 100 )
548 vTimes->nSize = nSizeNew;
549 ppTimesOld = ( nSizeOld == 0 )? NULL : (
Abc_Time_t *)vTimes->pArray[0];
551 for ( i = 0; i < nSizeNew; i++ )
552 vTimes->pArray[i] = ppTimes + i;
553 for ( i = nSizeOld; i < nSizeNew; i++ )
562 vTimes->nSize = nSizeNew;
563 ppTimesOld = ( nSizeOld == 0 )? NULL : (
Abc_Time_t *)vTimes->pArray[0];
565 for ( i = 0; i < nSizeNew; i++ )
566 vTimes->pArray[i] = ppTimes + i;
567 for ( i = nSizeOld; i < nSizeNew; i++ )
603 pNodeNew = pNodeOld->
pCopy;
762 return (pLeaf == NULL || pLeaf == pNode);
780 if ( pFaninBest != NULL )
782 return (pFaninBest != NULL);
823 float tDelayBlockRise, tDelayBlockFall;
835 *pTimeOut = *pTimeIn;
850 if ( pTimeOut->
Rise < pTimeIn->
Rise + tDelayBlockRise )
851 pTimeOut->
Rise = pTimeIn->
Rise + tDelayBlockRise;
852 if ( pTimeOut->
Fall < pTimeIn->
Fall + tDelayBlockFall )
853 pTimeOut->
Fall = pTimeIn->
Fall + tDelayBlockFall;
857 if ( pTimeOut->
Rise < pTimeIn->
Fall + tDelayBlockRise )
858 pTimeOut->
Rise = pTimeIn->
Fall + tDelayBlockRise;
859 if ( pTimeOut->
Fall < pTimeIn->
Rise + tDelayBlockFall )
860 pTimeOut->
Fall = pTimeIn->
Rise + tDelayBlockFall;
933 if ( pOut || pIn || fPrint )
954 if ( fPrint && pOut == NULL )
975 printf(
"The logic cone of PO \"%s\" has no primary inputs.\n",
Abc_ObjName(pOut) );
977 printf(
"There is no combinational path between PI \"%s\" and PO \"%s\".\n",
Abc_ObjName(pIn),
Abc_ObjName(pOut) );
981 float Slack = 0.0, SlackAdd;
982 int k, iFanin, Length = 0;
1002 printf(
"Primary input \"%s\". ",
Abc_ObjName(pNode) );
1009 printf(
"Primary output \"%s\". ",
Abc_ObjName(pNode) );
1024 printf(
"I/O times: (" );
1033 printf(
"Primary output \"%s\". ",
Abc_ObjName(pOut) );
1035 printf(
"Path slack = %6.1f.\n", SlackAdd );
1081 int i, LevelCur, Level = 0;
1213 int LevelOld, Lev, k, m;
1265 int LevelOld, LevFanin, Lev, k, m;
1281 assert( LevelOld == Lev );
1292 assert( LevFanin >= Lev );
static unsigned Abc_ObjId(Abc_Obj_t *pObj)
Abc_Time_t * Abc_NtkReadDefaultOutputLoad(Abc_Ntk_t *pNtk)
Abc_Time_t * Abc_NtkReadDefaultRequired(Abc_Ntk_t *pNtk)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Abc_Time_t * Abc_NodeReadRequired(Abc_Obj_t *pNode)
ABC_DLL void * Abc_FrameReadLibGen()
static float Abc_MinFloat(float a, float b)
static void Vec_VecPush(Vec_Vec_t *p, int Level, void *Entry)
static int Abc_ObjIsCi(Abc_Obj_t *pObj)
static float Abc_NtkDelayTraceSlack(Vec_Int_t *vSlacks, Abc_Obj_t *pObj, int iFanin)
void Abc_NtkUpdateReverseLevel(Abc_Obj_t *pObjNew, Vec_Vec_t *vLevels)
static int Abc_NtkObjNumMax(Abc_Ntk_t *pNtk)
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
void Abc_NtkStartReverseLevels(Abc_Ntk_t *pNtk, int nMaxLevelIncrease)
int Abc_ObjReverseLevel(Abc_Obj_t *pObj)
static float Abc_AbsFloat(float a)
void Abc_NtkTimeSetOutputLoad(Abc_Ntk_t *pNtk, int PoNum, float Rise, float Fall)
float Abc_NtkDelayTrace(Abc_Ntk_t *pNtk, Abc_Obj_t *pOut, Abc_Obj_t *pIn, int fPrint)
static void Vec_IntFillExtra(Vec_Int_t *p, int nSize, int Fill)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Mio_Pin_t * Mio_GateReadPins(Mio_Gate_t *pGate)
#define ABC_REALLOC(type, obj, num)
static void Vec_PtrGrow(Vec_Ptr_t *p, int nCapMin)
int Abc_ObjLevelNew(Abc_Obj_t *pObj)
#define Abc_NtkForEachLatchOutput(pNtk, pObj, i)
ABC_DLL int Abc_NodeFindFanin(Abc_Obj_t *pNode, Abc_Obj_t *pFanin)
char * Mio_GateReadPinName(Mio_Gate_t *pGate, int iPin)
double Mio_PinReadDelayBlockFall(Mio_Pin_t *pPin)
void Abc_NtkTimeInitialize(Abc_Ntk_t *pNtk, Abc_Ntk_t *pNtkOld)
Mio_PinPhase_t
INCLUDES ///.
static int Abc_ObjFaninNum(Abc_Obj_t *pObj)
void Abc_NtkDelayTraceCritPathCollect_rec(Vec_Int_t *vSlacks, Abc_Obj_t *pNode, Vec_Int_t *vBest, Vec_Ptr_t *vPath)
static int Abc_ObjIsBarBuf(Abc_Obj_t *pObj)
float Abc_NodeReadRequiredAve(Abc_Obj_t *pNode)
void Abc_ObjSetReverseLevel(Abc_Obj_t *pObj, int LevelR)
float Mio_LibraryReadDelayNand2Max(Mio_Library_t *pLib)
static int Abc_NtkLatchNum(Abc_Ntk_t *pNtk)
static void Abc_NtkDelayTraceSetSlack(Vec_Int_t *vSlacks, Abc_Obj_t *pObj, int iFanin, float Num)
static void Vec_PtrPush(Vec_Ptr_t *p, void *Entry)
static int Abc_NtkCiNum(Abc_Ntk_t *pNtk)
#define ABC_ALLOC(type, num)
#define Abc_NtkForEachCo(pNtk, pCo, i)
static Abc_Obj_t * Abc_NtkCi(Abc_Ntk_t *pNtk, int i)
void Abc_NtkUpdate(Abc_Obj_t *pObj, Abc_Obj_t *pObjNew, Vec_Vec_t *vLevels)
ABC_DLL Vec_Ptr_t * Abc_NtkDfs(Abc_Ntk_t *pNtk, int fCollectAll)
static int Abc_MaxInt(int a, int b)
Mio_Pin_t * Mio_PinReadNext(Mio_Pin_t *pPin)
static int Vec_PtrSize(Vec_Ptr_t *p)
ABC_DLL int Abc_NtkGetTotalFanins(Abc_Ntk_t *pNtk)
static Vec_Int_t * Vec_IntStartFull(int nSize)
static void Abc_ObjSetLevel(Abc_Obj_t *pObj, int Level)
static Abc_Obj_t * Abc_ObjFanin0(Abc_Obj_t *pObj)
static float Abc_MaxFloat(float a, float b)
for(p=first;p->value< newval;p=p->next)
static int Abc_NtkCoNum(Abc_Ntk_t *pNtk)
static int Abc_ObjIsCo(Abc_Obj_t *pObj)
ABC_DLL Vec_Ptr_t * Abc_NtkDfsReverse(Abc_Ntk_t *pNtk)
static Abc_Obj_t * Abc_NtkCo(Abc_Ntk_t *pNtk, int i)
static void Vec_VecClear(Vec_Vec_t *p)
Abc_Time_t * Abc_NodeReadOutputLoad(Abc_Ntk_t *pNtk, int iPo)
static void Abc_ManTimeExpand(Abc_ManTime_t *p, int nSize, int fProgressive)
Mio_Gate_t * Mio_LibraryReadNand2(Mio_Library_t *pLib)
static void Vec_IntWriteEntry(Vec_Int_t *p, int i, int Entry)
static int Abc_ObjIsNode(Abc_Obj_t *pObj)
Abc_Time_t * Abc_NtkReadDefaultArrival(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
static int Abc_Float2Int(float Val)
int Abc_ObjReverseLevelNew(Abc_Obj_t *pObj)
static Vec_Int_t * Vec_IntAlloc(int nCap)
FUNCTION DEFINITIONS ///.
void Abc_NtkTimeSetDefaultRequired(Abc_Ntk_t *pNtk, float Rise, float Fall)
float Abc_NodeReadArrivalWorst(Abc_Obj_t *pNode)
float Abc_NodeReadInputDriveWorst(Abc_Ntk_t *pNtk, int iPi)
void Abc_NtkTimeSetArrival(Abc_Ntk_t *pNtk, int ObjId, float Rise, float Fall)
Abc_Time_t * Abc_NtkGetCoRequiredTimes(Abc_Ntk_t *pNtk)
static int Abc_ObjLevel(Abc_Obj_t *pObj)
float Abc_NodeReadRequiredWorst(Abc_Obj_t *pNode)
static int Vec_IntEntry(Vec_Int_t *p, int i)
#define ABC_NAMESPACE_IMPL_END
static void Vec_IntFill(Vec_Int_t *p, int nSize, int Fill)
ABC_DLL void Abc_ObjReplace(Abc_Obj_t *pObjOld, Abc_Obj_t *pObjNew)
int Abc_NtkDelayTraceCritPath_rec(Vec_Int_t *vSlacks, Abc_Obj_t *pNode, Abc_Obj_t *pLeaf, Vec_Int_t *vBest)
STRUCTURE DEFINITIONS ///.
static void Vec_IntPush(Vec_Int_t *p, int Entry)
void Abc_ManTimeDup(Abc_Ntk_t *pNtkOld, Abc_Ntk_t *pNtkNew)
int Abc_ObjRequiredLevel(Abc_Obj_t *pObj)
float * Abc_NtkGetCoRequiredFloats(Abc_Ntk_t *pNtk)
static void Vec_IntFreeP(Vec_Int_t **p)
void Abc_NtkStopReverseLevels(Abc_Ntk_t *pNtk)
void Abc_NodeDelayTraceArrival(Abc_Obj_t *pNode, Vec_Int_t *vSlacks)
#define Vec_VecForEachEntryStart(Type, vGlob, pEntry, i, k, LevelStart)
#define Abc_NtkForEachNode(pNtk, pNode, i)
void Abc_NtkTimeSetInputDrive(Abc_Ntk_t *pNtk, int PiNum, float Rise, float Fall)
Vec_Int_t * Abc_NtkDelayTraceSlackStart(Abc_Ntk_t *pNtk)
float Abc_NodeReadArrivalAve(Abc_Obj_t *pNode)
#define ABC_NAMESPACE_IMPL_START
static void * Vec_PtrEntry(Vec_Ptr_t *p, int i)
static int Abc_NodeIsTravIdCurrent(Abc_Obj_t *p)
Abc_Time_t * Abc_NtkGetCiArrivalTimes(Abc_Ntk_t *pNtk)
static int Abc_NtkIsMappedLogic(Abc_Ntk_t *pNtk)
Abc_Time_t * Abc_NodeReadInputDrive(Abc_Ntk_t *pNtk, int iPi)
static int Vec_IntSize(Vec_Int_t *p)
void Abc_NtkUpdateLevel(Abc_Obj_t *pObjNew, Vec_Vec_t *vLevels)
#define Abc_ObjForEachFanout(pObj, pFanout, i)
#define Abc_NtkForEachCi(pNtk, pCi, i)
static Vec_Ptr_t * Vec_PtrAlloc(int nCap)
FUNCTION DEFINITIONS ///.
void Abc_NtkTimePrepare(Abc_Ntk_t *pNtk)
static Abc_ManTime_t * Abc_ManTimeStart(Abc_Ntk_t *pNtk)
void Abc_ManTimeStop(Abc_ManTime_t *p)
void Abc_NtkTimeSetDefaultOutputLoad(Abc_Ntk_t *pNtk, float Rise, float Fall)
#define Abc_ObjForEachFanin(pObj, pFanin, i)
Abc_Time_t * Abc_NtkReadDefaultInputDrive(Abc_Ntk_t *pNtk)
ABC_DLL char * Abc_ObjName(Abc_Obj_t *pNode)
DECLARATIONS ///.
static void Abc_NtkIncrementTravId(Abc_Ntk_t *p)
Mio_PinPhase_t Mio_PinReadPhase(Mio_Pin_t *pPin)
#define ABC_CALLOC(type, num)
double Mio_PinReadDelayBlockRise(Mio_Pin_t *pPin)
static float Abc_Int2Float(int Num)
void Abc_NtkTimeSetRequired(Abc_Ntk_t *pNtk, int ObjId, float Rise, float Fall)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
void Abc_NtkTimeSetDefaultInputDrive(Abc_Ntk_t *pNtk, float Rise, float Fall)
static Abc_Time_t * Abc_NodeArrival(Abc_Obj_t *pNode)
static Abc_Obj_t * Abc_ObjFanin(Abc_Obj_t *pObj, int i)
static void Vec_IntFree(Vec_Int_t *p)
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
ABC_DLL int Abc_NtkLevel(Abc_Ntk_t *pNtk)
Abc_Time_t * Abc_NodeReadArrival(Abc_Obj_t *pNode)
char * Mio_GateReadName(Mio_Gate_t *pGate)
void Abc_NtkTimeSetDefaultArrival(Abc_Ntk_t *pNtk, float Rise, float Fall)
static void Abc_NodeSetTravIdCurrent(Abc_Obj_t *p)
static void Vec_PtrFree(Vec_Ptr_t *p)
float * Abc_NtkGetCiArrivalFloats(Abc_Ntk_t *pNtk)
void Abc_NtkSetNodeLevelsArrival(Abc_Ntk_t *pNtkOld)
static Abc_Time_t * Abc_NodeRequired(Abc_Obj_t *pNode)
float Abc_NodeReadOutputLoadWorst(Abc_Ntk_t *pNtk, int iPo)