diff options
Diffstat (limited to 'src/base/cba/cba.h')
-rw-r--r-- | src/base/cba/cba.h | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/src/base/cba/cba.h b/src/base/cba/cba.h new file mode 100644 index 00000000..810e2d23 --- /dev/null +++ b/src/base/cba/cba.h @@ -0,0 +1,225 @@ +/**CFile**************************************************************** + + FileName [cba.h] + + SystemName [ABC: Logic synthesis and verification system.] + + PackageName [Verilog parser.] + + Synopsis [External declarations.] + + Author [Alan Mishchenko] + + Affiliation [UC Berkeley] + + Date [Ver. 1.0. Started - November 29, 2014.] + + Revision [$Id: cba.h,v 1.00 2014/11/29 00:00:00 alanmi Exp $] + +***********************************************************************/ + +#ifndef ABC__base__cba__cba_h +#define ABC__base__cba__cba_h + + +//////////////////////////////////////////////////////////////////////// +/// INCLUDES /// +//////////////////////////////////////////////////////////////////////// + +#include "aig/gia/gia.h" +#include "misc/extra/extra.h" +#include "misc/util/utilNam.h" +#include "misc/mem/mem.h" +#include "misc/extra/extra.h" +#include "misc/util/utilTruth.h" +#include "misc/vec/vecWec.h" + +//////////////////////////////////////////////////////////////////////// +/// PARAMETERS /// +//////////////////////////////////////////////////////////////////////// + +ABC_NAMESPACE_HEADER_START + +//////////////////////////////////////////////////////////////////////// +/// BASIC TYPES /// +//////////////////////////////////////////////////////////////////////// + +// network objects +typedef enum { + CBA_OBJ_NONE = 0, // 0: unused + CBA_OBJ_BARBUF, // 1: barrier buffer + CBA_OBJ_PI, // 2: input + CBA_OBJ_PO, // 3: output + CBA_OBJ_PIO, // 4: input + CBA_OBJ_NODE, // 5: node + CBA_OBJ_BOX, // 6: box + CBA_OBJ_PIN, // 7: box output + CBA_OBJ_LATCH, // 8: latch + CBA_OBJ_UNKNOWN // 9: unknown +} Cba_ObjType_t; + +// design +typedef struct Cba_Man_t_ Cba_Man_t; +struct Cba_Man_t_ +{ + // design names + char * pName; // design name + char * pSpec; // spec file name + Abc_Nam_t * pNames; // name manager + Abc_Nam_t * pModels; // model name manager + Abc_Nam_t * pFuncs; // functionality manager + Cba_Man_t * pLib; // library + // internal data + Mem_Flex_t * pMem; // memory + Vec_Ptr_t vNtks; // networks + int iRoot; // root network +}; + +// network +typedef struct Cba_Ntk_t_ Cba_Ntk_t; +struct Cba_Ntk_t_ +{ + char * pName; // name + Cba_Man_t * pDesign; // design + // interface + Vec_Int_t vInouts; // inouts (used by parser to store signals) + Vec_Int_t vInputs; // inputs (used by parser to store signals) + Vec_Int_t vOutputs; // outputs (used by parser to store signals) + Vec_Int_t vWires; // wires (used by parser to store signals) + // objects + Vec_Int_t vTypes; // types (used by parser to store Cba_PrsType_t) + Vec_Int_t vFuncs; // functions (used by parser to store function) + Vec_Int_t vInstIds; // instance names (used by parser to store instance name as NameId) + Vec_Wec_t vFanins; // fanins (used by parser to store fanin/fanout/range as NameId) + // attributes + Vec_Int_t vNameIds; // original names as NameId + Vec_Int_t vRanges; // ranges as NameId + Vec_Int_t vCopies; // copy pointers +}; + + +static inline char * Cba_ManName( Cba_Man_t * p ) { return p->pName; } +static inline int Cba_ManNtkNum( Cba_Man_t * p ) { return Vec_PtrSize(&p->vNtks) - 1; } +static inline Cba_Ntk_t * Cba_ManNtk( Cba_Man_t * p, int i ) { assert( i > 0 ); return (Cba_Ntk_t *)Vec_PtrEntry(&p->vNtks, i); } +static inline Cba_Ntk_t * Cba_ManRoot( Cba_Man_t * p ) { return Cba_ManNtk(p, p->iRoot); } + +static inline char * Cba_NtkName( Cba_Ntk_t * p ) { return p->pName; } +static inline int Cba_NtkObjNum( Cba_Ntk_t * p ) { return Vec_WecSize(&p->vFanins); } +static inline char * Cba_NtkStr( Cba_Ntk_t * p, int i ) { return Abc_NamStr(p->pDesign->pNames, i); } +static inline char * Cba_NtkModelStr( Cba_Ntk_t * p, int i ) { return Abc_NamStr(p->pDesign->pModels, i); } +static inline char * Cba_NtkFuncStr( Cba_Ntk_t * p, int i ) { return Abc_NamStr(p->pDesign->pFuncs, i); } + +static inline Cba_ObjType_t Cba_ObjType( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vTypes, i); } +static inline int Cba_ObjFuncId( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vFuncs, i); } +static inline int Cba_ObjInstId( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vInstIds, i); } +static inline Vec_Int_t * Cba_ObjFanins( Cba_Ntk_t * p, int i ) { return Vec_WecEntry(&p->vFanins, i); } + +static inline int Cba_ObjNameId( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vNameIds, i); } +static inline int Cba_ObjRangeId( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vRanges, i); } +static inline int Cba_ObjCopyId( Cba_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vCopies, i); } + +static inline char * Cba_ObjFuncStr( Cba_Ntk_t * p, int i ) { return Cba_NtkStr(p, Cba_ObjFuncId(p, i)); } +static inline char * Cba_ObjInstStr( Cba_Ntk_t * p, int i ) { return Cba_NtkStr(p, Cba_ObjInstId(p, i)); } +static inline char * Cba_ObjNameStr( Cba_Ntk_t * p, int i ) { return Cba_NtkStr(p, Cba_ObjNameId(p, i)); } +static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { return Cba_NtkStr(p, Cba_ObjRangeId(p, i)); } + + +//////////////////////////////////////////////////////////////////////// +/// MACRO DEFINITIONS /// +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// +/// ITERATORS /// +//////////////////////////////////////////////////////////////////////// + + +#define Cba_ManForEachNtk( p, pNtk, i ) \ + for ( i = 1; (i <= Cba_ManNtkNum(p)) && (((pNtk) = Cba_ManNtk(p, i)), 1); i++ ) + +#define Cba_NtkForEachObjType( p, Type, i ) \ + for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1); i++ ) +#define Cba_NtkForEachObjTypeFuncFanins( p, Type, Func, vFanins, i ) \ + for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1) && (((Func) = Cba_ObjFuncId(p, i)), 1) && (((vFanins) = Cba_ObjFanins(p, i)), 1); i++ ) + + +//////////////////////////////////////////////////////////////////////// +/// FUNCTION DECLARATIONS /// +//////////////////////////////////////////////////////////////////////// + +static inline Cba_Ntk_t * Cba_NtkAlloc( Cba_Man_t * p, char * pName ) +{ + Cba_Ntk_t * pNtk = ABC_CALLOC( Cba_Ntk_t, 1 ); + pNtk->pDesign = p; + pNtk->pName = pName; + Vec_PtrPush( &p->vNtks, pNtk ); + return pNtk; +} +static inline void Cba_NtkFree( Cba_Ntk_t * p ) +{ +// Vec_IntErase( &p->vInouts ); +// Vec_IntErase( &p->vInputs ); +// Vec_IntErase( &p->vOutputs ); +// Vec_IntErase( &p->vWires ); + +// Vec_IntErase( &p->vTypes ); +// Vec_IntErase( &p->vFuncs ); +// Vec_IntErase( &p->vInstIds ); + ABC_FREE( p->vFanins.pArray ); + + Vec_IntErase( &p->vNameIds ); + Vec_IntErase( &p->vRanges ); + Vec_IntErase( &p->vCopies ); + ABC_FREE( p ); +} + + +static inline Cba_Man_t * Cba_ManAlloc( char * pFileName ) +{ + Cba_Man_t * p; + p = ABC_CALLOC( Cba_Man_t, 1 ); + // design names + p->pName = Extra_FileDesignName( pFileName ); + p->pSpec = Abc_UtilStrsav( pFileName ); + p->pNames = Abc_NamStart( 1000, 20 ); + p->pModels = Abc_NamStart( 1000, 20 ); + p->pFuncs = Abc_NamStart( 1000, 20 ); + // internal data + p->pMem = Mem_FlexStart(); + Vec_PtrPush( &p->vNtks, NULL ); + return p; +} +static inline void Cba_ManFree( Cba_Man_t * p ) +{ + Cba_Ntk_t * pNtk; int i; + Cba_ManForEachNtk( p, pNtk, i ) + Cba_NtkFree( pNtk ); + Mem_FlexStop( p->pMem, 0 ); + // design names + Abc_NamStop( p->pNames ); + Abc_NamStop( p->pModels ); + Abc_NamStop( p->pFuncs ); + ABC_FREE( p->pName ); + ABC_FREE( p->pSpec ); + ABC_FREE( p ); +} + + +/*=== cbaReadBlif.c =========================================================*/ +extern Cba_Man_t * Cba_PrsReadBlif( char * pFileName ); +/*=== cbaWriteBlif.c ========================================================*/ +extern void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes ); +/*=== cbaReadVer.c ==========================================================*/ +extern Cba_Man_t * Cba_PrsReadVerilog( char * pFileName ); +/*=== cbaWriteVer.c =========================================================*/ +extern void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes ); + + + +ABC_NAMESPACE_HEADER_END + +#endif + +//////////////////////////////////////////////////////////////////////// +/// END OF FILE /// +//////////////////////////////////////////////////////////////////////// + |