summaryrefslogtreecommitdiff
path: root/src/aig
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig')
-rw-r--r--src/aig/gia/gia.h2
-rw-r--r--src/aig/gia/giaAiger.c12
-rw-r--r--src/aig/gia/giaBalAig.c12
-rw-r--r--src/aig/gia/giaDup.c28
-rw-r--r--src/aig/gia/giaEquiv.c4
-rw-r--r--src/aig/gia/giaFalse.c2
-rw-r--r--src/aig/gia/giaHcd.c2
-rw-r--r--src/aig/gia/giaIf.c21
-rw-r--r--src/aig/gia/giaIso.c2
-rw-r--r--src/aig/gia/giaMan.c4
-rw-r--r--src/aig/gia/giaMini.c142
-rw-r--r--src/aig/gia/giaSweeper.c2
-rw-r--r--src/aig/gia/giaTim.c4
-rw-r--r--src/aig/ivy/ivyFraig.c2
-rw-r--r--src/aig/miniaig/abcOper.h7
15 files changed, 225 insertions, 21 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h
index fcf6fd2..d637531 100644
--- a/src/aig/gia/gia.h
+++ b/src/aig/gia/gia.h
@@ -1191,7 +1191,7 @@ static inline int Gia_ObjCellId( Gia_Man_t * p, int iLit ) { re
extern int Gia_FileSize( char * pFileName );
extern Gia_Man_t * Gia_AigerReadFromMemory( char * pContents, int nFileSize, int fGiaSimple, int fSkipStrash, int fCheck );
extern Gia_Man_t * Gia_AigerRead( char * pFileName, int fGiaSimple, int fSkipStrash, int fCheck );
-extern void Gia_AigerWrite( Gia_Man_t * p, char * pFileName, int fWriteSymbols, int fCompact );
+extern void Gia_AigerWrite( Gia_Man_t * p, char * pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine );
extern void Gia_DumpAiger( Gia_Man_t * p, char * pFilePrefix, int iFileNum, int nFileNumDigits );
extern Vec_Str_t * Gia_AigerWriteIntoMemoryStr( Gia_Man_t * p );
extern Vec_Str_t * Gia_AigerWriteIntoMemoryStrPart( Gia_Man_t * p, Vec_Int_t * vCis, Vec_Int_t * vAnds, Vec_Int_t * vCos, int nRegs );
diff --git a/src/aig/gia/giaAiger.c b/src/aig/gia/giaAiger.c
index 97f40ae..03929af 100644
--- a/src/aig/gia/giaAiger.c
+++ b/src/aig/gia/giaAiger.c
@@ -1076,7 +1076,7 @@ Vec_Str_t * Gia_AigerWriteIntoMemoryStrPart( Gia_Man_t * p, Vec_Int_t * vCis, Ve
SeeAlso []
***********************************************************************/
-void Gia_AigerWrite( Gia_Man_t * pInit, char * pFileName, int fWriteSymbols, int fCompact )
+void Gia_AigerWrite( Gia_Man_t * pInit, char * pFileName, int fWriteSymbols, int fCompact, int fWriteNewLine )
{
int fVerbose = XAIG_VERBOSE;
FILE * pFile;
@@ -1194,8 +1194,10 @@ void Gia_AigerWrite( Gia_Man_t * pInit, char * pFileName, int fWriteSymbols, int
}
// write the comment
-// fprintf( pFile, "c\n" );
- fprintf( pFile, "c" );
+ if ( fWriteNewLine )
+ fprintf( pFile, "c\n" );
+ else
+ fprintf( pFile, "c" );
// write additional AIG
if ( p->pAigExtra )
@@ -1406,6 +1408,8 @@ void Gia_AigerWrite( Gia_Man_t * pInit, char * pFileName, int fWriteSymbols, int
fprintf( pFile, "%c", '\0' );
}
// write comments
+ if ( fWriteNewLine )
+ fprintf( pFile, "c\n" );
fprintf( pFile, "\nThis file was produced by the GIA package in ABC on %s\n", Gia_TimeStamp() );
fprintf( pFile, "For information about AIGER format, refer to %s\n", "http://fmv.jku.at/aiger" );
fclose( pFile );
@@ -1433,7 +1437,7 @@ void Gia_DumpAiger( Gia_Man_t * p, char * pFilePrefix, int iFileNum, int nFileNu
{
char Buffer[100];
sprintf( Buffer, "%s%0*d.aig", pFilePrefix, nFileNumDigits, iFileNum );
- Gia_AigerWrite( p, Buffer, 0, 0 );
+ Gia_AigerWrite( p, Buffer, 0, 0, 0 );
}
/**Function*************************************************************
diff --git a/src/aig/gia/giaBalAig.c b/src/aig/gia/giaBalAig.c
index 018bfca..a3a0719 100644
--- a/src/aig/gia/giaBalAig.c
+++ b/src/aig/gia/giaBalAig.c
@@ -399,6 +399,12 @@ Gia_Man_t * Gia_ManBalanceInt( Gia_Man_t * p, int fStrict )
Gia_ManForEachCiId( pNew, Id, i )
Vec_IntWriteEntry( pNew->vLevels, Id, Vec_IntEntry(p->vCiArrs, i)/And2Delay );
}
+ else if ( p->vInArrs )
+ {
+ int Id, And2Delay = p->And2Delay ? p->And2Delay : 1;
+ Gia_ManForEachCiId( pNew, Id, i )
+ Vec_IntWriteEntry( pNew->vLevels, Id, (int)(Vec_FltEntry(p->vInArrs, i)/And2Delay) );
+ }
// create internal nodes
Gia_ManHashStart( pNew );
Gia_ManForEachBuf( p, pObj, i )
@@ -1051,6 +1057,12 @@ Gia_Man_t * Gia_ManAreaBalance( Gia_Man_t * p, int fSimpleAnd, int nNewNodesMax,
Gia_ManForEachCiId( p, Id, i )
Vec_IntWriteEntry( p->vLevels, Id, Vec_IntEntry(p->vCiArrs, i)/And2Delay );
}
+ else if ( p->vInArrs )
+ {
+ int i, Id, And2Delay = p->And2Delay ? p->And2Delay : 1;
+ Gia_ManForEachCiId( p, Id, i )
+ Vec_IntWriteEntry( p->vLevels, Id, (int)(Vec_FltEntry(p->vInArrs, i)/And2Delay) );
+ }
// determine CI levels
if ( p->pManTime && p->vLevels == NULL )
Gia_ManLevelWithBoxes( p );
diff --git a/src/aig/gia/giaDup.c b/src/aig/gia/giaDup.c
index 01c01f3..923fbba 100644
--- a/src/aig/gia/giaDup.c
+++ b/src/aig/gia/giaDup.c
@@ -2815,6 +2815,30 @@ Gia_Man_t * Gia_ManDupAndOr( Gia_Man_t * p, int nOuts, int fUseOr, int fCompl )
/**Function*************************************************************
+ Synopsis [Transforms output names.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Vec_Ptr_t * Gia_ManMiterNames( Vec_Ptr_t * p )
+{
+ char * pName1, * pName2, pBuffer[1000]; int i;
+ Vec_Ptr_t * pNew = Vec_PtrAlloc( Vec_PtrSize(p)/2 );
+ assert( Vec_PtrSize(p) % 2 == 0 );
+ Vec_PtrForEachEntryDouble( char *, char *, p, pName1, pName2, i )
+ {
+ sprintf( pBuffer, "%s_xor_%s", pName1, pName2 );
+ Vec_PtrPush( pNew, Abc_UtilStrsav(pBuffer) );
+ }
+ return pNew;
+}
+
+/**Function*************************************************************
+
Synopsis [Transforms the circuit into a regular miter.]
Description []
@@ -2851,6 +2875,10 @@ Gia_Man_t * Gia_ManTransformMiter( Gia_Man_t * p )
Gia_ManSetRegNum( pNew, Gia_ManRegNum(p) );
pNew = Gia_ManCleanup( pTemp = pNew );
Gia_ManStop( pTemp );
+ if ( p->vNamesIn )
+ pNew->vNamesIn = Vec_PtrDupStr(p->vNamesIn);
+ if ( p->vNamesOut )
+ pNew->vNamesOut = Gia_ManMiterNames(p->vNamesOut);
return pNew;
}
Gia_Man_t * Gia_ManTransformMiter2( Gia_Man_t * p )
diff --git a/src/aig/gia/giaEquiv.c b/src/aig/gia/giaEquiv.c
index 84d9f1b..2098768 100644
--- a/src/aig/gia/giaEquiv.c
+++ b/src/aig/gia/giaEquiv.c
@@ -1994,14 +1994,14 @@ int Gia_CommandSpecI( Gia_Man_t * pGia, int nFramesInit, int nBTLimitInit, int f
}
}
// write equivalence classes
- Gia_AigerWrite( pGia, "gore.aig", 0, 0 );
+ Gia_AigerWrite( pGia, "gore.aig", 0, 0, 0 );
// reduce the model
pReduce = Gia_ManSpecReduce( pGia, 0, 0, 1, 0, 0 );
if ( pReduce )
{
pReduce = Gia_ManSeqStructSweep( pAux = pReduce, 1, 1, 0 );
Gia_ManStop( pAux );
- Gia_AigerWrite( pReduce, "gsrm.aig", 0, 0 );
+ Gia_AigerWrite( pReduce, "gsrm.aig", 0, 0, 0 );
// Abc_Print( 1, "Speculatively reduced model was written into file \"%s\".\n", "gsrm.aig" );
// Gia_ManPrintStatsShort( pReduce );
Gia_ManStop( pReduce );
diff --git a/src/aig/gia/giaFalse.c b/src/aig/gia/giaFalse.c
index a055b5b..50cb8ea 100644
--- a/src/aig/gia/giaFalse.c
+++ b/src/aig/gia/giaFalse.c
@@ -457,7 +457,7 @@ Gia_Man_t * Gia_ManCheckOne( Gia_Man_t * p, int iOut, int iObj, int nTimeOut, in
if ( pNew )
{
Gia_Man_t * pTemp = Gia_ManDupDfsNode( p, Gia_ManObj(p, iObj) );
- Gia_AigerWrite( pTemp, "false.aig", 0, 0 );
+ Gia_AigerWrite( pTemp, "false.aig", 0, 0, 0 );
Abc_Print( 1, "Dumping cone with %d nodes into file \"%s\".\n", Gia_ManAndNum(pTemp), "false.aig" );
Gia_ManStop( pTemp );
}
diff --git a/src/aig/gia/giaHcd.c b/src/aig/gia/giaHcd.c
index 5d3e28f..8e8461e 100644
--- a/src/aig/gia/giaHcd.c
+++ b/src/aig/gia/giaHcd.c
@@ -626,7 +626,7 @@ Aig_Man_t * Hcd_ComputeChoices( Aig_Man_t * pAig, int nBTLimit, int fSynthesis,
Vec_PtrForEachEntry( Gia_Man_t *, vGias, pGia, i )
Gia_ManStop( pGia );
- Gia_AigerWrite( pMiter, "m3.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "m3.aig", 0, 0, 0 );
}
else
{
diff --git a/src/aig/gia/giaIf.c b/src/aig/gia/giaIf.c
index 0c39cae..53e1953 100644
--- a/src/aig/gia/giaIf.c
+++ b/src/aig/gia/giaIf.c
@@ -2132,6 +2132,7 @@ void Gia_ManTransferTiming( Gia_Man_t * p, Gia_Man_t * pGia )
p->vOutReqs = pGia->vOutReqs; pGia->vOutReqs = NULL;
p->DefInArrs = pGia->DefInArrs;
p->DefOutReqs = pGia->DefOutReqs;
+ p->And2Delay = pGia->And2Delay;
}
if ( pGia->vNamesIn || pGia->vNamesOut )
{
@@ -2231,7 +2232,7 @@ Gia_Man_t * Gia_ManPerformMappingInt( Gia_Man_t * p, If_Par_t * pPars )
{
extern void Gia_ManIffTest( Gia_Man_t * pGia, If_LibLut_t * pLib, int fVerbose );
Gia_Man_t * pNew;
- If_Man_t * pIfMan; int i, Entry;
+ If_Man_t * pIfMan; int i, Entry;//, Id, EntryF;
assert( pPars->pTimesArr == NULL );
assert( pPars->pTimesReq == NULL );
if ( p->vCiArrs )
@@ -2241,6 +2242,15 @@ Gia_Man_t * Gia_ManPerformMappingInt( Gia_Man_t * p, If_Par_t * pPars )
Vec_IntForEachEntry( p->vCiArrs, Entry, i )
pPars->pTimesArr[i] = (float)Entry;
}
+/* // uncommenting this leads to a mysterious memory corruption
+ else if ( p->vInArrs )
+ {
+ assert( Vec_FltSize(p->vInArrs) == Gia_ManCiNum(p) );
+ pPars->pTimesArr = ABC_CALLOC( float, Gia_ManCiNum(p));
+ Gia_ManForEachCiId( p, Id, i )
+ pPars->pTimesArr[i] = Vec_FltEntry(p->vInArrs, i);
+ }
+*/
if ( p->vCoReqs )
{
assert( Vec_IntSize(p->vCoReqs) == Gia_ManCoNum(p) );
@@ -2248,6 +2258,15 @@ Gia_Man_t * Gia_ManPerformMappingInt( Gia_Man_t * p, If_Par_t * pPars )
Vec_IntForEachEntry( p->vCoReqs, Entry, i )
pPars->pTimesReq[i] = (float)Entry;
}
+/* // uncommenting this leads to a mysterious memory corruption
+ else if ( p->vOutReqs )
+ {
+ assert( Vec_FltSize(p->vOutReqs) == Gia_ManCoNum(p) );
+ pPars->pTimesReq = ABC_CALLOC( float, Gia_ManCoNum(p) );
+ Vec_FltForEachEntry( p->vOutReqs, EntryF, i )
+ pPars->pTimesReq[i] = EntryF;
+ }
+*/
ABC_FREE( p->pCellStr );
Vec_IntFreeP( &p->vConfigs );
// disable cut minimization when GIA strucure is needed
diff --git a/src/aig/gia/giaIso.c b/src/aig/gia/giaIso.c
index 0e040b6..76419e9 100644
--- a/src/aig/gia/giaIso.c
+++ b/src/aig/gia/giaIso.c
@@ -1293,7 +1293,7 @@ void Gia_IsoTest( Gia_Man_t * p, Abc_Cex_t * pCex, int fVerbose )
// create AIG with two primary outputs (original and permuted)
pPerm = Gia_ManDupPerm( p, vPiPerm );
pDouble = Gia_ManDupAppendNew( p, pPerm );
-//Gia_AigerWrite( pDouble, "test.aig", 0, 0 );
+//Gia_AigerWrite( pDouble, "test.aig", 0, 0, 0 );
// analyze the two-output miter
pAig = Gia_ManIsoReduce( pDouble, &vPosEquivs, &vPisPerm, 0, 0, 0, 0 );
diff --git a/src/aig/gia/giaMan.c b/src/aig/gia/giaMan.c
index 53b686a..25355fe 100644
--- a/src/aig/gia/giaMan.c
+++ b/src/aig/gia/giaMan.c
@@ -241,10 +241,10 @@ void Gia_ManPrintClasses_old( Gia_Man_t * p )
{
Gia_Man_t * pTemp;
pTemp = Gia_ManDupFlopClass( p, 1 );
- Gia_AigerWrite( pTemp, "dom1.aig", 0, 0 );
+ Gia_AigerWrite( pTemp, "dom1.aig", 0, 0, 0 );
Gia_ManStop( pTemp );
pTemp = Gia_ManDupFlopClass( p, 2 );
- Gia_AigerWrite( pTemp, "dom2.aig", 0, 0 );
+ Gia_AigerWrite( pTemp, "dom2.aig", 0, 0, 0 );
Gia_ManStop( pTemp );
}
}
diff --git a/src/aig/gia/giaMini.c b/src/aig/gia/giaMini.c
index 0ba2c4f..78d99ca 100644
--- a/src/aig/gia/giaMini.c
+++ b/src/aig/gia/giaMini.c
@@ -573,7 +573,7 @@ int * Abc_FrameReadMiniLutNameMapping( Abc_Frame_t * pAbc )
if ( pAbc->pGiaMiniAig == NULL || pAbc->pGiaMiniLut == NULL )
return NULL;
pGia = Gia_ManDup2( pAbc->pGiaMiniAig, pAbc->pGiaMiniLut );
- //Gia_AigerWrite( pGia, "aig_m_lut.aig", 0, 0 );
+ //Gia_AigerWrite( pGia, "aig_m_lut.aig", 0, 0, 0 );
// compute equivalences in this AIG
pTemp = Gia_ManComputeGiaEquivs( pGia, nConfs, fVerbose );
Gia_ManStop( pTemp );
@@ -593,7 +593,14 @@ int * Abc_FrameReadMiniLutNameMapping( Abc_Frame_t * pAbc )
Synopsis [Returns equivalences of MiniAig nodes.]
- Description []
+ Description [The resulting array contains as many entries as there are objects
+ in the initial MiniAIG. If the i-th entry of the array is equal to -1, it means
+ that the i-th MiniAIG object is not equivalent to any other object. Otherwise,
+ the i-th entry contains the literal of the representative of the equivalence
+ class of objects, to which the i-th object belongs. The representative is defined
+ as the first object belonging to the equivalence class in the current topological
+ order. It can be the constant 0 node, a flop output or an internal node. It is
+ the user's responsibility to free the resulting array when it is not needed.]
SideEffects []
@@ -658,6 +665,137 @@ int * Abc_FrameReadMiniAigEquivClasses( Abc_Frame_t * pAbc )
return pRes;
}
+/**Function*************************************************************
+
+ Synopsis [Verifies equivalences of MiniAig nodes.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Gia_Man_t * Gia_MiniAigReduce( Mini_Aig_t * p, int * pEquivs )
+{
+ Gia_Man_t * pGia, * pTemp;
+ Vec_Int_t * vCopies;
+ int i, iGiaLit = 0, nNodes;
+ // get the number of nodes
+ nNodes = Mini_AigNodeNum(p);
+ // create ABC network
+ pGia = Gia_ManStart( nNodes );
+ pGia->pName = Abc_UtilStrsav( "MiniAig" );
+ // create mapping from MiniAIG objects into ABC objects
+ vCopies = Vec_IntAlloc( nNodes );
+ Vec_IntPush( vCopies, 0 );
+ // iterate through the objects
+ Gia_ManHashAlloc( pGia );
+ for ( i = 1; i < nNodes; i++ )
+ {
+ if ( Mini_AigNodeIsPi( p, i ) )
+ iGiaLit = Gia_ManAppendCi(pGia);
+ else if ( Mini_AigNodeIsPo( p, i ) )
+ iGiaLit = Gia_ManAppendCo(pGia, Gia_ObjFromMiniFanin0Copy(pGia, vCopies, p, i));
+ else if ( Mini_AigNodeIsAnd( p, i ) )
+ iGiaLit = Gia_ManHashAnd(pGia, Gia_ObjFromMiniFanin0Copy(pGia, vCopies, p, i), Gia_ObjFromMiniFanin1Copy(pGia, vCopies, p, i));
+ else assert( 0 );
+ if ( pEquivs[i] != -1 )
+ iGiaLit = Abc_LitNotCond( Vec_IntEntry(vCopies, Abc_Lit2Var(pEquivs[i])), Abc_LitIsCompl(pEquivs[i]) );
+ Vec_IntPush( vCopies, iGiaLit );
+ }
+ Gia_ManHashStop( pGia );
+ assert( Vec_IntSize(vCopies) == nNodes );
+ Vec_IntFree( vCopies );
+ Gia_ManSetRegNum( pGia, Mini_AigRegNum(p) );
+ pGia = Gia_ManSeqCleanup( pTemp = pGia );
+ Gia_ManStop( pTemp );
+ return pGia;
+}
+Gia_Man_t * Gia_MiniAigMiter( Mini_Aig_t * p, int * pEquivs )
+{
+ Gia_Man_t * pGia, * pTemp;
+ Vec_Int_t * vCopies;
+ int i, iGiaLit = 0, iGiaLit2, nNodes, iPos = 0, nPos = 0, Temp;
+ // get the number of nodes
+ nNodes = Mini_AigNodeNum(p);
+ // create ABC network
+ pGia = Gia_ManStart( 2 * nNodes );
+ pGia->pName = Abc_UtilStrsav( "MiniAig" );
+ // create mapping from MiniAIG objects into ABC objects
+ vCopies = Vec_IntAlloc( nNodes );
+ Vec_IntPush( vCopies, 0 );
+ // iterate through the objects
+ Gia_ManHashAlloc( pGia );
+ for ( i = 1; i < nNodes; i++ )
+ {
+ if ( Mini_AigNodeIsPi( p, i ) )
+ iGiaLit = Gia_ManAppendCi(pGia);
+ else if ( Mini_AigNodeIsPo( p, i ) )
+ {
+ nPos++;
+ Vec_IntPush( vCopies, -1 );
+ continue;
+ }
+ else if ( Mini_AigNodeIsAnd( p, i ) )
+ iGiaLit = Gia_ManHashAnd(pGia, Gia_ObjFromMiniFanin0Copy(pGia, vCopies, p, i), Gia_ObjFromMiniFanin1Copy(pGia, vCopies, p, i));
+ else assert( 0 );
+ Vec_IntPush( vCopies, iGiaLit );
+ }
+ assert( Vec_IntSize(vCopies) == nNodes );
+ assert( nPos > Mini_AigRegNum(p) );
+ // create miters for each equiv class
+ for ( i = 1; i < nNodes; i++ )
+ {
+ if ( pEquivs[i] == -1 )
+ continue;
+ iGiaLit = Vec_IntEntry(vCopies, i);
+ iGiaLit2 = Abc_LitNotCond( Vec_IntEntry(vCopies, Abc_Lit2Var(pEquivs[i])), Abc_LitIsCompl(pEquivs[i]) );
+ Gia_ManAppendCo( pGia, Gia_ManHashXor(pGia, iGiaLit, iGiaLit2) );
+ }
+ // create flop inputs
+ Temp = Gia_ManCoNum(pGia);
+ for ( i = 1; i < nNodes; i++ )
+ {
+ if ( !Mini_AigNodeIsPo( p, i ) )
+ continue;
+ if ( iPos++ >= nPos - Mini_AigRegNum(p) )
+ Gia_ManAppendCo(pGia, Gia_ObjFromMiniFanin0Copy(pGia, vCopies, p, i));
+ }
+ assert( iPos == nPos );
+ assert( Mini_AigRegNum(p) == Gia_ManCoNum(pGia) - Temp );
+ Gia_ManSetRegNum( pGia, Mini_AigRegNum(p) );
+ Gia_ManHashStop( pGia );
+ Vec_IntFree( vCopies );
+ pGia = Gia_ManCleanup( pTemp = pGia );
+ Gia_ManStop( pTemp );
+ return pGia;
+}
+void Gia_MiniAigVerify( Abc_Frame_t * pAbc, char * pFileName )
+{
+ int * pEquivs;
+ Gia_Man_t * pGia;
+ char * pFileMiter = "mini_aig_miter.aig";
+ char * pFileReduced = "mini_aig_reduced.aig";
+ Mini_Aig_t * p = Mini_AigLoad( pFileName );
+ Abc_FrameGiaInputMiniAig( pAbc, p );
+ Cmd_CommandExecute( pAbc, "&ps; &scorr; &ps" );
+ pEquivs = Abc_FrameReadMiniAigEquivClasses( pAbc );
+ // dump miter for verification
+ pGia = Gia_MiniAigMiter( p, pEquivs );
+ Gia_AigerWrite( pGia, pFileMiter, 0, 0, 0 );
+ printf( "Dumped miter AIG in file \"%s\".\n", pFileMiter );
+ Gia_ManStop( pGia );
+ // dump reduced AIG
+ pGia = Gia_MiniAigReduce( p, pEquivs );
+ Gia_AigerWrite( pGia, pFileReduced, 0, 0, 0 );
+ printf( "Dumped reduced AIG in file \"%s\".\n", pFileReduced );
+ Gia_ManStop( pGia );
+ // cleanup
+ ABC_FREE( pEquivs );
+ Mini_AigStop( p );
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
diff --git a/src/aig/gia/giaSweeper.c b/src/aig/gia/giaSweeper.c
index c1ce596..de3f404 100644
--- a/src/aig/gia/giaSweeper.c
+++ b/src/aig/gia/giaSweeper.c
@@ -439,7 +439,7 @@ void Gia_SweeperLogicDump( Gia_Man_t * p, Vec_Int_t * vProbeIds, int fDumpConds,
Gia_ManStop( pGiaCond );
printf( " and conditions" );
}
- Gia_AigerWrite( pGiaOuts, pFileName, 0, 0 );
+ Gia_AigerWrite( pGiaOuts, pFileName, 0, 0, 0 );
Gia_ManStop( pGiaOuts );
printf( " into file \"%s\".\n", pFileName );
}
diff --git a/src/aig/gia/giaTim.c b/src/aig/gia/giaTim.c
index 2221279..e136f68 100644
--- a/src/aig/gia/giaTim.c
+++ b/src/aig/gia/giaTim.c
@@ -962,8 +962,8 @@ int Gia_ManVerifyWithBoxes( Gia_Man_t * pGia, int nBTLimit, int nTimeLim, int fS
char * pNameGeneric = Extra_FileNameGeneric( pFileSpec ? pFileSpec : pGia->pSpec );
sprintf( pFileName0, "%s_spec.aig", pNameGeneric );
sprintf( pFileName1, "%s_impl.aig", pNameGeneric );
- Gia_AigerWrite( pGia0, pFileName0, 0, 0 );
- Gia_AigerWrite( pGia1, pFileName1, 0, 0 );
+ Gia_AigerWrite( pGia0, pFileName0, 0, 0, 0 );
+ Gia_AigerWrite( pGia1, pFileName1, 0, 0, 0 );
ABC_FREE( pNameGeneric );
printf( "Dumped two parts of the miter into files \"%s\" and \"%s\".\n", pFileName0, pFileName1 );
}
diff --git a/src/aig/ivy/ivyFraig.c b/src/aig/ivy/ivyFraig.c
index d9887d7..b51902b 100644
--- a/src/aig/ivy/ivyFraig.c
+++ b/src/aig/ivy/ivyFraig.c
@@ -1354,7 +1354,7 @@ int Ivy_FraigCheckOutputSims( Ivy_FraigMan_t * p )
// pObj = Ivy_ManPo( p->pManAig, 0 );
Ivy_ManForEachPo( p->pManAig, pObj, i )
{
- assert( Ivy_ObjFanin0(pObj)->fPhase == (unsigned)Ivy_ObjFaninC0(pObj) ); // Ivy_ObjFaninPhase(Ivy_ObjChild0(pObj)) == 0
+ //assert( Ivy_ObjFanin0(pObj)->fPhase == (unsigned)Ivy_ObjFaninC0(pObj) ); // Ivy_ObjFaninPhase(Ivy_ObjChild0(pObj)) == 0
// complement simulation info
// if ( Ivy_ObjFanin0(pObj)->fPhase ^ Ivy_ObjFaninC0(pObj) ) // Ivy_ObjFaninPhase(Ivy_ObjChild0(pObj))
// Ivy_NodeComplementSim( p, Ivy_ObjFanin0(pObj) );
diff --git a/src/aig/miniaig/abcOper.h b/src/aig/miniaig/abcOper.h
index 5719d88..6ee043a 100644
--- a/src/aig/miniaig/abcOper.h
+++ b/src/aig/miniaig/abcOper.h
@@ -60,7 +60,7 @@ typedef enum {
ABC_OPER_BIT_NXOR, // 18
ABC_OPER_BIT_SHARP, // 19
ABC_OPER_BIT_SHARPL, // 20
- ABC_OPER_BIT_MUX, // 21
+ ABC_OPER_BIT_MUX, // 21 fanins are: {Ctrl, Data1, Data0}
ABC_OPER_BIT_MAJ, // 22
ABC_OPER_ABC, // 23
@@ -86,7 +86,7 @@ typedef enum {
ABC_OPER_LOGIC_XOR, // 41
ABC_OPER_LOGIC_XNOR, // 42
- ABC_OPER_SEL_NMUX, // 43
+ ABC_OPER_SEL_NMUX, // 43 fanins are: {Ctrl, Data0, Data1, Data2, ...}
ABC_OPER_SEL_SEL, // 44
ABC_OPER_SEL_PSEL, // 45
ABC_OPER_SEL_ENC, // 46
@@ -217,11 +217,14 @@ static inline char * Abc_OperName( int Type )
if ( Type == ABC_OPER_SHIFT_ROTL ) return "rotL";
if ( Type == ABC_OPER_SHIFT_ROTR ) return "rotR";
+ if ( Type == ABC_OPER_DFFRSE ) return "DFFRSE";
+
if ( Type == ABC_OPER_SLICE ) return "[:]";
if ( Type == ABC_OPER_CONCAT ) return "{}";
if ( Type == ABC_OPER_ZEROPAD ) return "zPad";
if ( Type == ABC_OPER_SIGNEXT ) return "sExt";
+ if ( Type == ABC_OPER_CONST ) return "const";
if ( Type == ABC_OPER_TABLE ) return "table";
if ( Type == ABC_OPER_LAST ) return NULL;
assert( 0 );