diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2008-04-13 08:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2008-04-13 08:01:00 -0700 |
commit | 2dc38429884b93a04ef917cf75602437b421adf1 (patch) | |
tree | cb8d36ee9dd244359ce2e0da481af5828fc57925 /src/aig/nwk | |
parent | d8ddea4466d545c7c86d82b24365bc22a6ebd129 (diff) | |
download | abc-2dc38429884b93a04ef917cf75602437b421adf1.tar.gz abc-2dc38429884b93a04ef917cf75602437b421adf1.tar.bz2 abc-2dc38429884b93a04ef917cf75602437b421adf1.zip |
Version abc80413
Diffstat (limited to 'src/aig/nwk')
-rw-r--r-- | src/aig/nwk/nwk.h | 4 | ||||
-rw-r--r-- | src/aig/nwk/nwkMap.c | 2 | ||||
-rw-r--r-- | src/aig/nwk/nwkStrash.c | 2 | ||||
-rw-r--r-- | src/aig/nwk/nwkUtil.c | 91 |
4 files changed, 93 insertions, 6 deletions
diff --git a/src/aig/nwk/nwk.h b/src/aig/nwk/nwk.h index 6fc84893..c087cde8 100644 --- a/src/aig/nwk/nwk.h +++ b/src/aig/nwk/nwk.h @@ -85,7 +85,7 @@ struct Nwk_Obj_t_ void * pNext; // temporary pointer // node information unsigned Type : 3; // object type - unsigned fCompl : 1; // complemented attribute + unsigned fInvert : 1; // complemented attribute unsigned MarkA : 1; // temporary mark unsigned MarkB : 1; // temporary mark unsigned PioId : 26; // number of this node in the PI/PO list @@ -123,6 +123,8 @@ static inline Nwk_Obj_t * Nwk_ManCi( Nwk_Man_t * p, int i ) { return Vec_P static inline Nwk_Obj_t * Nwk_ManCo( Nwk_Man_t * p, int i ) { return Vec_PtrEntry( p->vCos, i ); } static inline Nwk_Obj_t * Nwk_ManObj( Nwk_Man_t * p, int i ) { return Vec_PtrEntry( p->vObjs, i ); } +static inline int Nwk_ObjId( Nwk_Obj_t * p ) { return p->Id; } +static inline int Nwk_ObjPioNum( Nwk_Obj_t * p ) { return p->PioId; } static inline int Nwk_ObjFaninNum( Nwk_Obj_t * p ) { return p->nFanins; } static inline int Nwk_ObjFanoutNum( Nwk_Obj_t * p ) { return p->nFanouts; } diff --git a/src/aig/nwk/nwkMap.c b/src/aig/nwk/nwkMap.c index f5b2b7f8..effffcf7 100644 --- a/src/aig/nwk/nwkMap.c +++ b/src/aig/nwk/nwkMap.c @@ -292,7 +292,7 @@ Nwk_Man_t * Nwk_ManFromIf( If_Man_t * pIfMan, Aig_Man_t * p, Vec_Ptr_t * vAigToI else if ( Aig_ObjIsPo(pObj) ) { pObjNew = Nwk_ManCreateCo( pNtk ); - pObjNew->fCompl = Aig_ObjFaninC0(pObj); + pObjNew->fInvert = Aig_ObjFaninC0(pObj); Nwk_ObjAddFanin( pObjNew, Aig_ObjFanin0(pObj)->pData ); } else if ( Aig_ObjIsConst1(pObj) ) diff --git a/src/aig/nwk/nwkStrash.c b/src/aig/nwk/nwkStrash.c index 8e49a586..a4ce5e39 100644 --- a/src/aig/nwk/nwkStrash.c +++ b/src/aig/nwk/nwkStrash.c @@ -119,7 +119,7 @@ Aig_Man_t * Nwk_ManStrash( Nwk_Man_t * pNtk ) } else if ( Nwk_ObjIsCo(pObj) ) { - pObjNew = Aig_ObjCreatePo( pMan, Aig_NotCond(Nwk_ObjFanin0(pObj)->pCopy, pObj->fCompl) ); + pObjNew = Aig_ObjCreatePo( pMan, Aig_NotCond(Nwk_ObjFanin0(pObj)->pCopy, pObj->fInvert) ); Level = Aig_ObjLevel( pObjNew ); Tim_ManSetCoArrival( pMan->pManTime, pObj->PioId, (float)Level ); } diff --git a/src/aig/nwk/nwkUtil.c b/src/aig/nwk/nwkUtil.c index 97c95d27..f30f7251 100644 --- a/src/aig/nwk/nwkUtil.c +++ b/src/aig/nwk/nwkUtil.c @@ -19,7 +19,8 @@ ***********************************************************************/ #include "nwk.h" -#include "math.h" +#include "kit.h" +#include <math.h> //////////////////////////////////////////////////////////////////////// /// DECLARATIONS /// @@ -250,9 +251,93 @@ void Nwk_ObjPrint( Nwk_Obj_t * pObj ) SeeAlso [] ***********************************************************************/ -void Nwk_ManDumpBlif( Nwk_Man_t * pNtk, char * pFileName, Vec_Ptr_t * vCiNames, Vec_Ptr_t * vCoNames ) +void Nwk_ManDumpBlif( Nwk_Man_t * pNtk, char * pFileName, Vec_Ptr_t * vPiNames, Vec_Ptr_t * vPoNames ) { - printf( "Dumping logic network is currently not supported.\n" ); + FILE * pFile; + Vec_Ptr_t * vNodes; + Vec_Int_t * vTruth; + Vec_Int_t * vCover; + Nwk_Obj_t * pObj, * pFanin; + Aig_MmFlex_t * pMem; + char * pSop = NULL; + unsigned * pTruth; + int i, k, nDigits, Counter = 0; + if ( Nwk_ManPoNum(pNtk) == 0 ) + { + printf( "Nwk_ManDumpBlif(): Network does not have POs.\n" ); + return; + } + // collect nodes in the DFS order + nDigits = Aig_Base10Log( Nwk_ManObjNumMax(pNtk) ); + // write the file + pFile = fopen( pFileName, "w" ); + fprintf( pFile, "# BLIF file written by procedure Nwk_ManDumpBlif()\n" ); +// fprintf( pFile, "# http://www.eecs.berkeley.edu/~alanmi/abc/\n" ); + fprintf( pFile, ".model %s\n", pNtk->pName ); + // write PIs + fprintf( pFile, ".inputs" ); + Nwk_ManForEachCi( pNtk, pObj, i ) + if ( vPiNames ) + fprintf( pFile, " %s", Vec_PtrEntry(vPiNames, i) ); + else + fprintf( pFile, " n%0*d", nDigits, pObj->Id ); + fprintf( pFile, "\n" ); + // write POs + fprintf( pFile, ".outputs" ); + Nwk_ManForEachCo( pNtk, pObj, i ) + if ( vPoNames ) + fprintf( pFile, " %s", Vec_PtrEntry(vPoNames, i) ); + else + fprintf( pFile, " n%0*d", nDigits, pObj->Id ); + fprintf( pFile, "\n" ); + // write nodes + pMem = Aig_MmFlexStart(); + vTruth = Vec_IntAlloc( 1 << 16 ); + vCover = Vec_IntAlloc( 1 << 16 ); + vNodes = Nwk_ManDfs( pNtk ); + Vec_PtrForEachEntry( vNodes, pObj, i ) + { + if ( !Nwk_ObjIsNode(pObj) ) + continue; + // derive SOP for the AIG + pTruth = Hop_ManConvertAigToTruth( pNtk->pManHop, Hop_Regular(pObj->pFunc), Nwk_ObjFaninNum(pObj), vTruth, 0 ); + if ( Hop_IsComplement(pObj->pFunc) ) + Kit_TruthNot( pTruth, pTruth, Nwk_ObjFaninNum(pObj) ); + pSop = Kit_PlaFromTruth( pMem, pTruth, Nwk_ObjFaninNum(pObj), vCover ); + // write the node + fprintf( pFile, ".names" ); + if ( !Kit_TruthIsConst0(pTruth, Nwk_ObjFaninNum(pObj)) && !Kit_TruthIsConst1(pTruth, Nwk_ObjFaninNum(pObj)) ) + { + Nwk_ObjForEachFanin( pObj, pFanin, k ) + if ( vPiNames && Nwk_ObjIsPi(pFanin) ) + fprintf( pFile, " %s", Vec_PtrEntry(vPiNames, Nwk_ObjPioNum(pFanin)) ); + else + fprintf( pFile, " n%0*d", nDigits, pFanin->Id ); + } + fprintf( pFile, " n%0*d\n", nDigits, pObj->Id ); + // write the function + fprintf( pFile, "%s", pSop ); + } + Vec_IntFree( vCover ); + Vec_IntFree( vTruth ); + Vec_PtrFree( vNodes ); + Aig_MmFlexStop( pMem, 0 ); + // write POs + Nwk_ManForEachCo( pNtk, pObj, i ) + { + fprintf( pFile, ".names" ); + if ( vPiNames && Nwk_ObjIsPi(Nwk_ObjFanin0(pObj)) ) + fprintf( pFile, " %s", Vec_PtrEntry(vPiNames, Nwk_ObjPioNum(Nwk_ObjFanin0(pObj))) ); + else + fprintf( pFile, " n%0*d", nDigits, Nwk_ObjFanin0(pObj)->Id ); + if ( vPoNames ) + fprintf( pFile, " %s\n", Vec_PtrEntry(vPoNames, Nwk_ObjPioNum(pObj)) ); + else + fprintf( pFile, " n%0*d\n", nDigits, pObj->Id ); + fprintf( pFile, "%d 1\n", !pObj->fInvert ); + } + fprintf( pFile, ".end\n\n" ); + fclose( pFile ); } /**Function************************************************************* |