From fdd043ca341c908bc7dc2ad62fc9974152e4f740 Mon Sep 17 00:00:00 2001 From: Alan Mishchenko Date: Fri, 21 Sep 2012 22:00:39 -0700 Subject: Upgrading hierarchy timing manager. --- src/misc/tim/timInt.h | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 src/misc/tim/timInt.h (limited to 'src/misc/tim/timInt.h') diff --git a/src/misc/tim/timInt.h b/src/misc/tim/timInt.h new file mode 100644 index 00000000..9d8b7389 --- /dev/null +++ b/src/misc/tim/timInt.h @@ -0,0 +1,151 @@ +/**CFile**************************************************************** + + FileName [timInt.h] + + SystemName [ABC: Logic synthesis and verification system.] + + PackageName [Hierarchy/timing manager.] + + Synopsis [Internal declarations.] + + Author [Alan Mishchenko] + + Affiliation [UC Berkeley] + + Date [Ver. 1.0. Started - April 28, 2007.] + + Revision [$Id: timInt.h,v 1.00 2007/04/28 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#ifndef ABC__aig__tim__timInt_h +#define ABC__aig__tim__timInt_h + + +//////////////////////////////////////////////////////////////////////// +/// INCLUDES /// +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +#include "misc/vec/vec.h" +#include "misc/mem/mem.h" +#include "tim.h" + +//////////////////////////////////////////////////////////////////////// +/// PARAMETERS /// +//////////////////////////////////////////////////////////////////////// + +ABC_NAMESPACE_HEADER_START + +//////////////////////////////////////////////////////////////////////// +/// BASIC TYPES /// +//////////////////////////////////////////////////////////////////////// + +typedef struct Tim_Box_t_ Tim_Box_t; +typedef struct Tim_Obj_t_ Tim_Obj_t; + +// timing manager +struct Tim_Man_t_ +{ + Vec_Ptr_t * vBoxes; // the timing boxes + Vec_Ptr_t * vDelayTables; // pointers to the delay tables + Mem_Flex_t * pMemObj; // memory manager for boxes + int nTravIds; // traversal ID of the manager + int fUseTravId; // enables the use of traversal ID + int nCis; // the number of PIs + int nCos; // the number of POs + Tim_Obj_t * pCis; // timing info for the PIs + Tim_Obj_t * pCos; // timing info for the POs +}; + +// timing box +struct Tim_Box_t_ +{ + int iBox; // the unique ID of this box + int TravId; // traversal ID of this box + int nInputs; // the number of box inputs (POs) + int nOutputs; // the number of box outputs (PIs) + int iDelayTable; // index of the delay table + int Inouts[0]; // the int numbers of PIs and POs +}; + +// timing object +struct Tim_Obj_t_ +{ + int Id; // the ID of this object + int TravId; // traversal ID of this object + int iObj2Box; // mapping of the object into its box + int iObj2Num; // mapping of the object into its number in the box + float timeArr; // arrival time of the object + float timeReq; // required time of the object +}; + +/* + A delay table is a one-dimensional array of floats whose size is: 3 + nInputs * nOutputs. + The first entry is the delay table ID used by the boxes to refer to the table. + The second and third entris are nInputs and nOutputs. + The following entries list the delay numbers for per output, + that is, the first nInputs entries give delay of the first output, etc. +*/ + +//////////////////////////////////////////////////////////////////////// +/// MACRO DEFINITIONS /// +//////////////////////////////////////////////////////////////////////// + +static inline Tim_Obj_t * Tim_ManCi( Tim_Man_t * p, int i ) { assert( i < p->nCis ); return p->pCis + i; } +static inline Tim_Obj_t * Tim_ManCo( Tim_Man_t * p, int i ) { assert( i < p->nCos ); return p->pCos + i; } +static inline Tim_Box_t * Tim_ManBox( Tim_Man_t * p, int i ) { return (Tim_Box_t *)Vec_PtrEntry(p->vBoxes, i); } + +static inline Tim_Box_t * Tim_ManCiBox( Tim_Man_t * p, int i ) { return Tim_ManCi(p,i)->iObj2Box < 0 ? NULL : (Tim_Box_t *)Vec_PtrEntry( p->vBoxes, Tim_ManCi(p,i)->iObj2Box ); } +static inline Tim_Box_t * Tim_ManCoBox( Tim_Man_t * p, int i ) { return Tim_ManCo(p,i)->iObj2Box < 0 ? NULL : (Tim_Box_t *)Vec_PtrEntry( p->vBoxes, Tim_ManCo(p,i)->iObj2Box ); } + +static inline Tim_Obj_t * Tim_ManBoxInput( Tim_Man_t * p, Tim_Box_t * pBox, int i ) { assert( i < pBox->nInputs ); return p->pCos + pBox->Inouts[i]; } +static inline Tim_Obj_t * Tim_ManBoxOutput( Tim_Man_t * p, Tim_Box_t * pBox, int i ) { assert( i < pBox->nOutputs ); return p->pCis + pBox->Inouts[pBox->nInputs+i]; } + +//////////////////////////////////////////////////////////////////////// +/// ITERATORS /// +//////////////////////////////////////////////////////////////////////// + +#define Tim_ManForEachCi( p, pObj, i ) \ + for ( i = 0; (i < (p)->nCis) && ((pObj) = (p)->pCis + i); i++ ) +#define Tim_ManForEachCo( p, pObj, i ) \ + for ( i = 0; (i < (p)->nCos) && ((pObj) = (p)->pCos + i); i++ ) + +#define Tim_ManForEachPi( p, pObj, i ) \ + Tim_ManForEachCi( p, pObj, i ) if ( pObj->iObj2Box >= 0 ) {} else +#define Tim_ManForEachPo( p, pObj, i ) \ + Tim_ManForEachCo( p, pObj, i ) if ( pObj->iObj2Box >= 0 ) {} else + +#define Tim_ManForEachBox( p, pBox, i ) \ + Vec_PtrForEachEntry( Tim_Box_t *, p->vBoxes, pBox, i ) + +#define Tim_ManBoxForEachInput( p, pBox, pObj, i ) \ + for ( i = 0; (i < (pBox)->nInputs) && ((pObj) = Tim_ManBoxInput(p, pBox, i)); i++ ) +#define Tim_ManBoxForEachOutput( p, pBox, pObj, i ) \ + for ( i = 0; (i < (pBox)->nOutputs) && ((pObj) = Tim_ManBoxOutput(p, pBox, i)); i++ ) + +//////////////////////////////////////////////////////////////////////// +/// SEQUENTIAL ITERATORS /// +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +/// FUNCTION DECLARATIONS /// +//////////////////////////////////////////////////////////////////////// + +/*=== time.c ===========================================================*/ + + +ABC_NAMESPACE_HEADER_END + + + +#endif + +//////////////////////////////////////////////////////////////////////// +/// END OF FILE /// +//////////////////////////////////////////////////////////////////////// + -- cgit v1.2.3