Commit 8ac8923a by Alan Mishchenko

Various transformations of Cba_Ntk_t.

parent 2b2f05ba
...@@ -54,25 +54,26 @@ typedef enum { ...@@ -54,25 +54,26 @@ typedef enum {
CBA_OBJ_NODE, // 6: node CBA_OBJ_NODE, // 6: node
CBA_OBJ_BOX, // 7: box CBA_OBJ_BOX, // 7: box
CBA_OBJ_LATCH, // 8: latch CBA_OBJ_LATCH, // 8: latch
CBA_OBJ_UNKNOWN // 9: unknown CBA_OBJ_CONCAT, // 9: concatenation
CBA_OBJ_UNKNOWN // 10: unknown
} Cba_ObjType_t; } Cba_ObjType_t;
// Verilog predefined models // Verilog predefined models
typedef enum { typedef enum {
CBA_NODE_NONE = 0, // 0: unused CBA_NODE_NONE = 0, // 0: unused
CBA_NODE_CONST, // 1: constant CBA_NODE_CONST, // 1: constant
CBA_NODE_BUF, // 2: buffer CBA_NODE_BUF, // 2: buffer
CBA_NODE_INV, // 3: inverter CBA_NODE_INV, // 3: inverter
CBA_NODE_AND, // 4: AND CBA_NODE_AND, // 4: AND
CBA_NODE_NAND, // 5: NAND CBA_NODE_NAND, // 5: NAND
CBA_NODE_OR, // 6: OR CBA_NODE_OR, // 6: OR
CBA_NODE_NOR, // 7: NOR CBA_NODE_NOR, // 7: NOR
CBA_NODE_XOR, // 8: XOR CBA_NODE_XOR, // 8: XOR
CBA_NODE_XNOR, // 9 .XNOR CBA_NODE_XNOR, // 9 .XNOR
CBA_NODE_MUX, // 10: MUX CBA_NODE_MUX, // 10: MUX
CBA_NODE_MAJ, // 11: MAJ CBA_NODE_MAJ, // 11: MAJ
CBA_NODE_KNOWN, // 12: unknown CBA_NODE_KNOWN, // 12: unknown
CBA_NODE_UNKNOWN // 13: unknown CBA_NODE_UNKNOWN // 13: unknown
} Cba_NodeType_t; } Cba_NodeType_t;
...@@ -102,7 +103,6 @@ struct Cba_Man_t_ ...@@ -102,7 +103,6 @@ struct Cba_Man_t_
typedef struct Cba_Ntk_t_ Cba_Ntk_t; typedef struct Cba_Ntk_t_ Cba_Ntk_t;
struct Cba_Ntk_t_ struct Cba_Ntk_t_
{ {
char * pName; // name
Cba_Man_t * pDesign; // design Cba_Man_t * pDesign; // design
int Id; // network ID int Id; // network ID
int iBoxNtk; // instance network ID int iBoxNtk; // instance network ID
...@@ -135,9 +135,9 @@ static inline Vec_Set_t * Cba_ManMem( Cba_Man_t * p ) { r ...@@ -135,9 +135,9 @@ static inline Vec_Set_t * Cba_ManMem( Cba_Man_t * p ) { r
static inline int Cba_ManMemSave( Cba_Man_t * p, int * d, int s ) { return Vec_SetAppend(Cba_ManMem(p), d, s); } static inline int Cba_ManMemSave( Cba_Man_t * p, int * d, int s ) { return Vec_SetAppend(Cba_ManMem(p), d, s); }
static inline int * Cba_ManMemRead( Cba_Man_t * p, int h ) { return h ? (int *)Vec_SetEntry(Cba_ManMem(p), h) : NULL; } static inline int * Cba_ManMemRead( Cba_Man_t * p, int h ) { return h ? (int *)Vec_SetEntry(Cba_ManMem(p), h) : NULL; }
static inline int Cba_NtkId( Cba_Ntk_t * p ) { return p->Id; }
static inline char * Cba_NtkName( Cba_Ntk_t * p ) { return p->pName; }
static inline Cba_Man_t * Cba_NtkMan( Cba_Ntk_t * p ) { return p->pDesign; } static inline Cba_Man_t * Cba_NtkMan( Cba_Ntk_t * p ) { return p->pDesign; }
static inline int Cba_NtkId( Cba_Ntk_t * p ) { return p->Id; }
static inline char * Cba_NtkName( Cba_Ntk_t * p ) { return Abc_NamStr(Cba_NtkMan(p)->pModels, Cba_NtkId(p)); }
static inline int Cba_NtkObjNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vFanins); } static inline int Cba_NtkObjNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vFanins); }
static inline int Cba_NtkPiNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vInputs); } static inline int Cba_NtkPiNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vInputs); }
static inline int Cba_NtkPoNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vOutputs); } static inline int Cba_NtkPoNum( Cba_Ntk_t * p ) { return Vec_IntSize(&p->vOutputs); }
...@@ -169,13 +169,14 @@ static inline int Cba_ObjIsBi( Cba_Ntk_t * p, int i ) { r ...@@ -169,13 +169,14 @@ static inline int Cba_ObjIsBi( Cba_Ntk_t * p, int i ) { r
static inline int Cba_ObjIsBo( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_BO; } static inline int Cba_ObjIsBo( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_BO; }
static inline int Cba_ObjIsNode( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_NODE; } static inline int Cba_ObjIsNode( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_NODE; }
static inline int Cba_ObjIsBox( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_BOX; } static inline int Cba_ObjIsBox( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_BOX; }
static inline int Cba_ObjIsConcat( Cba_Ntk_t * p, int i ) { return Cba_ObjType(p, i) == CBA_OBJ_CONCAT; }
static inline int Cba_ObjIsCi( Cba_Ntk_t * p, int i ) { return Cba_ObjIsPi(p, i) || Cba_ObjIsBo(p, i); } static inline int Cba_ObjIsCi( Cba_Ntk_t * p, int i ) { return Cba_ObjIsPi(p, i) || Cba_ObjIsBo(p, i); }
static inline int Cba_ObjIsCo( Cba_Ntk_t * p, int i ) { return Cba_ObjIsPo(p, i) || Cba_ObjIsBi(p, i); } static inline int Cba_ObjIsCo( Cba_Ntk_t * p, int i ) { return Cba_ObjIsPo(p, i) || Cba_ObjIsBi(p, i); }
static inline int Cba_ObjIsCio( Cba_Ntk_t * p, int i ) { return Cba_ObjIsCi(p, i) || Cba_ObjIsCo(p, i); } static inline int Cba_ObjIsCio( Cba_Ntk_t * p, int i ) { return Cba_ObjIsCi(p, i) || Cba_ObjIsCo(p, i); }
static inline int Cba_ObjIsBio( Cba_Ntk_t * p, int i ) { return Cba_ObjIsBi(p, i) || Cba_ObjIsBo(p, i); } static inline int Cba_ObjIsBio( Cba_Ntk_t * p, int i ) { return Cba_ObjIsBi(p, i) || Cba_ObjIsBo(p, i); }
static inline int Cba_ObjFanin0( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsPo(p, i) || Cba_ObjIsBio(p, i)); return Cba_ObjFuncId(p, i); } static inline int Cba_ObjFanin0( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsPo(p, i) || Cba_ObjIsBio(p, i)); return Cba_ObjFuncId(p, i); }
static inline int * Cba_ObjFaninArray( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsNode(p, i)); return Cba_NtkMemRead(p, Cba_ObjFaninId(p, i)); } static inline int * Cba_ObjFaninArray( Cba_Ntk_t * p, int i ) { assert(Cba_ObjType(p, i) >= CBA_OBJ_NODE); return Cba_NtkMemRead(p, Cba_ObjFaninId(p, i)); }
static inline int Cba_ObjFaninNum( Cba_Ntk_t * p, int i ) { return *Cba_ObjFaninArray(p, i); } static inline int Cba_ObjFaninNum( Cba_Ntk_t * p, int i ) { return *Cba_ObjFaninArray(p, i); }
static inline int * Cba_ObjFanins( Cba_Ntk_t * p, int i ) { return Cba_ObjFaninArray(p, i) + 1; } static inline int * Cba_ObjFanins( Cba_Ntk_t * p, int i ) { return Cba_ObjFaninArray(p, i) + 1; }
static inline Vec_Int_t * Cba_ObjFaninVec( Cba_Ntk_t * p, int i ) { static Vec_Int_t V; V.pArray = Cba_ObjFaninArray(p, i); V.nSize = V.nCap = V.pArray ? *V.pArray++ : 0; return &V; } static inline Vec_Int_t * Cba_ObjFaninVec( Cba_Ntk_t * p, int i ) { static Vec_Int_t V; V.pArray = Cba_ObjFaninArray(p, i); V.nSize = V.nCap = V.pArray ? *V.pArray++ : 0; return &V; }
...@@ -183,8 +184,10 @@ static inline Vec_Int_t * Cba_ObjFaninVec2( Cba_Ntk_t * p, int i ) { s ...@@ -183,8 +184,10 @@ static inline Vec_Int_t * Cba_ObjFaninVec2( Cba_Ntk_t * p, int i ) { s
static inline Cba_NodeType_t Cba_ObjNodeType( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsNode(p, i)); return Cba_ObjFaninId(p, i); } static inline Cba_NodeType_t Cba_ObjNodeType( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsNode(p, i)); return Cba_ObjFaninId(p, i); }
static inline int Cba_ObjBoxModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_ObjFuncId(p, i); } static inline int Cba_ObjBoxModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_ObjFuncId(p, i); }
static inline Cba_Ntk_t * Cba_ObjBoxModel( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_ManNtk(p->pDesign, Cba_ObjBoxModelId(p, i)); } static inline Cba_Ntk_t * Cba_ObjBoxModel( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_ManNtk(p->pDesign, Cba_ObjBoxModelId(p, i)); }
static inline int Cba_ObjBoxBi( Cba_Ntk_t * p, int b, int i ) { assert(Cba_ObjIsBox(p, i)); return b - Cba_NtkPiNum(Cba_ObjBoxModel(p, b)) + i; } static inline int Cba_ObjBoxBiNum( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_NtkPiNum(Cba_ObjBoxModel(p, i)); }
static inline int Cba_ObjBoxBo( Cba_Ntk_t * p, int b, int i ) { assert(Cba_ObjIsBox(p, i)); return b + 1 + i; } static inline int Cba_ObjBoxBoNum( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBox(p, i)); return Cba_NtkPoNum(Cba_ObjBoxModel(p, i)); }
static inline int Cba_ObjBoxBi( Cba_Ntk_t * p, int b, int i ) { assert(Cba_ObjIsBox(p, b)); return b - Cba_ObjBoxBiNum(p, b) + i; }
static inline int Cba_ObjBoxBo( Cba_Ntk_t * p, int b, int i ) { assert(Cba_ObjIsBox(p, b)); return b + 1 + i; }
static inline int Cba_ObjBiModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBi(p, i)); while (!Cba_ObjIsBox(p, i)) i++; return Cba_ObjBoxModelId(p, i); } static inline int Cba_ObjBiModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBi(p, i)); while (!Cba_ObjIsBox(p, i)) i++; return Cba_ObjBoxModelId(p, i); }
static inline int Cba_ObjBoModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBo(p, i)); return Cba_ObjBoxModelId(p, Cba_ObjFanin0(p, i)); } static inline int Cba_ObjBoModelId( Cba_Ntk_t * p, int i ) { assert(Cba_ObjIsBo(p, i)); return Cba_ObjBoxModelId(p, Cba_ObjFanin0(p, i)); }
static inline Cba_Ntk_t * Cba_ObjBiModel( Cba_Ntk_t * p, int i ) { return Cba_ManNtk( p->pDesign, Cba_ObjBiModelId(p, i) ); } static inline Cba_Ntk_t * Cba_ObjBiModel( Cba_Ntk_t * p, int i ) { return Cba_ManNtk( p->pDesign, Cba_ObjBiModelId(p, i) ); }
...@@ -216,8 +219,6 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r ...@@ -216,8 +219,6 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
#define Cba_NtkForEachObjType( p, Type, i ) \ #define Cba_NtkForEachObjType( p, Type, i ) \
for ( i = 0; (i < Cba_NtkObjNum(p)) && (((Type) = Cba_ObjType(p, i)), 1); 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_ObjFaninVec(p, i)), 1); i++ )
#define Cba_NtkForEachBox( p, iObj, i ) \ #define Cba_NtkForEachBox( p, iObj, i ) \
for ( i = 0; (i < Cba_NtkBoxNum(p)) && (((iObj) = Vec_IntEntry(&p->vBoxes, i)), 1); i++ ) for ( i = 0; (i < Cba_NtkBoxNum(p)) && (((iObj) = Vec_IntEntry(&p->vBoxes, i)), 1); i++ )
...@@ -229,6 +230,11 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r ...@@ -229,6 +230,11 @@ static inline char * Cba_ObjRangeStr( Cba_Ntk_t * p, int i ) { r
#define Cba_NtkForEachCo( p, i ) \ #define Cba_NtkForEachCo( p, i ) \
for ( i = 0; (i < Cba_NtkObjNum(p)); i++ ) if ( Cba_ObjType(p, i) != CBA_OBJ_PO && Cba_ObjType(p, i) != CBA_OBJ_BI ) {} else for ( i = 0; (i < Cba_NtkObjNum(p)); i++ ) if ( Cba_ObjType(p, i) != CBA_OBJ_PO && Cba_ObjType(p, i) != CBA_OBJ_BI ) {} else
#define Cba_BoxForEachBi( p, iBox, iTerm, i ) \
for ( iTerm = iBox - Cba_ObjBoxBiNum(p, iBox), i = 0; iTerm < iBox; iTerm++, i++ )
#define Cba_BoxForEachBo( p, iBox, iTerm, i ) \
for ( iTerm = iBox + 1, i = 0; iTerm < iBox + 1 + Cba_ObjBoxBoNum(p, iBox); iTerm++, i++ )
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS /// /// FUNCTION DECLARATIONS ///
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
...@@ -272,12 +278,15 @@ static inline void Cba_ManFetchArray( Cba_Man_t * p, Vec_Int_t * vTo, int nSize ...@@ -272,12 +278,15 @@ static inline void Cba_ManFetchArray( Cba_Man_t * p, Vec_Int_t * vTo, int nSize
// constructors desctructors // constructors desctructors
static inline Cba_Ntk_t * Cba_NtkAlloc( Cba_Man_t * p, char * pName ) static inline Cba_Ntk_t * Cba_NtkAlloc( Cba_Man_t * p, char * pName )
{ {
int iModelId = Abc_NamStrFindOrAdd( p->pModels, pName, NULL );
Cba_Ntk_t * pNtk = Vec_SetFetch( Cba_ManMem(p), sizeof(Cba_Ntk_t) ); Cba_Ntk_t * pNtk = Vec_SetFetch( Cba_ManMem(p), sizeof(Cba_Ntk_t) );
memset( pNtk, 0, sizeof(Cba_Ntk_t) ); memset( pNtk, 0, sizeof(Cba_Ntk_t) );
pNtk->pDesign = p; pNtk->pDesign = p;
pNtk->pName = Vec_SetStrsav( Cba_ManMem(p), pName ); pNtk->Id = Vec_PtrSize(&p->vNtks);
pNtk->Id = Vec_PtrSize(&p->vNtks);
Vec_PtrPush( &p->vNtks, pNtk ); Vec_PtrPush( &p->vNtks, pNtk );
assert( iModelId <= pNtk->Id );
if ( iModelId < pNtk->Id )
printf( "Model with name %s already exists.\n", pName );
return pNtk; return pNtk;
} }
static inline Cba_Man_t * Cba_ManAlloc( char * pFileName ) static inline Cba_Man_t * Cba_ManAlloc( char * pFileName )
...@@ -290,8 +299,23 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName ) ...@@ -290,8 +299,23 @@ static inline Cba_Man_t * Cba_ManAlloc( char * pFileName )
p->pFuncs = Abc_NamStart( 1000, 20 ); p->pFuncs = Abc_NamStart( 1000, 20 );
Vec_SetAlloc_( &p->Mem, 20 ); Vec_SetAlloc_( &p->Mem, 20 );
Vec_PtrPush( &p->vNtks, NULL ); Vec_PtrPush( &p->vNtks, NULL );
p->iRoot = 1;
return p;
}
static inline Cba_Man_t * Cba_ManClone( Cba_Man_t * pOld )
{
Cba_Man_t * p = ABC_CALLOC( Cba_Man_t, 1 );
p->pName = Extra_FileDesignName( pOld->pName );
p->pSpec = Abc_UtilStrsav( pOld->pSpec );
p->pNames = Abc_NamRef( pOld->pNames );
p->pModels = Abc_NamRef( pOld->pModels );
p->pFuncs = Abc_NamRef( pOld->pFuncs );
Vec_SetAlloc_( &p->Mem, 20 );
Vec_PtrPush( &p->vNtks, NULL );
p->iRoot = 1;
return p; return p;
} }
static inline void Cba_ManFree( Cba_Man_t * p ) static inline void Cba_ManFree( Cba_Man_t * p )
{ {
Vec_IntFreeP( &p->vBuf2LeafNtk ); Vec_IntFreeP( &p->vBuf2LeafNtk );
...@@ -301,9 +325,9 @@ static inline void Cba_ManFree( Cba_Man_t * p ) ...@@ -301,9 +325,9 @@ static inline void Cba_ManFree( Cba_Man_t * p )
ABC_FREE( p->vCopies.pArray ); ABC_FREE( p->vCopies.pArray );
ABC_FREE( p->vNtks.pArray ); ABC_FREE( p->vNtks.pArray );
Vec_SetFree_( &p->Mem ); Vec_SetFree_( &p->Mem );
Abc_NamStop( p->pNames ); Abc_NamDeref( p->pNames );
Abc_NamStop( p->pModels ); Abc_NamDeref( p->pModels );
Abc_NamStop( p->pFuncs ); Abc_NamDeref( p->pFuncs );
ABC_FREE( p->pName ); ABC_FREE( p->pName );
ABC_FREE( p->pSpec ); ABC_FREE( p->pSpec );
ABC_FREE( p ); ABC_FREE( p );
...@@ -324,12 +348,13 @@ static inline int Cba_ManMemory( Cba_Man_t * p ) ...@@ -324,12 +348,13 @@ static inline int Cba_ManMemory( Cba_Man_t * p )
extern Cba_Man_t * Cba_ManBuild( Cba_Man_t * p ); extern Cba_Man_t * Cba_ManBuild( Cba_Man_t * p );
/*=== cbaReadBlif.c =========================================================*/ /*=== cbaReadBlif.c =========================================================*/
extern Cba_Man_t * Cba_PrsReadBlif( char * pFileName ); extern Cba_Man_t * Cba_PrsReadBlif( char * pFileName );
/*=== cbaWriteBlif.c ========================================================*/
extern void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes );
/*=== cbaReadVer.c ==========================================================*/ /*=== cbaReadVer.c ==========================================================*/
extern Cba_Man_t * Cba_PrsReadVerilog( char * pFileName ); extern Cba_Man_t * Cba_PrsReadVerilog( char * pFileName );
/*=== cbaWriteBlif.c ========================================================*/
extern void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * p );
extern void Cba_ManWriteBlif( char * pFileName, Cba_Man_t * p );
/*=== cbaWriteVer.c =========================================================*/ /*=== cbaWriteVer.c =========================================================*/
extern void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes ); extern void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * p );
/*=== cbaNtk.c =========================================================*/ /*=== cbaNtk.c =========================================================*/
extern void Cba_ManAssignInternNames( Cba_Man_t * p ); extern void Cba_ManAssignInternNames( Cba_Man_t * p );
extern int Cba_NtkNodeNum( Cba_Ntk_t * p ); extern int Cba_NtkNodeNum( Cba_Ntk_t * p );
......
...@@ -56,6 +56,8 @@ void Cba_BoxRemap( Cba_Ntk_t * pNtk, int iBox, Vec_Int_t * vMap ) ...@@ -56,6 +56,8 @@ void Cba_BoxRemap( Cba_Ntk_t * pNtk, int iBox, Vec_Int_t * vMap )
Cba_Ntk_t * pBoxModel = Cba_ObjBoxModel( pNtk, iBox ); Cba_Ntk_t * pBoxModel = Cba_ObjBoxModel( pNtk, iBox );
Vec_Int_t * vFanins = Cba_ObjFaninVec( pNtk, iBox ); Vec_Int_t * vFanins = Cba_ObjFaninVec( pNtk, iBox );
int i, NameId; int i, NameId;
Vec_IntForEachEntry( vMap, NameId, i )
assert( NameId == -1 );
// map formal names into I/O indexes // map formal names into I/O indexes
Cba_NtkForEachPi( pBoxModel, NameId, i ) Cba_NtkForEachPi( pBoxModel, NameId, i )
{ {
...@@ -217,9 +219,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap, ...@@ -217,9 +219,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
int i, iObj, ObjId, FaninId, Type, Index, NameId, nBoxes = 0; int i, iObj, ObjId, FaninId, Type, Index, NameId, nBoxes = 0;
// start network // start network
pNtkNew = Cba_NtkAlloc( pNew, Cba_NtkName(pNtk) ); pNtkNew = Cba_ManNtk( pNew, Cba_NtkId(pNtk) );
Cba_ManFetchArray( pNew, &pNtkNew->vInputs, Cba_NtkPiNum(pNtk) );
Cba_ManFetchArray( pNew, &pNtkNew->vOutputs, Cba_NtkPoNum(pNtk) );
Cba_ManFetchArray( pNew, &pNtkNew->vTypes, nObjCount ); Cba_ManFetchArray( pNew, &pNtkNew->vTypes, nObjCount );
Cba_ManFetchArray( pNew, &pNtkNew->vFuncs, nObjCount ); Cba_ManFetchArray( pNew, &pNtkNew->vFuncs, nObjCount );
Cba_ManFetchArray( pNew, &pNtkNew->vFanins, nObjCount ); Cba_ManFetchArray( pNew, &pNtkNew->vFanins, nObjCount );
...@@ -230,9 +230,12 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap, ...@@ -230,9 +230,12 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
Cba_NtkForEachPi( pNtk, NameId, i ) Cba_NtkForEachPi( pNtk, NameId, i )
{ {
ObjId = Vec_IntEntry( vMap, NameId ); ObjId = Vec_IntEntry( vMap, NameId );
Vec_IntWriteEntry( &pNtkNew->vInputs, i, ObjId ); Vec_IntWriteEntry( &pNtkNew->vInputs, i, ObjId );
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId, CBA_OBJ_PI );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId, i );
Vec_IntWriteEntry( &pNtkNew->vNameIds, ObjId, NameId ); Vec_IntWriteEntry( &pNtkNew->vNameIds, ObjId, NameId );
} }
Cba_NtkForEachObjType( pNtk, Type, iObj ) Cba_NtkForEachObjType( pNtk, Type, iObj )
{ {
vFanins = Cba_ObjFaninVec( pNtk, iObj ); vFanins = Cba_ObjFaninVec( pNtk, iObj );
...@@ -252,7 +255,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap, ...@@ -252,7 +255,7 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
} }
else if ( Type == CBA_OBJ_BOX ) else if ( Type == CBA_OBJ_BOX )
{ {
ObjId = Vec_IntEntry( vBoxes, nBoxes++ ); ObjId = Vec_IntEntry( &pNtkNew->vBoxes, nBoxes++ );
pNtkBox = Cba_ObjBoxModel( pNtk, iObj ); pNtkBox = Cba_ObjBoxModel( pNtk, iObj );
Cba_NtkSetHost( pNtkBox, Cba_NtkId(pNtk), ObjId ); Cba_NtkSetHost( pNtkBox, Cba_NtkId(pNtk), ObjId );
// collect fanins // collect fanins
...@@ -262,33 +265,38 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap, ...@@ -262,33 +265,38 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
i++; NameId = Vec_IntEntry( vFanins, i ); i++; NameId = Vec_IntEntry( vFanins, i );
assert( Vec_IntEntry(vMap, NameId) != -1 ); assert( Vec_IntEntry(vMap, NameId) != -1 );
if ( Index < Cba_NtkPiNum(pNtkBox) ) if ( Index < Cba_NtkPiNum(pNtkBox) )
{
Vec_IntWriteEntry( vTemp, Index, Vec_IntEntry(vMap, NameId) ); Vec_IntWriteEntry( vTemp, Index, Vec_IntEntry(vMap, NameId) );
Vec_IntWriteEntry( &pNtkNew->vNameIds, ObjId - Cba_NtkPiNum(pNtkBox) + Index, NameId );
}
else else
{
assert( Vec_IntEntry(vMap, NameId) == ObjId + 1 + Index - Cba_NtkPiNum(pNtkBox) );
Vec_IntWriteEntry( &pNtkNew->vNameIds, Vec_IntEntry(vMap, NameId), NameId ); Vec_IntWriteEntry( &pNtkNew->vNameIds, Vec_IntEntry(vMap, NameId), NameId );
}
} }
Vec_IntForEachEntry( vTemp, Index, i ) Vec_IntForEachEntry( vTemp, Index, i )
assert( Index >= 0 ); assert( Index >= 0 );
// create box
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId, CBA_OBJ_BOX );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId, Cba_ManNtkId(pNew, Cba_NtkName(pNtkBox)) );
// create box inputs // create box inputs
for ( i = 0; i < Cba_NtkPiNum(pNtkBox); i++ ) Cba_BoxForEachBi( pNtkNew, ObjId, FaninId, i )
{ {
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId - Cba_NtkPiNum(pNtkBox) + i, CBA_OBJ_BI ); Vec_IntWriteEntry( &pNtkNew->vTypes, FaninId, CBA_OBJ_BI );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId - Cba_NtkPiNum(pNtkBox) + i, i ); Vec_IntWriteEntry( &pNtkNew->vFuncs, FaninId, i );
Vec_IntWriteEntry( &pNtkNew->vFanins, ObjId - Cba_NtkPiNum(pNtkBox) + i, Cba_ManHandleBuffer(pNew, Vec_IntEntry(vTemp, i)) ); Vec_IntWriteEntry( &pNtkNew->vFanins, FaninId, Cba_ManHandleBuffer(pNew, Vec_IntEntry(vTemp, i)) );
} }
// craete box
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId, CBA_OBJ_BOX );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId, Cba_ManNtkId(pNew, Cba_NtkName(pNtkBox)) );
Vec_IntWriteEntry( &pNtkNew->vFanins, ObjId, Cba_ManHandleArray(pNew, vTemp) );
// create box outputs // create box outputs
for ( i = 1; i <= Cba_NtkPoNum(pNtkBox); i++ ) Cba_BoxForEachBo( pNtkNew, ObjId, FaninId, i )
{ {
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId + i, CBA_OBJ_BO ); Vec_IntWriteEntry( &pNtkNew->vTypes, FaninId, CBA_OBJ_BO );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId + i, i-1 ); Vec_IntWriteEntry( &pNtkNew->vFuncs, FaninId, i );
Vec_IntWriteEntry( &pNtkNew->vFanins, ObjId + i, Cba_ManHandleBuffer(pNew, ObjId) ); Vec_IntWriteEntry( &pNtkNew->vFanins, FaninId, Cba_ManHandleBuffer(pNew, ObjId) );
} }
} }
} }
assert( nBoxes == Vec_IntSize(vBoxes) ); assert( nBoxes == Vec_IntSize(&pNtkNew->vBoxes) );
Cba_NtkForEachPo( pNtk, NameId, i ) Cba_NtkForEachPo( pNtk, NameId, i )
{ {
ObjId = nObjCount - Cba_NtkPoNum(pNtk) + i; ObjId = nObjCount - Cba_NtkPoNum(pNtk) + i;
...@@ -296,23 +304,34 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap, ...@@ -296,23 +304,34 @@ Cba_Ntk_t * Cba_NtkBuild( Cba_Man_t * pNew, Cba_Ntk_t * pNtk, Vec_Int_t * vMap,
assert( FaninId != -1 ); assert( FaninId != -1 );
Vec_IntWriteEntry( &pNtkNew->vOutputs, i, ObjId ); Vec_IntWriteEntry( &pNtkNew->vOutputs, i, ObjId );
Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId, CBA_OBJ_PO ); Vec_IntWriteEntry( &pNtkNew->vTypes, ObjId, CBA_OBJ_PO );
Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId, -1 ); Vec_IntWriteEntry( &pNtkNew->vFuncs, ObjId, i );
Vec_IntWriteEntry( &pNtkNew->vFanins, ObjId, Cba_ManHandleBuffer(pNew, FaninId) ); Vec_IntWriteEntry( &pNtkNew->vFanins, ObjId, Cba_ManHandleBuffer(pNew, FaninId) );
// remove NameId from the driver and assign it to the output // remove NameId from the driver and assign it to the output
Vec_IntWriteEntry( &pNtkNew->vNameIds, FaninId, -1 ); //Vec_IntWriteEntry( &pNtkNew->vNameIds, FaninId, -1 );
Vec_IntWriteEntry( &pNtkNew->vNameIds, ObjId, NameId ); Vec_IntWriteEntry( &pNtkNew->vNameIds, ObjId, NameId );
} }
return pNtkNew; return pNtkNew;
} }
Cba_Man_t * Cba_ManPreBuild( Cba_Man_t * p )
{
Cba_Man_t * pNew = Cba_ManClone( p );
Cba_Ntk_t * pNtk, * pNtkNew; int i;
Cba_ManForEachNtk( p, pNtk, i )
{
pNtkNew = Cba_NtkAlloc( pNew, Cba_NtkName(pNtk) );
Cba_ManFetchArray( pNew, &pNtkNew->vInputs, Cba_NtkPiNum(pNtk) );
Cba_ManFetchArray( pNew, &pNtkNew->vOutputs, Cba_NtkPoNum(pNtk) );
}
assert( Cba_ManNtkNum(pNew) == Cba_ManNtkNum(p) );
return pNew;
}
Cba_Man_t * Cba_ManBuild( Cba_Man_t * p ) Cba_Man_t * Cba_ManBuild( Cba_Man_t * p )
{ {
Cba_Man_t * pNew = Cba_ManAlloc( Cba_ManName(p) ); Cba_Man_t * pNew = Cba_ManPreBuild( p );
Vec_Int_t * vMap = Vec_IntStartFull( Abc_NamObjNumMax(p->pNames) + 1 ); Vec_Int_t * vMap = Vec_IntStartFull( Abc_NamObjNumMax(p->pNames) + 1 );
Vec_Int_t * vBoxes = Vec_IntAlloc( 1000 ); Vec_Int_t * vBoxes = Vec_IntAlloc( 1000 );
Vec_Int_t * vTemp = Vec_IntAlloc( 1000 ); Vec_Int_t * vTemp = Vec_IntAlloc( 1000 );
Cba_Ntk_t * pNtk; int i, nObjs; Cba_Ntk_t * pNtk; int i, nObjs;
Cba_ManForEachNtk( p, pNtk, i )
Abc_NamStrFindOrAdd( p->pModels, Cba_NtkName(pNtk), NULL );
assert( Abc_NamObjNumMax(p->pModels) == Cba_ManNtkNum(p) + 1 ); assert( Abc_NamObjNumMax(p->pModels) == Cba_ManNtkNum(p) + 1 );
Cba_ManForEachNtk( p, pNtk, i ) Cba_ManForEachNtk( p, pNtk, i )
{ {
......
...@@ -174,7 +174,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -174,7 +174,7 @@ int Cba_CommandWrite( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0; return 0;
} }
if ( argc == globalUtilOptind ) if ( argc == globalUtilOptind )
pFileName = Extra_FileNameGenericAppend( pNtk->pName, "_out.v" ); pFileName = Extra_FileNameGenericAppend( Cba_NtkMan(pNtk)->pName, "_out.v" );
else if ( argc == globalUtilOptind + 1 ) else if ( argc == globalUtilOptind + 1 )
pFileName = argv[globalUtilOptind]; pFileName = argv[globalUtilOptind];
else else
...@@ -314,7 +314,10 @@ usage: ...@@ -314,7 +314,10 @@ usage:
******************************************************************************/ ******************************************************************************/
int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv ) int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
{ {
extern void Cba_ManReadDesExperiment( Abc_Ntk_t * pNtk );
Abc_Ntk_t * pAbcNtk;
Cba_Ntk_t * pNtk = Cba_AbcGetNtk(pAbc); Cba_Ntk_t * pNtk = Cba_AbcGetNtk(pAbc);
char * pFileName = "c/hie/dump/1/netlist_1.v";
int c, fVerbose = 0; int c, fVerbose = 0;
Extra_UtilGetoptReset(); Extra_UtilGetoptReset();
while ( ( c = Extra_UtilGetopt( argc, argv, "vh" ) ) != EOF ) while ( ( c = Extra_UtilGetopt( argc, argv, "vh" ) ) != EOF )
...@@ -330,14 +333,17 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv ) ...@@ -330,14 +333,17 @@ int Cba_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
goto usage; goto usage;
} }
} }
/*
if ( pNtk == NULL ) if ( pNtk == NULL )
{ {
Abc_Print( 1, "Cba_CommandTest(): There is no current design.\n" ); Abc_Print( 1, "Cba_CommandTest(): There is no current design.\n" );
return 0; return 0;
} }
*/
// transform // transform
// pNtk = Cba_NtkUifNodePairs( pNtk, NULL ); pAbcNtk = Io_ReadNetlist( pFileName, Io_ReadFileType(pFileName), 0 );
Cba_AbcUpdateNtk( pAbc, pNtk ); Cba_ManReadDesExperiment( pAbcNtk );
Abc_NtkDelete( pAbcNtk );
return 0; return 0;
usage: usage:
Abc_Print( -2, "usage: @test [-vh]\n" ); Abc_Print( -2, "usage: @test [-vh]\n" );
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
ABC_NAMESPACE_HEADER_START ABC_NAMESPACE_HEADER_START
/*
// parser objects (object types after parsing) // parser objects (object types after parsing)
typedef enum { typedef enum {
CBA_PRS_NONE = 0, // 0: unused CBA_PRS_NONE = 0, // 0: unused
...@@ -41,6 +42,7 @@ typedef enum { ...@@ -41,6 +42,7 @@ typedef enum {
CBA_PRS_CONCAT, // 4: concatenation CBA_PRS_CONCAT, // 4: concatenation
CBA_PRS_UNKNOWN // 5: unknown CBA_PRS_UNKNOWN // 5: unknown
} Cba_PrsType_t; } Cba_PrsType_t;
*/
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/// BASIC TYPES /// /// BASIC TYPES ///
......
...@@ -265,7 +265,7 @@ static inline int Cba_PrsReadNode( Cba_Prs_t * p ) ...@@ -265,7 +265,7 @@ static inline int Cba_PrsReadNode( Cba_Prs_t * p )
{ {
if ( Cba_PrsReadList2(p) ) return 1; if ( Cba_PrsReadList2(p) ) return 1;
// save results // save results
Vec_IntPush( &p->vTypesCur, CBA_PRS_NODE ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
Vec_IntPush( &p->vFuncsCur, 1 ); // default const 0 function Vec_IntPush( &p->vFuncsCur, 1 ); // default const 0 function
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
return 0; return 0;
...@@ -276,7 +276,7 @@ static inline int Cba_PrsReadBox( Cba_Prs_t * p, int fGate ) ...@@ -276,7 +276,7 @@ static inline int Cba_PrsReadBox( Cba_Prs_t * p, int fGate )
if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read model name.", 1); if ( iToken == 0 ) return Cba_PrsErrorSet(p, "Cannot read model name.", 1);
if ( Cba_PrsReadList3(p) ) return 1; if ( Cba_PrsReadList3(p) ) return 1;
// save results // save results
Vec_IntPush( &p->vTypesCur, CBA_PRS_BOX ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_BOX );
Vec_IntPush( &p->vFuncsCur, iToken ); Vec_IntPush( &p->vFuncsCur, iToken );
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
return 0; return 0;
...@@ -299,7 +299,7 @@ static inline int Cba_PrsReadLatch( Cba_Prs_t * p ) ...@@ -299,7 +299,7 @@ static inline int Cba_PrsReadLatch( Cba_Prs_t * p )
iToken = 2; iToken = 2;
Cba_PrsSkipToChar( p, '\n' ); Cba_PrsSkipToChar( p, '\n' );
// save results // save results
Vec_IntPush( &p->vTypesCur, CBA_PRS_LATCH ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_LATCH );
Vec_IntPush( &p->vFuncsCur, iToken ); Vec_IntPush( &p->vFuncsCur, iToken );
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
return 0; return 0;
...@@ -316,7 +316,7 @@ static inline int Cba_PrsReadShort( Cba_Prs_t * p ) ...@@ -316,7 +316,7 @@ static inline int Cba_PrsReadShort( Cba_Prs_t * p )
Cba_PrsSkipSpaces( p ); Cba_PrsSkipSpaces( p );
if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Trailing symbols on .short line.", 1); if ( !Cba_PrsIsChar(p, '\n') ) return Cba_PrsErrorSet(p, "Trailing symbols on .short line.", 1);
// save results // save results
Vec_IntPush( &p->vTypesCur, CBA_PRS_NODE ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
Vec_IntPush( &p->vFuncsCur, 2 ); // default buffer function Vec_IntPush( &p->vFuncsCur, 2 ); // default buffer function
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
return 0; return 0;
......
...@@ -367,7 +367,7 @@ static inline int Cba_PrsReadConcat( Cba_Prs_t * p, Vec_Int_t * vTemp2 ) ...@@ -367,7 +367,7 @@ static inline int Cba_PrsReadConcat( Cba_Prs_t * p, Vec_Int_t * vTemp2 )
assert( Vec_IntSize(vTemp2) > 2 ); assert( Vec_IntSize(vTemp2) > 2 );
assert( Vec_IntSize(vTemp2) % 2 == 0 ); assert( Vec_IntSize(vTemp2) % 2 == 0 );
// create new concatentation // create new concatentation
Vec_IntPush( &p->vTypesCur, CBA_PRS_CONCAT ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_CONCAT );
Vec_IntPush( &p->vFuncsCur, 0 ); Vec_IntPush( &p->vFuncsCur, 0 );
Vec_IntPush( &p->vInstIdsCur, 0 ); Vec_IntPush( &p->vInstIdsCur, 0 );
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, vTemp2) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, vTemp2) );
...@@ -497,7 +497,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p ) ...@@ -497,7 +497,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
// check unary operator // check unary operator
if ( Cba_PrsIsChar(p, ';') ) if ( Cba_PrsIsChar(p, ';') )
{ {
Vec_IntPush( &p->vTypesCur, CBA_PRS_NODE ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
Vec_IntPush( &p->vFuncsCur, fCompl ? CBA_NODE_INV : CBA_NODE_BUF ); Vec_IntPush( &p->vFuncsCur, fCompl ? CBA_NODE_INV : CBA_NODE_BUF );
Vec_IntPush( &p->vInstIdsCur, 0 ); Vec_IntPush( &p->vInstIdsCur, 0 );
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
...@@ -532,7 +532,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p ) ...@@ -532,7 +532,7 @@ static inline int Cba_PrsReadAssign( Cba_Prs_t * p )
if ( !Cba_PrsIsChar(p, ';') ) return Cba_PrsErrorSet(p, "Expected semicolon at the end of the assign-statement.", 0); if ( !Cba_PrsIsChar(p, ';') ) return Cba_PrsErrorSet(p, "Expected semicolon at the end of the assign-statement.", 0);
} }
// write binary operator // write binary operator
Vec_IntPush( &p->vTypesCur, CBA_PRS_NODE ); Vec_IntPush( &p->vTypesCur, CBA_OBJ_NODE );
Vec_IntPush( &p->vFuncsCur, Oper ); Vec_IntPush( &p->vFuncsCur, Oper );
Vec_IntPush( &p->vInstIdsCur, 0 ); Vec_IntPush( &p->vInstIdsCur, 0 );
Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) ); Vec_IntPush( &p->vFaninsCur, Cba_ManHandleArray(p->pDesign, &p->vTemp) );
...@@ -550,12 +550,12 @@ static inline int Cba_PrsReadInstance( Cba_Prs_t * p, int Func ) ...@@ -550,12 +550,12 @@ static inline int Cba_PrsReadInstance( Cba_Prs_t * p, int Func )
p->pCur++; p->pCur++;
if ( Cba_PrsUtilSkipSpaces(p) ) return 0; if ( Cba_PrsUtilSkipSpaces(p) ) return 0;
if ( Cba_PrsIsChar(p, '.') ) // node if ( Cba_PrsIsChar(p, '.') ) // node
Status = Cba_PrsReadSignalList2(p, &p->vTemp), Type = CBA_PRS_BOX; Status = Cba_PrsReadSignalList2(p, &p->vTemp), Type = CBA_OBJ_BOX;
else else
Status = Cba_PrsReadSignalList1(p, &p->vTemp), Type = CBA_PRS_NODE; Status = Cba_PrsReadSignalList1(p, &p->vTemp), Type = CBA_OBJ_NODE;
if ( Status == 0 ) return 0; if ( Status == 0 ) return 0;
// translate elementary gate // translate elementary gate
if ( Type == CBA_PRS_NODE ) if ( Type == CBA_OBJ_NODE )
{ {
int iFuncNew = Cba_PrsIsKnownModule(p, Abc_NamStr(p->pDesign->pNames, Func)); int iFuncNew = Cba_PrsIsKnownModule(p, Abc_NamStr(p->pDesign->pNames, Func));
if ( iFuncNew == 0 ) return Cba_PrsErrorSet(p, "Cannot find elementary gate.", 0); if ( iFuncNew == 0 ) return Cba_PrsErrorSet(p, "Cannot find elementary gate.", 0);
...@@ -726,7 +726,7 @@ Cba_Man_t * Cba_PrsReadVerilog( char * pFileName ) ...@@ -726,7 +726,7 @@ Cba_Man_t * Cba_PrsReadVerilog( char * pFileName )
void Cba_PrsReadVerilogTest( char * pFileName ) void Cba_PrsReadVerilogTest( char * pFileName )
{ {
abctime clk = Abc_Clock(); abctime clk = Abc_Clock();
extern void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes ); extern void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * p );
// Cba_Man_t * p = Cba_PrsReadVerilog( "c/hie/dump/1/netlist_1.v" ); // Cba_Man_t * p = Cba_PrsReadVerilog( "c/hie/dump/1/netlist_1.v" );
// Cba_Man_t * p = Cba_PrsReadVerilog( "aga/me/me_wide.v" ); // Cba_Man_t * p = Cba_PrsReadVerilog( "aga/me/me_wide.v" );
Cba_Man_t * p = Cba_PrsReadVerilog( "aga/ray/ray_wide.v" ); Cba_Man_t * p = Cba_PrsReadVerilog( "aga/ray/ray_wide.v" );
......
...@@ -89,7 +89,7 @@ char * Ptr_TypeToName( Ptr_ObjType_t Type ) ...@@ -89,7 +89,7 @@ char * Ptr_TypeToName( Ptr_ObjType_t Type )
assert( 0 ); assert( 0 );
return "???"; return "???";
} }
char * Ptr_TypeToSop( Ptr_ObjType_t Type ) char * Ptr_TypeToSop( int Type )
{ {
if ( Type == PTR_OBJ_BUF ) return "1 1\n"; if ( Type == PTR_OBJ_BUF ) return "1 1\n";
if ( Type == PTR_OBJ_INV ) return "0 1\n"; if ( Type == PTR_OBJ_INV ) return "0 1\n";
...@@ -277,7 +277,7 @@ void Ptr_ManDumpNodeBlif( FILE * pFile, Vec_Ptr_t * vNode ) ...@@ -277,7 +277,7 @@ void Ptr_ManDumpNodeBlif( FILE * pFile, Vec_Ptr_t * vNode )
Vec_PtrForEachEntryStart( char *, vNode, pName, i, 2 ) Vec_PtrForEachEntryStart( char *, vNode, pName, i, 2 )
fprintf( pFile, " %s", pName ); fprintf( pFile, " %s", pName );
fprintf( pFile, " %s\n", (char *)Vec_PtrEntry(vNode, 0) ); fprintf( pFile, " %s\n", (char *)Vec_PtrEntry(vNode, 0) );
fprintf( pFile, "%s", Ptr_TypeToSop( (Ptr_ObjType_t)Abc_Ptr2Int(Vec_PtrEntry(vNode, 1)) ) ); fprintf( pFile, "%s", Ptr_TypeToSop( Abc_Ptr2Int(Vec_PtrEntry(vNode, 1)) ) );
} }
void Ptr_ManDumpNodesBlif( FILE * pFile, Vec_Ptr_t * vNodes ) void Ptr_ManDumpNodesBlif( FILE * pFile, Vec_Ptr_t * vNodes )
{ {
...@@ -544,7 +544,7 @@ Vec_Ptr_t * Ptr_CbaDeriveNodes( Cba_Ntk_t * pNtk ) ...@@ -544,7 +544,7 @@ Vec_Ptr_t * Ptr_CbaDeriveNodes( Cba_Ntk_t * pNtk )
int Type, iObj; int Type, iObj;
Vec_Ptr_t * vNodes = Vec_PtrAlloc( Cba_NtkNodeNum(pNtk) ); Vec_Ptr_t * vNodes = Vec_PtrAlloc( Cba_NtkNodeNum(pNtk) );
Cba_NtkForEachObjType( pNtk, Type, iObj ) Cba_NtkForEachObjType( pNtk, Type, iObj )
if ( Type == CBA_PRS_NODE ) if ( Type == CBA_OBJ_NODE )
Vec_PtrPush( vNodes, Ptr_CbaDeriveNode(pNtk, iObj) ); Vec_PtrPush( vNodes, Ptr_CbaDeriveNode(pNtk, iObj) );
assert( Ptr_CheckArray(vNodes) ); assert( Ptr_CheckArray(vNodes) );
return vNodes; return vNodes;
...@@ -578,7 +578,7 @@ Vec_Ptr_t * Ptr_CbaDeriveBoxes( Cba_Ntk_t * pNtk ) ...@@ -578,7 +578,7 @@ Vec_Ptr_t * Ptr_CbaDeriveBoxes( Cba_Ntk_t * pNtk )
int Type, iObj; int Type, iObj;
Vec_Ptr_t * vBoxes = Vec_PtrAlloc( Cba_NtkBoxNum(pNtk) ); Vec_Ptr_t * vBoxes = Vec_PtrAlloc( Cba_NtkBoxNum(pNtk) );
Cba_NtkForEachObjType( pNtk, Type, iObj ) Cba_NtkForEachObjType( pNtk, Type, iObj )
if ( Type == CBA_PRS_BOX ) if ( Type == CBA_OBJ_BOX )
Vec_PtrPush( vBoxes, Ptr_CbaDeriveBox(pNtk, iObj) ); Vec_PtrPush( vBoxes, Ptr_CbaDeriveBox(pNtk, iObj) );
assert( Ptr_CheckArray(vBoxes) ); assert( Ptr_CheckArray(vBoxes) );
return vBoxes; return vBoxes;
...@@ -650,7 +650,7 @@ void Cba_PrsReadNodes( Cba_Man_t * p, Vec_Ptr_t * vNodes, Vec_Int_t * vTypesCur, ...@@ -650,7 +650,7 @@ void Cba_PrsReadNodes( Cba_Man_t * p, Vec_Ptr_t * vNodes, Vec_Int_t * vTypesCur,
Vec_Ptr_t * vNode; int i; Vec_Ptr_t * vNode; int i;
Vec_PtrForEachEntry( Vec_Ptr_t *, vNodes, vNode, i ) Vec_PtrForEachEntry( Vec_Ptr_t *, vNodes, vNode, i )
{ {
Vec_IntPush( vTypesCur, CBA_PRS_NODE ); Vec_IntPush( vTypesCur, CBA_OBJ_NODE );
Vec_IntPush( vFuncsCur, (Ptr_ObjType_t)Abc_Ptr2Int(Vec_PtrEntry(vNode, 1)) ); Vec_IntPush( vFuncsCur, (Ptr_ObjType_t)Abc_Ptr2Int(Vec_PtrEntry(vNode, 1)) );
Vec_IntPush( vInstIdsCur, 0 ); Vec_IntPush( vInstIdsCur, 0 );
Vec_IntPush( vFaninsCur, Cba_ManHandleArray(p, Cba_PrsReadList(p, vNode, vList, 1, -1)) ); Vec_IntPush( vFaninsCur, Cba_ManHandleArray(p, Cba_PrsReadList(p, vNode, vList, 1, -1)) );
...@@ -661,8 +661,8 @@ void Cba_PrsReadBoxes( Cba_Man_t * p, Vec_Ptr_t * vBoxes, Vec_Int_t * vTypesCur, ...@@ -661,8 +661,8 @@ void Cba_PrsReadBoxes( Cba_Man_t * p, Vec_Ptr_t * vBoxes, Vec_Int_t * vTypesCur,
Vec_Ptr_t * vBox; int i; Vec_Ptr_t * vBox; int i;
Vec_PtrForEachEntry( Vec_Ptr_t *, vBoxes, vBox, i ) Vec_PtrForEachEntry( Vec_Ptr_t *, vBoxes, vBox, i )
{ {
Vec_IntPush( vTypesCur, CBA_PRS_BOX ); Vec_IntPush( vTypesCur, CBA_OBJ_BOX );
Vec_IntPush( vFuncsCur, Abc_NamStrFindOrAdd(p->pNames, Vec_PtrEntry(vBox, 0), NULL) ); Vec_IntPush( vFuncsCur, Abc_NamStrFindOrAdd(p->pModels, Vec_PtrEntry(vBox, 0), NULL) );
Vec_IntPush( vInstIdsCur, Abc_NamStrFindOrAdd(p->pNames, Vec_PtrEntry(vBox, 1), NULL) ); Vec_IntPush( vInstIdsCur, Abc_NamStrFindOrAdd(p->pNames, Vec_PtrEntry(vBox, 1), NULL) );
Vec_IntPush( vFaninsCur, Cba_ManHandleArray(p, Cba_PrsReadList(p, vBox, vList, 0, 1)) ); Vec_IntPush( vFaninsCur, Cba_ManHandleArray(p, Cba_PrsReadList(p, vBox, vList, 0, 1)) );
} }
...@@ -698,7 +698,7 @@ void Cba_PrsReadModule( Cba_Man_t * p, Vec_Ptr_t * vNtk ) ...@@ -698,7 +698,7 @@ void Cba_PrsReadModule( Cba_Man_t * p, Vec_Ptr_t * vNtk )
Vec_IntFree( vFaninsCur ); Vec_IntFree( vFaninsCur );
Vec_IntFree( vList ); Vec_IntFree( vList );
} }
Cba_Man_t * Cba_PrsReadDes( Vec_Ptr_t * vDes ) Cba_Man_t * Cba_PrsReadPtr( Vec_Ptr_t * vDes )
{ {
Vec_Ptr_t * vNtk; int i; Vec_Ptr_t * vNtk; int i;
Cba_Man_t * p = Cba_ManAlloc( (char *)Vec_PtrEntry(vDes, 0) ); Cba_Man_t * p = Cba_ManAlloc( (char *)Vec_PtrEntry(vDes, 0) );
...@@ -722,25 +722,37 @@ Cba_Man_t * Cba_PrsReadDes( Vec_Ptr_t * vDes ) ...@@ -722,25 +722,37 @@ Cba_Man_t * Cba_PrsReadDes( Vec_Ptr_t * vDes )
void Cba_ManReadDesExperiment( Abc_Ntk_t * pNtk ) void Cba_ManReadDesExperiment( Abc_Ntk_t * pNtk )
{ {
abctime clk = Abc_Clock(); abctime clk = Abc_Clock();
char * pFileName1 = Extra_FileNameGenericAppend(pNtk->pDesign->pName, "_out1.blif"); Cba_Man_t * p, * pTemp;
char * pFileName2 = Extra_FileNameGenericAppend(pNtk->pDesign->pName, "_out2.blif"); char * pFileName;
Cba_Man_t * p;
// derive Ptr from ABC
Vec_Ptr_t * vDes = Ptr_AbcDeriveDes( pNtk ); Vec_Ptr_t * vDes = Ptr_AbcDeriveDes( pNtk );
printf( "Converting to Ptr: Memory = %6.3f MB ", 1.0*Ptr_ManMemDes(vDes)/(1<<20) ); printf( "Converting to Ptr: Memory = %6.3f MB ", 1.0*Ptr_ManMemDes(vDes)/(1<<20) );
Abc_PrintTime( 1, "Time", Abc_Clock() - clk ); Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
// dump
Ptr_ManDumpBlif( pFileName1, vDes ); pFileName = Extra_FileNameGenericAppend(pNtk->pDesign->pName, "_out1.blif");
printf( "Finished writing output file \"%s\". ", pFileName1 ); Ptr_ManDumpBlif( pFileName, vDes );
printf( "Finished writing output file \"%s\". ", pFileName );
Abc_PrintTime( 1, "Time", Abc_Clock() - clk ); Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
p = Cba_PrsReadDes( vDes ); // derive CBA from Ptr
p = Cba_PrsReadPtr( vDes );
Ptr_ManFreeDes( vDes ); Ptr_ManFreeDes( vDes );
// dump
// Abc_NamPrint( p->pDesign->pNames ); pFileName = Extra_FileNameGenericAppend(pNtk->pDesign->pName, "_out2.blif");
Cba_PrsWriteBlif( pFileName2, p ); Cba_PrsWriteBlif( pFileName, p );
printf( "Finished writing output file \"%s\". ", pFileName );
Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
// Abc_NamPrint( p->pNames );
// build CBA from CBA
p = Cba_ManBuild( pTemp = p );
Cba_ManFree( pTemp );
// dump
pFileName = Extra_FileNameGenericAppend(pNtk->pDesign->pName, "_out3.blif");
Cba_ManWriteBlif( pFileName, p );
Cba_ManFree( p ); Cba_ManFree( p );
printf( "Finished writing output file \"%s\". ", pFileName2 ); printf( "Finished writing output file \"%s\". ", pFileName );
Abc_PrintTime( 1, "Time", Abc_Clock() - clk ); Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
} }
......
...@@ -27,6 +27,8 @@ ABC_NAMESPACE_IMPL_START ...@@ -27,6 +27,8 @@ ABC_NAMESPACE_IMPL_START
/// DECLARATIONS /// /// DECLARATIONS ///
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
extern char * Ptr_TypeToSop( int Type );
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS /// /// FUNCTION DEFINITIONS ///
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
...@@ -61,27 +63,28 @@ void Cba_PrsWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins ) ...@@ -61,27 +63,28 @@ void Cba_PrsWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins )
} }
void Cba_PrsWriteBlifLines( FILE * pFile, Cba_Ntk_t * p ) void Cba_PrsWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
{ {
Vec_Int_t * vFanins; int i, Type;
int Type, Func, i; Cba_NtkForEachObjType( p, Type, i )
Cba_NtkForEachObjTypeFuncFanins( p, Type, Func, vFanins, i ) if ( Type == CBA_OBJ_NODE ) // .names/assign/box2 (no formal/actual binding)
if ( Type == CBA_PRS_NODE ) // .names/assign/box2 (no formal/actual binding)
{ {
fprintf( pFile, ".names" ); fprintf( pFile, ".names" );
Cba_PrsWriteBlifArray( pFile, p, vFanins, 1 ); Cba_PrsWriteBlifArray( pFile, p, Cba_ObjFaninVec(p, i), 1 );
fprintf( pFile, "%s", Cba_NtkFuncStr(p, Func) ); //fprintf( pFile, "%s", Cba_NtkFuncStr(p, Cba_ObjFuncId(p, i)) );
fprintf( pFile, "%s", Ptr_TypeToSop( Cba_ObjFuncId(p, i) ) );
} }
else if ( Type == CBA_PRS_BOX ) // .names/assign/box2 (no formal/actual binding) else if ( Type == CBA_OBJ_BOX ) // .names/assign/box2 (no formal/actual binding)
{ {
fprintf( pFile, ".subckt" ); fprintf( pFile, ".subckt" );
fprintf( pFile, " %s", Cba_NtkStr(p, Func) ); fprintf( pFile, " %s", Cba_ObjFuncStr(p, i) );
Cba_PrsWriteBlifArray2( pFile, p, vFanins ); Cba_PrsWriteBlifArray2( pFile, p, Cba_ObjFaninVec(p, i) );
} }
else if ( Type == CBA_PRS_LATCH ) // .names/assign/box2 (no formal/actual binding) else if ( Type == CBA_OBJ_LATCH ) // .names/assign/box2 (no formal/actual binding)
{ {
Vec_Int_t * vFanins = Cba_ObjFaninVec(p, i);
fprintf( pFile, ".latch" ); fprintf( pFile, ".latch" );
fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 1)) ); fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 1)) );
fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 0)) ); fprintf( pFile, " %s", Cba_NtkStr(p, Vec_IntEntry(vFanins, 0)) );
fprintf( pFile, " %c\n", '0' + Func ); fprintf( pFile, " %c\n", '0' + Cba_ObjFuncId(p, i) );
} }
} }
void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p ) void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p )
...@@ -102,7 +105,7 @@ void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p ) ...@@ -102,7 +105,7 @@ void Cba_PrsWriteBlifNtk( FILE * pFile, Cba_Ntk_t * p )
Cba_PrsWriteBlifLines( pFile, p ); Cba_PrsWriteBlifLines( pFile, p );
fprintf( pFile, ".end\n\n" ); fprintf( pFile, ".end\n\n" );
} }
void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes ) void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * p )
{ {
FILE * pFile; FILE * pFile;
Cba_Ntk_t * pNtk; Cba_Ntk_t * pNtk;
...@@ -113,8 +116,8 @@ void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes ) ...@@ -113,8 +116,8 @@ void Cba_PrsWriteBlif( char * pFileName, Cba_Man_t * pDes )
printf( "Cannot open output file \"%s\".\n", pFileName ); printf( "Cannot open output file \"%s\".\n", pFileName );
return; return;
} }
fprintf( pFile, "// Design \"%s\" written by ABC on %s\n\n", Cba_ManName(pDes), Extra_TimeStamp() ); fprintf( pFile, "// Design \"%s\" written by ABC on %s\n\n", Cba_ManName(p), Extra_TimeStamp() );
Cba_ManForEachNtk( pDes, pNtk, i ) Cba_ManForEachNtk( p, pNtk, i )
Cba_PrsWriteBlifNtk( pFile, pNtk ); Cba_PrsWriteBlifNtk( pFile, pNtk );
fclose( pFile ); fclose( pFile );
} }
...@@ -142,12 +145,11 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in ...@@ -142,12 +145,11 @@ void Cba_ManWriteBlifArray( FILE * pFile, Cba_Ntk_t * p, Vec_Int_t * vFanins, in
void Cba_ManWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, int iObj ) void Cba_ManWriteBlifArray2( FILE * pFile, Cba_Ntk_t * p, int iObj )
{ {
int iTerm, i; int iTerm, i;
Vec_Int_t * vFanins = Cba_ObjFaninVec( p, iObj );
Cba_Ntk_t * pModel = Cba_ObjBoxModel( p, iObj ); Cba_Ntk_t * pModel = Cba_ObjBoxModel( p, iObj );
Cba_NtkForEachPi( pModel, iTerm, i ) Cba_NtkForEachPi( pModel, iTerm, i )
fprintf( pFile, " %s=%s", Cba_ObjNameStr(pModel, iTerm), Cba_ObjNameStr(p, Vec_IntEntry(vFanins, i)) ); fprintf( pFile, " %s=%s", Cba_ObjNameStr(pModel, iTerm), Cba_ObjNameStr(p, Cba_ObjBoxBi(p, iObj, i)) );
Cba_NtkForEachPo( pModel, iTerm, i ) Cba_NtkForEachPo( pModel, iTerm, i )
fprintf( pFile, " %s=%s", Cba_ObjNameStr(pModel, iTerm), Cba_ObjNameStr(p, iObj + 1 + i) ); fprintf( pFile, " %s=%s", Cba_ObjNameStr(pModel, iTerm), Cba_ObjNameStr(p, Cba_ObjBoxBo(p, iObj, i)) );
fprintf( pFile, "\n" ); fprintf( pFile, "\n" );
} }
void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p ) void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
...@@ -159,12 +161,13 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p ) ...@@ -159,12 +161,13 @@ void Cba_ManWriteBlifLines( FILE * pFile, Cba_Ntk_t * p )
{ {
fprintf( pFile, ".names" ); fprintf( pFile, ".names" );
Cba_ManWriteBlifArray( pFile, p, Cba_ObjFaninVec(p, i), i ); Cba_ManWriteBlifArray( pFile, p, Cba_ObjFaninVec(p, i), i );
fprintf( pFile, "%s", Cba_ObjFuncStr(p, i) ); //fprintf( pFile, "%s", Cba_NtkFuncStr(p, Cba_ObjFuncId(p, i)) );
fprintf( pFile, "%s", Ptr_TypeToSop( Cba_ObjFuncId(p, i) ) );
} }
else if ( Type == CBA_OBJ_BOX ) // .names/assign/box2 (no formal/actual binding) else if ( Type == CBA_OBJ_BOX ) // .names/assign/box2 (no formal/actual binding)
{ {
fprintf( pFile, ".subckt" ); fprintf( pFile, ".subckt" );
fprintf( pFile, " %s", Cba_ObjFuncStr(p, i) ); fprintf( pFile, " %s", Cba_NtkName(Cba_ObjBoxModel(p, i)) );
Cba_ManWriteBlifArray2( pFile, p, i ); Cba_ManWriteBlifArray2( pFile, p, i );
} }
else if ( Type == CBA_OBJ_LATCH ) // .names/assign/box2 (no formal/actual binding) else if ( Type == CBA_OBJ_LATCH ) // .names/assign/box2 (no formal/actual binding)
......
...@@ -134,7 +134,7 @@ void Cba_PrsWriteVerilogNodes( FILE * pFile, Cba_Ntk_t * p ) ...@@ -134,7 +134,7 @@ void Cba_PrsWriteVerilogNodes( FILE * pFile, Cba_Ntk_t * p )
{ {
int Type, Func, i; int Type, Func, i;
Cba_NtkForEachObjType( p, Type, i ) Cba_NtkForEachObjType( p, Type, i )
if ( Type == CBA_PRS_NODE ) // .names/assign/box2 (no formal/actual binding) if ( Type == CBA_OBJ_NODE ) // .names/assign/box2 (no formal/actual binding)
{ {
Func = Cba_ObjFuncId(p, i); Func = Cba_ObjFuncId(p, i);
if ( Func >= CBA_NODE_BUF && Func <= CBA_NODE_XNOR ) if ( Func >= CBA_NODE_BUF && Func <= CBA_NODE_XNOR )
...@@ -156,7 +156,7 @@ void Cba_PrsWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p ) ...@@ -156,7 +156,7 @@ void Cba_PrsWriteVerilogBoxes( FILE * pFile, Cba_Ntk_t * p )
{ {
int Type, i; int Type, i;
Cba_NtkForEachObjType( p, Type, i ) Cba_NtkForEachObjType( p, Type, i )
if ( Type == CBA_PRS_BOX ) // .subckt/.gate/box (formal/actual binding) if ( Type == CBA_OBJ_BOX ) // .subckt/.gate/box (formal/actual binding)
{ {
fprintf( pFile, " %s %s (", Cba_ObjFuncStr(p, i), Cba_ObjInstStr(p, i) ); fprintf( pFile, " %s %s (", Cba_ObjFuncStr(p, i), Cba_ObjInstStr(p, i) );
Cba_PrsWriteVerilogArray3( pFile, p, Cba_ObjFaninVec(p, i) ); Cba_PrsWriteVerilogArray3( pFile, p, Cba_ObjFaninVec(p, i) );
...@@ -204,7 +204,7 @@ void Cba_PrsWriteVerilogNtk( FILE * pFile, Cba_Ntk_t * p ) ...@@ -204,7 +204,7 @@ void Cba_PrsWriteVerilogNtk( FILE * pFile, Cba_Ntk_t * p )
Cba_PrsWriteVerilogBoxes( pFile, p ); Cba_PrsWriteVerilogBoxes( pFile, p );
fprintf( pFile, "endmodule\n\n" ); fprintf( pFile, "endmodule\n\n" );
} }
void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes ) void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * p )
{ {
FILE * pFile; FILE * pFile;
Cba_Ntk_t * pNtk; Cba_Ntk_t * pNtk;
...@@ -215,8 +215,8 @@ void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes ) ...@@ -215,8 +215,8 @@ void Cba_PrsWriteVerilog( char * pFileName, Cba_Man_t * pDes )
printf( "Cannot open output file \"%s\".\n", pFileName ); printf( "Cannot open output file \"%s\".\n", pFileName );
return; return;
} }
fprintf( pFile, "// Design \"%s\" written by ABC on %s\n\n", Cba_ManName(pDes), Extra_TimeStamp() ); fprintf( pFile, "// Design \"%s\" written by ABC on %s\n\n", Cba_ManName(p), Extra_TimeStamp() );
Cba_ManForEachNtk( pDes, pNtk, i ) Cba_ManForEachNtk( p, pNtk, i )
Cba_PrsWriteVerilogNtk( pFile, pNtk ); Cba_PrsWriteVerilogNtk( pFile, pNtk );
fclose( pFile ); fclose( pFile );
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment