diff options
Diffstat (limited to 'src/base/cba/cba.h')
-rw-r--r-- | src/base/cba/cba.h | 250 |
1 files changed, 133 insertions, 117 deletions
diff --git a/src/base/cba/cba.h b/src/base/cba/cba.h index c0e0d91d..0086d031 100644 --- a/src/base/cba/cba.h +++ b/src/base/cba/cba.h @@ -42,112 +42,111 @@ ABC_NAMESPACE_HEADER_START // network objects typedef enum { - CBA_OBJ_NONE = 0, // 0: unused - CBA_OBJ_PI, // 1: input - CBA_OBJ_PO, // 2: output - CBA_OBJ_BOX, // 3: box - - CBA_BOX_SLICE, - CBA_BOX_CATIN, - CBA_BOX_CATOUT, - - CBA_BOX_CF, - CBA_BOX_CT, - CBA_BOX_CX, - CBA_BOX_CZ, - - CBA_BOX_BUF, - CBA_BOX_INV, - CBA_BOX_AND, - CBA_BOX_NAND, - CBA_BOX_OR, - CBA_BOX_NOR, - CBA_BOX_XOR, - CBA_BOX_XNOR, - CBA_BOX_SHARP, - CBA_BOX_SHARPL, - CBA_BOX_MUX, - CBA_BOX_MAJ, - - CBA_BOX_ABC, - CBA_BOX_BA, - CBA_BOX_BO, - CBA_BOX_BX, - CBA_BOX_BN, - CBA_BOX_BAO, - CBA_BOX_BOA, - - CBA_BOX_RAND, - CBA_BOX_RNAND, - CBA_BOX_ROR, - CBA_BOX_RNOR, - CBA_BOX_RXOR, - CBA_BOX_RXNOR, - - CBA_BOX_LNOT, - CBA_BOX_LAND, - CBA_BOX_LNAND, - CBA_BOX_LOR, - CBA_BOX_LNOR, - CBA_BOX_LXOR, - CBA_BOX_LXNOR, - - CBA_BOX_NMUX, - CBA_BOX_SEL, - CBA_BOX_PSEL, - CBA_BOX_ENC, - CBA_BOX_PENC, - CBA_BOX_DEC, - CBA_BOX_EDEC, - - CBA_BOX_ADD, - CBA_BOX_SUB, - CBA_BOX_MUL, - CBA_BOX_SMUL, - CBA_BOX_DIV, - CBA_BOX_MOD, - CBA_BOX_REM, - CBA_BOX_POW, - CBA_BOX_MIN, - CBA_BOX_SQRT, - CBA_BOX_ABS, - - CBA_BOX_SLTHAN, - CBA_BOX_LTHAN, - CBA_BOX_LETHAN, - CBA_BOX_METHAN, - CBA_BOX_MTHAN, - CBA_BOX_EQU, - CBA_BOX_NEQU, - - CBA_BOX_SHIL, - CBA_BOX_SHIR, - CBA_BOX_SHILA, - CBA_BOX_SHIRA, - CBA_BOX_ROTL, - CBA_BOX_ROTR, - - CBA_BOX_NODE, - CBA_BOX_LUT, - CBA_BOX_GATE, - CBA_BOX_ASSIGN, - - CBA_BOX_TRI, - CBA_BOX_RAM, - CBA_BOX_RAMR, - CBA_BOX_RAMW, - CBA_BOX_RAMWC, - CBA_BOX_RAML, - CBA_BOX_RAMS, - CBA_BOX_RAMBOX, - - CBA_BOX_LATCH, - CBA_BOX_LATCHRS, - CBA_BOX_DFF, - CBA_BOX_DFFCPL, - CBA_BOX_DFFRS, - - CBA_BOX_LAST // 67 + CBA_OBJ_NONE = 0, // 00: unused + CBA_OBJ_PI, // 01: input + CBA_OBJ_PO, // 02: output + CBA_OBJ_BOX, // 03: box + + CBA_BOX_CF, // 04: + CBA_BOX_CT, // 05: + CBA_BOX_CX, // 06: + CBA_BOX_CZ, // 07: + + CBA_BOX_BUF, // 08: + CBA_BOX_INV, // 09: + CBA_BOX_AND, // 10: + CBA_BOX_NAND, // 11: + CBA_BOX_OR, // 12: + CBA_BOX_NOR, // 13: + CBA_BOX_XOR, // 14: + CBA_BOX_XNOR, // 15: + CBA_BOX_SHARP, // 16: + CBA_BOX_SHARPL, // 17: + CBA_BOX_MUX, // 18: + CBA_BOX_MAJ, // 19: + + CBA_BOX_ABC, // 20: + CBA_BOX_BA, // 21: + CBA_BOX_BO, // 22: + CBA_BOX_BX, // 23: + CBA_BOX_BN, // 24: + CBA_BOX_BAO, // 25: + CBA_BOX_BOA, // 26: + + CBA_BOX_RAND, // 27: + CBA_BOX_RNAND, // 28: + CBA_BOX_ROR, // 29: + CBA_BOX_RNOR, // 30: + CBA_BOX_RXOR, // 31: + CBA_BOX_RXNOR, // 32: + + CBA_BOX_LNOT, // 33 + CBA_BOX_LAND, // 34: + CBA_BOX_LNAND, // 35: + CBA_BOX_LOR, // 36: + CBA_BOX_LNOR, // 37: + CBA_BOX_LXOR, // 38: + CBA_BOX_LXNOR, // 39: + + CBA_BOX_NMUX, // 40: + CBA_BOX_SEL, // 41: + CBA_BOX_PSEL, // 42: + CBA_BOX_ENC, // 43: + CBA_BOX_PENC, // 44: + CBA_BOX_DEC, // 45: + CBA_BOX_EDEC, // 46: + + CBA_BOX_ADD, // 47: + CBA_BOX_SUB, // 48: + CBA_BOX_MUL, // 49: + CBA_BOX_SMUL, // 50: + CBA_BOX_DIV, // 51: + CBA_BOX_MOD, // 52: + CBA_BOX_REM, // 53: + CBA_BOX_POW, // 54: + CBA_BOX_MIN, // 55: + CBA_BOX_SQRT, // 56: + CBA_BOX_ABS, // 57: + + CBA_BOX_SLTHAN, // 58: + CBA_BOX_LTHAN, // 59: + CBA_BOX_LETHAN, // 60: + CBA_BOX_METHAN, // 61: + CBA_BOX_MTHAN, // 62: + CBA_BOX_EQU, // 63: + CBA_BOX_NEQU, // 64: + + CBA_BOX_SHIL, // 65: + CBA_BOX_SHIR, // 66: + CBA_BOX_SHILA, // 67: + CBA_BOX_SHIRA, // 68: + CBA_BOX_ROTL, // 69: + CBA_BOX_ROTR, // 70: + + CBA_BOX_NODE, // 71: + CBA_BOX_LUT, // 72: + CBA_BOX_GATE, // 73: + CBA_BOX_TABLE, // 74: + + CBA_BOX_TRI, // 75: + CBA_BOX_RAM, // 76: + CBA_BOX_RAMR, // 77: + CBA_BOX_RAMW, // 78: + CBA_BOX_RAMWC, // 79: + CBA_BOX_RAML, // 80: + CBA_BOX_RAMS, // 81: + CBA_BOX_RAMBOX, // 82: + + CBA_BOX_LATCH, // 83: + CBA_BOX_LATCHRS, // 84: + CBA_BOX_DFF, // 85: + CBA_BOX_DFFCPL, // 86: + CBA_BOX_DFFRS, // 87: + + CBA_BOX_SLICE, // 88: + CBA_BOX_CONCAT, // 89: + + CBA_BOX_LAST // 90 } Cba_ObjType_t; @@ -190,6 +189,7 @@ struct Cba_Ntk_t_ Vec_Int_t vFinFon0; // fanout: first fon Vec_Int_t vFinObj; // object Vec_Int_t vNtkObjs; // instances + Vec_Int_t vFonBits; // fon mapping into AIG nodes // other Vec_Ptr_t * vOther; // various data Vec_Int_t vArray0; @@ -211,6 +211,8 @@ struct Cba_Man_t_ Vec_Int_t vUsed; // used map entries Vec_Int_t vUsed2; // used map entries char * pTypeNames[CBA_BOX_LAST]; + int nObjs[CBA_BOX_LAST]; // counter of objects of each type + int nAnds[CBA_BOX_LAST]; // counter of AND gates after blasting // internal data int iRoot; // root network Vec_Ptr_t vNtks; // networks @@ -332,8 +334,7 @@ static inline int Cba_ObjIsBoxUser( Cba_Ntk_t * p, int i ) { r static inline int Cba_ObjIsBoxPrim( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) > CBA_OBJ_BOX && Cba_ObjType(p, i) < CBA_BOX_LAST; } static inline int Cba_ObjIsGate( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_BOX_GATE; } static inline int Cba_ObjIsSlice( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_BOX_SLICE; } -static inline int Cba_ObjIsCatIn( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_BOX_CATIN; } -static inline int Cba_ObjIsCatOut( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_BOX_CATOUT; } +static inline int Cba_ObjIsConcat( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_BOX_CONCAT; } static inline int Cba_ObjIsUnary( Cba_Ntk_t * p, int i ) { return Cba_TypeIsUnary(Cba_ObjType(p, i)); } static inline int Cba_ObjFin0( Cba_Ntk_t * p, int i ) { assert(i>0); return Vec_IntEntry(&p->vObjFin0, i); } @@ -375,16 +376,18 @@ static inline int Cba_FonIsReal( int f ) { r static inline int Cba_FonIsConst( int f ) { return f < 0; } static inline int Cba_FonConst( int f ) { assert(Cba_FonIsConst(f)); return -f-1; } static inline int Cba_FonFromConst( int c ) { assert(c >= 0); return -c-1; } -static inline int Cba_FonConstRange( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsConst(f)); return atoi(Cba_NtkConst(p, Cba_FonConst(f))); } +static inline int Cba_FonConstRangeSize( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsConst(f)); return atoi(Cba_NtkConst(p, Cba_FonConst(f))); } +static inline int Cba_FonConstSigned( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsConst(f)); return strchr(Cba_NtkConst(p, Cba_FonConst(f)), 's') != NULL; } static inline int Cba_FonObj( Cba_Ntk_t * p, int f ) { return Cba_FonIsReal(f) ? Vec_IntEntry(&p->vFonObj, f) : 0; } -static inline int Cba_FonRange( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsReal(f)); return Cba_NtkHasFonRanges(p)?Abc_Lit2Var(Vec_IntGetEntry(&p->vFonRange, f)):0; } -static inline int Cba_FonSigned( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsReal(f)); return Cba_NtkHasFonRanges(p)?Abc_LitIsCompl(Vec_IntGetEntry(&p->vFonRange, f)):0; } +static inline int Cba_FonRangeId( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsReal(f)); return Cba_NtkHasFonRanges(p)?Vec_IntGetEntry(&p->vFonRange, f):0;} +static inline int Cba_FonRange( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsReal(f)); return Abc_Lit2Var( Cba_FonRangeId(p, f) ); } static inline int Cba_FonLeft( Cba_Ntk_t * p, int f ) { return Cba_NtkRangeLeft(p, Cba_FonRange(p, f)); } static inline int Cba_FonRight( Cba_Ntk_t * p, int f ) { return Cba_NtkRangeRight(p, Cba_FonRange(p, f)); } -static inline int Cba_FonRangeSize( Cba_Ntk_t * p, int f ) { return Cba_FonIsConst(f) ? Cba_FonConstRange(p, f):Cba_NtkRangeSize(p, Cba_FonRange(p, f)); } +static inline int Cba_FonSigned( Cba_Ntk_t * p, int f ) { return Cba_FonIsConst(f) ? Cba_FonConstSigned(p, f) : Abc_LitIsCompl(Cba_FonRangeId(p, f)); } +static inline int Cba_FonRangeSize( Cba_Ntk_t * p, int f ) { return Cba_FonIsConst(f) ? Cba_FonConstRangeSize(p, f):Cba_NtkRangeSize(p, Cba_FonRange(p, f)); } static inline void Cba_FonSetRangeSign( Cba_Ntk_t * p, int f, int x ) { assert(Cba_NtkHasFonRanges(p)); Vec_IntSetEntry(&p->vFonRange, f, x); } -static inline void Cba_FonSetRange( Cba_Ntk_t * p, int f, int x ) { assert(Cba_NtkHasFonRanges(p)); Vec_IntSetEntry(&p->vFonRange, Abc_Var2Lit(f,0), x); } +static inline void Cba_FonSetRange( Cba_Ntk_t * p, int f, int x ) { assert(Cba_NtkHasFonRanges(p)); Vec_IntSetEntry(&p->vFonRange, f, Abc_Var2Lit(x,0)); } static inline void Cba_FonHashRange( Cba_Ntk_t * p, int f, int l, int r ) { Cba_FonSetRange( p, f, Cba_NtkHashRange(p, l, r) ); } static inline int Cba_FonCopy( Cba_Ntk_t * p, int f ) { return Cba_FonIsReal(f) ? Vec_IntEntry(&p->vFonCopy, f) : f; } static inline void Cba_FonSetCopy( Cba_Ntk_t * p, int f, int x ) { assert(Cba_FonIsReal(f)); assert(Cba_FonCopy(p, f) == 0); Vec_IntWriteEntry(&p->vFonCopy, f, x); } @@ -398,6 +401,11 @@ static inline int Cba_FonNtkId( Cba_Ntk_t * p, int f ) { a static inline Cba_Ntk_t * Cba_FonNtk( Cba_Ntk_t * p, int f ) { assert(Cba_FonIsReal(f)); return Cba_ObjNtk( p, Cba_FonObj(p, f) ); } static inline int Cba_ObjFanin( Cba_Ntk_t * p, int i, int k ) { assert(i>0); return Cba_FonObj( p, Cba_ObjFinFon(p, i, k) ); } +static inline int Cba_ObjLeft( Cba_Ntk_t * p, int i ) { return Cba_FonLeft( p, Cba_ObjFon0(p, i) ); } +static inline int Cba_ObjRight( Cba_Ntk_t * p, int i ) { return Cba_FonRight( p, Cba_ObjFon0(p, i) ); } +static inline int Cba_ObjRangeSize( Cba_Ntk_t * p, int i ) { return Cba_FonRangeSize( p, Cba_ObjFon0(p, i) ); } +static inline int Cba_ObjSigned( Cba_Ntk_t * p, int i ) { return Cba_FonSigned( p, Cba_ObjFon0(p, i) ); } +static inline int Cba_ObjSign( Cba_Ntk_t * p, int i ) { return Abc_Var2Lit( Cba_FonRangeSize(p, i), Cba_ObjSigned(p, i) ); } //////////////////////////////////////////////////////////////////////// /// ITERATORS /// @@ -435,10 +443,12 @@ static inline int Cba_ObjFanin( Cba_Ntk_t * p, int i, int k ) { a #define Cba_NtkForEachBoxPrim( p, i ) \ for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjIsBoxPrim(p, i) ) {} else +#define Cba_NtkForEachFon( p, i ) \ + for ( i = 1; i < Vec_IntSize(&p->vFonObj); i++ ) #define Cba_NtkForEachFinFon( p, iFon, iFin ) \ - for ( iFin = 0; iFin < Vec_IntSize(&p->vFinFon) && (((iFon) = Vec_IntEntry(&p->vFinFon, iFin)), 1); iFin++ ) if ( !iFon ) {} else + for ( iFin = 1; iFin < Vec_IntSize(&p->vFinFon) && (((iFon) = Vec_IntEntry(&p->vFinFon, iFin)), 1); iFin++ ) if ( !iFon ) {} else #define Cba_NtkForEachFonName( p, NameId, iFon ) \ - for ( iFon = 0; iFon < Vec_IntSize(&p->vFonName) && (((NameId) = Vec_IntEntry(&p->vFonName, iFon)), 1); iFon++ ) if ( !NameId ) {} else + for ( iFon = 1; iFon < Vec_IntSize(&p->vFonName) && (((NameId) = Vec_IntEntry(&p->vFonName, iFon)), 1); iFon++ ) if ( !NameId ) {} else #define Cba_ObjForEachFin( p, iObj, iFin, k ) \ for ( k = 0, iFin = Cba_ObjFin0(p, iObj); iFin < Cba_ObjFin0(p, iObj+1); iFin++, k++ ) @@ -557,6 +567,7 @@ static inline void Cba_NtkFree( Cba_Ntk_t * p ) Vec_IntErase( &p->vFinFon0 ); Vec_IntErase( &p->vFinObj ); Vec_IntErase( &p->vNtkObjs ); + Vec_IntErase( &p->vFonBits ); // other Vec_IntErase( &p->vArray0 ); Vec_IntErase( &p->vArray1 ); @@ -779,6 +790,7 @@ static inline int Cba_NtkMemory( Cba_Ntk_t * p ) nMem += (int)Vec_IntMemory(&p->vFinFon0 ); nMem += (int)Vec_IntMemory(&p->vFinObj ); nMem += (int)Vec_IntMemory(&p->vNtkObjs ); + nMem += (int)Vec_IntMemory(&p->vFonBits ); // other nMem += (int)Vec_IntMemory(&p->vArray1 ); nMem += (int)Vec_IntMemory(&p->vArray1 ); @@ -1035,7 +1047,7 @@ static inline void Cba_ManPrintStats( Cba_Man_t * p, int nModules, int fVerbose /*=== cbaBlast.c =============================================================*/ -extern Gia_Man_t * Cba_ManBlast( Cba_Man_t * p, int fBarBufs, int fVerbose ); +extern Gia_Man_t * Cba_ManBlast( Cba_Man_t * p, int fBarBufs, int fSeq, int fVerbose ); extern Cba_Man_t * Cba_ManInsertGia( Cba_Man_t * p, Gia_Man_t * pGia ); extern Cba_Man_t * Cba_ManInsertAbc( Cba_Man_t * p, void * pAbc ); /*=== cbaCba.c ===============================================================*/ @@ -1043,8 +1055,10 @@ extern Cba_Man_t * Cba_ManReadCba( char * pFileName ); extern void Cba_ManWriteCba( char * pFileName, Cba_Man_t * p ); /*=== cbaCom.c ===============================================================*/ /*=== cbaNtk.c ===============================================================*/ +extern void Cba_NtkPrintStatsFull( Cba_Ntk_t * p, int fDistrib, int fVerbose ); +extern void Cba_NtkPrintNodes( Cba_Ntk_t * p, int Type ); +extern void Cba_NtkPrintDistribOld( Cba_Ntk_t * p ); extern void Cba_ManPrintDistrib( Cba_Man_t * p ); -extern void Cba_NtkPrintDistrib( Cba_Ntk_t * p ); //extern void Cba_ManPrepareTypeNames( Cba_Man_t * p ); extern void Cba_NtkObjOrder( Cba_Ntk_t * p, Vec_Int_t * vObjs, Vec_Int_t * vNameIds ); extern int Cba_NtkCiFonNum( Cba_Ntk_t * p ); @@ -1057,9 +1071,11 @@ extern Cba_Man_t * Cba_ManExtractGroup( Cba_Man_t * p, Vec_Int_t * vObjs ); extern Cba_Man_t * Cba_ManDeriveFromGia( Gia_Man_t * pGia, int fUseXor ); extern Cba_Man_t * Cba_ManInsertGroup( Cba_Man_t * p, Vec_Int_t * vObjs, Cba_Ntk_t * pSyn ); /*=== cbaReadBlif.c ==========================================================*/ +extern Cba_Man_t * Prs_ManBuildCbaBlif( char * pFileName, Vec_Ptr_t * vDes ); extern void Prs_ManReadBlifTest( char * pFileName ); extern Cba_Man_t * Cba_ManReadBlif( char * pFileName ); /*=== cbaReadVer.c ===========================================================*/ +extern Cba_Man_t * Prs_ManBuildCbaVerilog( char * pFileName, Vec_Ptr_t * vDes ); extern void Prs_ManReadVerilogTest( char * pFileName ); extern Cba_Man_t * Cba_ManReadVerilog( char * pFileName ); /*=== cbaWriteBlif.c =========================================================*/ |