mirror of https://github.com/YosysHQ/abc.git
Changing 'if' to allow for delay optimization on sequential paths only.
This commit is contained in:
parent
c6af9094c0
commit
77b83074e0
|
|
@ -129,8 +129,10 @@ struct If_Par_t_
|
||||||
int fUseCnfs; // use local CNFs as a cost function
|
int fUseCnfs; // use local CNFs as a cost function
|
||||||
int fUseMv; // use local MV-SOPs as a cost function
|
int fUseMv; // use local MV-SOPs as a cost function
|
||||||
int fUseAdders; // timing model for adders
|
int fUseAdders; // timing model for adders
|
||||||
int nLatchesCi; // the number of latches in seq mapping
|
int nLatchesCi; // the number of latches among the CIs
|
||||||
int nLatchesCo; // the number of latches in seq mapping
|
int nLatchesCo; // the number of latches among the COs
|
||||||
|
int nLatchesCiBox; // the number of white box outputs among the CIs
|
||||||
|
int nLatchesCoBox; // the number of white box inputs among the COs
|
||||||
int fLiftLeaves; // shift the leaves for seq mapping
|
int fLiftLeaves; // shift the leaves for seq mapping
|
||||||
int fUseCoAttrs; // use CO attributes
|
int fUseCoAttrs; // use CO attributes
|
||||||
If_Lib_t * pLutLib; // the LUT library
|
If_Lib_t * pLutLib; // the LUT library
|
||||||
|
|
@ -381,15 +383,15 @@ static inline void If_AndClear( If_And_t * pNode ) { *
|
||||||
Vec_PtrForEachEntry( If_Obj_t *, p->vCos, pObj, i )
|
Vec_PtrForEachEntry( If_Obj_t *, p->vCos, pObj, i )
|
||||||
// iterator over the primary inputs
|
// iterator over the primary inputs
|
||||||
#define If_ManForEachPi( p, pObj, i ) \
|
#define If_ManForEachPi( p, pObj, i ) \
|
||||||
Vec_PtrForEachEntryStop( If_Obj_t *, p->vCis, pObj, i, If_ManCiNum(p) - p->pPars->nLatchesCi )
|
Vec_PtrForEachEntryStop( If_Obj_t *, p->vCis, pObj, i, If_ManCiNum(p) - p->pPars->nLatchesCi - p->pPars->nLatchesCiBox )
|
||||||
// iterator over the primary outputs
|
// iterator over the primary outputs
|
||||||
#define If_ManForEachPo( p, pObj, i ) \
|
#define If_ManForEachPo( p, pObj, i ) \
|
||||||
Vec_PtrForEachEntryStop( If_Obj_t *, p->vCos, pObj, i, If_ManCoNum(p) - p->pPars->nLatchesCo )
|
Vec_PtrForEachEntryStartStop( If_Obj_t *, p->vCos, pObj, i, p->pPars->nLatchesCoBox, If_ManCoNum(p) - p->pPars->nLatchesCo )
|
||||||
// iterator over the latches
|
// iterator over the latches
|
||||||
#define If_ManForEachLatchInput( p, pObj, i ) \
|
#define If_ManForEachLatchInput( p, pObj, i ) \
|
||||||
Vec_PtrForEachEntryStart( If_Obj_t *, p->vCos, pObj, i, If_ManCoNum(p) - p->pPars->nLatchesCo )
|
Vec_PtrForEachEntryStart( If_Obj_t *, p->vCos, pObj, i, If_ManCoNum(p) - p->pPars->nLatchesCo )
|
||||||
#define If_ManForEachLatchOutput( p, pObj, i ) \
|
#define If_ManForEachLatchOutput( p, pObj, i ) \
|
||||||
Vec_PtrForEachEntryStart( If_Obj_t *, p->vCis, pObj, i, If_ManCiNum(p) - p->pPars->nLatchesCi )
|
Vec_PtrForEachEntryStartStop( If_Obj_t *, p->vCis, pObj, i, If_ManCiNum(p) - p->pPars->nLatchesCi - p->pPars->nLatchesCiBox, If_ManCiNum(p) - p->pPars->nLatchesCiBox )
|
||||||
// iterator over all objects in topological order
|
// iterator over all objects in topological order
|
||||||
#define If_ManForEachObj( p, pObj, i ) \
|
#define If_ManForEachObj( p, pObj, i ) \
|
||||||
Vec_PtrForEachEntry( If_Obj_t *, p->vObjs, pObj, i )
|
Vec_PtrForEachEntry( If_Obj_t *, p->vObjs, pObj, i )
|
||||||
|
|
|
||||||
|
|
@ -279,11 +279,10 @@ void If_ManComputeRequired( If_Man_t * p )
|
||||||
}
|
}
|
||||||
else if ( p->pPars->fLatchPaths )
|
else if ( p->pPars->fLatchPaths )
|
||||||
{
|
{
|
||||||
assert( 0 );
|
|
||||||
If_ManForEachPo( p, pObj, i )
|
If_ManForEachPo( p, pObj, i )
|
||||||
Tim_ManSetCoRequired( p->pManTim, pObj->IdPio, IF_FLOAT_LARGE );
|
Tim_ManSetCoRequired( p->pManTim, i, IF_FLOAT_LARGE );
|
||||||
If_ManForEachLatchInput( p, pObj, i )
|
If_ManForEachLatchInput( p, pObj, i )
|
||||||
Tim_ManSetCoRequired( p->pManTim, pObj->IdPio, p->RequiredGlo );
|
Tim_ManSetCoRequired( p->pManTim, i, p->RequiredGlo );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue