summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Undheim <ruben.undheim@gmail.com>2018-12-03 20:32:04 +0000
committerRuben Undheim <ruben.undheim@gmail.com>2018-12-03 20:32:04 +0000
commit5988cc4cd054db6172af8ea51bf0855777f0d44a (patch)
treebccd7d3893664755b08bae56114024d02dd8c2f2
parentbfa5c2f2e843651f29c8c0da0fa1113c99cfc469 (diff)
New upstream version 1.01+20181130git163bba5+dfsg
-rw-r--r--Makefile2
-rw-r--r--abcexe.dsp206
-rw-r--r--abclib.dsp12036
-rw-r--r--abcspace.dsw88
-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
-rw-r--r--src/base/abc/abc.h1
-rw-r--r--src/base/abc/abcFanio.c24
-rw-r--r--src/base/abc/abcShow.c77
-rw-r--r--src/base/abci/abc.c529
-rw-r--r--src/base/abci/abcDarUnfold2.c2
-rw-r--r--src/base/abci/abcDetect.c2
-rw-r--r--src/base/abci/abcIvy.c1
-rw-r--r--src/base/abci/abcLog.c11
-rw-r--r--src/base/abci/abcNpn.c6
-rw-r--r--src/base/abci/abcRec3.c2
-rw-r--r--src/base/abci/abcTim.c6
-rw-r--r--src/base/acb/acbCom.c2
-rw-r--r--src/base/acb/acbFunc.c10
-rw-r--r--src/base/bac/bacCom.c2
-rw-r--r--src/base/cba/cbaCom.c2
-rw-r--r--src/base/cmd/cmdPlugin.c2
-rw-r--r--src/base/cmd/cmdStarter.c3
-rw-r--r--src/base/exor/exor.c64
-rw-r--r--src/base/io/io.c56
-rw-r--r--src/base/io/ioWritePla.c131
-rw-r--r--src/base/main/mainReal.c40
-rw-r--r--src/base/wlc/wlc.h4
-rw-r--r--src/base/wlc/wlcAbc.c52
-rw-r--r--src/base/wlc/wlcBlast.c323
-rw-r--r--src/base/wlc/wlcCom.c108
-rw-r--r--src/base/wlc/wlcMem.c2
-rw-r--r--src/base/wlc/wlcNdr.c6
-rw-r--r--src/base/wlc/wlcNtk.c25
-rw-r--r--src/base/wlc/wlcReadVer.c81
-rw-r--r--src/base/wlc/wlcWriteVer.c20
-rw-r--r--src/base/wln/module.make6
-rw-r--r--src/base/wln/wln.c51
-rw-r--r--src/base/wln/wln.h259
-rw-r--r--src/base/wln/wlnNdr.c332
-rw-r--r--src/base/wln/wlnNtk.c321
-rw-r--r--src/base/wln/wlnObj.c151
-rw-r--r--src/base/wln/wlnRetime.c487
-rw-r--r--src/base/wln/wlnWriteVer.c494
-rw-r--r--src/bdd/cudd/cuddReorder.c2
-rw-r--r--src/bdd/extrab/extraBdd.h38
-rw-r--r--src/bdd/extrab/extraBddMaxMin.c1067
-rw-r--r--src/bdd/extrab/extraBddMisc.c4
-rw-r--r--src/bdd/extrab/extraBddSet.c941
-rw-r--r--src/bdd/extrab/module.make2
-rw-r--r--src/map/amap/amapLib.c3
-rw-r--r--src/map/amap/amapLiberty.c32
-rw-r--r--src/map/if/ifTune.c4
-rw-r--r--src/map/scl/sclLiberty.c27
-rw-r--r--src/misc/extra/extraUtilMaj.c2
-rw-r--r--src/misc/extra/extraUtilPath.c4
-rw-r--r--src/misc/extra/extraUtilPerm.c2
-rw-r--r--src/misc/util/abc_global.h3
-rw-r--r--src/misc/util/utilBridge.c2
-rw-r--r--src/misc/util/utilTruth.h28
-rw-r--r--src/misc/vec/vecMem.h14
-rw-r--r--src/opt/dau/dau.h7
-rw-r--r--src/opt/dau/dauCanon.c1475
-rw-r--r--src/opt/dau/dauGia.c4
-rw-r--r--src/opt/dau/dauNpn.c707
-rw-r--r--src/opt/dau/dauNpn2.c507
-rw-r--r--src/opt/dau/module.make1
-rw-r--r--src/proof/abs/absGla.c6
-rw-r--r--src/proof/abs/absGlaOld.c2
-rw-r--r--src/proof/abs/absVta.c2
-rw-r--r--src/proof/acec/acecCore.c2
-rw-r--r--src/proof/acec/acecOrder.c2
-rw-r--r--src/proof/cec/cecCec.c2
-rw-r--r--src/proof/cec/cecCore.c4
-rw-r--r--src/proof/cec/cecCorr.c2
-rw-r--r--src/proof/cec/cecSeq.c4
-rw-r--r--src/proof/cec/cecSolve.c2
-rw-r--r--src/proof/cec/cecSynth.c2
-rw-r--r--src/proof/pdr/pdrCore.c1
-rw-r--r--src/sat/bmc/bmc.h3
-rw-r--r--src/sat/bmc/bmcBmcAnd.c6
-rw-r--r--src/sat/bmc/bmcCexDepth.c4
-rw-r--r--src/sat/bmc/bmcCexMin2.c4
-rw-r--r--src/sat/bmc/bmcCexTools.c4
-rw-r--r--src/sat/bmc/bmcEco.c2
-rw-r--r--src/sat/bmc/bmcFault.c34
-rw-r--r--src/sat/bmc/bmcMaj.c73
-rw-r--r--src/sat/bmc/bmcUnroll.c4
101 files changed, 14108 insertions, 7206 deletions
diff --git a/Makefile b/Makefile
index 5aa884e..e0e8b8f 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ OS := $(shell uname -s)
MODULES := \
$(wildcard src/ext*) \
src/base/abc src/base/abci src/base/cmd src/base/io src/base/main src/base/exor \
- src/base/ver src/base/wlc src/base/acb src/base/bac src/base/cba src/base/pla src/base/test \
+ src/base/ver src/base/wlc src/base/wln src/base/acb src/base/bac src/base/cba src/base/pla src/base/test \
src/map/mapper src/map/mio src/map/super src/map/if \
src/map/amap src/map/cov src/map/scl src/map/mpm \
src/misc/extra src/misc/mvc src/misc/st src/misc/util src/misc/nm \
diff --git a/abcexe.dsp b/abcexe.dsp
index 34cc73f..9d5152f 100644
--- a/abcexe.dsp
+++ b/abcexe.dsp
@@ -1,103 +1,103 @@
-# Microsoft Developer Studio Project File - Name="abcexe" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=abcexe - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "abcexe.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "abcexe.mak" CFG="abcexe - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "abcexe - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "abcexe - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "abcexe - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "ReleaseExe"
-# PROP BASE Intermediate_Dir "ReleaseExe"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "ReleaseExe"
-# PROP Intermediate_Dir "ReleaseExe"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "src" /D "WIN32" /D "WINDOWS" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib lib\x86\pthreadVC2.lib /nologo /subsystem:console /incremental:yes /debug /machine:I386 /out:"_TEST/abc.exe"
-# SUBTRACT LINK32 /profile
-
-!ELSEIF "$(CFG)" == "abcexe - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DebugExe"
-# PROP BASE Intermediate_Dir "DebugExe"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "DebugExe"
-# PROP Intermediate_Dir "DebugExe"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "src" /D "WIN32" /D "WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib lib\x86\pthreadVC2.lib /nologo /subsystem:console /debug /machine:I386 /out:"_TEST/abc.exe"
-
-!ENDIF
-
-# Begin Target
-
-# Name "abcexe - Win32 Release"
-# Name "abcexe - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\src\base\main\main.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="abcexe" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=abcexe - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "abcexe.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "abcexe.mak" CFG="abcexe - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "abcexe - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "abcexe - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "abcexe - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseExe"
+# PROP BASE Intermediate_Dir "ReleaseExe"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseExe"
+# PROP Intermediate_Dir "ReleaseExe"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "src" /D "WIN32" /D "WINDOWS" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib lib\x86\pthreadVC2.lib /nologo /subsystem:console /incremental:yes /debug /machine:I386 /out:"_TEST/abc.exe"
+# SUBTRACT LINK32 /profile
+
+!ELSEIF "$(CFG)" == "abcexe - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugExe"
+# PROP BASE Intermediate_Dir "DebugExe"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugExe"
+# PROP Intermediate_Dir "DebugExe"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "src" /D "WIN32" /D "WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib lib\x86\pthreadVC2.lib /nologo /subsystem:console /debug /machine:I386 /out:"_TEST/abc.exe"
+
+!ENDIF
+
+# Begin Target
+
+# Name "abcexe - Win32 Release"
+# Name "abcexe - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\src\base\main\main.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/abclib.dsp b/abclib.dsp
index 4ad7f81..cead32b 100644
--- a/abclib.dsp
+++ b/abclib.dsp
@@ -1,5996 +1,6040 @@
-# Microsoft Developer Studio Project File - Name="abclib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=abclib - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "abclib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "abclib.mak" CFG="abclib - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "abclib - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "abclib - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "abclib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "ReleaseLib"
-# PROP BASE Intermediate_Dir "ReleaseLib"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "ReleaseLib"
-# PROP Intermediate_Dir "ReleaseLib"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "src" /D "WIN32" /D "WINDOWS" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"lib\abcr.lib"
-
-!ELSEIF "$(CFG)" == "abclib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DebugLib"
-# PROP BASE Intermediate_Dir "DebugLib"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "DebugLib"
-# PROP Intermediate_Dir "DebugLib"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "src" /D "WIN32" /D "WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"lib\abcd.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "abclib - Win32 Release"
-# Name "abclib - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Group "base"
-
-# PROP Default_Filter ""
-# Begin Group "abc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\abc\abc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcBarBuf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcBlifMv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcFanio.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcFanOrder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcFunc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcHie.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcHieCec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcHieGia.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcHieNew.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcLatch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcMinBase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcNames.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcNetlist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcNtk.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcObj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcRefs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcShow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcSop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abc\abcUtil.c
-# End Source File
-# End Group
-# Begin Group "abci"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\abci\abc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcAttach.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcAuto.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcBalance.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcBidec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcBm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcBmc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcCas.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcCascade.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcCollapse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDar.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDebug.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDetect.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDress2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDress3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcEco.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcExact.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcExtract.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcFraig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcFx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcFxu.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcGen.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcHaig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcIf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcIfif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcIfMux.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcIvy.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcLog.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcLut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcLutmin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMeasure.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMffc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMini.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMiter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMulti.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcMv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcNpn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcNpnSave.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcNtbdd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcOdc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcOrder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcPart.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcPrint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcProve.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcQbf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcQuant.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcReach.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRec3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcReconv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRefactor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRenode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcReorder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRestruct.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcResub.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRewrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcRr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSaucy.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcScorr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSense.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSpeedup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcStrash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSweep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcSymm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcTim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcTiming.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcUnate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcUnreach.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcVerify.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\abci\abcXsim.c
-# End Source File
-# End Group
-# Begin Group "cmd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdAlias.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdAuto.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdFlag.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdHist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdLoad.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdPlugin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdStarter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cmd\cmdUtils.c
-# End Source File
-# End Group
-# Begin Group "io"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\io\io.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioabc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioJson.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadAiger.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBaf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBblif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBench.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBlifAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadBlifMv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadEdif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadEqn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadPla.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadPlaMo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioReadVerilog.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteAiger.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBaf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBblif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBench.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBlifMv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteBook.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteDot.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteEqn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteGml.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteList.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWritePla.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteSmv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\io\ioWriteVerilog.c
-# End Source File
-# End Group
-# Begin Group "main"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\main\abcapis.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\libSupport.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\main.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainFrame.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainInit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainReal.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\main\mainUtils.c
-# End Source File
-# End Group
-# Begin Group "ver"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\ver\ver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\ver\verCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\ver\verFormula.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\ver\verParse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\ver\verStream.c
-# End Source File
-# End Group
-# Begin Group "test"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\test\test.c
-# End Source File
-# End Group
-# Begin Group "wlc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcAbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcAbs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcAbs2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcBlast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcGraft.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcJson.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcNdr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcNtk.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcPth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcReadSmt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcReadVer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcShow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcStdin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcUif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcWin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\wlc\wlcWriteVer.c
-# End Source File
-# End Group
-# Begin Group "pla"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\pla\pla.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaHash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaSimple.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\pla\plaWrite.c
-# End Source File
-# End Group
-# Begin Group "bac"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\bac\bac.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bac.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacBac.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacBlast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacNtk.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacOper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacPrs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacPrsBuild.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacPrsTrans.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacPtr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacPtrAbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacReadBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacReadSmt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacReadVer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacWriteBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacWriteSmt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\bac\bacWriteVer.c
-# End Source File
-# End Group
-# Begin Group "cba"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\cba\cba.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cba.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaBlast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaCba.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaNtk.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaPrs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaReadBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaReadVer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaTypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaWriteBlif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\cba\cbaWriteVer.c
-# End Source File
-# End Group
-# Begin Group "exor"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\exor\exor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exor.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exorBits.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exorCubes.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exorLink.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exorList.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\exor\exorUtil.c
-# End Source File
-# End Group
-# Begin Group "acb"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\base\acb\acb.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbAbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbFunc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbMfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbPar.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbPush.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbSets.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbSets.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\base\acb\acbUtil.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "bdd"
-
-# PROP Default_Filter ""
-# Begin Group "extrab"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBdd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddAuto.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddCas.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddImage.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddKmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddMisc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddSymm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddThresh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddTime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\extrab\extraBddUnate.c
-# End Source File
-# End Group
-# Begin Group "llb"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Cluster.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Constr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Group.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Hint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Man.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Matrix.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Pivot.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Reach.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb1Sched.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Bad.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Core.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Driver.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Dump.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Flow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb2Image.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb3Image.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb3Nonlin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Cex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Cluster.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Image.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Map.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Nonlin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llb4Sweep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\llb\llbInt.h
-# End Source File
-# End Group
-# Begin Group "bbr"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\bbr\bbr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\bbr\bbrCex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\bbr\bbrImage.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\bbr\bbrNtbdd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\bbr\bbrReach.c
-# End Source File
-# End Group
-# Begin Group "cas"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\cas\cas.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cas\casCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cas\casDec.c
-# End Source File
-# End Group
-# Begin Group "reo"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reo.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoProfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoShuffle.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoSift.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoSwap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoTest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoTransfer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\reo\reoUnits.c
-# End Source File
-# End Group
-# Begin Group "dsd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdLocal.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdProc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\dsd\dsdTree.c
-# End Source File
-# End Group
-# Begin Group "mtr"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\mtr\mtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\mtr\mtrBasic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\mtr\mtrGroup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\mtr\mtrInt.h
-# End Source File
-# End Group
-# Begin Group "epd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\epd\epd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\epd\epd.h
-# End Source File
-# End Group
-# Begin Group "cudd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cudd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddAbs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddApply.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddFind.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddInv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddIte.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddNeg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAddWalsh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAndAbs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAnneal.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddApa.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddAPI.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddApprox.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddBddAbs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddBddCorr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddBddIte.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddBridge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddCache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddClip.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddCof.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddCompose.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddDecomp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddEssent.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddExact.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddExport.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddGenCof.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddGenetic.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddGroup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddHarwell.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddInit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddInteract.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddLCache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddLevelQ.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddLinear.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddLiteral.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddMatMult.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddPriority.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddRef.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddReorder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSign.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSolve.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSplit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSubsetHB.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSubsetSP.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddSymmetry.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddWindow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddCount.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddFuncs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddGroup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddIsop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddLin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddMisc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddPort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddReord.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddSetop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddSymm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bdd\cudd\cuddZddUtil.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "sat"
-
-# PROP Default_Filter ""
-# Begin Group "msat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatActivity.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatClause.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatClauseVec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatOrderH.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatQueue.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatSolverApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatSolverCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatSolverIo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatSolverSearch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatSort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\msat\msatVec.c
-# End Source File
-# End Group
-# Begin Group "csat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\csat\csat_apis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\csat\csat_apis.h
-# End Source File
-# End Group
-# Begin Group "bsat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satClause.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satInter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satInterA.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satInterB.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satInterP.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satMem.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satProof.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satProof2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver2.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver2i.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satSolver3.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satStore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satStore.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satTrace.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satTruth.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bsat\satVec.h
-# End Source File
-# End Group
-# Begin Group "proof"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\proof\pr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\proof\pr.h
-# End Source File
-# End Group
-# Begin Group "psat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\psat\m114p.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\psat\m114p_types.h
-# End Source File
-# End Group
-# Begin Group "lsat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\lsat\solver.h
-# End Source File
-# End Group
-# Begin Group "cnf"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfData.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfFast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfPost.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\cnf\cnfWrite.c
-# End Source File
-# End Group
-# Begin Group "bmc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmc2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmc3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmcAnd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmcG.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmci.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcBmcS.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexCare.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexDepth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexMin1.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexMin2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcCexTools.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcChain.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcClp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcEco.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcExpand.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcFault.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcFx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcGen.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcICheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcInse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcLoad.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMaj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMaj2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMaj3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMaxi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMesh2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcMulti.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\bmc\bmcUnroll.c
-# End Source File
-# End Group
-# Begin Group "bsat2"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "satoko"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\act_clause.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\act_var.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\b_queue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\cdb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\clause.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\cnf_reader.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\heap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\mem.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\misc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\satoko.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\sdbl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\solver.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\solver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\solver_api.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\sort.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\types.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\vec\vec_char.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\vec\vec_flt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\vec\vec_int.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\utils\vec\vec_uint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\satoko\watch_list.h
-# End Source File
-# End Group
-# Begin Group "xsat"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatBQueue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatClause.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatCnfReader.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatHeap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatMemory.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatSolver.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatSolver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatSolverAPI.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatUtils.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\xsat\xsatWatchList.h
-# End Source File
-# End Group
-# Begin Group "glucose"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\AbcGlucose.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\AbcGlucose.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\AbcGlucoseCmd.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Alg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Alloc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\BoundedQueue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Constants.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Dimacs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Glucose.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Heap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\IntTypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Options.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Options.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\ParseUtils.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\pstdint.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Queue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\SimpSolver.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\SimpSolver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Solver.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\SolverTypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Sort.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\System.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\System.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\Vec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\sat\glucose\XAlloc.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "opt"
-
-# PROP Default_Filter ""
-# Begin Group "fxu"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxu.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxu.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuCreate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuHeapD.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuHeapS.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuList.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuMatrix.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuPair.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuPrint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuReduce.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuSelect.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuSingle.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxu\fxuUpdate.c
-# End Source File
-# End Group
-# Begin Group "rwr"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrEva.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrExp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrPrint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrTemp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwr\rwrUtil.c
-# End Source File
-# End Group
-# Begin Group "cut"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cut.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutExpand.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutList.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutNode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutOracle.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutPre22.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutSeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cut\cutTruth.c
-# End Source File
-# End Group
-# Begin Group "sim"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\sim\sim.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSupp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSwitch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSym.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSymSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSymSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simSymStr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sim\simUtils.c
-# End Source File
-# End Group
-# Begin Group "ret"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retArea.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retDelay.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retFlow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retIncrem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retInit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\ret\retLvalue.c
-# End Source File
-# End Group
-# Begin Group "res"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\res\res.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resDivs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resFilter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resStrash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\res\resWin.c
-# End Source File
-# End Group
-# Begin Group "lpk"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpk.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkAbcDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkAbcDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkAbcMux.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkAbcUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkMulti.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkMux.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\lpk\lpkSets.c
-# End Source File
-# End Group
-# Begin Group "mfs"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsDiv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsInter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsResub.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsStrash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\mfs\mfsWin.c
-# End Source File
-# End Group
-# Begin Group "cgt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtDecide.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\cgt\cgtSat.c
-# End Source File
-# End Group
-# Begin Group "csw"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\csw\csw.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\csw\cswCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\csw\cswCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\csw\cswInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\csw\cswMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\csw\cswTable.c
-# End Source File
-# End Group
-# Begin Group "dar"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\dar\dar.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darBalance.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darData.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darPrec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darRefact.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darResub.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dar\darScript.c
-# End Source File
-# End Group
-# Begin Group "rwt"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\rwt\rwt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwt\rwtDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwt\rwtMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\rwt\rwtUtil.c
-# End Source File
-# End Group
-# Begin Group "nwk"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\ntlnwk.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwk.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkBidec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkFanio.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkFlow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkMerge.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkObj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkSpeedup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkStrash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkTiming.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\nwk\nwkUtil.c
-# End Source File
-# End Group
-# Begin Group "dau"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dau.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dau.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauCount.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauDivs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauEnum.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauGia.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauNonDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauNpn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dau\dauTree.c
-# End Source File
-# End Group
-# Begin Group "sfm"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmArea.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmMit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmNtk.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmTim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sfm\sfmWin.c
-# End Source File
-# End Group
-# Begin Group "fret"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\fret\fretFlow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fret\fretime.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fret\fretInit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fret\fretMain.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fret\fretTime.c
-# End Source File
-# End Group
-# Begin Group "fxch"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\fxch\Fxch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxch\Fxch.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxch\FxchDiv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxch\FxchMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\fxch\FxchSCHashTable.c
-# End Source File
-# End Group
-# Begin Group "dsc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\dsc\dsc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\dsc\dsc.h
-# End Source File
-# End Group
-# Begin Group "sbd"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdCut2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdLut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdPath.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\opt\sbd\sbdWin.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "map"
-
-# PROP Default_Filter ""
-# Begin Group "mapper"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperCreate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperCutUtils.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperFanout.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperMatch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperRefs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperSuper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperSwitch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperTime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperTree.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperUtils.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mapper\mapperVec.c
-# End Source File
-# End Group
-# Begin Group "mio"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\mio\exp.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mio.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mio.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioFunc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioParse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioSop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mio\mioUtils.c
-# End Source File
-# End Group
-# Begin Group "super"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\super\super.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\super\super.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\super\superAnd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\super\superGate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\super\superInt.h
-# End Source File
-# End Group
-# Begin Group "if"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\if\if.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifCache.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifCom.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifCount.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifData2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDec07.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDec08.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDec10.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDec16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDec75.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDelay.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifLibBox.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifLibLut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifMatch2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifReduce.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifSelect.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifSeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifTest.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifTime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifTune.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\if\ifUtil.c
-# End Source File
-# End Group
-# Begin Group "amap"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\amap\amap.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapGraph.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapLiberty.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapMatch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapMerge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapOutput.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapParse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapPerm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapRule.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\amap\amapUniq.c
-# End Source File
-# End Group
-# Begin Group "cov"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\cov\cov.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covBuild.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covMinEsop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covMinMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covMinSop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\cov\covMinUtil.c
-# End Source File
-# End Group
-# Begin Group "scl"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\scl\scl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\scl.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclBuffer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclBufSize.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclCon.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclDnsize.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclLib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclLiberty.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclLibScl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclLibUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclLoad.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclSize.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclSize.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclTime.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclUpsize.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\scl\sclUtil.c
-# End Source File
-# End Group
-# Begin Group "mpm"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmAbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmGates.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmMig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmMig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmPre.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\map\mpm\mpmUtil.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "misc"
-
-# PROP Default_Filter ""
-# Begin Group "extra"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extra.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilBitMatrix.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilCube.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilEnum.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilFile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilMaj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilMemory.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilMisc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilMult.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilPath.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilPerm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilPrime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilProgress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilReader.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilSupp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\extra\extraUtilUtil.c
-# End Source File
-# End Group
-# Begin Group "st"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\st\st.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\st\st.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\st\stmm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\st\stmm.h
-# End Source File
-# End Group
-# Begin Group "mvc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcCompare.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcContain.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcCover.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcCube.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcDivide.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcDivisor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcList.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcLits.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcOpAlg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcOpBool.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcPrint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcSort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mvc\mvcUtils.c
-# End Source File
-# End Group
-# Begin Group "vec"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecAtt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecBit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecFlt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecHash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecHsh.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecMem.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecQue.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecSet.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecStr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecVec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecWec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\vec\vecWrd.h
-# End Source File
-# End Group
-# Begin Group "util"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\util\abc_global.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\util_hack.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilBridge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilCex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilCex.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilColor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilDouble.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilFile.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilFloat.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilIsop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilMem.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilNam.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilNam.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilSignal.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilSignal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilSort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\util\utilTruth.h
-# End Source File
-# End Group
-# Begin Group "nm"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\nm\nm.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\nm\nmApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\nm\nmInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\nm\nmTable.c
-# End Source File
-# End Group
-# Begin Group "hash"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\hash\hash.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\hash\hashFlt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\hash\hashInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\hash\hashPtr.h
-# End Source File
-# End Group
-# Begin Group "bzlib"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\blocksort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\bzlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\bzlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\bzlib_private.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\compress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\crctable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\decompress.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\huffman.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bzlib\randtable.c
-# End Source File
-# End Group
-# Begin Group "zlib"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\adler32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\compress_.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\crc32.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\crc32.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\deflate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\deflate.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\gzclose.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\gzguts.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\gzlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\gzread.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\gzwrite.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\infback.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inffast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inffast.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inffixed.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inflate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inflate.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inftrees.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\inftrees.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\trees.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\trees.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\uncompr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\zconf.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\zlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\zutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\zlib\zutil.h
-# End Source File
-# End Group
-# Begin Group "bar"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\bar\bar.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bar\bar.h
-# End Source File
-# End Group
-# Begin Group "bbl"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\bbl\bblif.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\bbl\bblif.h
-# End Source File
-# End Group
-# Begin Group "mem"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\mem\mem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mem\mem.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\mem\mem2.h
-# End Source File
-# End Group
-# Begin Group "tim"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\tim\tim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\tim.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timBox.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timDump.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timTime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\tim\timTrav.c
-# End Source File
-# End Group
-# Begin Group "parse"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\misc\parse\parseEqn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\parse\parseInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\misc\parse\parseStack.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "ai"
-
-# PROP Default_Filter ""
-# Begin Group "hop"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hop.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopBalance.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopObj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopOper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\hop\hopUtil.c
-# End Source File
-# End Group
-# Begin Group "ivy"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivy.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyBalance.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyCutTrav.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyFanout.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyFastMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyFraig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyHaig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyMulti.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyObj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyOper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyResyn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyRwr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivySeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyShow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ivy\ivyUtil.c
-# End Source File
-# End Group
-# Begin Group "ioa"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\ioa\ioa.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ioa\ioaReadAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ioa\ioaUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\ioa\ioaWriteAig.c
-# End Source File
-# End Group
-# Begin Group "aig"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigCuts.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigDoms.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigDup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigFact.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigFanout.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigFrames.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigInter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigJust.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigMffc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigObj.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigOper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigOrder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigPack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigPart.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigPartReg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigPartSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigRepr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigRet.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigRetF.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigScl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigShow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigSplit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigTiming.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigTsim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\aig\aigWin.c
-# End Source File
-# End Group
-# Begin Group "saig"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigCone.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigConstr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigConstr2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigDual.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigDup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigInd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigIoa.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigIso.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigIsoFast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigIsoSlow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigMiter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigOutDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigPhase.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigRetFwd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigRetMin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigRetStep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigScl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigSimFast.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigSimMv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigSimSeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigStrSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigSwitch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigSynch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigTempor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigTrans.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\saig\saigWnd.c
-# End Source File
-# End Group
-# Begin Group "gia"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\gia\gia.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\gia.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaAig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaAiger.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaAigerExt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaBalAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaBalLut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaBalMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaBidec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCCof.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaClp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCof.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCone.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCSat2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCSatOld.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCTas.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaCut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaDfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaDup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEdge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEmbed.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEnable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEquiv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEra.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEra2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaEsop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaExist.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaFalse.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaFanout.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaForce.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaFrames.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaFront.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaFx.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaGig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaGlitch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaHash.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIff.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIiff.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIiff.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIso.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIso2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaIso3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaJf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaKf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaLf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMini.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaMuxes.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaNf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaOf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaPack.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaPat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaPf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaQbf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaResub.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaRetime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaRex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSat3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSatEdge.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSatLE.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSatLut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSatMap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSatoko.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaScl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaScript.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaShow.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaShrink.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaShrink6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaShrink7.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSim2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSort.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSpeedup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSplit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaStg.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaStr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSupMin.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSupp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSweep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSweeper.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaSwitch.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaTim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaTis.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaTruth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaTsim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaUnate.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\gia\giaUtil.c
-# End Source File
-# End Group
-# Begin Group "miniaig"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\miniaig\abcOper.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\miniaig\miniaig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\miniaig\minilut.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\aig\miniaig\ndr.h
-# End Source File
-# End Group
-# Begin Group "uap"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\aig\uap\uap.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "bool"
-
-# PROP Default_Filter ""
-# Begin Group "bdc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdcCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdcDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdcInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdcSpfd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\bdc\bdcTable.c
-# End Source File
-# End Group
-# Begin Group "dec"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\dec\dec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\dec\decAbc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\dec\decFactor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\dec\decMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\dec\decPrint.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\dec\decUtil.c
-# End Source File
-# End Group
-# Begin Group "deco"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\deco\deco.h
-# End Source File
-# End Group
-# Begin Group "kit"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\kit\cloud.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\cloud.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kit_.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitBdd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitCloud.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitDec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitDsd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitFactor.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitGraph.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitHop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitIsop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitPerm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitPla.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitSop.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\kit\kitTruth.c
-# End Source File
-# End Group
-# Begin Group "lucky"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\lucky.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\lucky.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckyFast16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckyFast6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckyInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckyRead.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckySimple.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckySwap.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\lucky\luckySwapIJ.c
-# End Source File
-# End Group
-# Begin Group "rsb"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\rsb\rsb.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\rsb\rsbDec6.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\rsb\rsbInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\rsb\rsbMan.c
-# End Source File
-# End Group
-# Begin Group "rpo"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\bool\rpo\literal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\rpo\rpo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\bool\rpo\rpo.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "prove"
-
-# PROP Default_Filter ""
-# Begin Group "cec"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecCec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecChoice.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecCorr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecIso.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecPat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSatG.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSeq.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSolve.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSplit.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSweep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\cec\cecSynth.c
-# End Source File
-# End Group
-# Begin Group "dch"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dch.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchChoice.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchSimSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\dch\dchSweep.c
-# End Source File
-# End Group
-# Begin Group "fra"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fra.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraBmc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraCec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraClau.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraClaus.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraHot.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraImp.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraInd.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraIndVer.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraLcr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraPart.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraSec.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fra\fraSim.c
-# End Source File
-# End Group
-# Begin Group "fraig"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraig.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigApi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigCanon.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigChoice.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigFanout.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigFeed.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigMem.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigNode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigPrime.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigTable.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\fraig\fraigVec.c
-# End Source File
-# End Group
-# Begin Group "int"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\int\int.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intCheck.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intContain.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intCtrex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intDup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intFrames.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intInter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intM114.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\int\intUtil.c
-# End Source File
-# End Group
-# Begin Group "live"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\live\arenaViolation.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\combination.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\disjunctiveMonotone.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\kLiveConstraints.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\kliveness.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\liveness.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\liveness_sim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\ltl_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\live\monotone.c
-# End Source File
-# End Group
-# Begin Group "pdr"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdr.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrIncr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrInv.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrTsim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrTsim2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrTsim3.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\pdr\pdrUtil.c
-# End Source File
-# End Group
-# Begin Group "ssw"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\ssw.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswAig.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswBmc.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswCnf.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswConstr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswDyn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswFilter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswIslands.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswLcorr.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswMan.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswPairs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswPart.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswRarity.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswRarity2.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswSemi.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswSimSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswSweep.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssw\sswUnique.c
-# End Source File
-# End Group
-# Begin Group "abs"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\abs\abs.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\abs.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absDup.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absGla.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absGlaOld.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absIter.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absOldCex.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absOldRef.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absOldSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absOldSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absOut.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absPth.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absRef.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absRef.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absRefSelect.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absRpm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absRpmOld.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\abs\absVta.c
-# End Source File
-# End Group
-# Begin Group "ssc"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\ssc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscClass.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscSat.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscSim.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\ssc\sscUtil.c
-# End Source File
-# End Group
-# Begin Group "int2"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "acec"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acec.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acec2Mult.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecBo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecCl.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecCo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecCover.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecFadds.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecInt.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecMult.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecNorm.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecOrder.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecPa.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecPo.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecPolyn.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecPool.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecRe.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecSt.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecStruct.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecTree.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecUtil.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\src\proof\acec\acecXor.c
-# End Source File
-# End Group
-# End Group
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="abclib" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=abclib - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "abclib.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "abclib.mak" CFG="abclib - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "abclib - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "abclib - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "abclib - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "ReleaseLib"
+# PROP BASE Intermediate_Dir "ReleaseLib"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "ReleaseLib"
+# PROP Intermediate_Dir "ReleaseLib"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "src" /D "WIN32" /D "WINDOWS" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"lib\abcr.lib"
+
+!ELSEIF "$(CFG)" == "abclib - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DebugLib"
+# PROP BASE Intermediate_Dir "DebugLib"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "DebugLib"
+# PROP Intermediate_Dir "DebugLib"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "src" /D "WIN32" /D "WINDOWS" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D ABC_DLL=ABC_DLLEXPORT /D "_CRT_SECURE_NO_DEPRECATE" /D "ABC_USE_PTHREADS" /D "ABC_USE_CUDD" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"lib\abcd.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "abclib - Win32 Release"
+# Name "abclib - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Group "base"
+
+# PROP Default_Filter ""
+# Begin Group "abc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\abc\abc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcBarBuf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcBlifMv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcFanio.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcFanOrder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcFunc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcHie.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcHieCec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcHieGia.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcHieNew.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcLatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcMinBase.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcNames.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcNetlist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcRefs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcShow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcSop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abc\abcUtil.c
+# End Source File
+# End Group
+# Begin Group "abci"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\abci\abc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcAttach.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcAuto.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcBalance.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcBidec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcBm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcBmc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcCas.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcCascade.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcCollapse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDar.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDebug.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDetect.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDress.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDress2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDress3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcEco.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcExact.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcExtract.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcFraig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcFx.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcFxu.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcGen.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcHaig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcIf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcIfif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcIfMux.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcIvy.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcLog.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcLut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcLutmin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMeasure.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMffc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMini.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMiter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMulti.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcMv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcNpn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcNpnSave.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcNtbdd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcOdc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcOrder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcPart.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcPrint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcProve.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcQbf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcQuant.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcReach.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRec3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcReconv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRefactor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRenode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcReorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRestruct.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcResub.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRewrite.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRpo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcRr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSaucy.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcScorr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSense.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSpeedup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcStrash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSweep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcSymm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcTim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcTiming.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcUnate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcUnreach.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcVerify.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\abci\abcXsim.c
+# End Source File
+# End Group
+# Begin Group "cmd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdAlias.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdAuto.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdFlag.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdHist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdLoad.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdPlugin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdStarter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cmd\cmdUtils.c
+# End Source File
+# End Group
+# Begin Group "io"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\io\io.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioabc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioJson.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadAiger.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBaf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBblif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBench.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBlifAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadBlifMv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadEdif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadEqn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadPla.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadPlaMo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioReadVerilog.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteAiger.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBaf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBblif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBench.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBlifMv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteBook.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteDot.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteEqn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteGml.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteList.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWritePla.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteSmv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\io\ioWriteVerilog.c
+# End Source File
+# End Group
+# Begin Group "main"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\main\abcapis.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\libSupport.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\main.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainFrame.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainInit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainReal.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\main\mainUtils.c
+# End Source File
+# End Group
+# Begin Group "ver"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\ver\ver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\ver\verCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\ver\verFormula.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\ver\verParse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\ver\verStream.c
+# End Source File
+# End Group
+# Begin Group "test"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\test\test.c
+# End Source File
+# End Group
+# Begin Group "wlc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcAbc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcAbs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcAbs2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcBlast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcGraft.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcJson.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcNdr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcPth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcReadSmt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcReadVer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcShow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcStdin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcUif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcWin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wlc\wlcWriteVer.c
+# End Source File
+# End Group
+# Begin Group "pla"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\pla\pla.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaHash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaSimple.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\pla\plaWrite.c
+# End Source File
+# End Group
+# Begin Group "bac"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\bac\bac.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bac.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacBac.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacBlast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacOper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacPrs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacPrsBuild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacPrsTrans.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacPtr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacPtrAbc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacReadBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacReadSmt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacReadVer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacWriteBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacWriteSmt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\bac\bacWriteVer.c
+# End Source File
+# End Group
+# Begin Group "cba"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\cba\cba.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cba.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaBlast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaCba.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaPrs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaReadBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaReadVer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaWriteBlif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\cba\cbaWriteVer.c
+# End Source File
+# End Group
+# Begin Group "exor"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\exor\exor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exor.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exorBits.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exorCubes.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exorLink.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exorList.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\exor\exorUtil.c
+# End Source File
+# End Group
+# Begin Group "acb"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\acb\acb.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acb.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbAbc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbFunc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbMfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbPar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbPush.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbSets.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbSets.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\acb\acbUtil.c
+# End Source File
+# End Group
+# Begin Group "wln"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\base\wln\wln.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wln.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wlnNdr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wlnNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wlnObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wlnRetime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\base\wln\wlnWriteVer.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "bdd"
+
+# PROP Default_Filter ""
+# Begin Group "extrab"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBdd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddAuto.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddCas.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddImage.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddKmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddMaxMin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddMisc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddSet.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddSymm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddThresh.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddTime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\extrab\extraBddUnate.c
+# End Source File
+# End Group
+# Begin Group "llb"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Cluster.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Constr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Core.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Group.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Hint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Man.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Matrix.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Pivot.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Reach.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb1Sched.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Bad.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Core.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Driver.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Dump.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Flow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb2Image.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb3Image.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb3Nonlin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Cex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Cluster.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Image.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Map.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Nonlin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llb4Sweep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\llb\llbInt.h
+# End Source File
+# End Group
+# Begin Group "bbr"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\bbr\bbr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\bbr\bbrCex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\bbr\bbrImage.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\bbr\bbrNtbdd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\bbr\bbrReach.c
+# End Source File
+# End Group
+# Begin Group "cas"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\cas\cas.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cas\casCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cas\casDec.c
+# End Source File
+# End Group
+# Begin Group "reo"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoProfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoShuffle.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoSift.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoSwap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoTest.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoTransfer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\reo\reoUnits.c
+# End Source File
+# End Group
+# Begin Group "dsd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdLocal.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdProc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\dsd\dsdTree.c
+# End Source File
+# End Group
+# Begin Group "mtr"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\mtr\mtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\mtr\mtrBasic.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\mtr\mtrGroup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\mtr\mtrInt.h
+# End Source File
+# End Group
+# Begin Group "epd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\epd\epd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\epd\epd.h
+# End Source File
+# End Group
+# Begin Group "cudd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cudd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddAbs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddApply.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddFind.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddInv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddIte.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddNeg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAddWalsh.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAndAbs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAnneal.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddApa.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddAPI.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddApprox.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddBddAbs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddBddCorr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddBddIte.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddBridge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddCache.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddClip.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddCof.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddCompose.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddDecomp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddEssent.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddExact.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddExport.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddGenCof.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddGenetic.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddGroup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddHarwell.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddInit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddInteract.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddLCache.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddLevelQ.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddLinear.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddLiteral.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddMatMult.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddPriority.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddRef.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddReorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSign.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSolve.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSubsetHB.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSubsetSP.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddSymmetry.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddWindow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddCount.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddFuncs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddGroup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddIsop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddLin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddMisc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddPort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddReord.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddSetop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddSymm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bdd\cudd\cuddZddUtil.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "sat"
+
+# PROP Default_Filter ""
+# Begin Group "msat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msat.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatActivity.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatClause.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatClauseVec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatOrderH.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatQueue.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatSolverApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatSolverCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatSolverIo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatSolverSearch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatSort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\msat\msatVec.c
+# End Source File
+# End Group
+# Begin Group "csat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\csat\csat_apis.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\csat\csat_apis.h
+# End Source File
+# End Group
+# Begin Group "bsat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satClause.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satInter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satInterA.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satInterB.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satInterP.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satMem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satProof.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satProof2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver2i.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satSolver3.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satStore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satStore.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satTrace.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satTruth.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bsat\satVec.h
+# End Source File
+# End Group
+# Begin Group "proof"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\proof\pr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\proof\pr.h
+# End Source File
+# End Group
+# Begin Group "psat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\psat\m114p.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\psat\m114p_types.h
+# End Source File
+# End Group
+# Begin Group "lsat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\lsat\solver.h
+# End Source File
+# End Group
+# Begin Group "cnf"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfData.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfFast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfPost.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\cnf\cnfWrite.c
+# End Source File
+# End Group
+# Begin Group "bmc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmc2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmc3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmcAnd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmcG.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmci.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcBmcS.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexCare.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexDepth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexMin1.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexMin2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcCexTools.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcChain.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcClp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcEco.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcExpand.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcFault.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcFx.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcGen.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcICheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcInse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcLoad.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMaj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMaj2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMaj3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMaxi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMesh2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcMulti.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\bmc\bmcUnroll.c
+# End Source File
+# End Group
+# Begin Group "bsat2"
+
+# PROP Default_Filter ""
+# End Group
+# Begin Group "satoko"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\act_clause.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\act_var.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\b_queue.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\cdb.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\clause.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\cnf_reader.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\heap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\mem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\misc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\satoko.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\sdbl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\solver.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\solver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\solver_api.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\sort.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\types.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\vec\vec_char.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\vec\vec_flt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\vec\vec_int.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\utils\vec\vec_uint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\satoko\watch_list.h
+# End Source File
+# End Group
+# Begin Group "xsat"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsat.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatBQueue.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatClause.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatCnfReader.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatHeap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatMemory.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatSolver.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatSolver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatSolverAPI.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\xsat\xsatWatchList.h
+# End Source File
+# End Group
+# Begin Group "glucose"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\AbcGlucose.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\AbcGlucose.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\AbcGlucoseCmd.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Alg.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Alloc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\BoundedQueue.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Constants.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Dimacs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Glucose.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Heap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\IntTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Options.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Options.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\ParseUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\pstdint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Queue.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\SimpSolver.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\SimpSolver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Solver.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\SolverTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Sort.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\System.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\Vec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\sat\glucose\XAlloc.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "opt"
+
+# PROP Default_Filter ""
+# Begin Group "fxu"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxu.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxu.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuCreate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuHeapD.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuHeapS.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuList.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuMatrix.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuPair.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuPrint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuReduce.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuSelect.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuSingle.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxu\fxuUpdate.c
+# End Source File
+# End Group
+# Begin Group "rwr"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrEva.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrExp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrPrint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrTemp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwr\rwrUtil.c
+# End Source File
+# End Group
+# Begin Group "cut"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cut.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutExpand.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutList.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutNode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutOracle.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutPre22.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutSeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cut\cutTruth.c
+# End Source File
+# End Group
+# Begin Group "sim"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\sim\sim.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSupp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSwitch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSym.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSymSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSymSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simSymStr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sim\simUtils.c
+# End Source File
+# End Group
+# Begin Group "ret"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retArea.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retDelay.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retFlow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retIncrem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retInit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\ret\retLvalue.c
+# End Source File
+# End Group
+# Begin Group "res"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\res\res.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resDivs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resFilter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resStrash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\res\resWin.c
+# End Source File
+# End Group
+# Begin Group "lpk"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpk.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkAbcDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkAbcDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkAbcMux.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkAbcUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkMulti.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkMux.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\lpk\lpkSets.c
+# End Source File
+# End Group
+# Begin Group "mfs"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsDiv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsInter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsResub.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsStrash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\mfs\mfsWin.c
+# End Source File
+# End Group
+# Begin Group "cgt"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtDecide.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\cgt\cgtSat.c
+# End Source File
+# End Group
+# Begin Group "csw"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\csw\csw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\csw\cswCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\csw\cswCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\csw\cswInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\csw\cswMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\csw\cswTable.c
+# End Source File
+# End Group
+# Begin Group "dar"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\dar\dar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darBalance.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darData.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darPrec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darRefact.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darResub.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dar\darScript.c
+# End Source File
+# End Group
+# Begin Group "rwt"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\rwt\rwt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwt\rwtDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwt\rwtMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\rwt\rwtUtil.c
+# End Source File
+# End Group
+# Begin Group "nwk"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\ntlnwk.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwk.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkBidec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkFanio.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkFlow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkMerge.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkSpeedup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkStrash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkTiming.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\nwk\nwkUtil.c
+# End Source File
+# End Group
+# Begin Group "dau"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dau.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dau.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauCount.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauDivs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauEnum.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauGia.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauNonDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauNpn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauNpn2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dau\dauTree.c
+# End Source File
+# End Group
+# Begin Group "sfm"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmArea.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmMit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmNtk.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmTim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sfm\sfmWin.c
+# End Source File
+# End Group
+# Begin Group "fret"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\fret\fretFlow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fret\fretime.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fret\fretInit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fret\fretMain.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fret\fretTime.c
+# End Source File
+# End Group
+# Begin Group "fxch"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\fxch\Fxch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxch\Fxch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxch\FxchDiv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxch\FxchMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\fxch\FxchSCHashTable.c
+# End Source File
+# End Group
+# Begin Group "dsc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\dsc\dsc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\dsc\dsc.h
+# End Source File
+# End Group
+# Begin Group "sbd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbd.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdCut2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdLut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdPath.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\opt\sbd\sbdWin.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "map"
+
+# PROP Default_Filter ""
+# Begin Group "mapper"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperCreate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperCutUtils.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperFanout.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperMatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperRefs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperSuper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperSwitch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperTime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperTree.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperUtils.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mapper\mapperVec.c
+# End Source File
+# End Group
+# Begin Group "mio"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\mio\exp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mio.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mio.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioFunc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioParse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioSop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mio\mioUtils.c
+# End Source File
+# End Group
+# Begin Group "super"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\super\super.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\super\super.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\super\superAnd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\super\superGate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\super\superInt.h
+# End Source File
+# End Group
+# Begin Group "if"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\if\if.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifCache.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifCom.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifCount.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifData2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDec07.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDec08.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDec10.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDec16.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDec75.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDelay.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifLibBox.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifLibLut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifMatch2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifReduce.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifSelect.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifSeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifTest.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifTime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifTune.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\if\ifUtil.c
+# End Source File
+# End Group
+# Begin Group "amap"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\amap\amap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapGraph.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapLiberty.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapMatch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapMerge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapOutput.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapParse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapPerm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapRule.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\amap\amapUniq.c
+# End Source File
+# End Group
+# Begin Group "cov"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\cov\cov.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covBuild.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covMinEsop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covMinMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covMinSop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\cov\covMinUtil.c
+# End Source File
+# End Group
+# Begin Group "scl"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\scl\scl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\scl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclBuffer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclBufSize.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclCon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclDnsize.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclLib.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclLiberty.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclLibScl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclLibUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclLoad.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclSize.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclSize.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclTime.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclUpsize.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\scl\sclUtil.c
+# End Source File
+# End Group
+# Begin Group "mpm"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmAbc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmGates.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmMig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmMig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmPre.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\map\mpm\mpmUtil.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "misc"
+
+# PROP Default_Filter ""
+# Begin Group "extra"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extra.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilBitMatrix.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilCube.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilEnum.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilFile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilMaj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilMemory.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilMisc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilMult.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilPath.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilPerm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilPrime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilProgress.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilReader.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilSupp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\extra\extraUtilUtil.c
+# End Source File
+# End Group
+# Begin Group "st"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\st\st.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\st\st.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\st\stmm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\st\stmm.h
+# End Source File
+# End Group
+# Begin Group "mvc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcCompare.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcContain.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcCover.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcCube.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcDivide.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcDivisor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcList.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcLits.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcOpAlg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcOpBool.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcPrint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcSort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mvc\mvcUtils.c
+# End Source File
+# End Group
+# Begin Group "vec"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecAtt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecBit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecFlt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecHash.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecHsh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecMem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecQue.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecSet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecStr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecVec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecWec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\vec\vecWrd.h
+# End Source File
+# End Group
+# Begin Group "util"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\util\abc_global.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\util_hack.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilBridge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilCex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilCex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilColor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilDouble.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilFile.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilFloat.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilIsop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilMem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilNam.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilNam.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilSignal.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilSignal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilSort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\util\utilTruth.h
+# End Source File
+# End Group
+# Begin Group "nm"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\nm\nm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\nm\nmApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\nm\nmInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\nm\nmTable.c
+# End Source File
+# End Group
+# Begin Group "hash"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\hash\hash.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\hash\hashFlt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\hash\hashInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\hash\hashPtr.h
+# End Source File
+# End Group
+# Begin Group "bzlib"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\blocksort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\bzlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\bzlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\bzlib_private.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\compress.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\crctable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\decompress.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\huffman.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bzlib\randtable.c
+# End Source File
+# End Group
+# Begin Group "zlib"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\adler32.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\compress_.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\crc32.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\crc32.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\deflate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\deflate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\gzclose.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\gzguts.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\gzlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\gzread.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\gzwrite.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\infback.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inffast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inffast.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inffixed.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inflate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inflate.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inftrees.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\inftrees.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\trees.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\trees.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\uncompr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\zconf.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\zlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\zutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\zlib\zutil.h
+# End Source File
+# End Group
+# Begin Group "bar"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\bar\bar.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bar\bar.h
+# End Source File
+# End Group
+# Begin Group "bbl"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\bbl\bblif.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\bbl\bblif.h
+# End Source File
+# End Group
+# Begin Group "mem"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\mem\mem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mem\mem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\mem\mem2.h
+# End Source File
+# End Group
+# Begin Group "tim"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\tim\tim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\tim.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timBox.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timDump.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timTime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\tim\timTrav.c
+# End Source File
+# End Group
+# Begin Group "parse"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\misc\parse\parseEqn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\parse\parseInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\misc\parse\parseStack.c
+# End Source File
+# End Group
+# End Group
+# Begin Group "ai"
+
+# PROP Default_Filter ""
+# Begin Group "hop"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopBalance.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopOper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\hop\hopUtil.c
+# End Source File
+# End Group
+# Begin Group "ivy"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyBalance.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyCutTrav.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyFanout.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyFastMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyFraig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyHaig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyMulti.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyOper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyResyn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyRwr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivySeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyShow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ivy\ivyUtil.c
+# End Source File
+# End Group
+# Begin Group "ioa"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\ioa\ioa.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ioa\ioaReadAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ioa\ioaUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\ioa\ioaWriteAig.c
+# End Source File
+# End Group
+# Begin Group "aig"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigCuts.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigDoms.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigDup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigFact.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigFanout.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigFrames.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigInter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigJust.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigMffc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigObj.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigOper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigOrder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigPack.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigPart.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigPartReg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigPartSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigRepr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigRet.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigRetF.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigScl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigShow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigSplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigTiming.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigTsim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\aig\aigWin.c
+# End Source File
+# End Group
+# Begin Group "saig"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigCone.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigConstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigConstr2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigDual.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigDup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigInd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigIoa.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigIso.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigIsoFast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigIsoSlow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigMiter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigOutDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigPhase.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigRetFwd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigRetMin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigRetStep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigScl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigSimFast.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigSimMv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigSimSeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigStrSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigSwitch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigSynch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigTempor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigTrans.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\saig\saigWnd.c
+# End Source File
+# End Group
+# Begin Group "gia"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\gia\gia.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\gia.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaAig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaAiger.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaAigerExt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaBalAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaBalLut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaBalMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaBidec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCCof.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaClp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCof.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCone.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCSat2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCSatOld.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCTas.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaCut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaDfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaDup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEdge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEmbed.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEnable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEquiv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEra.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEra2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaEsop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaExist.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaFalse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaFanout.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaForce.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaFrames.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaFront.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaFx.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaGig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaGlitch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaHash.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIff.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIiff.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIiff.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIso.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIso2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaIso3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaJf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaKf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaLf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMini.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaMuxes.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaNf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaOf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaPack.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaPat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaPf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaQbf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaResub.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaRetime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaRex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSat3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSatEdge.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSatLE.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSatLut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSatMap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSatoko.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaScl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaScript.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaShow.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaShrink.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaShrink6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaShrink7.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSim2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSort.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSpeedup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaStg.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaStr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSupMin.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSupp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSweep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSweeper.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaSwitch.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaTim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaTis.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaTruth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaTsim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaUnate.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\gia\giaUtil.c
+# End Source File
+# End Group
+# Begin Group "miniaig"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\miniaig\abcOper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\miniaig\miniaig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\miniaig\minilut.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\aig\miniaig\ndr.h
+# End Source File
+# End Group
+# Begin Group "uap"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\aig\uap\uap.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "bool"
+
+# PROP Default_Filter ""
+# Begin Group "bdc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdcCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdcDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdcInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdcSpfd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\bdc\bdcTable.c
+# End Source File
+# End Group
+# Begin Group "dec"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\dec\dec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\dec\decAbc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\dec\decFactor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\dec\decMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\dec\decPrint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\dec\decUtil.c
+# End Source File
+# End Group
+# Begin Group "deco"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\deco\deco.h
+# End Source File
+# End Group
+# Begin Group "kit"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\kit\cloud.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\cloud.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kit_.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitBdd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitCloud.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitDec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitDsd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitFactor.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitGraph.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitHop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitIsop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitPerm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitPla.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitSop.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\kit\kitTruth.c
+# End Source File
+# End Group
+# Begin Group "lucky"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\lucky.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\lucky.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckyFast16.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckyFast6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckyInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckyRead.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckySimple.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckySwap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\lucky\luckySwapIJ.c
+# End Source File
+# End Group
+# Begin Group "rsb"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\rsb\rsb.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\rsb\rsbDec6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\rsb\rsbInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\rsb\rsbMan.c
+# End Source File
+# End Group
+# Begin Group "rpo"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\bool\rpo\literal.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\rpo\rpo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\bool\rpo\rpo.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "prove"
+
+# PROP Default_Filter ""
+# Begin Group "cec"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecCec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecChoice.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecCorr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecIso.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecPat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSatG.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSeq.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSolve.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSplit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSweep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\cec\cecSynth.c
+# End Source File
+# End Group
+# Begin Group "dch"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dch.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchChoice.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchSimSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\dch\dchSweep.c
+# End Source File
+# End Group
+# Begin Group "fra"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fra.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraBmc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraCec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraClau.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraClaus.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraHot.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraImp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraInd.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraIndVer.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraLcr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraPart.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraSec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fra\fraSim.c
+# End Source File
+# End Group
+# Begin Group "fraig"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraig.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigApi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigCanon.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigChoice.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigFanout.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigFeed.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigMem.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigNode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigPrime.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigTable.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\fraig\fraigVec.c
+# End Source File
+# End Group
+# Begin Group "int"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\int\int.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intCheck.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intContain.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intCtrex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intDup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intFrames.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intInter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intM114.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\int\intUtil.c
+# End Source File
+# End Group
+# Begin Group "live"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\live\arenaViolation.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\combination.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\disjunctiveMonotone.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\kLiveConstraints.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\kliveness.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\liveness.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\liveness_sim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\ltl_parser.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\live\monotone.c
+# End Source File
+# End Group
+# Begin Group "pdr"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrIncr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrInv.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrTsim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrTsim2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrTsim3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\pdr\pdrUtil.c
+# End Source File
+# End Group
+# Begin Group "ssw"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\ssw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswAig.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswBmc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswCnf.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswConstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswDyn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswFilter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswIslands.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswLcorr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswMan.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswPairs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswPart.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswRarity.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswRarity2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswSemi.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswSimSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswSweep.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssw\sswUnique.c
+# End Source File
+# End Group
+# Begin Group "abs"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\abs\abs.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\abs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absDup.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absGla.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absGlaOld.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absIter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absOldCex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absOldRef.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absOldSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absOldSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absOut.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absPth.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absRef.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absRef.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absRefSelect.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absRpm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absRpmOld.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\abs\absVta.c
+# End Source File
+# End Group
+# Begin Group "ssc"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\ssc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscClass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscSat.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscSim.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\ssc\sscUtil.c
+# End Source File
+# End Group
+# Begin Group "int2"
+
+# PROP Default_Filter ""
+# End Group
+# Begin Group "acec"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acec.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acec2Mult.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecBo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecCl.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecCo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecCover.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecFadds.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecInt.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecMult.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecNorm.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecOrder.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecPa.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecPo.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecPolyn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecPool.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecRe.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecSt.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecStruct.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecTree.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecUtil.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\src\proof\acec\acecXor.c
+# End Source File
+# End Group
+# End Group
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# End Target
+# End Project
diff --git a/abcspace.dsw b/abcspace.dsw
index 5dbaf57..0f69c0d 100644
--- a/abcspace.dsw
+++ b/abcspace.dsw
@@ -1,44 +1,44 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "abcexe"=.\abcexe.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name abclib
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "abclib"=.\abclib.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "abcexe"=.\abcexe.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name abclib
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "abclib"=.\abclib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
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 );
diff --git a/src/base/abc/abc.h b/src/base/abc/abc.h
index 65461ab..dd189c6 100644
--- a/src/base/abc/abc.h
+++ b/src/base/abc/abc.h
@@ -657,6 +657,7 @@ extern ABC_DLL void Abc_ObjPatchFanoutFanin( Abc_Obj_t * pObj, int
extern ABC_DLL Abc_Obj_t * Abc_ObjInsertBetween( Abc_Obj_t * pNodeIn, Abc_Obj_t * pNodeOut, Abc_ObjType_t Type );
extern ABC_DLL void Abc_ObjTransferFanout( Abc_Obj_t * pObjOld, Abc_Obj_t * pObjNew );
extern ABC_DLL void Abc_ObjReplace( Abc_Obj_t * pObjOld, Abc_Obj_t * pObjNew );
+extern ABC_DLL void Abc_ObjReplaceByConstant( Abc_Obj_t * pNode, int fConst1 );
extern ABC_DLL int Abc_ObjFanoutFaninNum( Abc_Obj_t * pFanout, Abc_Obj_t * pFanin );
/*=== abcFanOrder.c ==========================================================*/
extern ABC_DLL int Abc_NtkMakeLegit( Abc_Ntk_t * pNtk );
diff --git a/src/base/abc/abcFanio.c b/src/base/abc/abcFanio.c
index caa57a4..519debb 100644
--- a/src/base/abc/abcFanio.c
+++ b/src/base/abc/abcFanio.c
@@ -337,6 +337,30 @@ void Abc_ObjReplace( Abc_Obj_t * pNodeOld, Abc_Obj_t * pNodeNew )
/**Function*************************************************************
+ Synopsis [Replaces a node by a constant.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Abc_ObjReplaceByConstant( Abc_Obj_t * pNode, int fConst1 )
+{
+ Abc_Obj_t * pNodeNew;
+ assert( Abc_NtkIsLogic(pNode->pNtk) );
+ assert( !Abc_ObjIsCo(pNode) );
+ pNodeNew = fConst1 ? Abc_NtkCreateNodeConst1(pNode->pNtk) : Abc_NtkCreateNodeConst0(pNode->pNtk);
+ // transfer the fanouts to the old node
+ Abc_ObjTransferFanout( pNode, pNodeNew );
+ // remove the old node
+ if ( Abc_ObjIsNode(pNode) )
+ Abc_NtkDeleteObj_rec( pNode, 1 );
+}
+
+/**Function*************************************************************
+
Synopsis [Returns the index of the fanin in the fanin list of the fanout.]
Description []
diff --git a/src/base/abc/abcShow.c b/src/base/abc/abcShow.c
index 13dd934..f91397d 100644
--- a/src/base/abc/abcShow.c
+++ b/src/base/abc/abcShow.c
@@ -85,12 +85,13 @@ void Abc_NodeShowBddOne( DdManager * dd, DdNode * bFunc )
SeeAlso []
***********************************************************************/
-void Abc_NodeShowBdd( Abc_Obj_t * pNode )
+void Abc_NodeShowBdd( Abc_Obj_t * pNode, int fCompl )
{
FILE * pFile;
Vec_Ptr_t * vNamesIn;
char FileNameDot[200];
char * pNameOut;
+ DdManager * dd = (DdManager *)pNode->pNtk->pManFunc;
assert( Abc_NtkIsBddLogic(pNode->pNtk) );
// create the file name
@@ -105,7 +106,14 @@ void Abc_NodeShowBdd( Abc_Obj_t * pNode )
// set the node names
vNamesIn = Abc_NodeGetFaninNames( pNode );
pNameOut = Abc_ObjName(pNode);
- Cudd_DumpDot( (DdManager *)pNode->pNtk->pManFunc, 1, (DdNode **)&pNode->pData, (char **)vNamesIn->pArray, &pNameOut, pFile );
+ if ( fCompl )
+ Cudd_DumpDot( dd, 1, (DdNode **)&pNode->pData, (char **)vNamesIn->pArray, &pNameOut, pFile );
+ else
+ {
+ DdNode * bAdd = Cudd_BddToAdd( dd, (DdNode *)pNode->pData ); Cudd_Ref( bAdd );
+ Cudd_DumpDot( dd, 1, (DdNode **)&bAdd, (char **)vNamesIn->pArray, &pNameOut, pFile );
+ Cudd_RecursiveDeref( dd, bAdd );
+ }
Abc_NodeFreeNames( vNamesIn );
Abc_NtkCleanCopy( pNode->pNtk );
fclose( pFile );
@@ -113,9 +121,72 @@ void Abc_NodeShowBdd( Abc_Obj_t * pNode )
// visualize the file
Abc_ShowFile( FileNameDot );
}
+void Abc_NtkShowBdd( Abc_Ntk_t * pNtk, int fCompl )
+{
+ char FileNameDot[200];
+ char ** ppNamesIn, ** ppNamesOut;
+ DdManager * dd; DdNode * bFunc;
+ Vec_Ptr_t * vFuncsGlob;
+ Abc_Obj_t * pObj; int i;
+ FILE * pFile;
+
+ assert( Abc_NtkIsStrash(pNtk) );
+ dd = (DdManager *)Abc_NtkBuildGlobalBdds( pNtk, 10000000, 1, 1, 0, 0 );
+ if ( dd == NULL )
+ {
+ printf( "Construction of global BDDs has failed.\n" );
+ return;
+ }
+ //printf( "Shared BDD size = %6d nodes.\n", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
+
+ // complement the global functions
+ vFuncsGlob = Vec_PtrAlloc( Abc_NtkCoNum(pNtk) );
+ Abc_NtkForEachCo( pNtk, pObj, i )
+ Vec_PtrPush( vFuncsGlob, Abc_ObjGlobalBdd(pObj) );
+
+ // create the file name
+ Abc_ShowGetFileName( pNtk->pName, FileNameDot );
+ // check that the file can be opened
+ if ( (pFile = fopen( FileNameDot, "w" )) == NULL )
+ {
+ fprintf( stdout, "Cannot open the intermediate file \"%s\".\n", FileNameDot );
+ return;
+ }
+
+ // set the node names
+ ppNamesIn = Abc_NtkCollectCioNames( pNtk, 0 );
+ ppNamesOut = Abc_NtkCollectCioNames( pNtk, 1 );
+ if ( fCompl )
+ Cudd_DumpDot( dd, Abc_NtkCoNum(pNtk), (DdNode **)Vec_PtrArray(vFuncsGlob), ppNamesIn, ppNamesOut, pFile );
+ else
+ {
+ DdNode ** pbAdds = ABC_ALLOC( DdNode *, Vec_PtrSize(vFuncsGlob) );
+ Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i )
+ { pbAdds[i] = Cudd_BddToAdd( dd, bFunc ); Cudd_Ref( pbAdds[i] ); }
+ Cudd_DumpDot( dd, Abc_NtkCoNum(pNtk), pbAdds, ppNamesIn, ppNamesOut, pFile );
+ Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i )
+ Cudd_RecursiveDeref( dd, pbAdds[i] );
+ ABC_FREE( pbAdds );
+ }
+ ABC_FREE( ppNamesIn );
+ ABC_FREE( ppNamesOut );
+ fclose( pFile );
+
+ // cleanup
+ Abc_NtkFreeGlobalBdds( pNtk, 0 );
+ Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i )
+ Cudd_RecursiveDeref( dd, bFunc );
+ Vec_PtrFree( vFuncsGlob );
+ Extra_StopManager( dd );
+ Abc_NtkCleanCopy( pNtk );
+
+ // visualize the file
+ Abc_ShowFile( FileNameDot );
+}
#else
-void Abc_NodeShowBdd( Abc_Obj_t * pNode ) {}
+void Abc_NodeShowBdd( Abc_Obj_t * pNode, int fCompl ) {}
+void Abc_NtkShowBdd( Abc_Ntk_t * pNtk, int fCompl ) {}
#endif
/**Function*************************************************************
diff --git a/src/base/abci/abc.c b/src/base/abci/abc.c
index d652b9f..3a3ccac 100644
--- a/src/base/abci/abc.c
+++ b/src/base/abci/abc.c
@@ -186,6 +186,7 @@ static int Abc_CommandExtSeqDcs ( Abc_Frame_t * pAbc, int argc, cha
static int Abc_CommandReach ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandCone ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandNode ( Abc_Frame_t * pAbc, int argc, char ** argv );
+static int Abc_CommandCof ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandTopmost ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandTopAnd ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandTrim ( Abc_Frame_t * pAbc, int argc, char ** argv );
@@ -317,6 +318,7 @@ static int Abc_CommandPermute ( Abc_Frame_t * pAbc, int argc, cha
static int Abc_CommandUnpermute ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandCubeEnum ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandPathEnum ( Abc_Frame_t * pAbc, int argc, char ** argv );
+static int Abc_CommandFunEnum ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandCec ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandDCec ( Abc_Frame_t * pAbc, int argc, char ** argv );
@@ -879,8 +881,9 @@ void Abc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd( pAbc, "Various", "reach", Abc_CommandReach, 0 );
Cmd_CommandAdd( pAbc, "Various", "cone", Abc_CommandCone, 1 );
Cmd_CommandAdd( pAbc, "Various", "node", Abc_CommandNode, 1 );
+ Cmd_CommandAdd( pAbc, "Various", "cof", Abc_CommandCof, 1 );
Cmd_CommandAdd( pAbc, "Various", "topmost", Abc_CommandTopmost, 1 );
- Cmd_CommandAdd( pAbc, "Various", "topand", Abc_CommandTopAnd, 1 );
+ Cmd_CommandAdd( pAbc, "Various", "topand", Abc_CommandTopAnd, 1 );
Cmd_CommandAdd( pAbc, "Various", "trim", Abc_CommandTrim, 1 );
Cmd_CommandAdd( pAbc, "Various", "short_names", Abc_CommandShortNames, 0 );
Cmd_CommandAdd( pAbc, "Various", "move_names", Abc_CommandMoveNames, 0 );
@@ -1005,6 +1008,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd( pAbc, "Sequential", "unpermute", Abc_CommandUnpermute, 1 );
Cmd_CommandAdd( pAbc, "Sequential", "cubeenum", Abc_CommandCubeEnum, 0 );
Cmd_CommandAdd( pAbc, "Sequential", "pathenum", Abc_CommandPathEnum, 0 );
+ Cmd_CommandAdd( pAbc, "Sequential", "funenum", Abc_CommandFunEnum, 0 );
Cmd_CommandAdd( pAbc, "Verification", "cec", Abc_CommandCec, 0 );
Cmd_CommandAdd( pAbc, "Verification", "dcec", Abc_CommandDCec, 0 );
@@ -3059,15 +3063,22 @@ int Abc_CommandShowBdd( Abc_Frame_t * pAbc, int argc, char ** argv )
{
Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc);
Abc_Obj_t * pNode;
- int c;
- extern void Abc_NodeShowBdd( Abc_Obj_t * pNode );
+ int c, fCompl = 0, fGlobal = 0;
+ extern void Abc_NodeShowBdd( Abc_Obj_t * pNode, int fCompl );
+ extern void Abc_NtkShowBdd( Abc_Ntk_t * pNtk, int fCompl );
// set defaults
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "cgh" ) ) != EOF )
{
switch ( c )
{
+ case 'c':
+ fCompl ^= 1;
+ break;
+ case 'g':
+ fGlobal ^= 1;
+ break;
case 'h':
goto usage;
default:
@@ -3081,12 +3092,20 @@ int Abc_CommandShowBdd( Abc_Frame_t * pAbc, int argc, char ** argv )
return 1;
}
+ if ( fGlobal )
+ {
+ Abc_Ntk_t * pTemp = Abc_NtkIsStrash(pNtk) ? pNtk : Abc_NtkStrash(pNtk, 0, 0, 0);
+ Abc_NtkShowBdd( pTemp, fCompl );
+ if ( pTemp != pNtk )
+ Abc_NtkDelete( pTemp );
+ return 0;
+ }
+
if ( !Abc_NtkIsBddLogic(pNtk) )
{
Abc_Print( -1, "Visualizing BDDs can only be done for logic BDD networks (run \"bdd\").\n" );
return 1;
}
-
if ( argc > globalUtilOptind + 1 )
{
Abc_Print( -1, "Wrong number of auguments.\n" );
@@ -3110,17 +3129,20 @@ int Abc_CommandShowBdd( Abc_Frame_t * pAbc, int argc, char ** argv )
return 1;
}
}
- Abc_NodeShowBdd( pNode );
+ Abc_NodeShowBdd( pNode, fCompl );
return 0;
usage:
- Abc_Print( -2, "usage: show_bdd [-h] <node>\n" );
- Abc_Print( -2, " visualizes the BDD of a node using DOT and GSVIEW\n" );
+ Abc_Print( -2, "usage: show_bdd [-cgh] <node>\n" );
+ Abc_Print( -2, " uses DOT and GSVIEW to visualize the global BDDs of primary outputs\n" );
+ Abc_Print( -2, " in terms of primary inputs or the local BDD of a node in terms of its fanins\n" );
#ifdef WIN32
Abc_Print( -2, " \"dot.exe\" and \"gsview32.exe\" should be set in the paths\n" );
Abc_Print( -2, " (\"gsview32.exe\" may be in \"C:\\Program Files\\Ghostgum\\gsview\\\")\n" );
#endif
- Abc_Print( -2, "\t<node>: the node to consider [default = the driver of the first PO]\n");
+ Abc_Print( -2, "\t<node>: (optional) the node to consider [default = the driver of the first PO]\n");
+ Abc_Print( -2, "\t-c : toggle visualizing BDD with complemented edges [default = %s].\n", fCompl? "yes": "no" );
+ Abc_Print( -2, "\t-g : toggle visualizing the global BDDs of primary outputs [default = %s].\n", fGlobal? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
return 1;
}
@@ -8291,7 +8313,7 @@ int Abc_CommandTwoExact( Abc_Frame_t * pAbc, int argc, char ** argv )
Bmc_EsPar_t Pars, * pPars = &Pars;
Bmc_EsParSetDefault( pPars );
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "INaogvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "INTaogvh" ) ) != EOF )
{
switch ( c )
{
@@ -8317,6 +8339,17 @@ int Abc_CommandTwoExact( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( pPars->nNodes < 0 )
goto usage;
break;
+ case 'T':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-T\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ pPars->RuntimeLim = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ if ( pPars->RuntimeLim < 0 )
+ goto usage;
+ break;
case 'a':
pPars->fOnlyAnd ^= 1;
break;
@@ -8364,10 +8397,11 @@ int Abc_CommandTwoExact( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0;
usage:
- Abc_Print( -2, "usage: twoexact [-IN <num>] [-aogvh] <hex>\n" );
+ Abc_Print( -2, "usage: twoexact [-INT <num>] [-aogvh] <hex>\n" );
Abc_Print( -2, "\t exact synthesis of multi-input function using two-input gates\n" );
Abc_Print( -2, "\t-I <num> : the number of input variables [default = %d]\n", pPars->nVars );
- Abc_Print( -2, "\t-N <num> : the number of MAJ3 nodes [default = %d]\n", pPars->nNodes );
+ Abc_Print( -2, "\t-N <num> : the number of two-input nodes [default = %d]\n", pPars->nNodes );
+ Abc_Print( -2, "\t-T <num> : the runtime limit in seconds [default = %d]\n", pPars->RuntimeLim );
Abc_Print( -2, "\t-a : toggle using only AND-gates (without XOR-gates) [default = %s]\n", pPars->fOnlyAnd ? "yes" : "no" );
Abc_Print( -2, "\t-o : toggle using additional optimizations [default = %s]\n", pPars->fFewerVars ? "yes" : "no" );
Abc_Print( -2, "\t-g : toggle using Glucose 3.0 by Gilles Audemard and Laurent Simon [default = %s]\n", pPars->fGlucose ? "yes" : "no" );
@@ -8403,7 +8437,7 @@ int Abc_CommandLutExact( Abc_Frame_t * pAbc, int argc, char ** argv )
Bmc_EsPar_t Pars, * pPars = &Pars;
Bmc_EsParSetDefault( pPars );
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "INKiaogvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "INKTiaogvh" ) ) != EOF )
{
switch ( c )
{
@@ -8440,6 +8474,17 @@ int Abc_CommandLutExact( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( pPars->nLutSize < 0 )
goto usage;
break;
+ case 'T':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-T\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ pPars->RuntimeLim = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ if ( pPars->RuntimeLim < 0 )
+ goto usage;
+ break;
case 'i':
pPars->fUseIncr ^= 1;
break;
@@ -8495,11 +8540,12 @@ int Abc_CommandLutExact( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0;
usage:
- Abc_Print( -2, "usage: lutexact [-INK <num>] [-iaogvh] <hex>\n" );
+ Abc_Print( -2, "usage: lutexact [-INKT <num>] [-iaogvh] <hex>\n" );
Abc_Print( -2, "\t exact synthesis of I-input function using N K-input gates\n" );
Abc_Print( -2, "\t-I <num> : the number of input variables [default = %d]\n", pPars->nVars );
Abc_Print( -2, "\t-N <num> : the number of K-input nodes [default = %d]\n", pPars->nNodes );
Abc_Print( -2, "\t-K <num> : the number of node fanins [default = %d]\n", pPars->nLutSize );
+ Abc_Print( -2, "\t-T <num> : the runtime limit in seconds [default = %d]\n", pPars->RuntimeLim );
Abc_Print( -2, "\t-i : toggle using incremental solving [default = %s]\n", pPars->fUseIncr ? "yes" : "no" );
Abc_Print( -2, "\t-a : toggle using only AND-gates when K = 2 [default = %s]\n", pPars->fOnlyAnd ? "yes" : "no" );
Abc_Print( -2, "\t-o : toggle using additional optimizations [default = %s]\n", pPars->fFewerVars ? "yes" : "no" );
@@ -10681,7 +10727,7 @@ int Abc_CommandExpand( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_NtkDelete( pNtk2 );
// convert it into an AIG
pGia = Abc_NtkClpGia( pStrash );
- //Gia_AigerWrite( pGia, "aig_dump.aig", 0, 0 );
+ //Gia_AigerWrite( pGia, "aig_dump.aig", 0, 0, 0 );
Abc_NtkDelete( pStrash );
// get the new network
Abc_NtkExpandCubes( pNtk, pGia, fVerbose );
@@ -10946,6 +10992,11 @@ int Abc_CommandReach( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Reachability analysis works only for AIGs (run \"strash\").\n" );
return 1;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
pAbc->Status = Abc_NtkDarReach( pNtk, pPars );
pAbc->nFrames = pPars->iFrame;
Abc_FrameReplaceCex( pAbc, &pNtk->pSeqModel );
@@ -11197,6 +11248,81 @@ usage:
return 1;
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Abc_CommandCof( Abc_Frame_t * pAbc, int argc, char ** argv )
+{
+ Abc_Ntk_t * pNtk;
+ Abc_Obj_t * pNode;
+ int c, Const;
+
+ pNtk = Abc_FrameReadNtk(pAbc);
+ // set defaults
+ Extra_UtilGetoptReset();
+ while ( ( c = Extra_UtilGetopt( argc, argv, "h" ) ) != EOF )
+ {
+ switch ( c )
+ {
+ case 'h':
+ goto usage;
+ default:
+ goto usage;
+ }
+ }
+
+ if ( pNtk == NULL )
+ {
+ Abc_Print( -1, "Empty network.\n" );
+ return 1;
+ }
+
+ if ( !Abc_NtkIsLogic(pNtk) )
+ {
+ Abc_Print( -1, "Currently can only be applied to a logic network.\n" );
+ return 1;
+ }
+
+ if ( argc != globalUtilOptind + 2 )
+ {
+ Abc_Print( -1, "Wrong number of auguments.\n" );
+ goto usage;
+ }
+ pNode = Abc_NtkFindCi( pNtk, argv[globalUtilOptind] );
+ if ( pNode == NULL )
+ pNode = Abc_NtkFindNode( pNtk, argv[globalUtilOptind] );
+ if ( pNode == NULL )
+ {
+ Abc_Print( -1, "Cannot find node \"%s\".\n", argv[globalUtilOptind] );
+ return 1;
+ }
+ Const = atoi( argv[globalUtilOptind+1] );
+ if ( Const != 0 && Const != 1 )
+ {
+ Abc_Print( -1, "Constant should be 0 or 1.\n", argv[globalUtilOptind+1] );
+ return 1;
+ }
+ Abc_ObjReplaceByConstant( pNode, Const );
+ return 0;
+
+usage:
+ Abc_Print( -2, "usage: cof [-h] <node> <const>\n" );
+ Abc_Print( -2, "\t replaces one node in a logic network by constant 0 or 1\n" );
+ Abc_Print( -2, "\t-h : print the command usage\n");
+ Abc_Print( -2, "\t<node> : the node to replace\n");
+ Abc_Print( -2, "\t<const> : the constant to replace the node with\n");
+ Abc_Print( -2, "\tname : the node name\n");
+ return 1;
+}
+
/**Function*************************************************************
@@ -13030,6 +13156,7 @@ int Abc_CommandTestColor( Abc_Frame_t * pAbc, int argc, char ** argv )
***********************************************************************/
int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
{
+ extern void Dau_NetworkEnumTest();
//Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc);
int nCutMax = 1;
int nLeafMax = 4;
@@ -13188,7 +13315,7 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
*/
{
// extern void Abc_EnumerateFuncs( int nDecMax, int nDivMax, int fVerbose );
-// Abc_EnumerateFuncs( nDecMax, nDivMax, fVerbose );
+// Abc_EnumerateFuncs( 4, 7, 0 );
}
/*
if ( fNewAlgo )
@@ -13239,7 +13366,8 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
// Cba_PrsReadBlifTest();
}
// Abc_NtkComputePaths( Abc_FrameReadNtk(pAbc) );
- Dau_NetworkEnumTest();
+ //Dau_NetworkEnumTest();
+ //Ext_TruthDiagnoseTest();
return 0;
usage:
Abc_Print( -2, "usage: test [-CKDNM] [-aovwh] <file_name>\n" );
@@ -14991,6 +15119,7 @@ int Abc_CommandIProve( Abc_Frame_t * pAbc, int argc, char ** argv )
Prove_Params_t Params, * pParams = &Params;
Abc_Ntk_t * pNtk, * pNtkTemp;
int c, RetValue, iOut = -1;
+ char * pLogFileName = NULL;
abctime clk;
extern int Abc_NtkIvyProve( Abc_Ntk_t ** ppNtk, void * pPars );
@@ -15001,7 +15130,7 @@ int Abc_CommandIProve( Abc_Frame_t * pAbc, int argc, char ** argv )
pParams->fUseRewriting = 1;
pParams->fVerbose = 0;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "NCFGLIrfbvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "NCFGMILrfbvh" ) ) != EOF )
{
switch ( c )
{
@@ -15049,10 +15178,10 @@ int Abc_CommandIProve( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( pParams->nFraigingLimitMulti < 0 )
goto usage;
break;
- case 'L':
+ case 'M':
if ( globalUtilOptind >= argc )
{
- Abc_Print( -1, "Command line switch \"-L\" should be followed by an integer.\n" );
+ Abc_Print( -1, "Command line switch \"-M\" should be followed by an integer.\n" );
goto usage;
}
pParams->nMiteringLimitLast = atoi(argv[globalUtilOptind]);
@@ -15071,6 +15200,15 @@ int Abc_CommandIProve( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( pParams->nTotalInspectLimit < 0 )
goto usage;
break;
+ case 'L':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-L\" should be followed by a file name.\n" );
+ goto usage;
+ }
+ pLogFileName = argv[globalUtilOptind];
+ globalUtilOptind++;
+ break;
case 'r':
pParams->fUseRewriting ^= 1;
break;
@@ -15144,17 +15282,20 @@ int Abc_CommandIProve( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Cex_t * pCex = Abc_CexDeriveFromCombModel( pNtkTemp->pModel, Abc_NtkPiNum(pNtkTemp), 0, iOut );
Abc_FrameReplaceCex( pAbc, &pCex );
}
+ if ( pLogFileName )
+ Abc_NtkWriteLogFile( pLogFileName, pAbc->pCex, pAbc->Status, pAbc->nFrames, "iprove" );
return 0;
usage:
- Abc_Print( -2, "usage: iprove [-NCFGLI num] [-rfbvh]\n" );
+ Abc_Print( -2, "usage: iprove [-NCFGMI num] [-L file] [-rfbvh]\n" );
Abc_Print( -2, "\t performs CEC using a new method\n" );
Abc_Print( -2, "\t-N num : max number of iterations [default = %d]\n", pParams->nItersMax );
Abc_Print( -2, "\t-C num : max starting number of conflicts in mitering [default = %d]\n", pParams->nMiteringLimitStart );
Abc_Print( -2, "\t-F num : max starting number of conflicts in fraiging [default = %d]\n", pParams->nFraigingLimitStart );
Abc_Print( -2, "\t-G num : multiplicative coefficient for fraiging [default = %d]\n", (int)pParams->nFraigingLimitMulti );
- Abc_Print( -2, "\t-L num : max last-gasp number of conflicts in mitering [default = %d]\n", pParams->nMiteringLimitLast );
+ Abc_Print( -2, "\t-M num : max last-gasp number of conflicts in mitering [default = %d]\n", pParams->nMiteringLimitLast );
Abc_Print( -2, "\t-I num : max number of clause inspections in all SAT calls [default = %d]\n", (int)pParams->nTotalInspectLimit );
+ Abc_Print( -2, "\t-L file: the log file name [default = %s]\n", pLogFileName ? pLogFileName : "no logging" );
Abc_Print( -2, "\t-r : toggle the use of rewriting [default = %s]\n", pParams->fUseRewriting? "yes": "no" );
Abc_Print( -2, "\t-f : toggle the use of FRAIGing [default = %s]\n", pParams->fUseFraiging? "yes": "no" );
Abc_Print( -2, "\t-b : toggle the use of BDDs [default = %s]\n", pParams->fUseBdds? "yes": "no" );
@@ -16716,7 +16857,7 @@ int Abc_CommandRecDump3( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( 0, "No structure in the library.\n" );
return 1;
}
- Gia_AigerWrite( pGia, FileName, 0, 0 );
+ Gia_AigerWrite( pGia, FileName, 0, 0, 0 );
}
return 0;
@@ -22972,6 +23113,126 @@ usage:
return 1;
}
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Abc_CommandFunEnum( Abc_Frame_t * pAbc, int argc, char ** argv )
+{
+ extern void Dtt_EnumerateLf( int nVars, int nNodeMax, int fDelay, int fMulti, int fVerbose );
+ extern void Dau_FunctionEnum( int nInputs, int nVars, int nNodeMax, int fUseTwo, int fReduce, int fVerbose );
+ int c, nInputs = 4, nVars = 4, nNodeMax = 32, fUseTwo = 0, fReduce = 0, fSimple = 0, fDelay = 0, fMulti = 0, fVerbose = 0;
+ Extra_UtilGetoptReset();
+ while ( ( c = Extra_UtilGetopt( argc, argv, "SIMtrldmvh" ) ) != EOF )
+ {
+ switch ( c )
+ {
+ case 'S':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-S\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ nInputs = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ if ( nInputs < 0 )
+ goto usage;
+ break;
+ case 'I':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-I\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ nVars = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ if ( nVars < 0 )
+ goto usage;
+ break;
+ case 'M':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-M\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ nNodeMax = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ if ( nNodeMax < 0 )
+ goto usage;
+ break;
+ case 't':
+ fUseTwo ^= 1;
+ break;
+ case 'r':
+ fReduce ^= 1;
+ break;
+ case 'l':
+ fSimple ^= 1;
+ break;
+ case 'd':
+ fDelay ^= 1;
+ break;
+ case 'm':
+ fMulti ^= 1;
+ break;
+ case 'v':
+ fVerbose ^= 1;
+ break;
+ case 'h':
+ goto usage;
+ default:
+ Abc_Print( -2, "Unknown switch.\n");
+ goto usage;
+ }
+ }
+ if ( fSimple || fDelay )
+ {
+ if ( nVars < 3 || nVars > 5 )
+ {
+ Abc_Print( -1, "The number of inputs should be 3 <= I <= 5.\n" );
+ goto usage;
+ }
+ Dtt_EnumerateLf( nVars, nNodeMax, fDelay, fMulti, fVerbose );
+ }
+ else
+ {
+ if ( nVars < 2 || nVars > 6 )
+ {
+ Abc_Print( -1, "The number of inputs should be 2 <= I <= 6.\n" );
+ goto usage;
+ }
+ if ( nInputs < nVars || nInputs > 6 )
+ {
+ Abc_Print( -1, "The intermediate support size should be I <= S <= 6.\n" );
+ goto usage;
+ }
+ Dau_FunctionEnum( nInputs, nVars, nNodeMax, fUseTwo, fReduce, fVerbose );
+ }
+ return 0;
+
+usage:
+ Abc_Print( -2, "usage: funenum [-SIM num] [-trldmvh]\n" );
+ Abc_Print( -2, "\t enumerates minimum 2-input-gate implementations\n" );
+ Abc_Print( -2, "\t-S num : the maximum intermediate support size [default = %d]\n", nInputs );
+ Abc_Print( -2, "\t-I num : the number of inputs of Boolean functions [default = %d]\n", nVars );
+ Abc_Print( -2, "\t-M num : the maximum number of 2-input gates [default = %d]\n", nNodeMax );
+ Abc_Print( -2, "\t-t : toggle adding combination of two gates [default = %s]\n", fUseTwo? "yes": "no" );
+ Abc_Print( -2, "\t-r : toggle reducing the last level [default = %s]\n", fReduce? "yes": "no" );
+ Abc_Print( -2, "\t-l : toggle generating L(f) rather than C(f) [default = %s]\n", fSimple? "yes": "no" );
+ Abc_Print( -2, "\t-d : toggle generating D(f) rather than C(f) [default = %s]\n", fDelay? "yes": "no" );
+ Abc_Print( -2, "\t-m : toggle generating multiplicity statistics [default = %s]\n", fMulti? "yes": "no" );
+ Abc_Print( -2, "\t-v : toggle verbose output [default = %s]\n", fVerbose? "yes": "no" );
+ Abc_Print( -2, "\t-h : print the command usage\n");
+ return 1;
+}
+
/**Function*************************************************************
@@ -23645,12 +23906,16 @@ int Abc_CommandDProve( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Empty network.\n" );
return 1;
}
-
if ( !Abc_NtkIsStrash(pNtk) )
{
Abc_Print( -1, "This command works only for structrally hashed networks. Run \"st\".\n" );
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
// perform verification
pAbc->Status = Abc_NtkDarProve( pNtk, pSecPar, nBmcFramesMax, nBmcConfMax );
@@ -25349,6 +25614,11 @@ int Abc_CommandBmc( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Does not work for combinational networks.\n" );
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
pAbc->Status = Abc_NtkDarBmc( pNtk, 0, nFrames, nSizeMax, nNodeDelta, 0, nBTLimit, nBTLimitAll, fRewrite, fNewAlgo, 0, nCofFanLit, fVerbose, &iFrames, fUseSatoko );
pAbc->nFrames = iFrames;
Abc_FrameReplaceCex( pAbc, &pNtk->pSeqModel );
@@ -25544,6 +25814,11 @@ int Abc_CommandBmc2( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Does not work for combinational networks.\n" );
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
pAbc->Status = Abc_NtkDarBmc( pNtk, nStart, nFrames, nSizeMax, nNodeDelta, nTimeOut, nBTLimit, nBTLimitAll, fRewrite, fNewAlgo, fOrDecomp, 0, fVerbose, &iFrames, fUseSatoko );
pAbc->nFrames = iFrames;
Abc_FrameReplaceCex( pAbc, &pNtk->pSeqModel );
@@ -25798,6 +26073,11 @@ int Abc_CommandBmc3( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Constraints have to be folded (use \"fold\").\n" );
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
pPars->fUseBridge = pAbc->fBridgeMode;
pAbc->Status = Abc_NtkDarBmc3( pNtk, pPars, fOrDecomp );
pAbc->nFrames = pNtk->vSeqModelVec ? -1 : pPars->iFrame;
@@ -26004,6 +26284,11 @@ int Abc_CommandBmcInter( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Currently only works for structurally hashed circuits.\n" );
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
if ( Abc_NtkLatchNum(pNtk) == 0 )
{
Abc_Print( -1, "Does not work for combinational networks.\n" );
@@ -27049,6 +27334,11 @@ int Abc_CommandFold( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( 0, "The network has no constraints.\n" );
return 0;
}
+ if ( Abc_NtkConstrNum(pNtk) == Abc_NtkPoNum(pNtk) )
+ {
+ Abc_Print( 0, "The network has no primary outputs (only constraints).\n" );
+ return 0;
+ }
if ( Abc_NtkIsComb(pNtk) )
Abc_Print( 0, "The network is combinational.\n" );
// modify the current network
@@ -27532,11 +27822,12 @@ int Abc_CommandPdr( Abc_Frame_t * pAbc, int argc, char ** argv )
{
extern int Abc_NtkDarPdr( Abc_Ntk_t * pNtk, Pdr_Par_t * pPars );
Pdr_Par_t Pars, * pPars = &Pars;
- Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc);
+ Abc_Ntk_t * pNtk = Abc_FrameReadNtk(pAbc), * pNtkUsed, * pNtkFlop = NULL;
+ char * pLogFileName = NULL;
int c;
Pdr_ManSetDefaultParams( pPars );
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "MFCDQTHGSaxrmuyfqipdegjonctkvwzh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "MFCDQTHGSLaxrmuyfqipdegjonctkvwzh" ) ) != EOF )
{
switch ( c )
{
@@ -27639,6 +27930,15 @@ int Abc_CommandPdr( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( pPars->nRandomSeed < 0 )
goto usage;
break;
+ case 'L':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-L\" should be followed by a file name.\n" );
+ goto usage;
+ }
+ pLogFileName = argv[globalUtilOptind];
+ globalUtilOptind++;
+ break;
case 'a':
pPars->fSolveAll ^= 1;
break;
@@ -27715,29 +28015,38 @@ int Abc_CommandPdr( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -2, "There is no current network.\n");
return 0;
}
- if ( Abc_NtkLatchNum(pNtk) == 0 )
- {
- Abc_Print( 0, "The current network is combinational.\n");
- return 0;
- }
if ( !Abc_NtkIsStrash(pNtk) )
{
Abc_Print( -2, "The current network is not an AIG (run \"strash\").\n");
return 0;
}
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
+ if ( Abc_NtkLatchNum(pNtk) == 0 )
+ {
+ pNtkFlop = Abc_NtkDup( pNtk );
+ Abc_NtkAddLatch( pNtkFlop, Abc_AigConst1(pNtkFlop), ABC_INIT_ONE );
+ }
// run the procedure
pPars->fUseBridge = pAbc->fBridgeMode;
- pAbc->Status = Abc_NtkDarPdr( pNtk, pPars );
- pAbc->nFrames = pNtk->vSeqModelVec ? -1 : pPars->iFrame;
+ pNtkUsed = pNtkFlop ? pNtkFlop : pNtk;
+ pAbc->Status = Abc_NtkDarPdr( pNtkUsed, pPars );
+ pAbc->nFrames = pNtkUsed->vSeqModelVec ? -1 : pPars->iFrame;
Abc_FrameReplacePoStatuses( pAbc, &pPars->vOutMap );
- if ( pNtk->vSeqModelVec )
- Abc_FrameReplaceCexVec( pAbc, &pNtk->vSeqModelVec );
+ if ( pNtkUsed->vSeqModelVec )
+ Abc_FrameReplaceCexVec( pAbc, &pNtkUsed->vSeqModelVec );
else
- Abc_FrameReplaceCex( pAbc, &pNtk->pSeqModel );
+ Abc_FrameReplaceCex( pAbc, &pNtkUsed->pSeqModel );
+ if ( pNtkFlop ) Abc_NtkDelete( pNtkFlop );
+ if ( pLogFileName )
+ Abc_NtkWriteLogFile( pLogFileName, pAbc->pCex, pAbc->Status, pAbc->nFrames, "pdr" );
return 0;
usage:
- Abc_Print( -2, "usage: pdr [-MFCDQTHGS <num>] [-axrmuyfqipdegjonctkvwzh]\n" );
+ Abc_Print( -2, "usage: pdr [-MFCDQTHGS <num>] [-L <file>] [-axrmuyfqipdegjonctkvwzh]\n" );
Abc_Print( -2, "\t model checking using property directed reachability (aka IC3)\n" );
Abc_Print( -2, "\t pioneered by Aaron R. Bradley (http://theory.stanford.edu/~arbrad/)\n" );
Abc_Print( -2, "\t with improvements by Niklas Een (http://een.se/niklas/)\n" );
@@ -27750,6 +28059,7 @@ usage:
Abc_Print( -2, "\t-H num : runtime limit per output, in miliseconds (with \"-a\") [default = %d]\n", pPars->nTimeOutOne );
Abc_Print( -2, "\t-G num : runtime gap since the last CEX (0 = no limit) [default = %d]\n", pPars->nTimeOutGap );
Abc_Print( -2, "\t-S num : * value to seed the SAT solver with [default = %d]\n", pPars->nRandomSeed );
+ Abc_Print( -2, "\t-L file: the log file name [default = %s]\n", pLogFileName ? pLogFileName : "no logging" );
Abc_Print( -2, "\t-a : toggle solving all outputs even if one of them is SAT [default = %s]\n", pPars->fSolveAll? "yes": "no" );
Abc_Print( -2, "\t-x : toggle storing CEXes when solving all outputs [default = %s]\n", pPars->fStoreCex? "yes": "no" );
Abc_Print( -2, "\t-r : toggle using more effort in generalization [default = %s]\n", pPars->fTwoRounds? "yes": "no" );
@@ -29192,6 +29502,7 @@ int Abc_CommandAbc9Get( Abc_Frame_t * pAbc, int argc, char ** argv )
pGia->DefOutReqs = Abc_NtkReadDefaultRequiredWorst(pNtk);
pGia->vInArrs = Vec_FltAllocArray( Abc_NtkGetCiArrivalFloats(pNtk), Abc_NtkCiNum(pNtk) );
pGia->vOutReqs = Vec_FltAllocArray( Abc_NtkGetCoRequiredFloats(pNtk), Abc_NtkCoNum(pNtk) );
+ pGia->And2Delay = pNtk->AndGateDelay;
}
Abc_FrameUpdateGia( pAbc, pGia );
return 0;
@@ -29759,9 +30070,10 @@ int Abc_CommandAbc9Write( Abc_Frame_t * pAbc, int argc, char ** argv )
int fVerilog = 0;
int fMiniAig = 0;
int fMiniLut = 0;
+ int fWriteNewLine = 0;
int fVerbose = 0;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "upmlvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "upmlcvh" ) ) != EOF )
{
switch ( c )
{
@@ -29777,6 +30089,9 @@ int Abc_CommandAbc9Write( Abc_Frame_t * pAbc, int argc, char ** argv )
case 'l':
fMiniLut ^= 1;
break;
+ case 'c':
+ fWriteNewLine ^= 1;
+ break;
case 'v':
fVerbose ^= 1;
break;
@@ -29812,16 +30127,17 @@ int Abc_CommandAbc9Write( Abc_Frame_t * pAbc, int argc, char ** argv )
else if ( fMiniLut )
Gia_ManWriteMiniLut( pAbc->pGia, pFileName );
else
- Gia_AigerWrite( pAbc->pGia, pFileName, 0, 0 );
+ Gia_AigerWrite( pAbc->pGia, pFileName, 0, 0, fWriteNewLine );
return 0;
usage:
- Abc_Print( -2, "usage: &w [-upmlvh] <file>\n" );
+ Abc_Print( -2, "usage: &w [-upmlcvh] <file>\n" );
Abc_Print( -2, "\t writes the current AIG into the AIGER file\n" );
Abc_Print( -2, "\t-u : toggle writing canonical AIG structure [default = %s]\n", fUnique? "yes" : "no" );
Abc_Print( -2, "\t-p : toggle writing Verilog with 'and' and 'not' [default = %s]\n", fVerilog? "yes" : "no" );
Abc_Print( -2, "\t-m : toggle writing MiniAIG rather than AIGER [default = %s]\n", fMiniAig? "yes" : "no" );
Abc_Print( -2, "\t-l : toggle writing MiniLUT rather than AIGER [default = %s]\n", fMiniLut? "yes" : "no" );
+ Abc_Print( -2, "\t-c : toggle writing \'\\n\' after \'c\' in the AIGER file [default = %s]\n", fWriteNewLine? "yes": "no" );
Abc_Print( -2, "\t-v : toggle verbose output [default = %s]\n", fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
Abc_Print( -2, "\t<file> : the file name\n");
@@ -34399,7 +34715,7 @@ int Abc_CommandAbc9Srm( Abc_Frame_t * pAbc, int argc, char ** argv )
pTemp = Gia_ManSeqStructSweep( pAux = pTemp, 1, 1, 0 );
Gia_ManStop( pAux );
}
- Gia_AigerWrite( pTemp, pFileNameIn ? pFileNameIn : pFileName, 0, 0 );
+ Gia_AigerWrite( pTemp, pFileNameIn ? pFileNameIn : pFileName, 0, 0, 0 );
Abc_Print( 1, "Speculatively reduced model was written into file \"%s\".\n", pFileName );
Gia_ManPrintStatsShort( pTemp );
Gia_ManStop( pTemp );
@@ -34412,7 +34728,7 @@ int Abc_CommandAbc9Srm( Abc_Frame_t * pAbc, int argc, char ** argv )
pTemp = Gia_ManSeqStructSweep( pAux = pTemp, 1, 1, 0 );
Gia_ManStop( pAux );
- Gia_AigerWrite( pTemp, pFileName2, 0, 0 );
+ Gia_AigerWrite( pTemp, pFileName2, 0, 0, 0 );
Abc_Print( 1, "Reduced original network was written into file \"%s\".\n", pFileName2 );
Gia_ManPrintStatsShort( pTemp );
Gia_ManStop( pTemp );
@@ -34513,7 +34829,7 @@ int Abc_CommandAbc9Srm2( Abc_Frame_t * pAbc, int argc, char ** argv )
pTemp = Gia_ManSeqStructSweep( pAux = pTemp, 1, 1, 0 );
Gia_ManStop( pAux );
- Gia_AigerWrite( pTemp, pFileName, 0, 0 );
+ Gia_AigerWrite( pTemp, pFileName, 0, 0, 0 );
Abc_Print( 1, "Speculatively reduced model was written into file \"%s\".\n", pFileName );
Gia_ManPrintStatsShort( pTemp );
Gia_ManStop( pTemp );
@@ -34970,7 +35286,7 @@ int Abc_CommandAbc9Cec( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fDumpMiter )
{
Abc_Print( 0, "The verification miter is written into file \"%s\".\n", "cec_miter.aig" );
- Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0, 0 );
}
pAbc->Status = Cec_ManVerify( pMiter, pPars );
Abc_FrameReplaceCex( pAbc, &pGias[0]->pCexComb );
@@ -40227,7 +40543,7 @@ int Abc_CommandAbc9Cone( Abc_Frame_t * pAbc, int argc, char ** argv )
{
Gia_Man_t * pOne = Gia_ManDupDfsCone( pAbc->pGia, pObj );
sprintf( Buffer, "%s_%0*d.aig", Extra_FileNameGeneric(pAbc->pGia->pSpec), nDigits, i );
- Gia_AigerWrite( pOne, Buffer, 0, 0 );
+ Gia_AigerWrite( pOne, Buffer, 0, 0, 0 );
Gia_ManStop( pOne );
}
printf( "Dumped all outputs into individual AIGER files.\n" );
@@ -41513,7 +41829,7 @@ int Abc_CommandAbc9FFTest( Abc_Frame_t * pAbc, int argc, char ** argv )
int c;
Gia_ParFfSetDefault( pPars );
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "ATNKSGkbsfdeunvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "ATNKSGkbsfcdeunvh" ) ) != EOF )
{
switch ( c )
{
@@ -41591,6 +41907,9 @@ int Abc_CommandAbc9FFTest( Abc_Frame_t * pAbc, int argc, char ** argv )
case 'f':
pPars->fFfOnly ^= 1;
break;
+ case 'c':
+ pPars->fCheckUntest ^= 1;
+ break;
case 'd':
pPars->fDump ^= 1;
break;
@@ -41681,7 +42000,7 @@ int Abc_CommandAbc9FFTest( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0;
usage:
- Abc_Print( -2, "usage: &fftest [-ATNK num] [-kbsfdeunvh] <file> [-G file] [-S str]\n" );
+ Abc_Print( -2, "usage: &fftest [-ATNK num] [-kbsfcdeunvh] <file> [-G file] [-S str]\n" );
Abc_Print( -2, "\t performs functional fault test generation\n" );
Abc_Print( -2, "\t-A num : selects fault model for all gates [default = %d]\n", pPars->Algo );
Abc_Print( -2, "\t 0: fault model is not selected (use -S str)\n" );
@@ -41696,9 +42015,10 @@ usage:
Abc_Print( -2, "\t-b : toggles testing for single faults (the same as \"-K 1\") [default = %s]\n", pPars->fBasic? "yes": "no" );
Abc_Print( -2, "\t-s : toggles starting with the all-0 and all-1 patterns [default = %s]\n", pPars->fStartPats? "yes": "no" );
Abc_Print( -2, "\t-f : toggles faults at flop inputs only with \"-A 1\" and \"-S str\" [default = %s]\n", pPars->fFfOnly? "yes": "no" );
- Abc_Print( -2, "\t-d : toggles dumping test patterns into file \"tests.txt\" [default = %s]\n", pPars->fDump? "yes": "no" );
+ Abc_Print( -2, "\t-c : toggles checking if there are untestable faults [default = %s]\n", pPars->fCheckUntest? "yes": "no" );
+ Abc_Print( -2, "\t-d : toggles dumping test patterns into file \"<file>_tests.txt\" [default = %s]\n", pPars->fDump? "yes": "no" );
Abc_Print( -2, "\t-e : toggles dumping test pattern pairs (delay faults only) [default = %s]\n", pPars->fDumpDelay? "yes": "no" );
- Abc_Print( -2, "\t-u : toggles dumping untestable faults into \"untest.txt\" [default = %s]\n", pPars->fDumpUntest? "yes": "no" );
+ Abc_Print( -2, "\t-u : toggles dumping untestable faults into \"<file>_untest.txt\" [default = %s]\n", pPars->fDumpUntest? "yes": "no" );
Abc_Print( -2, "\t-n : toggles dumping faults not detected by a given test set [default = %s]\n", pPars->fDumpNewFaults? "yes": "no" );
Abc_Print( -2, "\t-v : toggles printing verbose information [default = %s]\n", pPars->fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
@@ -42614,8 +42934,8 @@ int Abc_CommandAbc9Demiter( Abc_Frame_t * pAbc, int argc, char ** argv )
sprintf( pName1, "%s_2.aig", pGen );
ABC_FREE( pGen );
}
- Gia_AigerWrite( pPart1, pName0, 0, 0 );
- Gia_AigerWrite( pPart2, pName1, 0, 0 );
+ Gia_AigerWrite( pPart1, pName0, 0, 0, 0 );
+ Gia_AigerWrite( pPart2, pName1, 0, 0, 0 );
Gia_ManStop( pPart1 );
Gia_ManStop( pPart2 );
if ( fDumpFilesTwo )
@@ -43333,10 +43653,16 @@ usage:
int Abc_CommandAbc9Exorcism( Abc_Frame_t * pAbc, int argc, char ** argv )
{
extern int Abc_ExorcismMain( Vec_Wec_t * vEsop, int nIns, int nOuts, char * pFileNameOut, int Quality, int Verbosity, int nCubesMax, int fUseQCost );
+ extern Vec_Wec_t * Abc_ExorcismNtk2Esop( Abc_Ntk_t * pNtk );
+
extern Gia_Man_t * Eso_ManCompute( Gia_Man_t * pGia, int fVerbose, Vec_Wec_t ** pvRes );
Vec_Wec_t * vEsop = NULL;
+ Abc_Ntk_t * pNtk = NULL;
+ char * pFileNameIn = NULL;
char * pFileNameOut = NULL;
int c, Quality = 2, Verbosity = 0, nCubesMax = 20000, fUseQCost = 0, fVerbose = 0;
+ int nInputs = -1, nOutputs = -1;
+
Extra_UtilGetoptReset();
while ( ( c = Extra_UtilGetopt( argc, argv, "QVCqvh" ) ) != EOF )
{
@@ -43387,30 +43713,72 @@ int Abc_CommandAbc9Exorcism( Abc_Frame_t * pAbc, int argc, char ** argv )
goto usage;
}
}
- if ( pAbc->pGia == NULL )
+
+ if ( argc == globalUtilOptind + 2 )
{
- Abc_Print( -1, "Abc_CommandAbc9Exorcism(): There is no AIG.\n" );
- return 0;
+ pFileNameIn = argv[globalUtilOptind];
+ pFileNameOut = argv[globalUtilOptind + 1];
}
- // get the output file name
- if ( argc == globalUtilOptind + 1 )
+ else if ( argc == globalUtilOptind + 1 )
+ {
pFileNameOut = argv[globalUtilOptind];
- // generate starting cover and run minimization
- Eso_ManCompute( pAbc->pGia, fVerbose, &vEsop );
- Abc_ExorcismMain( vEsop, Gia_ManCiNum(pAbc->pGia), Gia_ManCoNum(pAbc->pGia), pFileNameOut, Quality, Verbosity, nCubesMax, fUseQCost );
- Vec_WecFree( vEsop );
- return 0;
-
-usage:
- Abc_Print( -2, "usage: &exorcism [-Q N] [-V N] [-C N] -q <file>\n" );
- Abc_Print( -2, " performs heuristic exclusive sum-of-project minimization\n" );
- Abc_Print( -2, " -Q N : minimization quality [default = %d]\n", Quality);
- Abc_Print( -2, " increasing this number improves quality and adds to runtime\n");
- Abc_Print( -2, " -V N : verbosity level [default = %d]\n", Verbosity);
- Abc_Print( -2, " 0 = no output; 1 = outline; 2 = verbose\n");
- Abc_Print( -2, " -C N : maximum number of cubes in startign cover [default = %d]\n", nCubesMax );
- Abc_Print( -2, " -q : toggle using quantum cost [default = %s]\n", fUseQCost? "yes": "no" );
- Abc_Print( -2, " <file>: the output file name in ESOP-PLA format\n");
+ }
+ else
+ {
+ Abc_Print( -1, "Abc_CommandAbc9Exorcism(): Argument error.\n" );
+ goto usage;
+ }
+
+ if ( pAbc->pGia == NULL && pFileNameIn == NULL )
+ {
+ Abc_Print( -1, "Abc_CommandAbc9Exorcism(): There is neither an AIG nor an ESOP-PLA file.\n" );
+ return 0;
+ }
+
+ if ( pFileNameIn )
+ {
+ pNtk = Io_ReadPla( pFileNameIn, 0, 0, 0, /* no preprocessing = */1, /* check = */1 );
+ if ( pNtk == NULL )
+ {
+ printf( "Reading PLA file has failed.\n" );
+ return 1;
+ }
+ nInputs = Abc_NtkCiNum( pNtk );
+ nOutputs = Abc_NtkCoNum( pNtk );
+ vEsop = Abc_ExorcismNtk2Esop( pNtk );
+ if ( vEsop == NULL )
+ {
+ printf( "Converting PLA to ESOP failed.\n" );
+ return 1;
+ }
+ }
+ else if ( pAbc->pGia )
+ {
+ // generate starting cover
+ nInputs = Gia_ManCiNum( pAbc->pGia );
+ nOutputs = Gia_ManCoNum( pAbc->pGia );
+ Eso_ManCompute( pAbc->pGia, fVerbose, &vEsop );
+ }
+
+ if ( vEsop )
+ {
+ // run minimization
+ Abc_ExorcismMain( vEsop, nInputs, nOutputs, pFileNameOut, Quality, Verbosity, nCubesMax, fUseQCost );
+ Vec_WecFree( vEsop );
+ }
+ return 0;
+
+usage:
+ Abc_Print( -2, "usage: &exorcism [-Q N] [-V N] [-C N] -q [file_in] <file_out>\n" );
+ Abc_Print( -2, " performs heuristic exclusive sum-of-project minimization\n" );
+ Abc_Print( -2, " -Q N : minimization quality [default = %d]\n", Quality);
+ Abc_Print( -2, " increasing this number improves quality and adds to runtime\n");
+ Abc_Print( -2, " -V N : verbosity level [default = %d]\n", Verbosity);
+ Abc_Print( -2, " 0 = no output; 1 = outline; 2 = verbose\n");
+ Abc_Print( -2, " -C N : maximum number of cubes in startign cover [default = %d]\n", nCubesMax );
+ Abc_Print( -2, " -q : toggle using quantum cost [default = %s]\n", fUseQCost? "yes": "no" );
+ Abc_Print( -2, " [file_in] : optional input file in ESOP-PLA format (otherwise current AIG is used)\n");
+ Abc_Print( -2, " <file_out> : output file in ESOP-PLA format\n");
Abc_Print( -2, "\n" );
return 1;
}
@@ -43556,6 +43924,16 @@ int Abc_CommandAbc9Mfs( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( -1, "Abc_CommandAbc9Mfs(): The current AIG has no mapping.\n" );
return 0;
}
+ if ( Gia_ManLutSizeMax(pAbc->pGia) > 6 )
+ {
+ Abc_Print( -1, "Abc_CommandAbc9Mfs(): The current mapping has nodes with more than 6 inputs. Cannot use \"mfs\".\n" );
+ return 0;
+ }
+ if ( pAbc->pGia->pAigExtra && Gia_ManPiNum(pAbc->pGia->pAigExtra) > 6 )
+ {
+ Abc_Print( -1, "Abc_CommandAbc9Mfs(): The current white-boxes have more than 6 inputs. Cannot use \"mfs\".\n" );
+ return 0;
+ }
pTemp = Gia_ManPerformMfs( pAbc->pGia, pPars );
Abc_FrameUpdateGia( pAbc, pTemp );
return 0;
@@ -43573,7 +43951,7 @@ usage:
Abc_Print( -2, "\t-d : toggle performing redundancy removal [default = %s]\n", pPars->fRrOnly? "yes": "no" );
Abc_Print( -2, "\t-a : toggle minimizing area or area+edges [default = %s]\n", pPars->fArea? "area": "area+edges" );
Abc_Print( -2, "\t-e : toggle high-effort resubstitution [default = %s]\n", pPars->fMoreEffort? "yes": "no" );
- Abc_Print( -2, "\t-b : toggle preserving all while boxes [default = %s]\n", pPars->fAllBoxes? "yes": "no" );
+ Abc_Print( -2, "\t-b : toggle preserving all white boxes [default = %s]\n", pPars->fAllBoxes? "yes": "no" );
Abc_Print( -2, "\t-v : toggle printing optimization summary [default = %s]\n", pPars->fVerbose? "yes": "no" );
Abc_Print( -2, "\t-w : toggle printing detailed stats for each node [default = %s]\n", pPars->fVeryVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
@@ -44134,6 +44512,11 @@ int Abc_CommandAbc9GlaDerive( Abc_Frame_t * pAbc, int argc, char ** argv )
return 0;
}
*/
+ if ( pAbc->fBatchMode && (pAbc->Status == 0 || pAbc->Status == 1) )
+ {
+ Abc_Print( 1, "The miters is already solved; skipping the command.\n" );
+ return 0;
+ }
if ( pAbc->pGia->vGateClasses == NULL )
{
Abc_Print( -1, "Abstraction gate map is missing.\n" );
diff --git a/src/base/abci/abcDarUnfold2.c b/src/base/abci/abcDarUnfold2.c
index 7ebc316..08dca0b 100644
--- a/src/base/abci/abcDarUnfold2.c
+++ b/src/base/abci/abcDarUnfold2.c
@@ -13,7 +13,7 @@ Abc_Ntk_t * Abc_NtkDarFold2( Abc_Ntk_t * pNtk, int fCompl, int fVerbose , int);
Abc_Ntk_t * Abc_NtkDarUnfold2( Abc_Ntk_t * pNtk, int nFrames, int nConfs, int nProps, int fStruct, int fOldAlgo, int fVerbose )
{
Abc_Ntk_t * pNtkAig;
- Aig_Man_t * pMan, * pTemp;
+ Aig_Man_t * pMan, * pTemp = NULL;
int typeII_cnt = 0;
assert( Abc_NtkIsStrash(pNtk) );
pMan = Abc_NtkToDar( pNtk, 0, 1 );
diff --git a/src/base/abci/abcDetect.c b/src/base/abci/abcDetect.c
index 7adbed5..089d3fe 100644
--- a/src/base/abci/abcDetect.c
+++ b/src/base/abci/abcDetect.c
@@ -914,7 +914,7 @@ Vec_Int_t * Abc_NtkFinCheckPair( Abc_Ntk_t * pNtk, Vec_Int_t * vTypes, Vec_Int_t
int i, nConfLimit = 10000;
Vec_Int_t * vPat = NULL;
int status, iVarBeg = pCnf->nVars - Gia_ManPiNum(pGia);// - 1;
- //Gia_AigerWrite( pGia, "temp_detect.aig", 0, 0 );
+ //Gia_AigerWrite( pGia, "temp_detect.aig", 0, 0, 0 );
Gia_ManStop( pGia );
Cnf_DataFree( pCnf );
status = sat_solver_solve( pSat, NULL, NULL, (ABC_INT64_T)nConfLimit, 0, 0, 0 );
diff --git a/src/base/abci/abcIvy.c b/src/base/abci/abcIvy.c
index e4a5d3b..5dc125d 100644
--- a/src/base/abci/abcIvy.c
+++ b/src/base/abci/abcIvy.c
@@ -482,6 +482,7 @@ Abc_Ntk_t * Abc_NtkIvyFraig( Abc_Ntk_t * pNtk, int nConfLimit, int fDoSparse, in
}
else
pNtkAig = Abc_NtkIvyAfter( pNtk, pMan, 0, 0 );
+ pNtkAig->pModel = (int *)pMan->pData; pMan->pData = NULL;
Ivy_ManStop( pTemp );
Ivy_ManStop( pMan );
return pNtkAig;
diff --git a/src/base/abci/abcLog.c b/src/base/abci/abcLog.c
index e0ad3cc..31cf5a9 100644
--- a/src/base/abci/abcLog.c
+++ b/src/base/abci/abcLog.c
@@ -227,7 +227,16 @@ int Abc_NtkReadLogFile( char * pFileName, Abc_Cex_t ** ppCex, int * pnFrames )
ABC_FREE( pCex );
}
else
- Vec_IntFree( vNums );
+ {
+ // corner case of seq circuit with no PIs
+ int iFrameCex = (nFrames2 == -1) ? nFrames : nFrames2;
+ pCex = Abc_CexAlloc( 0, 0, iFrameCex + 1 );
+ pCex->iFrame = iFrameCex;
+ pCex->iPo = iPo;
+ if ( ppCex )
+ *ppCex = pCex;
+ Vec_IntFree( vNums );
+ }
if ( pnFrames )
*pnFrames = nFrames;
return Status;
diff --git a/src/base/abci/abcNpn.c b/src/base/abci/abcNpn.c
index d2d0692..744b644 100644
--- a/src/base/abci/abcNpn.c
+++ b/src/base/abci/abcNpn.c
@@ -295,10 +295,6 @@ void Abc_TruthNpnPerform( Abc_TtStore_t * p, int NpnType, int fVerbose )
}
else if ( NpnType == 7 )
{
- extern unsigned Abc_TtCanonicizeHie(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int fExact );
- extern Abc_TtHieMan_t * Abc_TtHieManStart( int nVars, int nLevels );
- extern void Abc_TtHieManStop(Abc_TtHieMan_t * p );
-
int fExact = 0;
Abc_TtHieMan_t * pMan = Abc_TtHieManStart( p->nVars, 5 );
for ( i = 0; i < p->nFuncs; i++ )
@@ -318,8 +314,6 @@ void Abc_TruthNpnPerform( Abc_TtStore_t * p, int NpnType, int fVerbose )
typedef unsigned(*TtCanonicizeFunc)(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag);
unsigned Abc_TtCanonicizeWrap(TtCanonicizeFunc func, Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag);
unsigned Abc_TtCanonicizeAda(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int iThres);
- Abc_TtHieMan_t * Abc_TtHieManStart(int nVars, int nLevels);
- void Abc_TtHieManStop(Abc_TtHieMan_t * p);
int fHigh = 1, iEnumThres = 25;
Abc_TtHieMan_t * pMan = Abc_TtHieManStart(p->nVars, 5);
diff --git a/src/base/abci/abcRec3.c b/src/base/abci/abcRec3.c
index 43da483..3e5f29a 100644
--- a/src/base/abci/abcRec3.c
+++ b/src/base/abci/abcRec3.c
@@ -1106,7 +1106,7 @@ int Abc_RecToGia3( Gia_Man_t * pMan, If_Man_t * pIfMan, If_Cut_t * pCut, Vec_Int
{
Lms_Man_t * p = s_pMan3;
char pCanonPerm[LMS_VAR_MAX];
- unsigned uCanonPhase;
+ unsigned uCanonPhase = 0;
int iFan0, iFan1, iGiaObj;
Gia_Man_t * pGia = p->pGia;
Gia_Obj_t * pGiaPo, * pGiaTemp = NULL;
diff --git a/src/base/abci/abcTim.c b/src/base/abci/abcTim.c
index 3f68b81..c850cc5 100644
--- a/src/base/abci/abcTim.c
+++ b/src/base/abci/abcTim.c
@@ -170,7 +170,7 @@ void Abc_NtkTestPinGia( Abc_Ntk_t * pNtk, int fWhiteBoxOnly, int fVerbose )
Gia_Man_t * pGia;
char * pFileName = "testpin.aig";
pGia = Abc_NtkTestPinDeriveGia( pNtk, fWhiteBoxOnly, fVerbose );
- Gia_AigerWrite( pGia, pFileName, 0, 0 );
+ Gia_AigerWrite( pGia, pFileName, 0, 0, 0 );
Gia_ManStop( pGia );
printf( "AIG with pins derived from mapped network \"%s\" was written into file \"%s\".\n",
Abc_NtkName(pNtk), pFileName );
@@ -391,7 +391,7 @@ Gia_Man_t * Abc_NtkTestTimDeriveGia( Abc_Ntk_t * pNtk, int fVerbose )
Vec_FltFree( vArrTimes );
Vec_FltFree( vReqTimes );
-Gia_AigerWrite( pHoles, "holes00.aig", 0, 0 );
+Gia_AigerWrite( pHoles, "holes00.aig", 0, 0, 0 );
// return
pGia->pAigExtra = pHoles;
@@ -560,7 +560,7 @@ void Abc_NtkTestTimByWritingFile( Gia_Man_t * pGia, char * pFileName )
Gia_ManReverseClasses( pGia, 0 );
}
// write file
- Gia_AigerWrite( pGia, pFileName, 0, 0 );
+ Gia_AigerWrite( pGia, pFileName, 0, 0, 0 );
// unnormalize choices
if ( Gia_ManHasChoices(pGia) )
Gia_ManReverseClasses( pGia, 1 );
diff --git a/src/base/acb/acbCom.c b/src/base/acb/acbCom.c
index c2eae92..3d62454 100644
--- a/src/base/acb/acbCom.c
+++ b/src/base/acb/acbCom.c
@@ -664,7 +664,7 @@ int Acb_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fDumpMiter )
{
Abc_Print( 0, "The verification miter is written into file \"%s\".\n", "cec_miter.aig" );
- Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0, 0 );
}
pAbc->Status = Cec_ManVerify( pMiter, pPars );
//Abc_FrameReplaceCex( pAbc, &pAbc->pGia->pCexComb );
diff --git a/src/base/acb/acbFunc.c b/src/base/acb/acbFunc.c
index d73d1d5..f6fcf2b 100644
--- a/src/base/acb/acbFunc.c
+++ b/src/base/acb/acbFunc.c
@@ -198,7 +198,7 @@ int Acb_WireIsTarget( int Token, Abc_Nam_t * pNames )
}
void * Acb_VerilogSimpleParse( Vec_Int_t * vBuffer, Abc_Nam_t * pNames )
{
- void * pDesign = NULL;
+ Ndr_Data_t * pDesign = NULL;
Vec_Int_t * vInputs = Vec_IntAlloc(100);
Vec_Int_t * vOutputs = Vec_IntAlloc(100);
Vec_Int_t * vWires = Vec_IntAlloc(100);
@@ -2036,14 +2036,14 @@ Cnf_Dat_t * Acb_NtkEcoCompute( Gia_Man_t * p, int iTar, int nTars )
Gia_ManStop( p );
pCof1 = Acb_NtkEcoSynthesize( p = pCof1 );
Gia_ManStop( p );
- Gia_AigerWrite( pCof0, "eco_qbf0.aig", 0, 0 );
- Gia_AigerWrite( pCof1, "eco_qbf1.aig", 0, 0 );
+ Gia_AigerWrite( pCof0, "eco_qbf0.aig", 0, 0, 0 );
+ Gia_AigerWrite( pCof1, "eco_qbf1.aig", 0, 0, 0 );
Gia_ManStop( pCof0 );
Gia_ManStop( pCof1 );
printf( "Dumped cof0 into file \"%s\".\n", "eco_qbf0.aig" );
printf( "Dumped cof1 into file \"%s\".\n", "eco_qbf1.aig" );
}
-// Gia_AigerWrite( pCof, "eco_qbf.aig", 0, 0 );
+// Gia_AigerWrite( pCof, "eco_qbf.aig", 0, 0, 0 );
// printf( "Dumped the result of quantification into file \"%s\".\n", "eco_qbf.aig" );
pCnf = (Cnf_Dat_t *)Mf_ManGenerateCnf( pCof, 8, 0, 0, 0, 0 );
Gia_ManStop( pCof );
@@ -2445,7 +2445,7 @@ int Acb_NtkEcoPerform( Acb_Ntk_t * pNtkF, Acb_Ntk_t * pNtkG, char * pFileNameF,
// generate output files
Acb_GenerateFilePatch( vPatch, "patch.v" );
Acb_GenerateFileOut( vInst, pFileNameF, "out.v", vPatch );
- //Gia_AigerWrite( pGiaG, "test.aig", 0, 0 );
+ //Gia_AigerWrite( pGiaG, "test.aig", 0, 0, 0 );
cleanup:
// cleanup
if ( vGias )
diff --git a/src/base/bac/bacCom.c b/src/base/bac/bacCom.c
index e7d94d5..f1e3be5 100644
--- a/src/base/bac/bacCom.c
+++ b/src/base/bac/bacCom.c
@@ -651,7 +651,7 @@ int Bac_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fDumpMiter )
{
Abc_Print( 0, "The verification miter is written into file \"%s\".\n", "cec_miter.aig" );
- Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0, 0 );
}
pAbc->Status = Cec_ManVerify( pMiter, pPars );
//Abc_FrameReplaceCex( pAbc, &pAbc->pGia->pCexComb );
diff --git a/src/base/cba/cbaCom.c b/src/base/cba/cbaCom.c
index b6a8c80..fa13030 100644
--- a/src/base/cba/cbaCom.c
+++ b/src/base/cba/cbaCom.c
@@ -662,7 +662,7 @@ int Cba_CommandCec( Abc_Frame_t * pAbc, int argc, char ** argv )
if ( fDumpMiter )
{
Abc_Print( 0, "The verification miter is written into file \"%s\".\n", "cec_miter.aig" );
- Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "cec_miter.aig", 0, 0, 0 );
}
pAbc->Status = Cec_ManVerify( pMiter, pPars );
//Abc_FrameReplaceCex( pAbc, &pAbc->pGia->pCexComb );
diff --git a/src/base/cmd/cmdPlugin.c b/src/base/cmd/cmdPlugin.c
index ab517ed..efee671 100644
--- a/src/base/cmd/cmdPlugin.c
+++ b/src/base/cmd/cmdPlugin.c
@@ -502,7 +502,7 @@ int Cmd_CommandAbcPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
}
// create input file
- Gia_AigerWrite( pAbc->pGia, pFileIn, 0, 0 );
+ Gia_AigerWrite( pAbc->pGia, pFileIn, 0, 0, 0 );
// create command line
vCommand = Vec_StrAlloc( 100 );
diff --git a/src/base/cmd/cmdStarter.c b/src/base/cmd/cmdStarter.c
index 47cdd9e..ffb2b75 100644
--- a/src/base/cmd/cmdStarter.c
+++ b/src/base/cmd/cmdStarter.c
@@ -176,7 +176,8 @@ void Cmd_RunStarter( char * pFileName, char * pBinary, char * pCommand, int nCor
ABC_FREE( Buffer );
fclose( pFile );
return;
- }
+ }
+ fclose( pFileTemp );
}
}
diff --git a/src/base/exor/exor.c b/src/base/exor/exor.c
index 2310de5..6e95b84 100644
--- a/src/base/exor/exor.c
+++ b/src/base/exor/exor.c
@@ -46,6 +46,7 @@
////////////////////////////////////////////////////////////////////////
#include "exor.h"
+#include "base/abc/abc.h"
ABC_NAMESPACE_IMPL_START
@@ -947,6 +948,69 @@ int Abc_ExorcismMain( Vec_Wec_t * vEsop, int nIns, int nOuts, char * pFileNameOu
return 1;
}
+Vec_Wec_t * Abc_ExorcismNtk2Esop( Abc_Ntk_t * pNtk )
+{
+ Vec_Wec_t * vEsop = NULL;
+ Abc_Obj_t * pNode, * pFanin, * pDriver;
+ char * pCube;
+ int nIns, nOuts, nProducts, nFanins, i, k;
+
+ nIns = Abc_NtkCiNum( pNtk );
+ nOuts = Abc_NtkCoNum( pNtk );
+
+ nProducts = 0;
+ Abc_NtkForEachCo( pNtk, pNode, i )
+ {
+ pDriver = Abc_ObjFanin0Ntk( Abc_ObjFanin0(pNode) );
+ if ( !Abc_ObjIsNode(pDriver) )
+ {
+ nProducts++;
+ continue;
+ }
+ if ( Abc_NodeIsConst(pDriver) )
+ {
+ if ( Abc_NodeIsConst1(pDriver) )
+ nProducts++;
+ continue;
+ }
+ nProducts += Abc_SopGetCubeNum((char *)pDriver->pData);
+ }
+
+ Abc_NtkForEachCi( pNtk, pNode, i )
+ pNode->pCopy = (Abc_Obj_t *)(ABC_PTRUINT_T)i;
+
+ vEsop = Vec_WecAlloc( nProducts+1 );
+
+ Abc_NtkForEachCo( pNtk, pNode, i )
+ {
+ pDriver = Abc_ObjFanin0Ntk( Abc_ObjFanin0(pNode) );
+ if ( Abc_NodeIsConst(pDriver) ) continue;
+
+ nFanins = Abc_ObjFaninNum(pDriver);
+ Abc_SopForEachCube( (char *)pDriver->pData, nFanins, pCube )
+ {
+ Vec_Int_t *vCubeIn = Vec_WecPushLevel( vEsop );
+ Vec_IntGrow( vCubeIn, nIns+2 );
+
+ Abc_ObjForEachFanin( pDriver, pFanin, k )
+ {
+ pFanin = Abc_ObjFanin0Ntk(pFanin);
+ assert( (int)(ABC_PTRUINT_T)pFanin->pCopy < nIns );
+ if ( pCube[k] == '0' )
+ {
+ Vec_IntPush( vCubeIn, 2*k + 1 );
+ }
+ else if ( pCube[k] == '1' )
+ {
+ Vec_IntPush( vCubeIn, 2*k );
+ }
+ }
+ Vec_IntPush( vCubeIn, -( i + 1 ) );
+ }
+ }
+
+ return vEsop;
+}
///////////////////////////////////////////////////////////////////
diff --git a/src/base/io/io.c b/src/base/io/io.c
index 5133ef0..a85d64e 100644
--- a/src/base/io/io.c
+++ b/src/base/io/io.c
@@ -2421,6 +2421,8 @@ int IoCommandWriteCex( Abc_Frame_t * pAbc, int argc, char **argv )
{
extern Aig_Man_t * Abc_NtkToDar( Abc_Ntk_t * pNtk, int fExors, int fRegisters );
Aig_Man_t * pAig = Abc_NtkToDar( pNtk, 0, 1 );
+ fprintf( pFile, "# FALSIFYING OUTPUTS:");
+ fprintf( pFile, " %s", Abc_ObjName(Abc_NtkCo(pNtk, pCex->iPo)) );
if ( fUseOldMin )
{
pCare = Saig_ManCbaFindCexCareBits( pAig, pCex, 0, fVerbose );
@@ -2432,15 +2434,24 @@ int IoCommandWriteCex( Abc_Frame_t * pAbc, int argc, char **argv )
else
pCare = Bmc_CexCareMinimize( pAig, Saig_ManPiNum(pAig), pCex, 4, fCheckCex, fVerbose );
Aig_ManStop( pAig );
+ if(pCare == NULL)
+ printf( "Counter-example minimization has failed.\n" );
}
+ else
+ {
+ fprintf( pFile, "# FALSIFYING OUTPUTS:");
+ fprintf( pFile, " %s", Abc_ObjName(Abc_NtkCo(pNtk, pCex->iPo)) );
+ }
+ fprintf( pFile, "\n");
+ fprintf( pFile, "# COUNTEREXAMPLE LENGTH: %u\n", pCex->iFrame+1);
// output flop values (unaffected by the minimization)
Abc_NtkForEachLatch( pNtk, pObj, i )
- fprintf( pFile, "%s@0=%c ", Abc_ObjName(Abc_ObjFanout0(pObj)), '0'+!Abc_LatchIsInit0(pObj) );
+ fprintf( pFile, "%s@0=%c\n", Abc_ObjName(Abc_ObjFanout0(pObj)), '0'+!Abc_LatchIsInit0(pObj) );
// output PI values (while skipping the minimized ones)
for ( f = 0; f <= pCex->iFrame; f++ )
Abc_NtkForEachPi( pNtk, pObj, i )
if ( !pCare || Abc_InfoHasBit(pCare->pData, pCare->nRegs+pCare->nPis*f + i) )
- fprintf( pFile, "%s@%d=%c ", Abc_ObjName(pObj), f, '0'+Abc_InfoHasBit(pCex->pData, pCex->nRegs+pCex->nPis*f + i) );
+ fprintf( pFile, "%s@%d=%c\n", Abc_ObjName(pObj), f, '0'+Abc_InfoHasBit(pCex->pData, pCex->nRegs+pCex->nPis*f + i) );
Abc_CexFreeP( &pCare );
}
else
@@ -2455,7 +2466,7 @@ int IoCommandWriteCex( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf( pFile, "%c", '0'+Abc_InfoHasBit(pCex->pData, i) );
}
}
- fprintf( pFile, "\n" );
+ fprintf( pFile, "# DONE\n" );
fclose( pFile );
}
else
@@ -2678,14 +2689,24 @@ usage:
***********************************************************************/
int IoCommandWritePla( Abc_Frame_t * pAbc, int argc, char **argv )
{
+ extern int Io_WriteMoPlaM( Abc_Ntk_t * pNtk, char * pFileName, int nMints );
char * pFileName;
- int c, fUseMoPla = 0;
+ int c, fUseMoPla = 0, nMints = 0;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "mh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "Mmh" ) ) != EOF )
{
switch ( c )
{
+ case 'M':
+ if ( globalUtilOptind >= argc )
+ {
+ Abc_Print( -1, "Command line switch \"-M\" should be followed by an integer.\n" );
+ goto usage;
+ }
+ nMints = atoi(argv[globalUtilOptind]);
+ globalUtilOptind++;
+ break;
case 'm':
fUseMoPla ^= 1;
break;
@@ -2705,15 +2726,28 @@ int IoCommandWritePla( Abc_Frame_t * pAbc, int argc, char **argv )
// get the output file name
pFileName = argv[globalUtilOptind];
// call the corresponding file writer
- Io_Write( pAbc->pNtkCur, pFileName, fUseMoPla ? IO_FILE_MOPLA : IO_FILE_PLA );
+ if ( nMints )
+ {
+ if ( Abc_NtkIsBddLogic(pAbc->pNtkCur) )
+ Io_WriteMoPlaM( pAbc->pNtkCur, pFileName, nMints );
+ else
+ {
+ Abc_Ntk_t * pStrash = Abc_NtkStrash( pAbc->pNtkCur, 0, 0, 0 );
+ Io_WriteMoPlaM( pStrash, pFileName, nMints );
+ Abc_NtkDelete( pStrash );
+ }
+ }
+ else
+ Io_Write( pAbc->pNtkCur, pFileName, fUseMoPla ? IO_FILE_MOPLA : IO_FILE_PLA );
return 0;
usage:
- fprintf( pAbc->Err, "usage: write_pla [-mh] <file>\n" );
- fprintf( pAbc->Err, "\t writes the collapsed network into a PLA file\n" );
- fprintf( pAbc->Err, "\t-m : toggle writing multi-output PLA [default = %s]\n", fUseMoPla? "yes":"no" );
- fprintf( pAbc->Err, "\t-h : print the help massage\n" );
- fprintf( pAbc->Err, "\tfile : the name of the file to write\n" );
+ fprintf( pAbc->Err, "usage: write_pla [-M <num>] [-mh] <file>\n" );
+ fprintf( pAbc->Err, "\t writes the collapsed network into a PLA file\n" );
+ fprintf( pAbc->Err, "\t-M <num> : the number of on-set minterms to write [default = %d]\n", nMints );
+ fprintf( pAbc->Err, "\t-m : toggle writing multi-output PLA [default = %s]\n", fUseMoPla? "yes":"no" );
+ fprintf( pAbc->Err, "\t-h : print the help massage\n" );
+ fprintf( pAbc->Err, "\tfile : the name of the file to write\n" );
return 1;
}
diff --git a/src/base/io/ioWritePla.c b/src/base/io/ioWritePla.c
index df2618c..8aa9ee1 100644
--- a/src/base/io/ioWritePla.c
+++ b/src/base/io/ioWritePla.c
@@ -383,7 +383,7 @@ int Io_WriteMoPlaOneIntMinterms( FILE * pFile, Abc_Ntk_t * pNtk, DdManager * dd,
***********************************************************************/
int Io_WriteMoPlaOne( FILE * pFile, Abc_Ntk_t * pNtk )
{
- int fVerbose = 1;
+ int fVerbose = 0;
DdManager * dd;
DdNode * bFunc;
Vec_Ptr_t * vFuncsGlob;
@@ -445,9 +445,136 @@ int Io_WriteMoPla( Abc_Ntk_t * pNtk, char * pFileName )
return 1;
}
+
+
+/**Function*************************************************************
+
+ Synopsis [Writes the network in PLA format.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Io_WriteMoPlaOneIntMintermsM( FILE * pFile, Abc_Ntk_t * pNtk, DdManager * dd, DdNode * bFunc, int nMints )
+{
+ Abc_Obj_t * pNode;
+ int * pArray = ABC_CALLOC( int, dd->size );
+ DdNode ** pbMints = Cudd_bddPickArbitraryMinterms( dd, bFunc, dd->vars, dd->size, nMints );
+ int i, k, nInputs = Abc_NtkCiNum(pNtk);
+ assert( dd->size == Abc_NtkCiNum(pNtk) );
+
+ // write the header
+ fprintf( pFile, ".i %d\n", nInputs );
+ fprintf( pFile, ".o %d\n", 1 );
+ fprintf( pFile, ".ilb" );
+ Abc_NtkForEachCi( pNtk, pNode, i )
+ fprintf( pFile, " %s", Abc_ObjName(pNode) );
+ fprintf( pFile, "\n" );
+ fprintf( pFile, ".ob" );
+ fprintf( pFile, " %s", Abc_ObjName(Abc_NtkCo(pNtk, 0)) );
+ fprintf( pFile, "\n" );
+ fprintf( pFile, ".p %d\n", nMints );
+
+ // iterate through minterms
+ for ( k = 0; k < nMints; k++ )
+ {
+ Cudd_BddToCubeArray( dd, pbMints[k], pArray );
+ for ( i = 0; i < Abc_NtkCiNum(pNtk); i++ )
+ if ( pArray[i] == 0 )
+ fprintf( pFile, "%c", '0' );
+ else if ( pArray[i] == 1 )
+ fprintf( pFile, "%c", '1' );
+ else if ( pArray[i] == 2 )
+ fprintf( pFile, "%c", '-' );
+ fprintf( pFile, " " );
+ fprintf( pFile, "%c", '1' );
+ fprintf( pFile, "\n" );
+ }
+ fprintf( pFile, ".e\n" );
+
+ //for ( k = 0; k < nMints; k++ )
+ // Cudd_RecursiveDeref( dd, pbMints[k] );
+ ABC_FREE( pbMints );
+ ABC_FREE( pArray );
+ return 1;
+}
+int Io_WriteMoPlaOneM( FILE * pFile, Abc_Ntk_t * pNtk, int nMints )
+{
+ int fVerbose = 0;
+ DdManager * dd;
+ DdNode * bFunc;
+ Vec_Ptr_t * vFuncsGlob;
+ Abc_Obj_t * pObj;
+ int i;
+ if ( Abc_NtkIsStrash(pNtk) )
+ {
+ assert( Abc_NtkIsStrash(pNtk) );
+ dd = (DdManager *)Abc_NtkBuildGlobalBdds( pNtk, 10000000, 1, 1, 0, fVerbose );
+ if ( dd == NULL )
+ return 0;
+ if ( fVerbose )
+ printf( "Shared BDD size = %6d nodes.\n", Cudd_ReadKeys(dd) - Cudd_ReadDead(dd) );
+
+ // complement the global functions
+ vFuncsGlob = Vec_PtrAlloc( Abc_NtkCoNum(pNtk) );
+ Abc_NtkForEachCo( pNtk, pObj, i )
+ Vec_PtrPush( vFuncsGlob, Abc_ObjGlobalBdd(pObj) );
+
+ // get the output function
+ bFunc = (DdNode *)Vec_PtrEntry(vFuncsGlob, 0);
+ if ( bFunc == Cudd_ReadOne(dd) )
+ printf( "First primary output has constant 1 function.\n" );
+ else if ( Cudd_Not(bFunc) == Cudd_ReadOne(dd) )
+ printf( "First primary output has constant 0 function.\n" );
+ else
+ Io_WriteMoPlaOneIntMintermsM( pFile, pNtk, dd, bFunc, nMints );
+ Abc_NtkFreeGlobalBdds( pNtk, 0 );
+
+ // cleanup
+ Vec_PtrForEachEntry( DdNode *, vFuncsGlob, bFunc, i )
+ Cudd_RecursiveDeref( dd, bFunc );
+ Vec_PtrFree( vFuncsGlob );
+ //Extra_StopManager( dd );
+ Cudd_Quit( dd );
+ }
+ else if ( Abc_NtkIsBddLogic(pNtk) )
+ {
+ DdNode * bFunc = (DdNode *)Abc_ObjFanin0(Abc_NtkCo(pNtk, 0))->pData;
+ dd = (DdManager *)pNtk->pManFunc;
+ if ( dd->size == Abc_NtkCiNum(pNtk) )
+ Io_WriteMoPlaOneIntMintermsM( pFile, pNtk, dd, bFunc, nMints );
+ else
+ {
+ printf( "Cannot write minterms because the size of the manager for local BDDs is not equal to\n" );
+ printf( "the number of primary inputs. (It is likely that the current network is not collapsed.)\n" );
+ }
+ }
+ return 1;
+}
+int Io_WriteMoPlaM( Abc_Ntk_t * pNtk, char * pFileName, int nMints )
+{
+ FILE * pFile;
+ assert( Abc_NtkIsStrash(pNtk) || Abc_NtkIsBddLogic(pNtk) );
+ pFile = fopen( pFileName, "w" );
+ if ( pFile == NULL )
+ {
+ fprintf( stdout, "Io_WriteMoPlaM(): Cannot open the output file.\n" );
+ return 0;
+ }
+ fprintf( pFile, "# Benchmark \"%s\" written by ABC on %s\n", pNtk->pName, Extra_TimeStamp() );
+ Io_WriteMoPlaOneM( pFile, pNtk, nMints );
+ fclose( pFile );
+ return 1;
+}
+
+
#else
-int Io_WriteMoPla( Abc_Ntk_t * pNtk, char * pFileName ) { return 1; }
+int Io_WriteMoPla( Abc_Ntk_t * pNtk, char * pFileName ) { return 1; }
+int Io_WriteMoPlaM( Abc_Ntk_t * pNtk, char * pFileName, int nMints ) { return 1; }
#endif
diff --git a/src/base/main/mainReal.c b/src/base/main/mainReal.c
index 31bfef7..180ec44 100644
--- a/src/base/main/mainReal.c
+++ b/src/base/main/mainReal.c
@@ -44,6 +44,14 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
***********************************************************************/
+#ifndef WIN32
+#include <sys/time.h>
+#include <sys/times.h>
+#include <sys/resource.h>
+#include <unistd.h>
+#include <signal.h>
+#include <stdlib.h>
+#endif
#include "base/abc/abc.h"
#include "mainInt.h"
@@ -62,6 +70,7 @@ static int TypeCheck( Abc_Frame_t * pAbc, const char * s);
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
+unsigned enable_dbg_outs = 1;
/**Function*************************************************************
@@ -115,8 +124,37 @@ int Abc_RealMain( int argc, char * argv[] )
sprintf( sWriteCmd, "write" );
Extra_UtilGetoptReset();
- while ((c = Extra_UtilGetopt(argc, argv, "c:q:C:Q:S:hf:F:o:st:T:xb")) != EOF) {
+ while ((c = Extra_UtilGetopt(argc, argv, "dm:l:c:q:C:Q:S:hf:F:o:st:T:xb")) != EOF) {
switch(c) {
+
+ case 'd':
+ enable_dbg_outs ^= 1;
+ break;
+
+ case 'm': {
+#ifndef WIN32
+ int maxMb = atoi(globalUtilOptarg);
+ printf("Limiting memory use to %d MB\n", maxMb);
+ struct rlimit limit = {
+ maxMb * (1llu << 20), /* soft limit */
+ maxMb * (1llu << 20) /* hard limit */
+ };
+ setrlimit(RLIMIT_AS, &limit);
+#endif
+ break;
+ }
+ case 'l': {
+#ifndef WIN32
+ int maxTime = atoi(globalUtilOptarg);
+ printf("Limiting time to %d seconds\n", maxTime);
+ struct rlimit limit = {
+ maxTime, /* soft limit */
+ maxTime /* hard limit */
+ };
+ setrlimit(RLIMIT_CPU, &limit);
+#endif
+ break;
+ }
case 'c':
if( Vec_StrSize(sCommandUsr) > 0 )
{
diff --git a/src/base/wlc/wlc.h b/src/base/wlc/wlc.h
index e947e36..3a84031 100644
--- a/src/base/wlc/wlc.h
+++ b/src/base/wlc/wlc.h
@@ -140,6 +140,7 @@ struct Wlc_Ntk_t_
Vec_Int_t vCis; // combinational inputs
Vec_Int_t vCos; // combinational outputs
Vec_Int_t vFfs; // flops
+ Vec_Int_t vFfs2; // flops
Vec_Int_t * vInits; // initial values
char * pInits; // initial values
int nObjs[WLC_OBJ_NUMBER]; // counter of objects of each type
@@ -275,6 +276,7 @@ static inline Wlc_Obj_t * Wlc_NtkPo( Wlc_Ntk_t * p, int i )
static inline Wlc_Obj_t * Wlc_NtkCi( Wlc_Ntk_t * p, int i ) { return Wlc_NtkObj( p, Vec_IntEntry(&p->vCis, i) ); }
static inline Wlc_Obj_t * Wlc_NtkCo( Wlc_Ntk_t * p, int i ) { return Wlc_NtkObj( p, Vec_IntEntry(&p->vCos, i) ); }
static inline Wlc_Obj_t * Wlc_NtkFf( Wlc_Ntk_t * p, int i ) { return Wlc_NtkObj( p, Vec_IntEntry(&p->vFfs, i) ); }
+static inline Wlc_Obj_t * Wlc_NtkFf2( Wlc_Ntk_t * p, int i ) { return Wlc_NtkObj( p, Vec_IntEntry(&p->vFfs2, i) ); }
static inline int Wlc_ObjIsPi( Wlc_Obj_t * p ) { return p->Type == WLC_OBJ_PI; }
static inline int Wlc_ObjIsPo( Wlc_Obj_t * p ) { return p->fIsPo; }
@@ -350,6 +352,8 @@ static inline Wlc_Obj_t * Wlc_ObjCo2PoFo( Wlc_Ntk_t * p, int iCoId )
for ( i = 0; (i < Wlc_NtkCoNum(p)) && (((pCo) = Wlc_NtkCo(p, i)), 1); i++ )
#define Wlc_NtkForEachFf( p, pFf, i ) \
for ( i = 0; (i < Vec_IntSize(&p->vFfs)) && (((pFf) = Wlc_NtkFf(p, i)), 1); i++ )
+#define Wlc_NtkForEachFf2( p, pFf, i ) \
+ for ( i = 0; (i < Vec_IntSize(&p->vFfs2)) && (((pFf) = Wlc_NtkFf2(p, i)), 1); i++ )
#define Wlc_ObjForEachFanin( pObj, iFanin, i ) \
for ( i = 0; (i < Wlc_ObjFaninNum(pObj)) && (((iFanin) = Wlc_ObjFaninId(pObj, i)), 1); i++ )
diff --git a/src/base/wlc/wlcAbc.c b/src/base/wlc/wlcAbc.c
index 1836f4e..e1b06ff 100644
--- a/src/base/wlc/wlcAbc.c
+++ b/src/base/wlc/wlcAbc.c
@@ -42,6 +42,58 @@ ABC_NAMESPACE_IMPL_START
SeeAlso []
***********************************************************************/
+void Wlc_NtkPrintInputInfo( Wlc_Ntk_t * pNtk )
+{
+ Wlc_Obj_t * pObj;
+ int i, k, nRange, nBeg, nEnd, nBits = 0;
+ FILE * output;
+
+ output = fopen("abc_blast_input.info","w");
+
+ Wlc_NtkForEachCi( pNtk, pObj, i )
+ {
+ nRange = Wlc_ObjRange(pObj);
+ nBeg = pObj->Beg;
+ nEnd = pObj->End;
+
+ for ( k = 0; k < nRange; k++ )
+ {
+ int index = nEnd > nBeg ? nBeg + k : nEnd + k;
+ char c = pObj->Type != WLC_OBJ_FO ? 'i' : pNtk->pInits[nBits + k];
+ fprintf(output,"%s[%d] : %c \n", Wlc_ObjName(pNtk, Wlc_ObjId(pNtk, pObj)), index , c );
+ }
+ if (pObj->Type == WLC_OBJ_FO)
+ nBits += nRange;
+ }
+
+ Wlc_NtkForEachPo( pNtk, pObj, i )
+ {
+ nRange = Wlc_ObjRange(pObj);
+ nBeg = pObj->Beg;
+ nEnd = pObj->End;
+
+ for ( k = 0; k < nRange; k++ )
+ {
+ int index = nEnd > nBeg ? nBeg + k : nEnd + k;
+ fprintf(output,"%s[%d] : o \n", Wlc_ObjName(pNtk, Wlc_ObjId(pNtk, pObj)), index);
+ }
+ }
+
+ fclose(output);
+ return;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
void Wlc_NtkPrintInvStats( Wlc_Ntk_t * pNtk, Vec_Int_t * vCounts, int fVerbose )
{
Wlc_Obj_t * pObj;
diff --git a/src/base/wlc/wlcBlast.c b/src/base/wlc/wlcBlast.c
index 2efed1f..c5c351c 100644
--- a/src/base/wlc/wlcBlast.c
+++ b/src/base/wlc/wlcBlast.c
@@ -131,6 +131,12 @@ int Wlc_NtkMuxTree2( Gia_Man_t * pNew, int * pCtrl, int nCtrl, Vec_Int_t * vData
Vec_IntPush( vTemp, Abc_LitNot( Gia_ManHashAnd(pNew, iLit, Vec_IntEntry(vData, m)) ) );
return Abc_LitNot( Gia_ManHashAndMulti(pNew, vTemp) );
}
+void Wlc_NtkPrintNameArray( Vec_Ptr_t * vNames )
+{
+ int i; char * pTemp;
+ Vec_PtrForEachEntry( char *, vNames, pTemp, i )
+ printf( "%2d : %s\n", i, pTemp );
+}
/**Function*************************************************************
@@ -167,7 +173,7 @@ void Wlc_BlastShiftRight( Gia_Man_t * pNew, int * pNum, int nNum, int * pShift,
int nShiftMax = Abc_Base2Log(nNum);
int * pShiftNew = ABC_ALLOC( int, nShift );
memcpy( pShiftNew, pShift, sizeof(int)*nShift );
- if ( nShiftMax < nShift )
+ if ( nShiftMax < nShift && nShift > 30 )
{
int i, iRes = pShiftNew[nShiftMax];
for ( i = nShiftMax + 1; i < nShift; i++ )
@@ -1134,13 +1140,15 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
Tim_Man_t * pManTime = NULL;
If_LibBox_t * pBoxLib = NULL;
Vec_Ptr_t * vTables = NULL;
+ Vec_Int_t * vFf2Ci = Vec_IntAlloc( 100 );
+ Vec_Int_t * vRegClasses = NULL;
Gia_Man_t * pTemp, * pNew, * pExtra = NULL;
Wlc_Obj_t * pObj, * pObj2;
Vec_Int_t * vBits = &p->vBits, * vTemp0, * vTemp1, * vTemp2, * vRes, * vAddOutputs = NULL, * vAddObjs = NULL;
int nBits = Wlc_NtkPrepareBits( p );
int nRange, nRange0, nRange1, nRange2, nRange3;
int i, k, b, iFanin, iLit, nAndPrev, * pFans0, * pFans1, * pFans2, * pFans3;
- int nFFins = 0, nFFouts = 0, curPi = 0, curPo = 0;
+ int nFFins = 0, nFFouts = 0, curPi = 0, curPo = 0, nFf2Regs = 0;
int nBitCis = 0, nBitCos = 0, fAdded = 0;
Wlc_BstPar_t Par, * pPar = &Par;
Wlc_BstParDefault( pPar );
@@ -1167,6 +1175,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
if ( pPar->vBoxIds )
{
int nNewCis = 0, nNewCos = 0;
+ assert( Vec_IntSize(&p->vFfs2) == 0 );
Wlc_NtkForEachObj( p, pObj, i )
pObj->Mark = 0;
// count bit-width of regular CIs/COs
@@ -1198,6 +1207,61 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
// create box library
pBoxLib = If_LibBoxStart();
}
+ if ( Vec_IntSize(&p->vFfs2) > 0 )
+ {
+ Vec_Int_t * vSignature;
+ int nNewCis = 0, nNewCos = 0;
+ assert( pPar->vBoxIds == 0 );
+ // count bit-width of regular CIs/COs
+ Wlc_NtkForEachCi( p, pObj, i )
+ nBitCis += Wlc_ObjRange( pObj );
+ Wlc_NtkForEachCo( p, pObj, i )
+ nBitCos += Wlc_ObjRange( pObj );
+ // count bit-width of additional CIs/COs due to selected multipliers
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ // currently works only for multipliers
+ assert( pObj->Type == WLC_OBJ_FF );
+ assert( Wlc_ObjRange(pObj) == Wlc_ObjRange(Wlc_ObjFanin0(p, pObj)) );
+ nNewCis += Wlc_ObjRange(pObj);
+ nNewCos += 2*Wlc_ObjRange(pObj) + 3;
+ nFf2Regs+= Wlc_ObjRange(pObj);
+ }
+ // create hierarchy manager
+ pManTime = Tim_ManStart( nBitCis + nNewCis + nFf2Regs, nBitCos + nNewCos + nFf2Regs );
+ curPi = nBitCis + nFf2Regs;
+ curPo = 0;
+ // create AIG manager for logic of the boxes
+ pExtra = Gia_ManStart( Wlc_NtkObjNum(p) );
+ Gia_ManHashAlloc( pExtra );
+ assert( !pPar->fGiaSimple );
+ // create register classes
+ vRegClasses = Vec_IntAlloc(0);
+ vSignature = Vec_IntAlloc( 100 );
+ Vec_IntPushTwo( vSignature, -1, -1 );
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ int iClk0, iClk = Wlc_ObjFaninId( pObj, 1 );
+ int iAsyn0, iAsyn = Wlc_ObjFaninId( pObj, 5 );
+ nRange = Wlc_ObjRange(pObj);
+ Vec_IntForEachEntryDouble( vSignature, iClk0, iAsyn0, k )
+ if ( iClk == iClk0 && iAsyn == iAsyn0 )
+ {
+ for ( b = 0; b < nRange; b++ )
+ Vec_IntPush( vRegClasses, k/2 );
+ break;
+ }
+ if ( k < Vec_IntSize(vSignature) )
+ continue;
+ for ( b = 0; b < nRange; b++ )
+ Vec_IntPush( vRegClasses, k/2 );
+ Vec_IntPushTwo( vSignature, iClk, iAsyn );
+ }
+ assert( Vec_IntSize(vRegClasses) == nFf2Regs );
+ Vec_IntFree( vSignature );
+ // create box library
+ pBoxLib = If_LibBoxStart();
+ }
// blast in the topological order
Wlc_NtkForEachObj( p, pObj, i )
{
@@ -1210,10 +1274,10 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
nRange1 = Wlc_ObjFaninNum(pObj) > 1 ? Wlc_ObjRange( Wlc_ObjFanin1(p, pObj) ) : -1;
nRange2 = Wlc_ObjFaninNum(pObj) > 2 ? Wlc_ObjRange( Wlc_ObjFanin2(p, pObj) ) : -1;
nRange3 = Wlc_ObjFaninNum(pObj) > 3 ? Wlc_ObjRange( Wlc_ObjFanin(p, pObj, 3) ) : -1;
- pFans0 = Wlc_ObjFaninNum(pObj) > 0 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId0(pObj)) ) : NULL;
- pFans1 = Wlc_ObjFaninNum(pObj) > 1 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId1(pObj)) ) : NULL;
- pFans2 = Wlc_ObjFaninNum(pObj) > 2 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId2(pObj)) ) : NULL;
- pFans3 = Wlc_ObjFaninNum(pObj) > 3 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId(pObj,3)) ) : NULL;
+ pFans0 = pObj->Type != WLC_OBJ_FF && Wlc_ObjFaninNum(pObj) > 0 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId0(pObj)) ) : NULL;
+ pFans1 = pObj->Type != WLC_OBJ_FF && Wlc_ObjFaninNum(pObj) > 1 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId1(pObj)) ) : NULL;
+ pFans2 = pObj->Type != WLC_OBJ_FF && Wlc_ObjFaninNum(pObj) > 2 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId2(pObj)) ) : NULL;
+ pFans3 = pObj->Type != WLC_OBJ_FF && Wlc_ObjFaninNum(pObj) > 3 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId(pObj,3)) ) : NULL;
Vec_IntClear( vRes );
assert( nRange > 0 );
if ( pPar->vBoxIds && pObj->Mark )
@@ -1317,13 +1381,15 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
// add box to the library
sprintf( Buffer, "%s%03d", pObj->Type == WLC_OBJ_ARI_ADD ? "add":"mul", 1+If_LibBoxNum(pBoxLib) );
- pBox = If_BoxStart( Abc_UtilStrsav(Buffer), 1+If_LibBoxNum(pBoxLib), nRange, nRange0 + nRange1 + nRange2, 0, 0, 0 );
+ pBox = If_BoxStart( Abc_UtilStrsav(Buffer), 1+If_LibBoxNum(pBoxLib), nRange0 + nRange1 + nRange2, nRange, 0, 0, 0 );
If_LibBoxAdd( pBoxLib, pBox );
for ( k = 0; k < pBox->nPis * pBox->nPos; k++ )
pBox->pDelays[k] = 1;
}
- else if ( Wlc_ObjIsCi(pObj) )
+ else if ( Wlc_ObjIsCi(pObj) || pObj->Type == WLC_OBJ_FF ) // assuming that FFs are ordered immediately after PIs
{
+ if ( pObj->Type == WLC_OBJ_FF )
+ Vec_IntPush( vFf2Ci, Gia_ManCiNum(pNew) );
if ( Wlc_ObjRangeIsReversed(pObj) )
{
for ( k = 0; k < nRange; k++ )
@@ -1338,6 +1404,10 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
}
if ( pObj->Type == WLC_OBJ_FO )
nFFouts += Vec_IntSize(vRes);
+ if ( pObj->Type == WLC_OBJ_FF )
+ {
+ // complement flop output whose init state is 1
+ }
}
else if ( pObj->Type == WLC_OBJ_BUF )
{
@@ -1767,6 +1837,102 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
Vec_IntFree( vTemp1 );
Vec_IntFree( vTemp2 );
Vec_IntFree( vRes );
+ // create flop boxes
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ If_Box_t * pBox;
+ char Buffer[100];
+ float * pTable;
+ Vec_Int_t * vTemp0 = Vec_IntAlloc( 100 );
+ Vec_Int_t * vTemp1 = Vec_IntAlloc( 100 );
+ int iLit, nRange = Wlc_ObjRange(pObj);
+ int * pFans0, * pFans1, * pFans2, * pFans3;
+ int iReset, iSet, iEnable;
+ int nRangeIn = 2*nRange + 3; // D, reset, set, enable, Q
+ int iSre = Wlc_ObjFaninId(pObj, 6);
+
+ assert( pObj->Type == WLC_OBJ_FF );
+
+ // create new box
+ if ( vTables == NULL )
+ Tim_ManSetDelayTables( pManTime, (vTables = Vec_PtrAlloc(100)) );
+ Tim_ManCreateBox( pManTime, curPo, nRangeIn, curPi, nRange, Vec_PtrSize(vTables), 0 );
+ curPi += nRange;
+ curPo += nRangeIn;
+
+ // create delay table
+ pTable = ABC_ALLOC( float, 3 + nRange * nRangeIn );
+ pTable[0] = Vec_PtrSize(vTables);
+ pTable[1] = nRangeIn;
+ pTable[2] = nRange;
+ for ( k = 0; k < nRange * nRangeIn; k++ )
+ pTable[3 + k] = 1.0;
+ Vec_PtrPush( vTables, pTable );
+
+ // create combinational outputs in the normal manager
+ pFans0 = Wlc_ObjFaninNum(pObj) > 0 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId0(pObj)) ) : NULL;
+ pFans1 = Wlc_ObjFaninNum(pObj) > 1 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId1(pObj)) ) : NULL;
+ pFans2 = Wlc_ObjFaninNum(pObj) > 2 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId2(pObj)) ) : NULL;
+ pFans3 = Wlc_ObjFaninNum(pObj) > 3 ? Vec_IntEntryP( vBits, Wlc_ObjCopy(p, Wlc_ObjFaninId(pObj,3)) ) : NULL;
+ for ( k = 0; k < nRange; k++ )
+ Gia_ManAppendCo( pNew, pFans0[k] );
+ Gia_ManAppendCo( pNew, pFans1[0] );
+ Gia_ManAppendCo( pNew, pFans2[0] );
+ Gia_ManAppendCo( pNew, pFans3[0] );
+ for ( k = 0; k < nRange; k++ )
+ Gia_ManAppendCo( pNew, Gia_Obj2Lit(pNew, Gia_ManCi(pNew, Vec_IntEntry(vFf2Ci, i)+k)) );
+
+ // make sure there is enough primary inputs in the manager
+ for ( k = Gia_ManPiNum(pExtra); k < nRangeIn; k++ )
+ Gia_ManAppendCi( pExtra );
+ // create combinational inputs
+ for ( k = 0; k < nRange; k++ )
+ Vec_IntPush( vTemp0, Gia_Obj2Lit(pExtra, Gia_ManPi(pExtra, k)) );
+ iReset = Gia_Obj2Lit(pExtra, Gia_ManPi(pExtra, nRange+0));
+ iSet = Gia_Obj2Lit(pExtra, Gia_ManPi(pExtra, nRange+1));
+ iEnable = Gia_Obj2Lit(pExtra, Gia_ManPi(pExtra, nRange+2));
+ for ( k = 0; k < nRange; k++ )
+ Vec_IntPush( vTemp1, Gia_Obj2Lit(pExtra, Gia_ManPi(pExtra, nRangeIn-nRange+k)) );
+
+ // bit-blast in the external manager
+ for ( k = 0; k < nRange; k++ )
+ {
+ // enable
+ //iLitFlop = Gia_LitNotCond( Gia_ObjCopy(pObj), Gia_FlopIsOne(pObj) );
+ //iLit = Gia_ManHashMux( Gia_ObjGia(pObj), Gia_FlopEnableCopy(pObj), iLit, iLitFlop );
+ iLit = Gia_ManHashMux( pExtra, iEnable, Vec_IntEntry(vTemp0, k), Vec_IntEntry(vTemp1, k) );
+ if ( iSre )
+ {
+ // reset
+ //iLit = Gia_ManHashAnd( Gia_ObjGia(pObj), iLit, Gia_LitNot(Gia_FlopResetCopy(pObj)) );
+ iLit = Gia_ManHashAnd( pExtra, iLit, Abc_LitNot(iReset) );
+ // set
+ //iLit = Gia_ManHashOr( Gia_ObjGia(pObj), iLit, Gia_FlopSetCopy(pObj) );
+ iLit = Gia_ManHashOr( pExtra, iLit, iSet );
+ }
+ else
+ {
+ // set
+ //iLit = Gia_ManHashOr( Gia_ObjGia(pObj), iLit, Gia_FlopSetCopy(pObj) );
+ iLit = Gia_ManHashOr( pExtra, iLit, iSet );
+ // reset
+ //iLit = Gia_ManHashAnd( Gia_ObjGia(pObj), iLit, Gia_LitNot(Gia_FlopResetCopy(pObj)) );
+ iLit = Gia_ManHashAnd( pExtra, iLit, Abc_LitNot(iReset) );
+ }
+ // create outputs in the external manager
+ Gia_ManAppendCo( pExtra, iLit );
+ }
+
+ // add box to the library
+ sprintf( Buffer, "%s%03d", "ff_comb", 1+If_LibBoxNum(pBoxLib) );
+ pBox = If_BoxStart( Abc_UtilStrsav(Buffer), 1+If_LibBoxNum(pBoxLib), nRangeIn, nRange, 0, 0, 0 );
+ If_LibBoxAdd( pBoxLib, pBox );
+ for ( k = 0; k < pBox->nPis * pBox->nPos; k++ )
+ pBox->pDelays[k] = 1;
+ Vec_IntFree( vTemp0 );
+ Vec_IntFree( vTemp1 );
+ }
+ Vec_IntFree( vFf2Ci );
// create COs
if ( pPar->fCreateMiter )
{
@@ -1856,8 +2022,19 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
//Vec_IntErase( vBits );
//Vec_IntErase( &p->vCopies );
// set the number of registers
- assert( nFFins == nFFouts );
- Gia_ManSetRegNum( pNew, nFFins );
+ if ( Vec_IntSize(&p->vFfs2) > 0 )
+ {
+ assert( nFFins == 0 && nFFouts == 0 );
+ // complement flop inputs whose init state is 1
+ for ( i = 0; i < nFf2Regs; i++ )
+ Gia_ManAppendCo( pNew, Gia_ManAppendCi(pNew) );
+ //Gia_ManSetRegNum( pNew, nFf2Regs );
+ }
+ else
+ {
+ assert( nFFins == nFFouts );
+ Gia_ManSetRegNum( pNew, nFFins );
+ }
// finalize AIG
if ( !pPar->fGiaSimple && !pPar->fNoCleanup )
{
@@ -1882,6 +2059,24 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
}
}
// finalize AIG with boxes
+ if ( Vec_IntSize(&p->vFfs2) > 0 )
+ {
+ curPo += nBitCos + nFf2Regs;
+ assert( curPi == Tim_ManCiNum(pManTime) );
+ assert( curPo == Tim_ManCoNum(pManTime) );
+ // finalize the extra AIG
+ pExtra = Gia_ManCleanup( pTemp = pExtra );
+ Gia_ManStop( pTemp );
+ assert( Gia_ManPoNum(pExtra) == Gia_ManCiNum(pNew) - nBitCis - nFf2Regs );
+ // attach
+ pNew->pAigExtra = pExtra;
+ pNew->pManTime = pManTime;
+ // normalize AIG
+ pNew = Gia_ManDupNormalize( pTemp = pNew, 0 );
+ Gia_ManTransferTiming( pNew, pTemp );
+ Gia_ManStop( pTemp );
+ //Tim_ManPrint( pManTime );
+ }
if ( pPar->vBoxIds )
{
curPo += nBitCos;
@@ -1890,7 +2085,7 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
// finalize the extra AIG
pExtra = Gia_ManCleanup( pTemp = pExtra );
Gia_ManStop( pTemp );
- assert( Gia_ManPoNum(pExtra) == Gia_ManCiNum(pNew) - nBitCis );
+ assert( Gia_ManPoNum(pExtra) == Gia_ManCiNum(pNew) - nBitCis - nFf2Regs );
// attach
pNew->pAigExtra = pExtra;
pNew->pManTime = pManTime;
@@ -1944,6 +2139,38 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
}
}
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
+ nRange = Wlc_ObjRange( pObj );
+ if ( fSkipBitRange && nRange == 1 )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_fo", pName );
+ Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
+ }
+ else
+ for ( k = 0; k < nRange; k++ )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_fo[%d]", pName, k );
+ Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
+ }
+ }
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
+ nRange = Wlc_ObjRange( pObj );
+ if ( fSkipBitRange && nRange == 1 )
+ Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(pName) );
+ else
+ for ( k = 0; k < nRange; k++ )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s[%d]", pName, k );
+ Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav(Buffer) );
+ }
+ }
if ( p->pInits && fAdded )
Vec_PtrPush( pNew->vNamesIn, Abc_UtilStrsav("abc_reset_flop") );
if ( pPar->vBoxIds )
@@ -1964,6 +2191,43 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
assert( Vec_PtrSize(pNew->vNamesIn) == Gia_ManCiNum(pNew) );
// create output names
pNew->vNamesOut = Vec_PtrAlloc( Gia_ManCoNum(pNew) );
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ int iFanin;
+ Wlc_ObjForEachFanin( pObj, iFanin, b )
+ {
+ char * pName = Wlc_ObjName(p, iFanin);
+ nRange = Wlc_ObjRange( Wlc_NtkObj(p, iFanin) );
+ if ( fSkipBitRange && nRange == 1 )
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(pName) );
+ else
+ for ( k = 0; k < nRange; k++ )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s[%d]", pName, k );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
+ if ( b == 3 )
+ break;
+ }
+ {
+ char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
+ nRange = Wlc_ObjRange( pObj );
+ if ( fSkipBitRange && nRange == 1 )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_in", pName );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
+ else
+ for ( k = 0; k < nRange; k++ )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_in[%d]", pName, k );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
+ }
+ }
if ( pPar->vBoxIds )
{
Wlc_NtkForEachObjVec( pPar->vBoxIds, p, pObj, i )
@@ -2045,12 +2309,34 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
nRange = Wlc_ObjRange( pObj );
if ( fSkipBitRange && nRange == 1 )
- Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(pName) );
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_fi", pName );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
else
for ( k = 0; k < nRange; k++ )
{
char Buffer[1000];
- sprintf( Buffer, "%s[%d]", pName, k );
+ sprintf( Buffer, "%s_fi[%d]", pName, k );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
+ }
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
+ nRange = Wlc_ObjRange( pObj );
+ if ( fSkipBitRange && nRange == 1 )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_fi", pName );
+ Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
+ }
+ else
+ for ( k = 0; k < nRange; k++ )
+ {
+ char Buffer[1000];
+ sprintf( Buffer, "%s_fi[%d]", pName, k );
Vec_PtrPush( pNew->vNamesOut, Abc_UtilStrsav(Buffer) );
}
}
@@ -2075,19 +2361,22 @@ Gia_Man_t * Wlc_NtkBitBlast( Wlc_Ntk_t * p, Wlc_BstPar_t * pParIn )
assert( Gia_ManPoNum(pNew) % 2 == 0 );
sprintf( pFileName0, "%s_lhs_.aig", pNameGeneric );
sprintf( pFileName1, "%s_rhs_.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 );
Gia_ManStop( pGia0 );
Gia_ManStop( pGia1 );
Vec_IntFree( vOrder );
ABC_FREE( pNameGeneric );
printf( "Dumped two parts of the miter into files \"%s\" and \"%s\".\n", pFileName0, pFileName1 );
}
+ //Wlc_NtkPrintNameArray( pNew->vNamesIn );
+ //Wlc_NtkPrintNameArray( pNew->vNamesOut );
if ( pPar->vBoxIds )
{
- Vec_PtrFreeP( &pNew->vNamesIn );
- Vec_PtrFreeP( &pNew->vNamesOut );
+ Vec_PtrFreeFree( pNew->vNamesIn ); pNew->vNamesIn = NULL;
+ Vec_PtrFreeFree( pNew->vNamesOut ); pNew->vNamesOut = NULL;
}
+ pNew->vRegClasses = vRegClasses;
return pNew;
}
diff --git a/src/base/wlc/wlcCom.c b/src/base/wlc/wlcCom.c
index 06c2346..6df2c84 100644
--- a/src/base/wlc/wlcCom.c
+++ b/src/base/wlc/wlcCom.c
@@ -40,6 +40,7 @@ static int Abc_CommandMemAbs ( Abc_Frame_t * pAbc, int argc, char ** argv )
static int Abc_CommandBlast ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandBlastMem ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandGraft ( Abc_Frame_t * pAbc, int argc, char ** argv );
+static int Abc_CommandRetime ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandProfile ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandShortNames ( Abc_Frame_t * pAbc, int argc, char ** argv );
static int Abc_CommandShow ( Abc_Frame_t * pAbc, int argc, char ** argv );
@@ -85,6 +86,7 @@ void Wlc_Init( Abc_Frame_t * pAbc )
Cmd_CommandAdd( pAbc, "Word level", "%blast", Abc_CommandBlast, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%blastmem", Abc_CommandBlastMem, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%graft", Abc_CommandGraft, 0 );
+ Cmd_CommandAdd( pAbc, "Word level", "%retime", Abc_CommandRetime, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%profile", Abc_CommandProfile, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%short_names", Abc_CommandShortNames, 0 );
Cmd_CommandAdd( pAbc, "Word level", "%show", Abc_CommandShow, 0 );
@@ -968,13 +970,14 @@ usage:
******************************************************************************/
int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
{
+ extern void Wlc_NtkPrintInputInfo( Wlc_Ntk_t * pNtk );
Wlc_Ntk_t * pNtk = Wlc_AbcGetNtk(pAbc);
- Gia_Man_t * pNew = NULL; int c;
+ Gia_Man_t * pNew = NULL; int c, fMiter = 0, fDumpNames = 0, fPrintInputInfo = 0;
Wlc_BstPar_t Par, * pPar = &Par;
Wlc_BstParDefault( pPar );
pPar->nOutputRange = 2;
Extra_UtilGetoptReset();
- while ( ( c = Extra_UtilGetopt( argc, argv, "ORAMcombadsvh" ) ) != EOF )
+ while ( ( c = Extra_UtilGetopt( argc, argv, "ORAMcombadstnivh" ) ) != EOF )
{
switch ( c )
{
@@ -1043,6 +1046,16 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
case 's':
pPar->fDecMuxes ^= 1;
break;
+ case 't':
+ pPar->fCreateMiter ^= 1;
+ fMiter ^= 1;
+ break;
+ case 'n':
+ fDumpNames ^= 1;
+ break;
+ case 'i':
+ fPrintInputInfo ^= 1;
+ break;
case 'v':
pPar->fVerbose ^= 1;
break;
@@ -1057,6 +1070,8 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( 1, "Abc_CommandBlast(): There is no current design.\n" );
return 0;
}
+ if ( fPrintInputInfo )
+ Wlc_NtkPrintInputInfo(pNtk);
if ( pPar->fMulti )
{
pPar->vBoxIds = Wlc_NtkCollectMultipliers( pNtk );
@@ -1085,10 +1100,31 @@ int Abc_CommandBlast( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print( 1, "Abc_CommandBlast(): Bit-blasting has failed.\n" );
return 0;
}
+ // generate miter
+ if ( fMiter )
+ {
+ Gia_Man_t * pTemp = pNew;
+ pNew = Gia_ManTransformMiter( pNew );
+ Gia_ManStop( pTemp );
+ Abc_Print( 1, "Bit-blasting created a traditional multi-output miter by XORing POs pair-wise.\n" );
+ if ( fDumpNames )
+ {
+ int i; char * pName;
+ FILE * pFile = fopen( "pio_name_map.txt", "wb" );
+ if ( pNew->vNamesIn )
+ Vec_PtrForEachEntry( char *, pNew->vNamesIn, pName, i )
+ fprintf( pFile, "i%d %s\n", i, pName );
+ if ( pNew->vNamesOut )
+ Vec_PtrForEachEntry( char *, pNew->vNamesOut, pName, i )
+ fprintf( pFile, "o%d %s\n", i, pName );
+ fclose( pFile );
+ Abc_Print( 1, "Finished dumping file \"pio_name_map.txt\" containing PI/PO name mapping.\n" );
+ }
+ }
Abc_FrameUpdateGia( pAbc, pNew );
return 0;
usage:
- Abc_Print( -2, "usage: %%blast [-ORAM num] [-combadsvh]\n" );
+ Abc_Print( -2, "usage: %%blast [-ORAM num] [-combadstnivh]\n" );
Abc_Print( -2, "\t performs bit-blasting of the word-level design\n" );
Abc_Print( -2, "\t-O num : zero-based index of the first word-level PO to bit-blast [default = %d]\n", pPar->iOutput );
Abc_Print( -2, "\t-R num : the total number of word-level POs to bit-blast [default = %d]\n", pPar->nOutputRange );
@@ -1099,8 +1135,11 @@ usage:
Abc_Print( -2, "\t-m : toggle creating boxes for all multipliers in the design [default = %s]\n", pPar->fMulti? "yes": "no" );
Abc_Print( -2, "\t-b : toggle generating radix-4 Booth multipliers [default = %s]\n", pPar->fBooth? "yes": "no" );
Abc_Print( -2, "\t-a : toggle generating carry-look-ahead adder [default = %s]\n", pPar->fCla? "yes": "no" );
- Abc_Print( -2, "\t-d : toggle creating dual-output miter [default = %s]\n", pPar->fCreateMiter? "yes": "no" );
+ Abc_Print( -2, "\t-d : toggle creating dual-output multi-output miter [default = %s]\n", pPar->fCreateMiter? "yes": "no" );
Abc_Print( -2, "\t-s : toggle creating decoded MUXes [default = %s]\n", pPar->fDecMuxes? "yes": "no" );
+ Abc_Print( -2, "\t-t : toggle creating regular multi-output miter [default = %s]\n", fMiter? "yes": "no" );
+ Abc_Print( -2, "\t-n : toggle dumping signal names into a text file [default = %s]\n", fDumpNames? "yes": "no" );
+ Abc_Print( -2, "\t-i : toggle to print input names after blasting [default = %s]\n", fPrintInputInfo ? "yes": "no" );
Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", pPar->fVerbose? "yes": "no" );
Abc_Print( -2, "\t-h : print the command usage\n");
return 1;
@@ -1138,7 +1177,7 @@ int Abc_CommandBlastMem( Abc_Frame_t * pAbc, int argc, char ** argv )
}
if ( pNtk == NULL )
{
- Abc_Print( 1, "Abc_CommandGraft(): There is no current design.\n" );
+ Abc_Print( 1, "Abc_CommandBlastMem(): There is no current design.\n" );
return 0;
}
pNtk = Wlc_NtkMemBlast( pNtk );
@@ -1209,6 +1248,63 @@ usage:
SeeAlso []
******************************************************************************/
+int Abc_CommandRetime( Abc_Frame_t * pAbc, int argc, char ** argv )
+{
+ extern void Wln_NtkRetimeTest( char * pFileName );
+ FILE * pFile;
+ char * pFileName = NULL;
+ int c, fVerbose = 0;
+ Extra_UtilGetoptReset();
+ while ( ( c = Extra_UtilGetopt( argc, argv, "vh" ) ) != EOF )
+ {
+ switch ( c )
+ {
+ case 'v':
+ fVerbose ^= 1;
+ break;
+ case 'h':
+ goto usage;
+ default:
+ goto usage;
+ }
+ }
+ if ( argc != globalUtilOptind + 1 )
+ {
+ printf( "Abc_CommandRetime(): Input file name should be given on the command line.\n" );
+ return 0;
+ }
+ // get the file name
+ pFileName = argv[globalUtilOptind];
+ if ( (pFile = fopen( pFileName, "r" )) == NULL )
+ {
+ Abc_Print( 1, "Cannot open input file \"%s\". ", pFileName );
+ if ( (pFileName = Extra_FileGetSimilarName( pFileName, ".ndr", NULL, NULL, NULL, NULL )) )
+ Abc_Print( 1, "Did you mean \"%s\"?", pFileName );
+ Abc_Print( 1, "\n" );
+ return 0;
+ }
+ fclose( pFile );
+ Wln_NtkRetimeTest( pFileName );
+ return 0;
+usage:
+ Abc_Print( -2, "usage: %%retime [-vh]\n" );
+ Abc_Print( -2, "\t performs retiming for the NDR design\n" );
+ Abc_Print( -2, "\t-v : toggle printing verbose information [default = %s]\n", fVerbose? "yes": "no" );
+ Abc_Print( -2, "\t-h : print the command usage\n");
+ return 1;
+}
+
+/**Function********************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+******************************************************************************/
int Abc_CommandProfile( Abc_Frame_t * pAbc, int argc, char ** argv )
{
Wlc_Ntk_t * pNtk = Wlc_AbcGetNtk(pAbc);
@@ -1724,7 +1820,7 @@ int Abc_CommandTest( Abc_Frame_t * pAbc, int argc, char ** argv )
//Wlc_NtkSimulateTest( (Wlc_Ntk_t *)pAbc->pAbcWlc );
//pNtk = Wlc_NtkDupSingleNodes( pNtk );
//Wlc_AbcUpdateNtk( pAbc, pNtk );
- Ndr_ModuleTestDec();
+ //Wln_ReadNdrTest();
//pNtk = Wlc_NtkMemAbstractTest( pNtk );
//Wlc_AbcUpdateNtk( pAbc, pNtk );
return 0;
diff --git a/src/base/wlc/wlcMem.c b/src/base/wlc/wlcMem.c
index ccc319e..fd844b6 100644
--- a/src/base/wlc/wlcMem.c
+++ b/src/base/wlc/wlcMem.c
@@ -1006,7 +1006,7 @@ int Wlc_NtkMemAbstract( Wlc_Ntk_t * p, int nIterMax, int fDumpAbs, int fPdrVerbo
if ( fDumpAbs )
{
char * pFileName = "mem_abs.aig";
- Gia_AigerWrite( pAbs, pFileName, 0, 0 );
+ Gia_AigerWrite( pAbs, pFileName, 0, 0, 0 );
printf( "Iteration %3d: Dumped abstraction in file \"%s\" after finding CEX in frame %d.\n", nIters, pFileName, pCex ? pCex->iFrame : -1 );
}
diff --git a/src/base/wlc/wlcNdr.c b/src/base/wlc/wlcNdr.c
index 5f3bc12..16c7d77 100644
--- a/src/base/wlc/wlcNdr.c
+++ b/src/base/wlc/wlcNdr.c
@@ -344,9 +344,10 @@ void Wlc_NtkCheckIntegrity( void * pData )
}
Ndr_ModForEachObj( p, Mod, Obj )
{
+ int Type = Ndr_ObjReadBody( p, Obj, NDR_OPERTYPE );
int i, * pArray, nArray = Ndr_ObjReadArray( p, Obj, NDR_INPUT, &pArray );
for ( i = 0; i < nArray; i++ )
- if ( Vec_IntGetEntry(vMap, pArray[i]) == 0 )
+ if ( Vec_IntGetEntry(vMap, pArray[i]) == 0 && !(Type == ABC_OPER_DFFRSE && (i >= 5 || i <= 7)) )
printf( "Input name %d appearing as fanin %d of obj %d is not used as output name in any object.\n", pArray[i], i, Obj );
}
Vec_IntFree( vMap );
@@ -398,6 +399,8 @@ Wlc_Ntk_t * Wlc_NtkFromNdr( void * pData )
Vec_IntPush( &pNtk->vFfs, Vec_IntEntry(vFanins, 0) );
continue;
}
+ if ( Type == ABC_OPER_DFFRSE )
+ Vec_IntPush( &pNtk->vFfs2, iObj );
if ( Type == ABC_OPER_SLICE )
Vec_IntPushTwo( vFanins, End, Beg );
else if ( Type == ABC_OPER_CONST )
@@ -469,6 +472,7 @@ Wlc_Ntk_t * Wlc_NtkFromNdr( void * pData )
assert( !fFound && i == NameId );
}
//Ndr_NtkPrintNodes( pNtk );
+ //Wlc_WriteVer( pNtk, "temp_ndr.v", 0, 0 );
// derive topological order
pNtk = Wlc_NtkDupDfs( pTemp = pNtk, 0, 1 );
Wlc_NtkFree( pTemp );
diff --git a/src/base/wlc/wlcNtk.c b/src/base/wlc/wlcNtk.c
index 7f56207..4ac0c66 100644
--- a/src/base/wlc/wlcNtk.c
+++ b/src/base/wlc/wlcNtk.c
@@ -264,6 +264,7 @@ void Wlc_NtkFree( Wlc_Ntk_t * p )
ABC_FREE( p->vCis.pArray );
ABC_FREE( p->vCos.pArray );
ABC_FREE( p->vFfs.pArray );
+ ABC_FREE( p->vFfs2.pArray );
Vec_IntFreeP( &p->vInits );
ABC_FREE( p->vTravIds.pArray );
ABC_FREE( p->vNameIds.pArray );
@@ -286,6 +287,7 @@ int Wlc_NtkMemUsage( Wlc_Ntk_t * p )
Mem += 4 * p->vCis.nCap;
Mem += 4 * p->vCos.nCap;
Mem += 4 * p->vFfs.nCap;
+ Mem += 4 * p->vFfs2.nCap;
Mem += sizeof(Wlc_Obj_t) * p->nObjsAlloc;
Mem += Abc_NamMemUsed(p->pManName);
Mem += Mem_FlexReadMemUsage(p->pMemFanin);
@@ -866,10 +868,13 @@ void Wlc_NtkDupDfs_rec( Wlc_Ntk_t * pNew, Wlc_Ntk_t * p, int iObj, Vec_Int_t * v
{
Wlc_Obj_t * pObj;
int i, iFanin;
+ if ( iObj == 0 )
+ return;
if ( Wlc_ObjCopy(p, iObj) )
return;
//printf( "Visiting node %d\n", iObj );
pObj = Wlc_NtkObj( p, iObj );
+ assert( pObj->Type != WLC_OBJ_FF );
Wlc_ObjForEachFanin( pObj, iFanin, i )
Wlc_NtkDupDfs_rec( pNew, p, iFanin, vFanins );
Wlc_ObjDup( pNew, p, iObj, vFanins );
@@ -906,9 +911,9 @@ Wlc_Ntk_t * Wlc_NtkDupDfsSimple( Wlc_Ntk_t * p )
Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p, int fMarked, int fSeq )
{
Wlc_Ntk_t * pNew;
- Wlc_Obj_t * pObj;
+ Wlc_Obj_t * pObj, * pObjNew;
Vec_Int_t * vFanins;
- int i;
+ int i, k, iObj, iFanin;
vFanins = Vec_IntAlloc( 100 );
Wlc_NtkCleanCopy( p );
pNew = Wlc_NtkAlloc( p->pName, p->nObjsAlloc );
@@ -923,12 +928,28 @@ Wlc_Ntk_t * Wlc_NtkDupDfs( Wlc_Ntk_t * p, int fMarked, int fSeq )
Wlc_ObjDup( pNew, p, Wlc_ObjId(p, pObj), vFanins );
pObj->Type = Type;
}
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ int iObjNew = Wlc_ObjAlloc( pNew, pObj->Type, Wlc_ObjIsSigned(pObj), pObj->End, pObj->Beg );
+ Wlc_ObjSetCopy( p, Wlc_ObjId(p, pObj), iObjNew );
+ Vec_IntPush( &pNew->vFfs2, iObjNew );
+ }
Wlc_NtkForEachCo( p, pObj, i )
if ( !fMarked || pObj->Mark )
Wlc_NtkDupDfs_rec( pNew, p, Wlc_ObjId(p, pObj), vFanins );
Wlc_NtkForEachCo( p, pObj, i )
if ( !fMarked || pObj->Mark )
Wlc_ObjSetCo( pNew, Wlc_ObjCopyObj(pNew, p, pObj), fSeq ? pObj->fIsFi : 0 );
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ iObj = Wlc_ObjId(p, pObj);
+ Wlc_ObjForEachFanin( pObj, iFanin, k )
+ Wlc_NtkDupDfs_rec( pNew, p, iFanin, vFanins );
+ Wlc_ObjCollectCopyFanins( p, iObj, vFanins );
+ pObjNew = Wlc_NtkObj( pNew, Wlc_ObjCopy(p, iObj) );
+ Wlc_ObjAddFanins( pNew, pObjNew, vFanins );
+ pObjNew->fXConst = pObj->fXConst;
+ }
Vec_IntFree( vFanins );
if ( fSeq )
{
diff --git a/src/base/wlc/wlcReadVer.c b/src/base/wlc/wlcReadVer.c
index da7ccba..d8187bd 100644
--- a/src/base/wlc/wlcReadVer.c
+++ b/src/base/wlc/wlcReadVer.c
@@ -1203,7 +1203,13 @@ startword:
break;
}
// check range of the control
- if ( nValues != Vec_IntSize(p->vFanins) - 1 )
+ if ( nValues < Vec_IntSize(p->vFanins) - 1 ) // may occur if default is not there
+ {
+ //return Wlc_PrsWriteErrorMessage( p, pStart, "The number of values in the case statement is wrong.", pName );
+ printf( "Warning: The number of values in the case statement is wrong.\n" );
+ Vec_IntShrink(p->vFanins,nValues+1);
+ }
+ else if ( nValues > Vec_IntSize(p->vFanins) - 1 )
return Wlc_PrsWriteErrorMessage( p, pStart, "The number of values in the case statement is wrong.", pName );
if ( Wlc_ObjRange(pObj) == 1 )
{
@@ -1277,7 +1283,7 @@ startword:
}
else if ( Wlc_PrsStrCmp( pStart, "ABC_DFFRSE" ) )
{
- int NameId[8] = {0}, fFound, fFlopIn, fFlopOut, fFlopClk, fFlopRst, fFlopSet, fFlopEna, fFlopAsync, fFlopInit;
+ int NameId[10] = {0}, fFound, fFlopIn, fFlopClk, fFlopRst, fFlopSet, fFlopEna, fFlopAsync, fFlopSre, fFlopInit, fFlopOut;
pStart += strlen("ABC_DFF");
while ( 1 )
{
@@ -1286,13 +1292,14 @@ startword:
break;
pStart = Wlc_PrsSkipSpaces( pStart+1 );
fFlopIn = (pStart[0] == 'd');
- fFlopOut = (pStart[0] == 'q');
fFlopClk = (pStart[0] == 'c');
fFlopRst = (pStart[0] == 'r');
- fFlopSet = (pStart[0] == 's');
+ fFlopSet = (pStart[0] == 's' && pStart[1] == 'e');
fFlopEna = (pStart[0] == 'e');
fFlopAsync = (pStart[0] == 'a');
+ fFlopSre = (pStart[0] == 's' && pStart[1] == 'r');
fFlopInit = (pStart[0] == 'i');
+ fFlopOut = (pStart[0] == 'q');
pStart = Wlc_PrsFindSymbol( pStart, '(' );
if ( pStart == NULL )
return Wlc_PrsWriteErrorMessage( p, pStart, "Cannot read opening parenthesis in the flop description." );
@@ -1301,8 +1308,6 @@ startword:
return Wlc_PrsWriteErrorMessage( p, pStart, "Cannot read name inside flop description." );
if ( fFlopIn )
NameId[0] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
- else if ( fFlopOut )
- NameId[7] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
else if ( fFlopClk )
NameId[1] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
else if ( fFlopRst )
@@ -1313,8 +1318,12 @@ startword:
NameId[4] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
else if ( fFlopAsync )
NameId[5] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
- else if ( fFlopInit )
+ else if ( fFlopSre )
NameId[6] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ else if ( fFlopInit )
+ NameId[7] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ else if ( fFlopOut )
+ NameId[8] = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
else
assert( 0 );
if ( !fFound )
@@ -1323,7 +1332,7 @@ startword:
if ( NameId[0] == -1 || NameId[7] == -1 )
return Wlc_PrsWriteErrorMessage( p, pStart, "Name of flop input or flop output is missing." );
// create output
- pObj = Wlc_NtkObj( p->pNtk, NameId[7] );
+ pObj = Wlc_NtkObj( p->pNtk, NameId[8] );
Wlc_ObjUpdateType( p->pNtk, pObj, WLC_OBJ_FF );
Vec_IntClear( p->vFanins );
Vec_IntPush( p->vFanins, NameId[0] );
@@ -1333,6 +1342,7 @@ startword:
Vec_IntPush( p->vFanins, NameId[4] );
Vec_IntPush( p->vFanins, NameId[5] );
Vec_IntPush( p->vFanins, NameId[6] );
+ Vec_IntPush( p->vFanins, NameId[7] );
Wlc_ObjAddFanins( p->pNtk, pObj, p->vFanins );
}
else if ( Wlc_PrsStrCmp( pStart, "ABC_DFF" ) )
@@ -1522,6 +1532,55 @@ startword:
Wlc_ObjAddFanins( p->pNtk, pObj, p->vFanins );
p->pNtk->fMemPorts = 1;
}
+ else if ( Wlc_PrsStrCmp( pStart, "CPL_RROT" ) || Wlc_PrsStrCmp( pStart, "CPL_LROT" ) )
+ {
+ // CPL_RROT #(128, 6) I_47479(.o ( E_46713 ) , .d ( E_46718 ) , .s ( E_46712 ) );
+ int right_rotation = Wlc_PrsStrCmp( pStart, "CPL_RROT" );
+ int NameId = -1, NameIdOut = -1, NameIdInD = -1, NameIdInS = -1, fFound, fRotInD, fRotInS, fRotOut;
+ pStart += strlen("CPL_RROT");
+
+ // NOTE: no need to parse the parameter values
+ //if ( pStart[0] == '#' )
+
+ // read names
+ while ( 1 )
+ {
+ pStart = Wlc_PrsFindSymbol( pStart, '.' );
+ if ( pStart == NULL )
+ break;
+ pStart = Wlc_PrsSkipSpaces( pStart+1 );
+ if ( pStart[0] != 'o' && pStart[0] != 'd' && pStart[0] != 's')
+ continue;
+ fRotInD = (pStart[0] == 'd');
+ fRotInS = (pStart[0] == 's');
+ fRotOut = (pStart[0] == 'o');
+ pStart = Wlc_PrsFindSymbol( pStart, '(' );
+ if ( pStart == NULL )
+ return Wlc_PrsWriteErrorMessage( p, pStart, "Cannot read opening parenthesis in the rotation description." );
+ pStart = Wlc_PrsFindName( pStart+1, &pName );
+ if ( pStart == NULL )
+ return Wlc_PrsWriteErrorMessage( p, pStart, "Cannot read name inside rotation description." );
+ if ( fRotInD )
+ NameIdInD = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ else if ( fRotInS )
+ NameIdInS = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ else if ( fRotOut )
+ NameIdOut = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ else
+ NameId = Abc_NamStrFindOrAdd( p->pNtk->pManName, pName, &fFound );
+ if ( !fFound )
+ return Wlc_PrsWriteErrorMessage( p, pStart, "Name %s is not declared.", pName );
+ }
+ if ( NameIdOut == -1 || NameIdInD == -1 || NameIdInS == -1 )
+ return Wlc_PrsWriteErrorMessage( p, pStart, "Some fields of CPL_ROT are missing." );
+ // create rot output
+ pObj = Wlc_NtkObj( p->pNtk, NameIdOut );
+ Wlc_ObjUpdateType( p->pNtk, pObj, right_rotation ? WLC_OBJ_ROTATE_R : WLC_OBJ_ROTATE_L );
+ Vec_IntClear( p->vFanins );
+ Vec_IntPush( p->vFanins, NameIdInD );
+ Vec_IntPush( p->vFanins, NameIdInS );
+ Wlc_ObjAddFanins( p->pNtk, pObj, p->vFanins );
+ }
else if ( pStart[0] == '(' && pStart[1] == '*' ) // skip comments
{
while ( *pStart++ != ')' );
@@ -1571,6 +1630,10 @@ Wlc_Ntk_t * Wlc_ReadVer( char * pFileName, char * pStr )
// derive topological order
if ( p->pNtk )
{
+ Wlc_Obj_t * pObj; int i;
+ Wlc_NtkForEachObj( p->pNtk, pObj, i )
+ if ( pObj->Type == WLC_OBJ_FF )
+ Vec_IntPush( &p->pNtk->vFfs2, Wlc_ObjId(p->pNtk, pObj) );
pNtk = Wlc_NtkDupDfs( p->pNtk, 0, 1 );
pNtk->pSpec = Abc_UtilStrsav( pFileName );
}
@@ -1600,7 +1663,7 @@ void Io_ReadWordTest( char * pFileName )
Wlc_WriteVer( pNtk, "test.v", 0, 0 );
pNew = Wlc_NtkBitBlast( pNtk, NULL );
- Gia_AigerWrite( pNew, "test.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "test.aig", 0, 0, 0 );
Gia_ManStop( pNew );
Wlc_NtkFree( pNtk );
diff --git a/src/base/wlc/wlcWriteVer.c b/src/base/wlc/wlcWriteVer.c
index dd25196..30f10e1 100644
--- a/src/base/wlc/wlcWriteVer.c
+++ b/src/base/wlc/wlcWriteVer.c
@@ -192,7 +192,7 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p, int fNoFlops )
continue;
fprintf( pFile, " assign " );
}
- else if ( (pObj->Type == WLC_OBJ_MUX && Wlc_ObjFaninNum(pObj) > 3) || pObj->Type == WLC_OBJ_FF || pObj->Type == WLC_OBJ_SEL )
+ else if ( (pObj->Type == WLC_OBJ_MUX && Wlc_ObjFaninNum(pObj) > 3) || pObj->Type == WLC_OBJ_SEL )
fprintf( pFile, "reg %s ", Range );
else
fprintf( pFile, "wire %s ", Range );
@@ -361,13 +361,7 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p, int fNoFlops )
}
else if ( pObj->Type == WLC_OBJ_FF )
{
- char * pInNames[8] = {"d", "clk", "reset", "set", "enable", "async", "sre", "init"};
fprintf( pFile, "%s ;\n", Wlc_ObjName(p, i) );
- fprintf( pFile, " " );
- fprintf( pFile, "%s (", "ABC_DFFRSE" );
- Wlc_ObjForEachFanin( pObj, iFanin, k )
- fprintf( pFile, " .%s(%s),", pInNames[k], Wlc_ObjName(p, iFanin) );
- fprintf( pFile, " .%s(%s) ) ;\n", "q", Wlc_ObjName(p, i) );
continue;
}
else
@@ -561,6 +555,18 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p, int fNoFlops )
}
assert( !p->vInits || iFanin == (int)strlen(p->pInits) );
}
+ // write DFFs in the end
+ fprintf( pFile, "\n" );
+ Wlc_NtkForEachFf2( p, pObj, i )
+ {
+ char * pInNames[8] = {"d", "clk", "reset", "set", "enable", "async", "sre", "init"};
+ fprintf( pFile, " " );
+ fprintf( pFile, "%s (", "ABC_DFFRSE" );
+ Wlc_ObjForEachFanin( pObj, iFanin, k )
+ if ( iFanin ) fprintf( pFile, " .%s(%s),", pInNames[k], Wlc_ObjName(p, iFanin) );
+ fprintf( pFile, " .%s(%s) ) ;\n", "q", Wlc_ObjName(p, Wlc_ObjId(p, pObj)) );
+ }
+ fprintf( pFile, "\n" );
fprintf( pFile, "endmodule\n\n" );
}
void Wlc_WriteVer( Wlc_Ntk_t * p, char * pFileName, int fAddCos, int fNoFlops )
diff --git a/src/base/wln/module.make b/src/base/wln/module.make
new file mode 100644
index 0000000..6689baf
--- /dev/null
+++ b/src/base/wln/module.make
@@ -0,0 +1,6 @@
+SRC += src/base/wln/wln.c \
+ src/base/wln/wlnNdr.c \
+ src/base/wln/wlnNtk.c \
+ src/base/wln/wlnObj.c \
+ src/base/wln/wlnRetime.c \
+ src/base/wln/wlnWriteVer.c
diff --git a/src/base/wln/wln.c b/src/base/wln/wln.c
new file mode 100644
index 0000000..2fbe26e
--- /dev/null
+++ b/src/base/wln/wln.c
@@ -0,0 +1,51 @@
+/**CFile****************************************************************
+
+ FileName [wln.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis []
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wln.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+
+ABC_NAMESPACE_IMPL_START
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/base/wln/wln.h b/src/base/wln/wln.h
new file mode 100644
index 0000000..c862b26
--- /dev/null
+++ b/src/base/wln/wln.h
@@ -0,0 +1,259 @@
+/**CFile****************************************************************
+
+ FileName [wlc.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 - August 22, 2014.]
+
+ Revision [$Id: wlc.h,v 1.00 2014/09/12 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#ifndef ABC__base__wln__wln_h
+#define ABC__base__wln__wln_h
+
+
+////////////////////////////////////////////////////////////////////////
+/// INCLUDES ///
+////////////////////////////////////////////////////////////////////////
+
+#include "aig/gia/gia.h"
+#include "misc/vec/vecHash.h"
+#include "misc/extra/extra.h"
+#include "misc/util/utilNam.h"
+#include "misc/util/utilTruth.h"
+#include "aig/miniaig/abcOper.h"
+
+////////////////////////////////////////////////////////////////////////
+/// PARAMETERS ///
+////////////////////////////////////////////////////////////////////////
+
+ABC_NAMESPACE_HEADER_START
+
+////////////////////////////////////////////////////////////////////////
+/// BASIC TYPES ///
+////////////////////////////////////////////////////////////////////////
+
+typedef struct Wln_Vec_t_ Wln_Vec_t;
+struct Wln_Vec_t_
+{
+ int nCap;
+ int nSize;
+ union { int Array[2];
+ int * pArray[1]; };
+};
+
+typedef struct Wln_Ntk_t_ Wln_Ntk_t;
+struct Wln_Ntk_t_
+{
+ char * pName; // model name
+ char * pSpec; // input file name
+ int fSmtLib; // derived from SMT-LIB
+ Vec_Int_t vCis; // combinational inputs
+ Vec_Int_t vCos; // combinational outputs
+ Vec_Int_t vFfs; // flops
+ Vec_Int_t vTypes; // object types
+ Wln_Vec_t * vFanins; // object fanins (exceptions: const, select)
+ Vec_Int_t vRanges; // object ranges
+ Hash_IntMan_t * pRanges; // object ranges
+ Vec_Int_t vNameIds; // object name IDs
+ Vec_Int_t vInstIds; // object name IDs
+ Abc_Nam_t * pManName; // object names
+ Vec_Str_t vSigns; // object signedness
+ int nTravIds; // counter of traversal IDs
+ Vec_Int_t vTravIds; // trav IDs of the objects
+ Vec_Int_t vCopies; // object first bits
+ Vec_Int_t vBits; // object mapping into AIG nodes
+ Vec_Int_t vLevels; // object levels
+ Vec_Int_t vRefs; // object reference counters
+ Vec_Int_t vFanout; // static fanout
+ Vec_Int_t vFaninAttrs; // static fanin attributes
+ Vec_Int_t vFaninLists; // static fanin attributes
+ Vec_Ptr_t * vTables; // tables
+ int nObjs[ABC_OPER_LAST]; // counter of objects of each type
+ int nAnds[ABC_OPER_LAST]; // counter of AND gates after blasting
+};
+
+static inline int Wln_NtkObjNum( Wln_Ntk_t * p ) { return Vec_IntSize(&p->vTypes); }
+static inline int Wln_NtkCiNum( Wln_Ntk_t * p ) { return Vec_IntSize(&p->vCis); }
+static inline int Wln_NtkCoNum( Wln_Ntk_t * p ) { return Vec_IntSize(&p->vCos); }
+static inline int Wln_NtkFfNum( Wln_Ntk_t * p ) { return Vec_IntSize(&p->vFfs); }
+static inline int Wln_NtkPiNum( Wln_Ntk_t * p ) { return Wln_NtkCiNum(p) - Wln_NtkFfNum(p); }
+static inline int Wln_NtkPoNum( Wln_Ntk_t * p ) { return Wln_NtkCoNum(p) - Wln_NtkFfNum(p); }
+
+static inline int Wln_NtkCi( Wln_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vCis, i); }
+static inline int Wln_NtkCo( Wln_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vCos, i); }
+static inline int Wln_NtkFf( Wln_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vFfs, i); }
+
+static inline int Wln_ObjType( Wln_Ntk_t * p, int i ) { return Vec_IntEntry(&p->vTypes, i); }
+static inline int Wln_ObjIsNone( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_NONE; }
+static inline int Wln_ObjIsCi( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_CI; }
+static inline int Wln_ObjIsCo( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_CO; }
+static inline int Wln_ObjIsCio( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_CI || Wln_ObjType(p, i)==ABC_OPER_CO; }
+static inline int Wln_ObjIsFon( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_FON; }
+static inline int Wln_ObjIsFf( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_DFFRSE; }
+static inline int Wln_ObjIsConst( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_CONST; }
+static inline int Wln_ObjIsSlice( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_SLICE; }
+static inline int Wln_ObjIsRotate( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_SHIFT_ROTL || Wln_ObjType(p, i) == ABC_OPER_SHIFT_ROTR; }
+static inline int Wln_ObjIsTable( Wln_Ntk_t * p, int i ) { return Wln_ObjType(p, i) == ABC_OPER_TABLE; }
+
+static inline int Wln_ObjFaninNum( Wln_Ntk_t * p, int i ) { return p->vFanins[i].nSize; }
+static inline int * Wln_ObjFanins( Wln_Ntk_t * p, int i ) { return Wln_ObjFaninNum(p, i) > 2 ? p->vFanins[i].pArray[0] : p->vFanins[i].Array; }
+static inline int Wln_ObjFanin( Wln_Ntk_t * p, int i, int f ) { return Wln_ObjFaninNum(p, i) > 2 ? p->vFanins[i].pArray[0][f] : p->vFanins[i].Array[f]; }
+static inline void Wln_ObjSetFanin( Wln_Ntk_t * p, int i, int f, int v ) { Wln_ObjFanins( p, i )[f] = v; }
+static inline int Wln_ObjFanin0( Wln_Ntk_t * p, int i ) { return Wln_ObjFanin( p, i, 0 ); }
+static inline int Wln_ObjFanin1( Wln_Ntk_t * p, int i ) { return Wln_ObjFanin( p, i, 1 ); }
+static inline int Wln_ObjFanin2( Wln_Ntk_t * p, int i ) { return Wln_ObjFanin( p, i, 2 ); }
+
+static inline int Wln_ObjRangeId( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vRanges, i ); }
+static inline int Wln_ObjRangeEnd( Wln_Ntk_t * p, int i ) { return Hash_IntObjData0( p->pRanges, Wln_ObjRangeId(p, i) ); }
+static inline int Wln_ObjRangeBeg( Wln_Ntk_t * p, int i ) { return Hash_IntObjData1( p->pRanges, Wln_ObjRangeId(p, i) ); }
+static inline int Wln_ObjRangeIsReversed( Wln_Ntk_t * p, int i ) { return Wln_ObjRangeEnd(p, i) < Wln_ObjRangeBeg(p, i); }
+static inline int Wln_ObjRange( Wln_Ntk_t * p, int i ) { return 1 + Abc_AbsInt(Wln_ObjRangeEnd(p, i)-Wln_ObjRangeBeg(p, i)); }
+
+static inline int Wln_ObjIsSigned( Wln_Ntk_t * p, int i ) { return (int)Vec_StrEntry(&p->vSigns, i); }
+static inline void Wln_ObjSetSigned( Wln_Ntk_t * p, int i ) { Vec_StrSetEntry(&p->vSigns, i, (char)1); }
+static inline int Wln_ObjIsSignedFanin0( Wln_Ntk_t * p, int i ) { return Wln_ObjIsSigned( p, p->fSmtLib ? i : Wln_ObjFanin0(p, i) ); }
+static inline int Wln_ObjIsSignedFanin1( Wln_Ntk_t * p, int i ) { return Wln_ObjIsSigned( p, p->fSmtLib ? i : Wln_ObjFanin1(p, i) ); }
+static inline int Wln_ObjIsSignedFanin01( Wln_Ntk_t * p, int i ) { return Wln_ObjIsSignedFanin0( p, i ) && Wln_ObjIsSignedFanin1( p, i ); }
+static inline int Wln_ObjSign( Wln_Ntk_t * p, int i ) { return Abc_Var2Lit( Wln_ObjRange(p, i), Wln_ObjIsSigned(p, i) ); }
+
+static inline void Wln_NtkCleanCopy( Wln_Ntk_t * p ) { Vec_IntFill( &p->vCopies, Vec_IntCap(&p->vTypes), 0 ); }
+static inline int Wln_NtkHasCopy( Wln_Ntk_t * p ) { return Vec_IntSize( &p->vCopies ) > 0; }
+static inline void Wln_ObjSetCopy( Wln_Ntk_t * p, int i, int c ) { Vec_IntWriteEntry( &p->vCopies, i, c ); }
+static inline int Wln_ObjCopy( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vCopies, i ); }
+
+static inline void Wln_NtkCleanLevel( Wln_Ntk_t * p ) { Vec_IntFill( &p->vLevels, Vec_IntCap(&p->vTypes), 0 ); }
+static inline int Wln_NtkHasLevel( Wln_Ntk_t * p ) { return Vec_IntSize( &p->vLevels ) > 0; }
+static inline void Wln_ObjSetLevel( Wln_Ntk_t * p, int i, int l ) { Vec_IntWriteEntry( &p->vLevels, i, l ); }
+static inline int Wln_ObjLevel( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vLevels, i ); }
+
+static inline void Wln_NtkCleanNameId( Wln_Ntk_t * p ) { Vec_IntFill( &p->vNameIds, Vec_IntCap(&p->vTypes), 0 ); }
+static inline int Wln_NtkHasNameId( Wln_Ntk_t * p ) { return Vec_IntSize( &p->vNameIds ) > 0; }
+static inline void Wln_ObjSetNameId( Wln_Ntk_t * p, int i, int n ) { Vec_IntWriteEntry( &p->vNameIds, i, n ); }
+static inline int Wln_ObjNameId( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vNameIds, i ); }
+
+static inline void Wln_NtkCleanInstId( Wln_Ntk_t * p ) { Vec_IntFill( &p->vInstIds, Vec_IntCap(&p->vTypes), 0 ); }
+static inline int Wln_NtkHasInstId( Wln_Ntk_t * p ) { return Vec_IntSize( &p->vInstIds ) > 0; }
+static inline void Wln_ObjSetInstId( Wln_Ntk_t * p, int i, int n ) { Vec_IntWriteEntry( &p->vInstIds, i, n ); }
+static inline int Wln_ObjInstId( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vInstIds, i ); }
+
+static inline void Wln_NtkCleanRefs( Wln_Ntk_t * p ) { Vec_IntFill( &p->vRefs, Vec_IntCap(&p->vTypes), 0 ); }
+static inline int Wln_NtkHasRefs( Wln_Ntk_t * p ) { return Vec_IntSize( &p->vRefs ) > 0; }
+static inline void Wln_ObjSetRefs( Wln_Ntk_t * p, int i, int n ) { Vec_IntWriteEntry( &p->vRefs, i, n ); }
+static inline int Wln_ObjRefs( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vRefs, i ); }
+static inline int Wln_ObjRefsInc( Wln_Ntk_t * p, int i ) { return (*Vec_IntEntryP( &p->vRefs, i ))++; }
+static inline int Wln_ObjRefsDec( Wln_Ntk_t * p, int i ) { return --(*Vec_IntEntryP( &p->vRefs, i )); }
+static inline void Wln_ObjRefsFaninInc( Wln_Ntk_t * p, int i, int k ) { Wln_ObjRefsInc( p, Wln_ObjFanin(p, i, k) ); }
+static inline void Wln_ObjRefsFaninDec( Wln_Ntk_t * p, int i, int k ) { Wln_ObjRefsDec( p, Wln_ObjFanin(p, i, k) ); }
+
+static inline int Wln_ObjFanoutNum( Wln_Ntk_t * p, int i ) { return Vec_IntEntry( &p->vRefs, i ); }
+static inline int * Wln_ObjFanouts( Wln_Ntk_t * p, int i ) { return Vec_IntEntryP( &p->vFanout, Vec_IntEntry(&p->vFanout, i) ); }
+static inline int Wln_ObjFanout( Wln_Ntk_t * p, int i, int f ) { return Wln_ObjFanouts( p, i )[f]; }
+static inline void Wln_ObjSetFanout( Wln_Ntk_t * p, int i, int f, int v ){ Wln_ObjFanouts( p, i )[f] = v; }
+
+static inline void Wln_NtkIncrementTravId( Wln_Ntk_t * p ) { if (!p->nTravIds++) Vec_IntFill(&p->vTravIds, Vec_IntCap(&p->vTypes), 0); }
+static inline void Wln_ObjSetTravIdCurrent( Wln_Ntk_t * p, int i ) { Vec_IntWriteEntry( &p->vTravIds, i, p->nTravIds ); }
+static inline int Wln_ObjIsTravIdCurrent( Wln_Ntk_t * p, int i ) { return (Vec_IntEntry(&p->vTravIds, i) == p->nTravIds); }
+static inline int Wln_ObjIsTravIdPrevious( Wln_Ntk_t * p, int i ) { return (Vec_IntEntry(&p->vTravIds, i) == p->nTravIds-1); }
+static inline int Wln_ObjCheckTravId( Wln_Ntk_t * p, int i ) { if ( Wln_ObjIsTravIdCurrent(p, i) ) return 1; Wln_ObjSetTravIdCurrent(p, i); return 0; }
+
+static inline int Wln_ObjCioId( Wln_Ntk_t * p, int i ) { assert( Wln_ObjIsCio(p, i) ); return Wln_ObjFanin1(p, i); }
+static inline int Wln_ObjIsPi( Wln_Ntk_t * p, int i ) { return Wln_ObjIsCi(p, i) && Wln_ObjCioId(p, i) < Wln_NtkPiNum(p); }
+static inline int Wln_ObjIsPo( Wln_Ntk_t * p, int i ) { return Wln_ObjIsCo(p, i) && Wln_ObjCioId(p, i) < Wln_NtkPoNum(p); }
+static inline int Wln_ObjIsRo( Wln_Ntk_t * p, int i ) { return Wln_ObjIsCi(p, i) && Wln_ObjCioId(p, i) >= Wln_NtkPiNum(p); }
+static inline int Wln_ObjIsRi( Wln_Ntk_t * p, int i ) { return Wln_ObjIsCo(p, i) && Wln_ObjCioId(p, i) >= Wln_NtkPoNum(p); }
+static inline int Wln_ObjRoToRi( Wln_Ntk_t * p, int i ) { assert( Wln_ObjIsRo(p, i) ); return Wln_NtkCo(p, Wln_NtkCoNum(p) - Wln_NtkCiNum(p) + Wln_ObjCioId(p, i)); }
+static inline int Wln_ObjRiToRo( Wln_Ntk_t * p, int i ) { assert( Wln_ObjIsRi(p, i) ); return Wln_NtkCi(p, Wln_NtkCiNum(p) - Wln_NtkCoNum(p) + Wln_ObjCioId(p, i)); }
+
+////////////////////////////////////////////////////////////////////////
+/// MACRO DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// ITERATORS ///
+////////////////////////////////////////////////////////////////////////
+
+#define Wln_NtkForEachObj( p, i ) \
+ for ( i = 1; i < Wln_NtkObjNum(p); i++ )
+#define Wln_NtkForEachObjReverse( p, i ) \
+ for ( i = Wln_NtkObjNum(p) - 1; i > 0; i-- )
+#define Wln_NtkForEachObjInternal( p, i ) \
+ for ( i = 1; i < Wln_NtkObjNum(p); i++ ) if ( Wln_ObjIsCio(p, i) ) {} else
+
+#define Wln_NtkForEachPi( p, iPi, i ) \
+ for ( i = 0; (i < Wln_NtkPiNum(p)) && (((iPi) = Wln_NtkCi(p, i)), 1); i++ )
+#define Wln_NtkForEachPo( p, iPo, i ) \
+ for ( i = 0; (i < Wln_NtkPoNum(p)) && (((iPo) = Wln_NtkCo(p, i)), 1); i++ )
+#define Wln_NtkForEachCi( p, iCi, i ) \
+ for ( i = 0; (i < Wln_NtkCiNum(p)) && (((iCi) = Wln_NtkCi(p, i)), 1); i++ )
+#define Wln_NtkForEachCo( p, iCo, i ) \
+ for ( i = 0; (i < Wln_NtkCoNum(p)) && (((iCo) = Wln_NtkCo(p, i)), 1); i++ )
+#define Wln_NtkForEachFf( p, iFf, i ) \
+ for ( i = 0; (i < Wln_NtkFfNum(p)) && (((iFf) = Wln_NtkFf(p, i)), 1); i++ )
+
+#define Wln_ObjForEachFanin( p, iObj, iFanin, i ) \
+ for ( i = 0; (i < Wln_ObjFaninNum(p, iObj)) && (((iFanin) = Wln_ObjFanin(p, iObj, i)), 1); i++ ) if ( !iFanin ) {} else
+#define Wln_ObjForEachFaninReverse( pObj, iFanin, i ) \
+ for ( i = Wln_ObjFaninNum(p, iObj) - 1; (i >= 0) && (((iFanin) = Wln_ObjFanin(p, iObj, i)), 1); i-- ) if ( !iFanin ) {} else
+
+#define Wln_ObjForEachFanoutStatic( p, iObj, iFanout, i ) \
+ for ( i = 0; (i < Wln_ObjRefs(p, iObj)) && (((iFanout) = Wln_ObjFanout(p, iObj, i)), 1); i++ )
+
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/*=== wlcNdr.c ========================================================*/
+extern Wln_Ntk_t * Wln_ReadNdr( char * pFileName );
+extern void Wln_WriteNdr( Wln_Ntk_t * pNtk, char * pFileName );
+extern Wln_Ntk_t * Wln_NtkFromNdr( void * pData );
+extern void * Wln_NtkToNdr( Wln_Ntk_t * pNtk );
+/*=== wlcNtk.c ========================================================*/
+extern Wln_Ntk_t * Wln_NtkAlloc( char * pName, int nObjsMax );
+extern void Wln_NtkFree( Wln_Ntk_t * p );
+extern int Wln_NtkMemUsage( Wln_Ntk_t * p );
+extern void Wln_NtkPrint( Wln_Ntk_t * p );
+extern Wln_Ntk_t * Wln_NtkDupDfs( Wln_Ntk_t * p );
+extern void Wln_NtkCreateRefs( Wln_Ntk_t * p );
+extern void Wln_NtkStartFaninMap( Wln_Ntk_t * p, Vec_Int_t * vFaninMap, int nMulti );
+extern void Wln_NtkStartFanoutMap( Wln_Ntk_t * p, Vec_Int_t * vFanoutMap, Vec_Int_t * vFanoutNums, int nMulti );
+extern void Wln_NtkStaticFanoutStart( Wln_Ntk_t * p );
+extern void Wln_NtkStaticFanoutStop( Wln_Ntk_t * p );
+extern void Wln_NtkStaticFanoutTest( Wln_Ntk_t * p );
+/*=== wlcObj.c ========================================================*/
+extern char * Wln_ObjName( Wln_Ntk_t * p, int iObj );
+extern char * Wln_ObjConstString( Wln_Ntk_t * p, int iObj );
+extern void Wln_ObjUpdateType( Wln_Ntk_t * p, int iObj, int Type );
+extern void Wln_ObjSetConst( Wln_Ntk_t * p, int iObj, int NameId );
+extern void Wln_ObjSetSlice( Wln_Ntk_t * p, int iObj, int SliceId );
+extern void Wln_ObjAddFanin( Wln_Ntk_t * p, int iObj, int i );
+extern int Wln_ObjAddFanins( Wln_Ntk_t * p, int iObj, Vec_Int_t * vFanins );
+extern int Wln_ObjAlloc( Wln_Ntk_t * p, int Type, int Signed, int End, int Beg );
+extern int Wln_ObjClone( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj );
+extern int Wln_ObjCreateCo( Wln_Ntk_t * p, int iFanin );
+extern void Wln_ObjPrint( Wln_Ntk_t * p, int iObj );
+/*=== wlcRetime.c ========================================================*/
+extern Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * p );
+/*=== wlcWriteVer.c ========================================================*/
+extern void Wln_WriteVer( Wln_Ntk_t * p, char * pFileName );
+
+
+ABC_NAMESPACE_HEADER_END
+
+#endif
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
diff --git a/src/base/wln/wlnNdr.c b/src/base/wln/wlnNdr.c
new file mode 100644
index 0000000..c87100a
--- /dev/null
+++ b/src/base/wln/wlnNdr.c
@@ -0,0 +1,332 @@
+/**CFile****************************************************************
+
+ FileName [wlnNdr.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis [Constructing WLN network from NDR data structure.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wlnNdr.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+#include "aig/miniaig/ndr.h"
+
+ABC_NAMESPACE_IMPL_START
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void * Wln_NtkToNdr( Wln_Ntk_t * p )
+{
+ Vec_Int_t * vFanins;
+ int i, k, iObj, iFanin;
+ // create a new module
+ void * pDesign = Ndr_Create( 1 );
+ int ModId = Ndr_AddModule( pDesign, 1 );
+ // add primary inputs
+ Wln_NtkForEachPi( p, iObj, i )
+ {
+ Ndr_AddObject( pDesign, ModId, ABC_OPER_CI, 0,
+ Wln_ObjRangeEnd(p, iObj), Wln_ObjRangeBeg(p, iObj), Wln_ObjIsSigned(p, iObj),
+ 0, NULL, 1, &iObj, NULL ); // no fanins
+ }
+ // add internal nodes
+ vFanins = Vec_IntAlloc( 10 );
+ Wln_NtkForEachObjInternal( p, iObj )
+ {
+ Vec_IntClear( vFanins );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ Vec_IntPush( vFanins, iFanin );
+ Ndr_AddObject( pDesign, ModId, Wln_ObjType(p, iObj), 0,
+ Wln_ObjRangeEnd(p, iObj), Wln_ObjRangeBeg(p, iObj), Wln_ObjIsSigned(p, iObj),
+ Vec_IntSize(vFanins), Vec_IntArray(vFanins), 1, &iObj,
+ Wln_ObjIsConst(p, iObj) ? Wln_ObjConstString(p, iObj) : NULL );
+ }
+ Vec_IntFree( vFanins );
+ // add primary outputs
+ Wln_NtkForEachPo( p, iObj, i )
+ {
+ Ndr_AddObject( pDesign, ModId, ABC_OPER_CO, 0,
+ Wln_ObjRangeEnd(p, iObj), Wln_ObjRangeBeg(p, iObj), Wln_ObjIsSigned(p, iObj),
+ 1, &iObj, 0, NULL, NULL );
+ }
+ return pDesign;
+}
+void Wln_WriteNdr( Wln_Ntk_t * p, char * pFileName )
+{
+ void * pDesign = Wln_NtkToNdr( p );
+ Ndr_Write( pFileName, pDesign );
+ Ndr_Delete( pDesign );
+ printf( "Dumped the current design into file \"%s\".\n", pFileName );
+}
+void Wln_NtkToNdrTest( Wln_Ntk_t * p )
+{
+ // transform
+ void * pDesign = Wln_NtkToNdr( p );
+
+ // collect names
+ char ** ppNames = ABC_ALLOC( char *, Wln_NtkObjNum(p) + 1 ); int i;
+ Wln_NtkForEachObj( p, i )
+ ppNames[i] = Abc_UtilStrsav(Wln_ObjName(p, i));
+
+ // verify by writing Verilog
+ Ndr_WriteVerilog( NULL, pDesign, ppNames );
+ Ndr_Write( "test.ndr", pDesign );
+
+ // cleanup
+ Ndr_Delete( pDesign );
+ Wln_NtkForEachObj( p, i )
+ ABC_FREE( ppNames[i] );
+ ABC_FREE( ppNames );
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Ndr_ObjGetRange( Ndr_Data_t * p, int Obj, int * End, int * Beg )
+{
+ int * pArray, nArray = Ndr_ObjReadArray( p, Obj, NDR_RANGE, &pArray );
+ int Signed = 0; *End = *Beg = 0;
+ if ( nArray == 0 )
+ return 0;
+ if ( nArray == 3 )
+ Signed = 1;
+ if ( nArray == 1 )
+ *End = *Beg = pArray[0];
+ else
+ *End = pArray[0], *Beg = pArray[1];
+ return Signed;
+}
+void Ndr_NtkPrintObjects( Wln_Ntk_t * pNtk )
+{
+ int k, iObj, iFanin;
+ printf( "Node IDs and their fanins:\n" );
+ Wln_NtkForEachObj( pNtk, iObj )
+ {
+ printf( "%5d = ", iObj );
+ Wln_ObjForEachFanin( pNtk, iObj, iFanin, k )
+ printf( "%5d ", iFanin );
+ for ( ; k < 4; k++ )
+ printf( " " );
+ printf( " Name Id %d ", Wln_ObjNameId(pNtk, iObj) );
+ if ( Wln_ObjIsPi(pNtk, iObj) )
+ printf( " pi " );
+ if ( Wln_ObjIsPo(pNtk, iObj) )
+ printf( " po " );
+ printf( "\n" );
+ }
+}
+void Wln_NtkCheckIntegrity( void * pData )
+{
+ Ndr_Data_t * p = (Ndr_Data_t *)pData;
+ Vec_Int_t * vMap = Vec_IntAlloc( 100 );
+ int Mod = 2, Obj;
+ Ndr_ModForEachObj( p, Mod, Obj )
+ {
+ int NameId = Ndr_ObjReadBody( p, Obj, NDR_OUTPUT );
+ if ( NameId == -1 )
+ {
+ int Type = Ndr_ObjReadBody( p, Obj, NDR_OPERTYPE );
+ if ( Type != ABC_OPER_CO )
+ printf( "Internal object %d of type %s has no output name.\n", Obj, Abc_OperName(Type) );
+ continue;
+ }
+ if ( Vec_IntGetEntry(vMap, NameId) > 0 )
+ printf( "Output name %d is used more than once (obj %d and obj %d).\n", NameId, Vec_IntGetEntry(vMap, NameId), Obj );
+ Vec_IntSetEntry( vMap, NameId, Obj );
+ }
+ Ndr_ModForEachObj( p, Mod, Obj )
+ {
+ int Type = Ndr_ObjReadBody( p, Obj, NDR_OPERTYPE );
+ int i, * pArray, nArray = Ndr_ObjReadArray( p, Obj, NDR_INPUT, &pArray );
+ for ( i = 0; i < nArray; i++ )
+ if ( Vec_IntGetEntry(vMap, pArray[i]) == 0 && !(Type == ABC_OPER_DFFRSE && (i >= 5 || i <= 7)) )
+ printf( "Input name %d appearing as fanin %d of obj %d is not used as output name in any object.\n", pArray[i], i, Obj );
+ }
+ Vec_IntFree( vMap );
+}
+Wln_Ntk_t * Wln_NtkFromNdr( void * pData )
+{
+ Ndr_Data_t * p = (Ndr_Data_t *)pData;
+ Vec_Int_t * vName2Obj, * vFanins = Vec_IntAlloc( 100 );
+ Vec_Ptr_t * vConstStrings = Vec_PtrAlloc( 100 );
+ int Mod = 2, i, k, iFanin, iObj, Obj, * pArray, nDigits, fFound, NameId, NameIdMax;
+ Wln_Ntk_t * pTemp, * pNtk = Wln_NtkAlloc( "top", Ndr_DataObjNum(p, Mod) );
+ Wln_NtkCheckIntegrity( pData );
+ //pNtk->pSpec = Abc_UtilStrsav( pFileName );
+ // construct network and save name IDs
+ Wln_NtkCleanNameId( pNtk );
+ Wln_NtkCleanInstId( pNtk );
+ Ndr_ModForEachPi( p, Mod, Obj )
+ {
+ int End, Beg, Signed = Ndr_ObjGetRange(p, Obj, &End, &Beg);
+ int iObj = Wln_ObjAlloc( pNtk, ABC_OPER_CI, Signed, End, Beg );
+ int NameId = Ndr_ObjReadBody( p, Obj, NDR_OUTPUT );
+ int InstId = Ndr_ObjReadBody( p, Obj, NDR_NAME );
+ Wln_ObjSetNameId( pNtk, iObj, NameId );
+ if ( InstId > 0 ) Wln_ObjSetInstId( pNtk, iObj, InstId );
+ }
+ Ndr_ModForEachNode( p, Mod, Obj )
+ {
+ int End, Beg, Signed = Ndr_ObjGetRange(p, Obj, &End, &Beg);
+ int Type = Ndr_ObjReadBody( p, Obj, NDR_OPERTYPE );
+ int nArray = Ndr_ObjReadArray( p, Obj, NDR_INPUT, &pArray );
+ Vec_Int_t F = {nArray, nArray, pArray}, * vTemp = &F;
+ int iObj = Wln_ObjAlloc( pNtk, Type, Signed, End, Beg );
+ int NameId = Ndr_ObjReadBody( p, Obj, NDR_OUTPUT );
+ int InstId = Ndr_ObjReadBody( p, Obj, NDR_NAME );
+ Vec_IntClear( vFanins );
+ Vec_IntAppend( vFanins, vTemp );
+ assert( Type != ABC_OPER_DFF );
+ if ( Wln_ObjIsSlice(pNtk, iObj) )
+ Wln_ObjSetSlice( pNtk, iObj, Hash_Int2ManInsert(pNtk->pRanges, End, Beg, 0) );
+ else if ( Wln_ObjIsConst(pNtk, iObj) )
+ Vec_PtrPush( vConstStrings, (char *)Ndr_ObjReadBodyP(p, Obj, NDR_FUNCTION) );
+// else if ( Type == ABC_OPER_BIT_MUX && Vec_IntSize(vFanins) == 3 )
+// ABC_SWAP( int, Wln_ObjFanins(pNtk, iObj)[1], Wln_ObjFanins(pNtk, iObj)[2] );
+ Wln_ObjAddFanins( pNtk, iObj, vFanins );
+ Wln_ObjSetNameId( pNtk, iObj, NameId );
+ if ( InstId > 0 ) Wln_ObjSetInstId( pNtk, iObj, InstId );
+ if ( Type == ABC_OPER_ARI_SMUL )
+ {
+ assert( Wln_ObjFaninNum(pNtk, iObj) == 2 );
+ Wln_ObjSetSigned( pNtk, Wln_ObjFanin0(pNtk, iObj) );
+ Wln_ObjSetSigned( pNtk, Wln_ObjFanin1(pNtk, iObj) );
+ }
+ }
+ // mark primary outputs
+ Ndr_ModForEachPo( p, Mod, Obj )
+ {
+ int End, Beg, Signed = Ndr_ObjGetRange(p, Obj, &End, &Beg);
+ int nArray = Ndr_ObjReadArray( p, Obj, NDR_INPUT, &pArray );
+ int iObj = Wln_ObjAlloc( pNtk, ABC_OPER_CO, Signed, End, Beg );
+ int NameId = Ndr_ObjReadBody( p, Obj, NDR_OUTPUT );
+ int InstId = Ndr_ObjReadBody( p, Obj, NDR_NAME );
+ assert( nArray == 1 && NameId == -1 && InstId == -1 );
+ Wln_ObjAddFanin( pNtk, iObj, pArray[0] );
+ }
+ Vec_IntFree( vFanins );
+ // remove instance names if they are not given
+ //Vec_IntPrint( &pNtk->vInstIds );
+ if ( Vec_IntCountPositive(&pNtk->vInstIds) == 0 )
+ Vec_IntErase( &pNtk->vInstIds );
+ // map name IDs into object IDs
+ vName2Obj = Vec_IntInvert( &pNtk->vNameIds, 0 );
+ Wln_NtkForEachObj( pNtk, i )
+ Wln_ObjForEachFanin( pNtk, i, iFanin, k )
+ Wln_ObjSetFanin( pNtk, i, k, Vec_IntEntry(vName2Obj, iFanin) );
+ Vec_IntFree(vName2Obj);
+ // create fake object names
+ NameIdMax = Vec_IntFindMax(&pNtk->vNameIds);
+ nDigits = Abc_Base10Log( NameIdMax+1 );
+ pNtk->pManName = Abc_NamStart( NameIdMax+1, 10 );
+ for ( i = 1; i <= NameIdMax; i++ )
+ {
+ char pName[20]; sprintf( pName, "s%0*d", nDigits, i );
+ NameId = Abc_NamStrFindOrAdd( pNtk->pManName, pName, &fFound );
+ assert( !fFound && i == NameId );
+ }
+ // add const strings
+ i = 0;
+ Wln_NtkForEachObj( pNtk, iObj )
+ if ( Wln_ObjIsConst(pNtk, iObj) )
+ Wln_ObjSetConst( pNtk, iObj, Abc_NamStrFindOrAdd(pNtk->pManName, (char *)Vec_PtrEntry(vConstStrings, i++), NULL) );
+ assert( i == Vec_PtrSize(vConstStrings) );
+ Vec_PtrFree( vConstStrings );
+ //Ndr_NtkPrintObjects( pNtk );
+ //Wln_WriteVer( pNtk, "temp_ndr.v", 0, 0 );
+ // derive topological order
+ pNtk = Wln_NtkDupDfs( pTemp = pNtk );
+ Wln_NtkFree( pTemp );
+ //Ndr_NtkPrintObjects( pNtk );
+ //pNtk->fMemPorts = 1; // the network contains memory ports
+ //pNtk->fEasyFfs = 1; // the network contains simple flops
+ return pNtk;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Wln_Ntk_t * Wln_ReadNdr( char * pFileName )
+{
+ void * pData = Ndr_Read( pFileName );
+ Wln_Ntk_t * pNtk = Wln_NtkFromNdr( pData );
+ //char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
+ //Ndr_WriteVerilog( NULL, pData, ppNames );
+ Ndr_Delete( pData );
+ return pNtk;
+}
+void Wln_ReadNdrTest()
+{
+ Wln_Ntk_t * pNtk = Wln_ReadNdr( "D:\\temp\\brijesh\\for_alan_dff_warning\\work_fir_filter_fir_filter_proc_out.ndr" );
+ //Wln_Ntk_t * pNtk = Wln_ReadNdr( "flop.ndr" );
+ Wln_WriteVer( pNtk, "test__test.v" );
+ Wln_NtkPrint( pNtk );
+ Wln_NtkStaticFanoutTest( pNtk );
+ Wln_NtkFree( pNtk );
+}
+void Wln_NtkRetimeTest( char * pFileName )
+{
+ void * pData = Ndr_Read( pFileName );
+ Wln_Ntk_t * pNtk = Wln_NtkFromNdr( pData );
+ Ndr_Delete( pData );
+ if ( !Wln_NtkHasInstId(pNtk) )
+ printf( "The design has no delay information.\n" );
+ else
+ {
+ Vec_Int_t * vMoves = Wln_NtkRetime( pNtk );
+ Vec_IntPrint( vMoves );
+ Vec_IntFree( vMoves );
+ }
+ Wln_NtkFree( pNtk );
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/base/wln/wlnNtk.c b/src/base/wln/wlnNtk.c
new file mode 100644
index 0000000..39c0396
--- /dev/null
+++ b/src/base/wln/wlnNtk.c
@@ -0,0 +1,321 @@
+/**CFile****************************************************************
+
+ FileName [wlnNtk.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis [Network construction procedures.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wlnNtk.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+
+ABC_NAMESPACE_IMPL_START
+
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Creating networks.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Wln_Ntk_t * Wln_NtkAlloc( char * pName, int nObjsMax )
+{
+ Wln_Ntk_t * p; int i;
+ p = ABC_CALLOC( Wln_Ntk_t, 1 );
+ p->pName = pName ? Extra_FileNameGeneric( pName ) : NULL;
+ Vec_IntGrow( &p->vCis, 111 );
+ Vec_IntGrow( &p->vCos, 111 );
+ Vec_IntGrow( &p->vFfs, 111 );
+ Vec_IntGrow( &p->vTypes, nObjsMax+1 );
+ Vec_StrGrow( &p->vSigns, nObjsMax+1 );
+ Vec_IntGrow( &p->vRanges, nObjsMax+1 );
+ Vec_IntPush( &p->vTypes, -1 );
+ Vec_StrPush( &p->vSigns, -1 );
+ Vec_IntPush( &p->vRanges, -1 );
+ p->vFanins = ABC_CALLOC( Wln_Vec_t, nObjsMax+1 );
+ p->pRanges = Hash_IntManStart( 1000 );
+ for ( i = 0; i < 65; i++ )
+ Hash_Int2ManInsert( p->pRanges, i, i, 0 );
+ for ( i = 1; i < 64; i++ )
+ Hash_Int2ManInsert( p->pRanges, i, 0, 0 );
+ assert( Hash_IntManEntryNum(p->pRanges) == 128 );
+ return p;
+}
+void Wln_NtkFree( Wln_Ntk_t * p )
+{
+ int i;
+ for ( i = 0; i < Wln_NtkObjNum(p); i++ )
+ if ( Wln_ObjFaninNum(p, i) > 2 )
+ ABC_FREE( p->vFanins[i].pArray[0] );
+ ABC_FREE( p->vFanins );
+
+ if ( p->pRanges ) Hash_IntManStop( p->pRanges );
+ if ( p->pManName ) Abc_NamStop( p->pManName );
+
+ ABC_FREE( p->vCis.pArray );
+ ABC_FREE( p->vCos.pArray );
+ ABC_FREE( p->vFfs.pArray );
+
+ ABC_FREE( p->vTypes.pArray );
+ ABC_FREE( p->vSigns.pArray );
+ ABC_FREE( p->vRanges.pArray );
+ ABC_FREE( p->vNameIds.pArray );
+ ABC_FREE( p->vInstIds.pArray );
+ ABC_FREE( p->vTravIds.pArray );
+ ABC_FREE( p->vCopies.pArray );
+ ABC_FREE( p->vBits.pArray );
+ ABC_FREE( p->vLevels.pArray );
+ ABC_FREE( p->vRefs.pArray );
+ ABC_FREE( p->vFanout.pArray );
+ ABC_FREE( p->vFaninAttrs.pArray );
+ ABC_FREE( p->vFaninLists.pArray );
+
+ ABC_FREE( p->pName );
+ ABC_FREE( p->pSpec );
+ ABC_FREE( p );
+}
+int Wln_NtkMemUsage( Wln_Ntk_t * p )
+{
+ int Mem = sizeof(Wln_Ntk_t);
+ Mem += 4 * p->vCis.nCap;
+ Mem += 4 * p->vCos.nCap;
+ Mem += 4 * p->vFfs.nCap;
+ Mem += 1 * p->vTypes.nCap;
+ Mem += 4 * p->vRanges.nCap;
+ Mem += 4 * p->vNameIds.nCap;
+ Mem += 4 * p->vInstIds.nCap;
+ Mem += 4 * p->vTravIds.nCap;
+ Mem += 4 * p->vCopies.nCap;
+ Mem += 4 * p->vBits.nCap;
+ Mem += 4 * p->vLevels.nCap;
+ Mem += 4 * p->vRefs.nCap;
+ Mem += 4 * p->vFanout.nCap;
+ Mem += 4 * p->vFaninAttrs.nCap;
+ Mem += 4 * p->vFaninLists.nCap;
+ Mem += 20 * Hash_IntManEntryNum(p->pRanges);
+ Mem += Abc_NamMemUsed(p->pManName);
+ return Mem;
+}
+void Wln_NtkPrint( Wln_Ntk_t * p )
+{
+ int iObj;
+ printf( "Printing %d objects of network \"%s\":\n", Wln_NtkObjNum(p), p->pName );
+ Wln_NtkForEachObj( p, iObj )
+ Wln_ObjPrint( p, iObj );
+ printf( "\n" );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Duplicating network.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_NtkTransferNames( Wln_Ntk_t * pNew, Wln_Ntk_t * p )
+{
+ assert( pNew->pManName == NULL && p->pManName != NULL );
+ pNew->pManName = p->pManName;
+ p->pManName = NULL;
+ assert( !Wln_NtkHasCopy(pNew) && Wln_NtkHasCopy(p) );
+ if ( Wln_NtkHasNameId(p) )
+ {
+ int i;
+ assert( !Wln_NtkHasNameId(pNew) && Wln_NtkHasNameId(p) );
+ Wln_NtkCleanNameId( pNew );
+ Wln_NtkForEachObj( p, i )
+ if ( Wln_ObjCopy(p, i) && i < Vec_IntSize(&p->vNameIds) && Wln_ObjNameId(p, i) )
+ Wln_ObjSetNameId( pNew, Wln_ObjCopy(p, i), Wln_ObjNameId(p, i) );
+ Vec_IntErase( &p->vNameIds );
+ }
+ if ( Wln_NtkHasInstId(p) )
+ {
+ int i;
+ assert( !Wln_NtkHasInstId(pNew) && Wln_NtkHasInstId(p) );
+ Wln_NtkCleanInstId( pNew );
+ Wln_NtkForEachObj( p, i )
+ if ( Wln_ObjCopy(p, i) && i < Vec_IntSize(&p->vInstIds) && Wln_ObjInstId(p, i) )
+ Wln_ObjSetInstId( pNew, Wln_ObjCopy(p, i), Wln_ObjInstId(p, i) );
+ Vec_IntErase( &p->vInstIds );
+ }
+}
+int Wln_ObjDup( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj )
+{
+ int i, iFanin, iObjNew = Wln_ObjClone( pNew, p, iObj );
+ Wln_ObjForEachFanin( p, iObj, iFanin, i )
+ Wln_ObjAddFanin( pNew, iObjNew, Wln_ObjCopy(p, iFanin) );
+ if ( Wln_ObjIsConst(p, iObj) )
+ Wln_ObjSetConst( pNew, iObjNew, Wln_ObjFanin0(p, iObj) );
+ else if ( Wln_ObjIsSlice(p, iObj) || Wln_ObjIsRotate(p, iObj) || Wln_ObjIsTable(p, iObj) )
+ Wln_ObjSetFanin( p, iObjNew, 1, Wln_ObjFanin1(p, iObj) );
+ Wln_ObjSetCopy( p, iObj, iObjNew );
+ return iObjNew;
+}
+int Wln_NtkDupDfs_rec( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj )
+{
+ int i, iFanin;
+ if ( iObj == 0 )
+ return 0;
+ if ( Wln_ObjCopy(p, iObj) )
+ return Wln_ObjCopy(p, iObj);
+ //printf( "Visiting node %d\n", iObj );
+ assert( !Wln_ObjIsFf(p, iObj) );
+ Wln_ObjForEachFanin( p, iObj, iFanin, i )
+ Wln_NtkDupDfs_rec( pNew, p, iFanin );
+ return Wln_ObjDup( pNew, p, iObj );
+}
+Wln_Ntk_t * Wln_NtkDupDfs( Wln_Ntk_t * p )
+{
+ int i, k, iObj, iFanin;
+ Wln_Ntk_t * pNew = Wln_NtkAlloc( p->pName, Wln_NtkObjNum(p) );
+ pNew->fSmtLib = p->fSmtLib;
+ if ( p->pSpec ) pNew->pSpec = Abc_UtilStrsav( p->pSpec );
+ Wln_NtkCleanCopy( p );
+ Wln_NtkForEachCi( p, iObj, i )
+ Wln_ObjDup( pNew, p, iObj );
+ Wln_NtkForEachFf( p, iObj, i )
+ Wln_ObjSetCopy( p, iObj, Wln_ObjClone(pNew, p, iObj) );
+ Wln_NtkForEachCo( p, iObj, i )
+ Wln_NtkDupDfs_rec( pNew, p, iObj );
+ Wln_NtkForEachFf( p, iObj, i )
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ Wln_ObjAddFanin( pNew, Wln_ObjCopy(p, iObj), Wln_NtkDupDfs_rec(pNew, p, iFanin) );
+ if ( Wln_NtkHasNameId(p) )
+ Wln_NtkTransferNames( pNew, p );
+ return pNew;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Create fanin/fanout map.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_NtkCreateRefs( Wln_Ntk_t * p )
+{
+ int k, iObj, iFanin;
+ Wln_NtkCleanRefs( p );
+ Wln_NtkForEachObj( p, iObj )
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ Wln_ObjRefsInc( p, iFanin );
+}
+int Wln_NtkFaninNum( Wln_Ntk_t * p )
+{
+ int iObj, nEdges = 0;
+ Wln_NtkForEachObj( p, iObj )
+ nEdges += Wln_ObjFaninNum(p, iObj);
+ return nEdges;
+}
+void Wln_NtkStartFaninMap( Wln_Ntk_t * p, Vec_Int_t * vFaninMap, int nMulti )
+{
+ int iObj, iOffset = Wln_NtkObjNum(p);
+ Vec_IntFill( vFaninMap, iOffset + nMulti * Wln_NtkFaninNum(p), 0 );
+ Wln_NtkForEachObj( p, iObj )
+ {
+ Vec_IntWriteEntry( vFaninMap, iObj, iOffset );
+ iOffset += nMulti * Wln_ObjFaninNum(p, iObj);
+ }
+ assert( iOffset == Vec_IntSize(vFaninMap) );
+}
+void Wln_NtkStartFanoutMap( Wln_Ntk_t * p, Vec_Int_t * vFanoutMap, Vec_Int_t * vFanoutNums, int nMulti )
+{
+ int iObj, iOffset = Wln_NtkObjNum(p);
+ Vec_IntFill( vFanoutMap, iOffset + nMulti * Vec_IntSum(vFanoutNums), 0 );
+ Wln_NtkForEachObj( p, iObj )
+ {
+ Vec_IntWriteEntry( vFanoutMap, iObj, iOffset );
+ iOffset += nMulti * Wln_ObjRefs(p, iObj);
+ }
+ assert( iOffset == Vec_IntSize(vFanoutMap) );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Static fanout.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_NtkStaticFanoutStart( Wln_Ntk_t * p )
+{
+ int k, iObj, iFanin;
+ Vec_Int_t * vRefsCopy = Vec_IntAlloc(0);
+ Wln_NtkCreateRefs( p );
+ Wln_NtkStartFanoutMap( p, &p->vFanout, &p->vRefs, 1 );
+ ABC_SWAP( Vec_Int_t, *vRefsCopy, p->vRefs );
+ // add fanouts
+ Wln_NtkCleanRefs( p );
+ Wln_NtkForEachObj( p, iObj )
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ Wln_ObjSetFanout( p, iFanin, Wln_ObjRefsInc(p, iFanin), iObj );
+ // double-check the current number of fanouts added
+ Wln_NtkForEachObj( p, iObj )
+ assert( Wln_ObjRefs(p, iObj) == Vec_IntEntry(vRefsCopy, iObj) );
+ Vec_IntFree( vRefsCopy );
+}
+void Wln_NtkStaticFanoutStop( Wln_Ntk_t * p )
+{
+ Vec_IntErase( &p->vRefs );
+ Vec_IntErase( &p->vFanout );
+}
+void Wln_NtkStaticFanoutTest( Wln_Ntk_t * p )
+{
+ int k, iObj, iFanout;
+ printf( "Printing fanouts of %d objects of network \"%s\":\n", Wln_NtkObjNum(p), p->pName );
+ Wln_NtkStaticFanoutStart( p );
+ Wln_NtkForEachObj( p, iObj )
+ {
+ Wln_ObjPrint( p, iObj );
+ printf( " Fanouts : " );
+ Wln_ObjForEachFanoutStatic( p, iObj, iFanout, k )
+ printf( "%5d ", iFanout );
+ printf( "\n" );
+ }
+ Wln_NtkStaticFanoutStop( p );
+ printf( "\n" );
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/base/wln/wlnObj.c b/src/base/wln/wlnObj.c
new file mode 100644
index 0000000..ec37330
--- /dev/null
+++ b/src/base/wln/wlnObj.c
@@ -0,0 +1,151 @@
+/**CFile****************************************************************
+
+ FileName [wlnObj.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis [Object construction procedures.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wlnObj.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+
+ABC_NAMESPACE_IMPL_START
+
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Creating objects.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+char * Wln_ObjName( Wln_Ntk_t * p, int iObj )
+{
+ static char Buffer[100];
+ if ( Wln_NtkHasNameId(p) && Wln_ObjNameId(p, iObj) )
+ return Abc_NamStr( p->pManName, Wln_ObjNameId(p, iObj) );
+ sprintf( Buffer, "n%d", iObj );
+ return Buffer;
+}
+char * Wln_ObjConstString( Wln_Ntk_t * p, int iObj )
+{
+ assert( Wln_ObjIsConst(p, iObj) );
+ return Abc_NamStr( p->pManName, Wln_ObjFanin0(p, iObj) );
+}
+void Wln_ObjUpdateType( Wln_Ntk_t * p, int iObj, int Type )
+{
+ assert( Wln_ObjIsNone(p, iObj) );
+ p->nObjs[Wln_ObjType(p, iObj)]--;
+ Vec_IntWriteEntry( &p->vTypes, iObj, Type );
+ p->nObjs[Wln_ObjType(p, iObj)]++;
+}
+void Wln_ObjSetConst( Wln_Ntk_t * p, int iObj, int NameId )
+{
+ assert( Wln_ObjIsConst(p, iObj) );
+ Wln_ObjSetFanin( p, iObj, 0, NameId );
+}
+void Wln_ObjSetSlice( Wln_Ntk_t * p, int iObj, int SliceId )
+{
+ assert( Wln_ObjIsSlice(p, iObj) );
+ Wln_ObjSetFanin( p, iObj, 1, SliceId );
+}
+void Wln_ObjAddFanin( Wln_Ntk_t * p, int iObj, int i )
+{
+ Wln_Vec_t * pVec = p->vFanins + iObj;
+ if ( Wln_ObjFaninNum(p, iObj) < 2 )
+ pVec->Array[pVec->nSize++] = i;
+ else if ( Wln_ObjFaninNum(p, iObj) == 2 )
+ {
+ int * pArray = ABC_ALLOC( int, 4 );
+ pArray[0] = pVec->Array[0];
+ pArray[1] = pVec->Array[1];
+ pArray[2] = i;
+ pVec->pArray[0] = pArray;
+ pVec->nSize = 3;
+ pVec->nCap = 4;
+ }
+ else
+ {
+ if ( pVec->nSize == pVec->nCap )
+ pVec->pArray[0] = ABC_REALLOC( int, pVec->pArray[0], (pVec->nCap = 2*pVec->nSize) );
+ assert( pVec->nSize < pVec->nCap );
+ pVec->pArray[0][pVec->nSize++] = i;
+ }
+}
+int Wln_ObjAddFanins( Wln_Ntk_t * p, int iObj, Vec_Int_t * vFanins )
+{
+ int i, iFanin;
+ Vec_IntForEachEntry( vFanins, iFanin, i )
+ Wln_ObjAddFanin( p, iObj, iFanin );
+ return iObj;
+}
+int Wln_ObjAlloc( Wln_Ntk_t * p, int Type, int Signed, int End, int Beg )
+{
+ int iObj = Vec_IntSize(&p->vTypes);
+ if ( iObj == Vec_IntCap(&p->vTypes) )
+ {
+ p->vFanins = ABC_REALLOC( Wln_Vec_t, p->vFanins, 2 * iObj );
+ memset( p->vFanins + iObj, 0, sizeof(Wln_Vec_t) * iObj );
+ Vec_IntGrow( &p->vTypes, 2 * iObj );
+ }
+ assert( iObj == Vec_StrSize(&p->vSigns) );
+ assert( iObj == Vec_IntSize(&p->vRanges) );
+ Vec_IntPush( &p->vTypes, Type );
+ Vec_StrPush( &p->vSigns, (char)Signed );
+ Vec_IntPush( &p->vRanges, Hash_Int2ManInsert(p->pRanges, End, Beg, 0) );
+ if ( Wln_ObjIsCi(p, iObj) ) Wln_ObjSetFanin( p, iObj, 1, Vec_IntSize(&p->vCis) ), Vec_IntPush( &p->vCis, iObj );
+ if ( Wln_ObjIsCo(p, iObj) ) Wln_ObjSetFanin( p, iObj, 1, Vec_IntSize(&p->vCos) ), Vec_IntPush( &p->vCos, iObj );
+ if ( Wln_ObjIsFf(p, iObj) ) Vec_IntPush( &p->vFfs, iObj );
+ p->nObjs[Type]++;
+ return iObj;
+}
+int Wln_ObjClone( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj )
+{
+ return Wln_ObjAlloc( pNew, Wln_ObjType(p, iObj), Wln_ObjIsSigned(p, iObj), Wln_ObjRangeEnd(p, iObj), Wln_ObjRangeBeg(p, iObj) );
+}
+int Wln_ObjCreateCo( Wln_Ntk_t * p, int iFanin )
+{
+ int iCo = Wln_ObjClone( p, p, iFanin );
+ Wln_ObjUpdateType( p, iCo, ABC_OPER_CO );
+ Wln_ObjAddFanin( p, iCo, iFanin );
+ return iCo;
+}
+void Wln_ObjPrint( Wln_Ntk_t * p, int iObj )
+{
+ int k, iFanin, Type = Wln_ObjType(p, iObj);
+ printf( "Obj %6d : Type = %6s Fanins = %d : ", iObj, Abc_OperName(Type), Wln_ObjFaninNum(p, iObj) );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ printf( "%5d ", iFanin );
+ printf( "\n" );
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/base/wln/wlnRetime.c b/src/base/wln/wlnRetime.c
new file mode 100644
index 0000000..459af2d
--- /dev/null
+++ b/src/base/wln/wlnRetime.c
@@ -0,0 +1,487 @@
+/**CFile****************************************************************
+
+ FileName [wlnRetime.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis [Retiming.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wlnRetime.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+#include "misc/vec/vecHsh.h"
+
+ABC_NAMESPACE_IMPL_START
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+typedef struct Wln_Ret_t_ Wln_Ret_t;
+struct Wln_Ret_t_
+{
+ Wln_Ntk_t * pNtk; // static netlist
+ Vec_Int_t vFanins; // fanins and edge places
+ Vec_Int_t vFanouts; // fanouts and edge places
+ Vec_Int_t vEdgeLinks; // edge links
+ Vec_Int_t vFfClasses; // flop classes
+ Vec_Int_t vNodeDelays; // object delays
+ Vec_Int_t vPathDelays; // delays from sources to sinks
+ Vec_Int_t vSources; // critical sources
+ Vec_Int_t vSinks; // critical sinks
+ Vec_Int_t vFront; // retiming frontier
+ Vec_Int_t vMoves; // retiming moves (paired with delay)
+ int nClasses; // the number of flop classes
+ int DelayMax; // critical delay at any time
+};
+
+static inline int * Wln_RetFanins( Wln_Ret_t * p, int i ) { return Vec_IntEntryP( &p->vFanins, Vec_IntEntry(&p->vFanins, i) ); }
+static inline int * Wln_RetFanouts( Wln_Ret_t * p, int i ) { return Vec_IntEntryP( &p->vFanouts, Vec_IntEntry(&p->vFanouts, i) ); }
+
+#define Wln_RetForEachFanin( p, iObj, iFanin, pLink, i ) \
+ for ( i = 0; (i < Wln_ObjFaninNum(p->pNtk, iObj)) && \
+ (((iFanin) = Wln_RetFanins(p, iObj)[2*i]), 1) && \
+ ((pLink) = (Wln_RetFanins(p, iObj)+2*i+1)); i++ ) if ( !iFanin ) {} else
+
+#define Wln_RetForEachFanout( p, iObj, iFanout, pLink, i ) \
+ for ( i = 0; (i < Wln_ObjRefs(p->pNtk, iObj)) && \
+ (((iFanout) = Wln_RetFanouts(p, iObj)[2*i]), 1) && \
+ ((pLink) = Vec_IntEntryP(&p->vFanins, Wln_RetFanouts(p, iObj)[2*i+1])); i++ ) if ( !iFanout ) {} else
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis [Retiming manager.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Wln_RetComputeFfClasses( Wln_Ntk_t * pNtk, Vec_Int_t * vClasses )
+{
+ int i, k, iObj, nClasses;
+ Hsh_VecMan_t * p = Hsh_VecManStart( 10 );
+ Vec_Int_t * vFlop = Vec_IntAlloc( 6 );
+ Vec_IntFill( vClasses, Wln_NtkObjNum(pNtk), -1 );
+ Wln_NtkForEachFf( pNtk, iObj, i )
+ {
+ Vec_IntClear( vFlop );
+ for ( k = 1; k <= 6; k++ )
+ Vec_IntPush( vFlop, Wln_ObjFanin(pNtk, iObj, k) );
+ Vec_IntWriteEntry( vClasses, iObj, Hsh_VecManAdd(p, vFlop) );
+ }
+ nClasses = Hsh_VecSize( p );
+ Hsh_VecManStop( p );
+ Vec_IntFree( vFlop );
+ printf( "Detected %d flop classes.\n", nClasses );
+ return nClasses;
+}
+Wln_Ret_t * Wln_RetAlloc( Wln_Ntk_t * pNtk )
+{
+ Wln_Ret_t * p; int k, iObj, iFanin;
+ Vec_Int_t * vRefsCopy = Vec_IntAlloc(0);
+ p = ABC_CALLOC( Wln_Ret_t, 1 );
+ p->pNtk = pNtk;
+ Wln_NtkCreateRefs( pNtk );
+ Wln_NtkStartFaninMap( pNtk, &p->vFanins, 2 );
+ Wln_NtkStartFanoutMap( pNtk, &p->vFanouts, &pNtk->vRefs, 2 );
+ ABC_SWAP( Vec_Int_t, *vRefsCopy, pNtk->vRefs );
+ Wln_NtkCleanRefs( pNtk );
+ Vec_IntGrow( &p->vEdgeLinks, 10*Wln_NtkFfNum(pNtk) );
+ Vec_IntPushTwo( &p->vEdgeLinks, -1, -1 );
+ Wln_NtkForEachObj( pNtk, iObj )
+ Wln_ObjForEachFanin( pNtk, iObj, iFanin, k )
+ {
+ int * pFanins = Wln_RetFanins( p, iObj );
+ int * pFanouts = Wln_RetFanouts( p, iFanin );
+ int Index = Wln_ObjRefsInc( pNtk, iFanin );
+ pFanins[2*k+0] = iFanin;
+ pFanins[2*k+1] = Wln_ObjIsFf(pNtk, iFanin) ? Vec_IntSize(&p->vEdgeLinks) : 0;
+ pFanouts[2*Index+0] = iObj;
+ pFanouts[2*Index+1] = Vec_IntEntry(&p->vFanins, iObj) + 2*k + 1;
+ if ( Wln_ObjIsFf(pNtk, iFanin) )
+ Vec_IntPushTwo( &p->vEdgeLinks, 0, iFanin );
+ }
+ // double-check the current number of fanouts added
+ Wln_NtkForEachObj( pNtk, iObj )
+ assert( Wln_ObjRefs(pNtk, iObj) == Vec_IntEntry(vRefsCopy, iObj) );
+ Vec_IntFree( vRefsCopy );
+ // other data
+ p->nClasses = Wln_RetComputeFfClasses( pNtk, &p->vFfClasses );
+ ABC_SWAP( Vec_Int_t, p->vNodeDelays, pNtk->vInstIds );
+ Vec_IntGrow( &p->vSources, 1000 );
+ Vec_IntGrow( &p->vSinks, 1000 );
+ Vec_IntGrow( &p->vFront, 1000 );
+ Vec_IntGrow( &p->vMoves, 1000 );
+ return p;
+}
+void Wln_RetFree( Wln_Ret_t * p )
+{
+ ABC_FREE( p->vFanins.pArray );
+ ABC_FREE( p->vFanouts.pArray );
+ ABC_FREE( p->vEdgeLinks.pArray );
+ ABC_FREE( p->vFfClasses.pArray );
+ ABC_FREE( p->vNodeDelays.pArray );
+ ABC_FREE( p->vPathDelays.pArray );
+ ABC_FREE( p->vSources.pArray );
+ ABC_FREE( p->vSinks.pArray );
+ ABC_FREE( p->vFront.pArray );
+ ABC_FREE( p->vMoves.pArray );
+ ABC_FREE( p );
+}
+int Wln_RetMemUsage( Wln_Ret_t * p )
+{
+ int Mem = sizeof(Wln_Ret_t);
+ Mem += 4 * p->vFanins.nCap;
+ Mem += 4 * p->vFanouts.nCap;
+ Mem += 4 * p->vEdgeLinks.nCap;
+ Mem += 4 * p->vFfClasses.nCap;
+ Mem += 4 * p->vNodeDelays.nCap;
+ Mem += 4 * p->vPathDelays.nCap;
+ Mem += 4 * p->vSources.nCap;
+ Mem += 4 * p->vSinks.nCap;
+ Mem += 4 * p->vFront.nCap;
+ Mem += 4 * p->vMoves.nCap;
+ return Mem;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Delay propagation.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_RetMarkChanges_rec( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanout, * pLink, * pDelay = Vec_IntEntryP( &p->vPathDelays, iObj );
+ if ( *pDelay < 0 )
+ return;
+ *pDelay = -1;
+ Wln_RetForEachFanout( p, iObj, iFanout, pLink, k )
+ if ( !pLink[0] )
+ Wln_RetMarkChanges_rec( p, iFanout );
+}
+int Wln_RetPropDelay_rec( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, * pDelay = Vec_IntEntryP( &p->vPathDelays, iObj );
+ if ( *pDelay >= 0 )
+ return *pDelay;
+ Wln_RetForEachFanin( p, iObj, iFanin, pLink, k )
+ if ( pLink[0] )
+ *pDelay = Abc_MaxInt(*pDelay, 0);
+ else
+ *pDelay = Abc_MaxInt(*pDelay, Wln_RetPropDelay_rec(p, iFanin));
+ *pDelay += Vec_IntEntry( &p->vNodeDelays, iObj );
+ return *pDelay;
+}
+int Wln_RetPropDelay( Wln_Ret_t * p, Vec_Int_t * vFront )
+{
+ int i, iObj, DelayMax = 0;
+ if ( vFront )
+ {
+ Vec_IntForEachEntry( vFront, iObj, i )
+ Wln_RetMarkChanges_rec( p, iObj );
+ }
+ else
+ {
+ Vec_IntFill( &p->vPathDelays, Wln_NtkObjNum(p->pNtk), -1 );
+ Wln_NtkForEachCi( p->pNtk, iObj, i )
+ Vec_IntWriteEntry( &p->vPathDelays, iObj, 0 );
+ }
+ Vec_IntClear( &p->vSinks );
+ Wln_NtkForEachObj( p->pNtk, iObj )
+ if ( !Wln_ObjIsCo(p->pNtk, iObj) )
+ {
+ int Delay = Wln_RetPropDelay_rec(p, iObj);
+ if ( DelayMax == Delay )
+ Vec_IntPush( &p->vSinks, iObj );
+ else if ( DelayMax < Delay )
+ {
+ DelayMax = Delay;
+ Vec_IntFill( &p->vSinks, 1, iObj );
+ }
+ }
+ return DelayMax;
+}
+
+void Wln_RetFindSources_rec( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, FaninDelay, fTerm = 1;
+ if ( Wln_ObjIsCi(p->pNtk, iObj) || Wln_ObjCheckTravId(p->pNtk, iObj) )
+ return;
+ FaninDelay = Vec_IntEntry( &p->vPathDelays, iObj ) - Vec_IntEntry( &p->vNodeDelays, iObj );
+ Wln_RetForEachFanin( p, iObj, iFanin, pLink, k )
+ {
+ if ( !pLink[0] )
+ continue;
+ fTerm = 0;
+ if ( Vec_IntEntry(&p->vPathDelays, iFanin) == FaninDelay )
+ Wln_RetFindSources_rec( p, iFanin );
+ }
+ if ( fTerm )
+ Vec_IntPush( &p->vSources, iObj );
+}
+void Wln_RetFindSources( Wln_Ret_t * p )
+{
+ int i, iObj;
+ Vec_IntClear( &p->vSources );
+ Wln_NtkIncrementTravId( p->pNtk );
+ Vec_IntForEachEntry( &p->vSinks, iObj, i )
+ Wln_RetFindSources_rec( p, iObj );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Retimability check.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int * Wln_RetHeadToTail( Wln_Ret_t * p, int * pHead )
+{
+ int * pLink;
+ assert( pHead[0] );
+ pLink = Vec_IntEntryP( &p->vEdgeLinks, pHead[0] );
+ if ( pLink[0] == 0 )
+ return pHead;
+ return Wln_RetHeadToTail( p, pLink );
+}
+
+static inline int Wln_RetCheckForwardOne( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, iFlop, Class = -1;
+ Wln_RetForEachFanin( p, iObj, iFanin, pLink, k )
+ {
+ if ( !pLink[0] )
+ return 0;
+ iFlop = Vec_IntEntry( &p->vEdgeLinks, pLink[0] + 1 );
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ if ( Class == -1 )
+ Class = Vec_IntEntry( &p->vFfClasses, iFlop );
+ else if ( Class != Vec_IntEntry( &p->vFfClasses, iFlop ) )
+ return 0;
+ }
+ return 1;
+}
+int Wln_RetCheckForward( Wln_Ret_t * p, Vec_Int_t * vSet )
+{
+ int i, iObj;
+ Vec_IntForEachEntry( vSet, iObj, i )
+ if ( !Wln_RetCheckForwardOne( p, iObj ) )
+ return 0;
+ return 1;
+}
+
+static inline int Wln_RetCheckBackwardOne( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, iFlop, Class = -1;
+ Wln_RetForEachFanout( p, iObj, iFanin, pLink, k )
+ {
+ if ( !pLink[0] )
+ return 0;
+ pLink = Wln_RetHeadToTail( p, pLink );
+ iFlop = Vec_IntEntry( &p->vEdgeLinks, pLink[0] + 1 );
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ if ( Class == -1 )
+ Class = Vec_IntEntry( &p->vFfClasses, iFlop );
+ else if ( Class != Vec_IntEntry( &p->vFfClasses, iFlop ) )
+ return 0;
+ }
+ return 1;
+}
+int Wln_RetCheckBackward( Wln_Ret_t * p, Vec_Int_t * vSet )
+{
+ int i, iObj;
+ Vec_IntForEachEntry( vSet, iObj, i )
+ if ( !Wln_RetCheckBackwardOne( p, iObj ) )
+ return 0;
+ return 1;
+}
+
+
+/**Function*************************************************************
+
+ Synopsis [Moving flops.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Wln_RetRemoveOneFanin( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, iFlop, iFlop1 = -1;
+ int * pFanins = Wln_RetFanins( p, iObj );
+ Wln_RetForEachFanin( p, iObj, iFanin, pLink, k )
+ {
+ assert( pLink[0] );
+ pFanins[2*k+1] = Vec_IntEntry( &p->vEdgeLinks, pLink[0] );
+ iFlop = Vec_IntEntry( &p->vEdgeLinks, pLink[0] + 1 );
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ if ( iFlop1 == -1 )
+ iFlop1 = iFlop;
+ }
+ return iFlop1;
+}
+int Wln_RetRemoveOneFanout( Wln_Ret_t * p, int iObj )
+{
+ int k, iFanin, * pLink, iFlop, iFlop1 = -1;
+ //int * pFanins = Wln_RetFanins( p, iObj );
+ Wln_RetForEachFanout( p, iObj, iFanin, pLink, k )
+ {
+ assert( pLink[0] );
+ pLink = Wln_RetHeadToTail( p, pLink );
+ iFlop = Vec_IntEntry( &p->vEdgeLinks, pLink[0] + 1 );
+ pLink[0] = 0;
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ if ( iFlop1 == -1 )
+ iFlop1 = iFlop;
+ }
+ return iFlop1;
+}
+void Wln_RetInsertOneFanin( Wln_Ret_t * p, int iObj, int iFlop )
+{
+ int k, iFanin, * pLink;
+ int * pFanins = Wln_RetFanins( p, iObj );
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ Wln_RetForEachFanin( p, iObj, iFanin, pLink, k )
+ {
+ int iHead = pFanins[2*k+1];
+ pFanins[2*k+1] = Vec_IntSize(&p->vEdgeLinks);
+ Vec_IntPushTwo( &p->vEdgeLinks, iHead, iFlop );
+ }
+}
+void Wln_RetInsertOneFanout( Wln_Ret_t * p, int iObj, int iFlop )
+{
+ int k, iFanin, * pLink;
+ assert( Wln_ObjIsFf( p->pNtk, iFlop ) );
+ Wln_RetForEachFanout( p, iObj, iFanin, pLink, k )
+ {
+ if ( pLink[0] )
+ pLink = Wln_RetHeadToTail( p, pLink );
+ pLink = Vec_IntEntryP( &p->vEdgeLinks, pLink[0] );
+ assert( pLink[0] == 0 );
+ pLink[0] = Vec_IntSize(&p->vEdgeLinks);
+ Vec_IntPushTwo( &p->vEdgeLinks, 0, iFlop );
+ }
+}
+void Wln_RetRetimeForward( Wln_Ret_t * p, Vec_Int_t * vSet )
+{
+ int i, iObj, iFlop;
+ Vec_IntForEachEntry( vSet, iObj, i )
+ {
+ iFlop = Wln_RetRemoveOneFanin( p, iObj );
+ Wln_RetInsertOneFanout( p, iObj, iFlop );
+ }
+}
+void Wln_RetRetimeBackward( Wln_Ret_t * p, Vec_Int_t * vSet )
+{
+ int i, iObj, iFlop;
+ Vec_IntForEachEntry( vSet, iObj, i )
+ {
+ iFlop = Wln_RetRemoveOneFanout( p, iObj );
+ Wln_RetInsertOneFanin( p, iObj, iFlop );
+ }
+}
+void Wln_RetAddToMoves( Wln_Ret_t * p, Vec_Int_t * vSet, int Delay, int fForward )
+{
+ int i, iObj;
+ if ( vSet == NULL )
+ {
+ Vec_IntPushTwo( &p->vMoves, 0, Delay );
+ return;
+ }
+ Vec_IntForEachEntry( vSet, iObj, i )
+ {
+ int NameId = Vec_IntEntry( &p->pNtk->vNameIds, iObj );
+ Vec_IntPushTwo( &p->vMoves, fForward ? NameId : -NameId, Delay );
+ }
+}
+
+/**Function*************************************************************
+
+ Synopsis [Retiming computation.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk )
+{
+ Wln_Ret_t * p = Wln_RetAlloc( pNtk );
+ Vec_Int_t * vSources = &p->vSources;
+ Vec_Int_t * vSinks = &p->vSinks;
+ Vec_Int_t * vFront = &p->vFront;
+ Vec_Int_t * vMoves = Vec_IntAlloc(0);
+ p->DelayMax = Wln_RetPropDelay( p, NULL );
+ Wln_RetFindSources( p );
+ Wln_RetAddToMoves( p, NULL, p->DelayMax, 0 );
+ while ( Vec_IntSize(vSources) || Vec_IntSize(vSinks) )
+ {
+ int fForward = Vec_IntSize(vSources) && Wln_RetCheckForward( p, vSources );
+ int fBackward = Vec_IntSize(vSinks) && Wln_RetCheckBackward( p, vSinks );
+ if ( !fForward && !fBackward )
+ {
+ printf( "Cannot retime forward and backward.\n" );
+ break;
+ }
+ Vec_IntSort( vSources, 0 );
+ Vec_IntSort( vSinks, 0 );
+ if ( Vec_IntTwoCountCommon(vSources, vSinks) )
+ {
+ printf( "Cannot reduce delay by retiming.\n" );
+ break;
+ }
+ Vec_IntClear( vFront );
+ if ( (fForward && !fBackward) || (fForward && fBackward && Vec_IntSize(vSources) < Vec_IntSize(vSinks)) )
+ Wln_RetRetimeForward( p, vSources ), Vec_IntAppend( vFront, vSources ), fForward = 1, fBackward = 0;
+ else
+ Wln_RetRetimeBackward( p, vSinks ), Vec_IntAppend( vFront, vSources ), fForward = 0, fBackward = 1;
+ p->DelayMax = Wln_RetPropDelay( p, vFront );
+ Wln_RetAddToMoves( p, vFront, p->DelayMax, fForward );
+ Wln_RetFindSources( p );
+ if ( 2*Vec_IntSize(&p->vEdgeLinks) > Vec_IntCap(&p->vEdgeLinks) )
+ Vec_IntGrow( &p->vEdgeLinks, 4*Vec_IntSize(&p->vEdgeLinks) );
+ }
+ ABC_SWAP( Vec_Int_t, *vMoves, p->vMoves );
+ Wln_RetFree( p );
+ return vMoves;
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/base/wln/wlnWriteVer.c b/src/base/wln/wlnWriteVer.c
new file mode 100644
index 0000000..1c37e31
--- /dev/null
+++ b/src/base/wln/wlnWriteVer.c
@@ -0,0 +1,494 @@
+/**CFile****************************************************************
+
+ FileName [wlnWriteVer.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Word-level network.]
+
+ Synopsis [Writing Verilog.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - September 23, 2018.]
+
+ Revision [$Id: wlnWriteVer.c,v 1.00 2018/09/23 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "wln.h"
+
+ABC_NAMESPACE_IMPL_START
+
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_WriteTableOne( FILE * pFile, int nFans, int nOuts, word * pTable, int Id )
+{
+ int m, nMints = (1<<nFans);
+// Abc_TtPrintHexArrayRev( stdout, pTable, nMints ); printf( "\n" );
+ assert( nOuts > 0 && nOuts <= 64 && (64 % nOuts) == 0 );
+ fprintf( pFile, "module table%d(ind, val);\n", Id );
+ fprintf( pFile, " input [%d:0] ind;\n", nFans-1 );
+ fprintf( pFile, " output [%d:0] val;\n", nOuts-1 );
+ fprintf( pFile, " reg [%d:0] val;\n", nOuts-1 );
+ fprintf( pFile, " always @(ind)\n" );
+ fprintf( pFile, " begin\n" );
+ fprintf( pFile, " case (ind)\n" );
+ for ( m = 0; m < nMints; m++ )
+ fprintf( pFile, " %d\'h%x: val = %d\'h%x;\n", nFans, m, nOuts, (unsigned)((pTable[(nOuts * m) >> 6] >> ((nOuts * m) & 63)) & Abc_Tt6Mask(nOuts)) );
+ fprintf( pFile, " endcase\n" );
+ fprintf( pFile, " end\n" );
+ fprintf( pFile, "endmodule\n" );
+ fprintf( pFile, "\n" );
+}
+void Wln_WriteTables( FILE * pFile, Wln_Ntk_t * p )
+{
+ Vec_Int_t * vNodes;
+ word * pTable;
+ int i, iObj;
+ if ( p->vTables == NULL || Vec_PtrSize(p->vTables) == 0 )
+ return;
+ // map tables into their nodes
+ vNodes = Vec_IntStart( Vec_PtrSize(p->vTables) );
+ Wln_NtkForEachObj( p, iObj )
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_TABLE )
+ Vec_IntWriteEntry( vNodes, Wln_ObjFanin1(p, iObj), iObj );
+ // write tables
+ Vec_PtrForEachEntry( word *, p->vTables, pTable, i )
+ {
+ int iNode = Vec_IntEntry( vNodes, i );
+ int iFanin = Wln_ObjFanin0( p, iNode );
+ Wln_WriteTableOne( pFile, Wln_ObjRange(p, iFanin), Wln_ObjRange(p, iNode), pTable, i );
+ }
+ Vec_IntFree( vNodes );
+}
+
+/**Function*************************************************************
+
+ Synopsis [This was used to add POs to each node except PIs and MUXes.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_WriteAddPos( Wln_Ntk_t * p )
+{
+ int iObj;
+ Wln_NtkForEachObj( p, iObj )
+ if ( !Wln_ObjIsCio(p, iObj) )
+ Wln_ObjCreateCo( p, iObj );
+}
+
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Wln_WriteVerIntVec( FILE * pFile, Wln_Ntk_t * p, Vec_Int_t * vVec, int Start )
+{
+ char * pName;
+ int LineLength = Start;
+ int NameCounter = 0;
+ int AddedLength, i, iObj;
+ Vec_IntForEachEntry( vVec, iObj, i )
+ {
+ pName = Wln_ObjName( p, iObj );
+ // get the line length after this name is written
+ AddedLength = strlen(pName) + 2;
+ if ( NameCounter && LineLength + AddedLength + 3 > 70 )
+ { // write the line extender
+ fprintf( pFile, "\n " );
+ // reset the line length
+ LineLength = Start;
+ NameCounter = 0;
+ }
+ fprintf( pFile, " %s%s", pName, (i==Vec_IntSize(vVec)-1)? "" : "," );
+ LineLength += AddedLength;
+ NameCounter++;
+ }
+}
+void Wln_WriteVerInt( FILE * pFile, Wln_Ntk_t * p )
+{
+ int k, j, iObj, iFanin;
+ char Range[100];
+ fprintf( pFile, "module %s ( ", p->pName );
+ fprintf( pFile, "\n " );
+ if ( Wln_NtkCiNum(p) > 0 )
+ {
+ Wln_WriteVerIntVec( pFile, p, &p->vCis, 3 );
+ fprintf( pFile, ",\n " );
+ }
+ if ( Wln_NtkCoNum(p) > 0 )
+ Wln_WriteVerIntVec( pFile, p, &p->vCos, 3 );
+ fprintf( pFile, " );\n" );
+ Wln_NtkForEachObj( p, iObj )
+ {
+ int End = Wln_ObjRangeEnd(p, iObj);
+ int Beg = Wln_ObjRangeBeg(p, iObj);
+ int nDigits = Abc_Base10Log(Abc_AbsInt(End)+1) + Abc_Base10Log(Abc_AbsInt(Beg)+1) + (int)(End < 0) + (int)(Beg < 0);
+ sprintf( Range, "%s[%d:%d]%*s", (!p->fSmtLib && Wln_ObjIsSigned(p, iObj)) ? "signed ":" ", End, Beg, 8-nDigits, "" );
+ fprintf( pFile, " " );
+ if ( Wln_ObjIsCi(p, iObj) )
+ fprintf( pFile, "input " );
+ else if ( Wln_ObjIsCo(p, iObj) )
+ fprintf( pFile, "output " );
+ else
+ fprintf( pFile, " " );
+ if ( Wln_ObjIsCio(p, iObj) )
+ {
+ fprintf( pFile, "wire %s %s ;\n", Range, Wln_ObjName(p, iObj) );
+ if ( Wln_ObjIsCi(p, iObj) )
+ continue;
+ fprintf( pFile, " assign " );
+ fprintf( pFile, "%-16s = %s ;\n", Wln_ObjName(p, iObj), Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ continue;
+ }
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_SEL_NMUX || Wln_ObjType(p, iObj) == ABC_OPER_SEL_SEL )
+ fprintf( pFile, "reg %s ", Range );
+ else
+ fprintf( pFile, "wire %s ", Range );
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_TABLE )
+ {
+ // wire [3:0] s4972; table0 s4972_Index(s4971, s4972);
+ fprintf( pFile, "%s ; table%d", Wln_ObjName(p, iObj), Wln_ObjFanin1(p, iObj) );
+ fprintf( pFile, " s%d_Index(%s, ", iObj, Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ fprintf( pFile, "%s)", Wln_ObjName(p, iObj) );
+ }
+ else if ( Wln_ObjIsConst(p, iObj) )
+ fprintf( pFile, "%-16s = %s", Wln_ObjName(p, iObj), Wln_ObjConstString(p, iObj) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_ROTR || Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_ROTL )
+ {
+ // wire [27:0] s4960 = (s57 >> 17) | (s57 << 11);
+ int Num0 = Wln_ObjFanin1(p, iObj);
+ int Num1 = Wln_ObjRange(p, iObj) - Num0;
+ assert( Num0 > 0 && Num0 < Wln_ObjRange(p, iObj) );
+ fprintf( pFile, "%-16s = ", Wln_ObjName(p, iObj) );
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_ROTR )
+ fprintf( pFile, "(%s >> %d) | (%s << %d)", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Num0, Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Num1 );
+ else
+ fprintf( pFile, "(%s << %d) | (%s >> %d)", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Num0, Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Num1 );
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SEL_NMUX )
+ {
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "always @( " );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fprintf( pFile, "%s%s", k ? " or ":"", Wln_ObjName(p, Wln_ObjFanin(p, iObj, k)) );
+ fprintf( pFile, " )\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "begin\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "case ( %s )\n", Wln_ObjName(p, Wln_ObjFanin(p, iObj, 0)) );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ {
+ if ( !k ) continue;
+ fprintf( pFile, " " );
+ fprintf( pFile, "%d : %s = ", k-1, Wln_ObjName(p, iObj) );
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, Wln_ObjFanin(p, iObj, k)) );
+ }
+ fprintf( pFile, " " );
+ fprintf( pFile, "endcase\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "end\n" );
+ continue;
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SEL_SEL )
+ {
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "always @( " );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fprintf( pFile, "%s%s", k ? " or ":"", Wln_ObjName(p, Wln_ObjFanin(p, iObj, k)) );
+ fprintf( pFile, " )\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "begin\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "case ( %s )\n", Wln_ObjName(p, Wln_ObjFanin(p, iObj, 0)) );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ {
+ if ( !k ) continue;
+ fprintf( pFile, " " );
+ fprintf( pFile, "%d\'b", Wln_ObjFaninNum(p, iObj)-1 );
+ for ( j = Wln_ObjFaninNum(p, iObj)-1; j > 0; j-- )
+ fprintf( pFile, "%d", (int)(j==k) );
+ fprintf( pFile, " : %s = ", Wln_ObjName(p, iObj) );
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, Wln_ObjFanin(p, iObj, k)) );
+ }
+ fprintf( pFile, " " );
+ fprintf( pFile, "default" );
+ fprintf( pFile, " : %s = ", Wln_ObjName(p, iObj) );
+ fprintf( pFile, "%d\'b", Wln_ObjRange(p, iObj) );
+ for ( j = Wln_ObjRange(p, iObj)-1; j >= 0; j-- )
+ fprintf( pFile, "%d", 0 );
+ fprintf( pFile, " ;\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "endcase\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "end\n" );
+ continue;
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SEL_DEC )
+ {
+ int nRange = Wln_ObjRange(p, Wln_ObjFanin0(p, iObj));
+ assert( (1 << nRange) == Wln_ObjRange(p, iObj) );
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ for ( k = 0; k < Wln_ObjRange(p, iObj); k++ )
+ {
+ fprintf( pFile, " " );
+ fprintf( pFile, "wire " );
+ fprintf( pFile, "%s_", Wln_ObjName(p, iObj) );
+ for ( j = 0; j < nRange; j++ )
+ fprintf( pFile, "%d", (k >> (nRange-1-j)) & 1 );
+ fprintf( pFile, " = " );
+ for ( j = 0; j < nRange; j++ )
+ fprintf( pFile, "%s%s%s[%d]",
+ j ? " & ":"", ((k >> (nRange-1-j)) & 1) ? " ":"~",
+ Wln_ObjName(p, Wln_ObjFanin(p, iObj, 0)), nRange-1-j );
+ fprintf( pFile, " ;\n" );
+ }
+ fprintf( pFile, " " );
+ fprintf( pFile, "assign %s = { ", Wln_ObjName(p, iObj) );
+ for ( k = Wln_ObjRange(p, iObj)-1; k >= 0; k-- )
+ {
+ fprintf( pFile, "%s%s_", k < Wln_ObjRange(p, iObj)-1 ? ", ":"", Wln_ObjName(p, iObj) );
+ for ( j = 0; j < nRange; j++ )
+ fprintf( pFile, "%d", (k >> (nRange-1-j)) & 1 );
+ }
+ fprintf( pFile, " } ;\n" );
+ continue;
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_ADDSUB )
+ {
+ // out = mode ? a+b+cin : a-b-cin
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "assign " );
+ fprintf( pFile, "%s = %s ? %s + %s + %s : %s - %s - %s ;\n",
+ Wln_ObjName(p, iObj), Wln_ObjName(p, Wln_ObjFanin0(p, iObj)),
+ Wln_ObjName(p, Wln_ObjFanin2(p, iObj)), Wln_ObjName(p, Wln_ObjFanin(p, iObj,3)), Wln_ObjName(p, Wln_ObjFanin1(p, iObj)),
+ Wln_ObjName(p, Wln_ObjFanin2(p, iObj)), Wln_ObjName(p, Wln_ObjFanin(p, iObj,3)), Wln_ObjName(p, Wln_ObjFanin1(p, iObj))
+ );
+ continue;
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RAMR || Wln_ObjType(p, iObj) == ABC_OPER_RAMW )
+ {
+ if ( 1 )
+ {
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "%s (", Wln_ObjType(p, iObj) == ABC_OPER_RAMR ? "ABC_READ" : "ABC_WRITE" );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fprintf( pFile, " .%s(%s),", k==0 ? "mem_in" : (k==1 ? "addr": "data"), Wln_ObjName(p, iFanin) );
+ fprintf( pFile, " .%s(%s) ) ;\n", Wln_ObjType(p, iObj) == ABC_OPER_RAMR ? "data" : "mem_out", Wln_ObjName(p, iObj) );
+ continue;
+ }
+ else
+ {
+ int nBitsMem = Wln_ObjRange(p, Wln_ObjFanin(p, iObj, 0) );
+ //int nBitsAddr = Wln_ObjRange(p, Wln_ObjFanin(p, iObj, 1) );
+ int nBitsDat = Wln_ObjType(p, iObj) == ABC_OPER_RAMR ? Wln_ObjRange(p, iObj) : Wln_ObjRange(p, Wln_ObjFanin(p, iObj, 2));
+ int Depth = nBitsMem / nBitsDat;
+ assert( nBitsMem % nBitsDat == 0 );
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "%s_%d (", Wln_ObjType(p, iObj) == ABC_OPER_RAMR ? "CPL_MEM_READ" : "CPL_MEM_WRITE", Depth );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fprintf( pFile, " .%s(%s),", k==0 ? "mem_data_in" : (k==1 ? "addr_in": "data_in"), Wln_ObjName(p, iFanin) );
+ fprintf( pFile, " .%s(%s) ) ;\n", "data_out", Wln_ObjName(p, iObj) );
+ continue;
+ }
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_DFFRSE )
+ {
+ fprintf( pFile, "%s ;\n", Wln_ObjName(p, iObj) );
+ continue;
+ }
+ else
+ {
+ fprintf( pFile, "%-16s = ", Wln_ObjName(p, iObj) );
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_BUF )
+ fprintf( pFile, "%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_MUX )
+ {
+ fprintf( pFile, "%s ? ", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ fprintf( pFile, "%s : ", Wln_ObjName(p, Wln_ObjFanin1(p, iObj)) );
+ fprintf( pFile, "%s", Wln_ObjName(p, Wln_ObjFanin2(p, iObj)) );
+ }
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_MIN )
+ fprintf( pFile, "-%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_INV )
+ fprintf( pFile, "~%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_LOGIC_NOT )
+ fprintf( pFile, "!%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_AND )
+ fprintf( pFile, "&%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_OR )
+ fprintf( pFile, "|%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_XOR )
+ fprintf( pFile, "^%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_NAND )
+ fprintf( pFile, "~&%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_NOR )
+ fprintf( pFile, "~|%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_RED_NXOR )
+ fprintf( pFile, "~^%s", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SLICE )
+ fprintf( pFile, "%s [%d:%d]", Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Wln_ObjRangeEnd(p, iObj), Wln_ObjRangeBeg(p, iObj) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SIGNEXT )
+ fprintf( pFile, "{ {%d{%s[%d]}}, %s }", Wln_ObjRange(p, iObj) - Wln_ObjRange(p, Wln_ObjFanin0(p, iObj)), Wln_ObjName(p, Wln_ObjFanin0(p, iObj)), Wln_ObjRange(p, Wln_ObjFanin0(p, iObj)) - 1, Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ZEROPAD )
+ fprintf( pFile, "{ {%d{1\'b0}}, %s }", Wln_ObjRange(p, iObj) - Wln_ObjRange(p, Wln_ObjFanin0(p, iObj)), Wln_ObjName(p, Wln_ObjFanin0(p, iObj)) );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_CONCAT )
+ {
+ fprintf( pFile, "{" );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fprintf( pFile, " %s%s", Wln_ObjName(p, Wln_ObjFanin(p, iObj, k)), k == Wln_ObjFaninNum(p, iObj)-1 ? "":"," );
+ fprintf( pFile, " }" );
+ }
+ else
+ {
+ fprintf( pFile, "%s ", Wln_ObjName(p, Wln_ObjFanin(p, iObj, 0)) );
+ if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_R )
+ fprintf( pFile, ">>" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_RA )
+ fprintf( pFile, ">>>" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_L )
+ fprintf( pFile, "<<" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_SHIFT_LA )
+ fprintf( pFile, "<<<" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_AND )
+ fprintf( pFile, "&" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_OR )
+ fprintf( pFile, "|" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_XOR )
+ fprintf( pFile, "^" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_NAND )
+ fprintf( pFile, "~&" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_NOR )
+ fprintf( pFile, "~|" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_BIT_NXOR )
+ fprintf( pFile, "~^" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_LOGIC_IMPL )
+ fprintf( pFile, "=>" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_LOGIC_AND )
+ fprintf( pFile, "&&" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_LOGIC_OR )
+ fprintf( pFile, "||" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_LOGIC_XOR )
+ fprintf( pFile, "^^" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_EQU )
+ fprintf( pFile, "==" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_NOTEQU )
+ fprintf( pFile, "!=" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_LESS )
+ fprintf( pFile, "<" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_MORE )
+ fprintf( pFile, ">" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_LESSEQU )
+ fprintf( pFile, "<=" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_COMP_MOREEQU )
+ fprintf( pFile, ">=" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_ADD )
+ fprintf( pFile, "+" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_SUB )
+ fprintf( pFile, "-" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_MUL )
+ fprintf( pFile, "*" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_DIV )
+ fprintf( pFile, "/" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_REM )
+ fprintf( pFile, "%%" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_MOD )
+ fprintf( pFile, "%%" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_POW )
+ fprintf( pFile, "**" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_SQRT )
+ fprintf( pFile, "@" );
+ else if ( Wln_ObjType(p, iObj) == ABC_OPER_ARI_SQUARE )
+ fprintf( pFile, "#" );
+ else
+ {
+ //assert( 0 );
+ printf( "Failed to write node \"%s\" with unknown operator type (%d).\n", Wln_ObjName(p, iObj), Wln_ObjType(p, iObj) );
+ fprintf( pFile, "???\n" );
+ continue;
+ }
+ fprintf( pFile, " %s", Wln_ObjName(p, Wln_ObjFanin(p, iObj, 1)) );
+ if ( Wln_ObjFaninNum(p, iObj) == 3 && Wln_ObjType(p, iObj) == ABC_OPER_ARI_ADD )
+ fprintf( pFile, " + %s", Wln_ObjName(p, Wln_ObjFanin(p, iObj, 2)) );
+ }
+ }
+ fprintf( pFile, " ;%s\n", (p->fSmtLib && Wln_ObjIsSigned(p, iObj)) ? " // signed SMT-LIB operator" : "" );
+ }
+ iFanin = 0;
+ // write DFFs in the end
+ fprintf( pFile, "\n" );
+ Wln_NtkForEachFf( p, iObj, j )
+ {
+ char * pInNames[8] = {"d", "clk", "reset", "set", "enable", "async", "sre", "init"};
+ fprintf( pFile, " " );
+ fprintf( pFile, "%s (", "ABC_DFFRSE" );
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ if ( iFanin ) fprintf( pFile, " .%s(%s),", pInNames[k], Wln_ObjName(p, iFanin) );
+ fprintf( pFile, " .%s(%s) ) ;\n", "q", Wln_ObjName(p, iObj) );
+ }
+ fprintf( pFile, "\n" );
+ fprintf( pFile, "endmodule\n\n" );
+}
+void Wln_WriteVer( Wln_Ntk_t * p, char * pFileName )
+{
+ FILE * pFile;
+ pFile = fopen( pFileName, "w" );
+ if ( pFile == NULL )
+ {
+ fprintf( stdout, "Wln_WriteVer(): Cannot open the output file \"%s\".\n", pFileName );
+ return;
+ }
+ fprintf( pFile, "// Benchmark \"%s\" written by ABC on %s\n", p->pName, Extra_TimeStamp() );
+ fprintf( pFile, "\n" );
+ Wln_WriteTables( pFile, p );
+// if ( fAddCos )
+// Wln_WriteAddPos( p );
+ Wln_WriteVerInt( pFile, p );
+ fprintf( pFile, "\n" );
+ fclose( pFile );
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/bdd/cudd/cuddReorder.c b/src/bdd/cudd/cuddReorder.c
index ded4385..a68cef2 100644
--- a/src/bdd/cudd/cuddReorder.c
+++ b/src/bdd/cudd/cuddReorder.c
@@ -480,7 +480,7 @@ cuddDynamicAllocNode(
node = table->nextFree;
table->nextFree = node->next;
- node->Id = 0;
+ //node->Id = 0;
return (node);
} /* end of cuddDynamicAllocNode */
diff --git a/src/bdd/extrab/extraBdd.h b/src/bdd/extrab/extraBdd.h
index e7a65a9..d5dfc85 100644
--- a/src/bdd/extrab/extraBdd.h
+++ b/src/bdd/extrab/extraBdd.h
@@ -206,6 +206,44 @@ extern DdNode * extraBddTuples( DdManager * dd, DdNode * bVarsK, DdNode * b
#define ABC_PRB(dd,f) printf("%s = ", #f); Extra_bddPrint(dd,f); printf("\n")
#endif
+/*=== extraMaxMin.c ==============================================================*/
+
+/* maximal/minimimal */
+extern DdNode * Extra_zddMaximal (DdManager *dd, DdNode *S);
+extern DdNode * extraZddMaximal (DdManager *dd, DdNode *S);
+extern DdNode * Extra_zddMinimal (DdManager *dd, DdNode *S);
+extern DdNode * extraZddMinimal (DdManager *dd, DdNode *S);
+/* maximal/minimal of the union of two sets of subsets */
+extern DdNode * Extra_zddMaxUnion (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * extraZddMaxUnion (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * Extra_zddMinUnion (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * extraZddMinUnion (DdManager *dd, DdNode *S, DdNode *T);
+/* dot/cross products */
+extern DdNode * Extra_zddDotProduct (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * extraZddDotProduct (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * Extra_zddCrossProduct (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * extraZddCrossProduct (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * Extra_zddMaxDotProduct (DdManager *dd, DdNode *S, DdNode *T);
+extern DdNode * extraZddMaxDotProduct (DdManager *dd, DdNode *S, DdNode *T);
+
+/*=== extraBddSet.c ==============================================================*/
+
+/* subset/supset operations */
+extern DdNode * Extra_zddSubSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * extraZddSubSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * Extra_zddSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * extraZddSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * Extra_zddNotSubSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * extraZddNotSubSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * Extra_zddNotSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * extraZddNotSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * Extra_zddMaxNotSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+extern DdNode * extraZddMaxNotSupSet (DdManager *dd, DdNode *X, DdNode *Y);
+/* check whether the empty combination belongs to the set of subsets */
+extern int Extra_zddEmptyBelongs (DdManager *dd, DdNode* zS);
+/* check whether the set consists of one subset only */
+extern int Extra_zddIsOneSubset (DdManager *dd, DdNode* zS);
+
/*=== extraBddKmap.c ================================================================*/
/* displays the Karnaugh Map of a function */
diff --git a/src/bdd/extrab/extraBddMaxMin.c b/src/bdd/extrab/extraBddMaxMin.c
new file mode 100644
index 0000000..22d2b00
--- /dev/null
+++ b/src/bdd/extrab/extraBddMaxMin.c
@@ -0,0 +1,1067 @@
+/**CFile***********************************************************************
+
+ FileName [zMaxMin.c]
+
+ PackageName [extra]
+
+ Synopsis [Experimental version of some ZDD operators.]
+
+ Description [External procedures included in this module:
+ <ul>
+ <li> Extra_zddMaximal();
+ <li> Extra_zddMinimal();
+ <li> Extra_zddMaxUnion();
+ <li> Extra_zddMinUnion();
+ <li> Extra_zddDotProduct();
+ <li> Extra_zddCrossProduct();
+ <li> Extra_zddMaxDotProduct();
+ </ul>
+ Internal procedures included in this module:
+ <ul>
+ <li> extraZddMaximal();
+ <li> extraZddMinimal();
+ <li> extraZddMaxUnion();
+ <li> extraZddMinUnion();
+ <li> extraZddDotProduct();
+ <li> extraZddCrossProduct();
+ <li> extraZddMaxDotProduct();
+ </ul>
+ StaTc procedures included in this module:
+ <ul>
+ </ul>
+
+ DotProduct and MaxDotProduct were introduced
+ by O.Coudert to solve problems arising in two-level planar routing
+ See O. Coudert, C.-J. R. Shi. Exact Multi-Layer Topological Planar
+ Routing. Proc. of IEEE Custom Integrated Circuit Conference '96,
+ pp. 179-182.
+ ]
+
+ SeeAlso []
+
+ Author [Alan Mishchenko]
+
+ Copyright []
+
+ ReviSon [$zMaxMin.c, v.1.2, November 26, 2000, alanmi $]
+
+******************************************************************************/
+
+#include "extraBdd.h"
+
+ABC_NAMESPACE_IMPL_START
+
+/*---------------------------------------------------------------------------*/
+/* Constant declarations */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* Stucture declarations */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* Type declarations */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* Variable declarations */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* Macro declarations */
+/*---------------------------------------------------------------------------*/
+
+
+/**AutomaTcStart*************************************************************/
+
+/*---------------------------------------------------------------------------*/
+/* StaTc Function prototypes */
+/*---------------------------------------------------------------------------*/
+
+/**AutomaTcEnd***************************************************************/
+
+
+/*---------------------------------------------------------------------------*/
+/* Definition of exported Functions */
+/*---------------------------------------------------------------------------*/
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the maximal of a set represented by its ZDD.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddMinimal]
+
+******************************************************************************/
+DdNode *
+Extra_zddMaximal(
+ DdManager * dd,
+ DdNode * S)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddMaximal(dd, S);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddMaximal */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the minimal of a set represented by its ZDD.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddMaximal]
+
+******************************************************************************/
+DdNode *
+Extra_zddMinimal(
+ DdManager * dd,
+ DdNode * S)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddMinimal(dd, S);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddMinimal */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the maximal of the union of two sets represented by ZDDs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddMaximal Extra_zddMimimal Extra_zddMinUnion]
+
+******************************************************************************/
+DdNode *
+Extra_zddMaxUnion(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddMaxUnion(dd, S, T);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddMaxUnion */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the minimal of the union of two sets represented by ZDDs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddMaximal Extra_zddMimimal Extra_zddMaxUnion]
+
+******************************************************************************/
+DdNode *
+Extra_zddMinUnion(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddMinUnion(dd, S, T);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddMinUnion */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the dot product of two sets of subsets represented by ZDDs.]
+
+ Description [The dot product is defined as a set of pair-wise unions of subsets
+ belonging to the arguments.]
+
+ SideEffects []
+
+ SeeAlso [Extra_zddCrossProduct]
+
+******************************************************************************/
+DdNode *
+Extra_zddDotProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddDotProduct(dd, S, T);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddDotProduct */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the cross product of two sets of subsets represented by ZDDs.]
+
+ Description [The cross product is defined as a set of pair-wise intersections of subsets
+ belonging to the arguments.]
+
+ SideEffects []
+
+ SeeAlso [Extra_zddDotProduct]
+
+******************************************************************************/
+DdNode *
+Extra_zddCrossProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddCrossProduct(dd, S, T);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddCrossProduct */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the maximal of the DotProduct of the union of two sets represented by ZDDs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddDotProduct Extra_zddMaximal Extra_zddMinCrossProduct]
+
+******************************************************************************/
+DdNode *
+Extra_zddMaxDotProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *res;
+ do {
+ dd->reordered = 0;
+ res = extraZddMaxDotProduct(dd, S, T);
+ } while (dd->reordered == 1);
+ return(res);
+
+} /* end of Extra_zddMaxDotProduct */
+
+
+/*---------------------------------------------------------------------------*/
+/* Definition of internal Functions */
+/*---------------------------------------------------------------------------*/
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMaximal.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddMaximal(
+ DdManager * dd,
+ DdNode * zSet)
+{
+ DdNode *zRes;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( zSet == z0 || zSet == z1 )
+ return zSet;
+
+ /* check cache */
+ zRes = cuddCacheLookup1Zdd(dd, extraZddMaximal, zSet);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1;
+
+ /* compute maximal for subsets without the top-most element */
+ zSet0 = extraZddMaximal(dd, cuddE(zSet));
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* compute maximal for subsets with the top-most element */
+ zSet1 = extraZddMaximal(dd, cuddT(zSet));
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* remove subsets without this element covered by subsets with this element */
+ zRes0 = extraZddNotSubSet(dd, zSet0, zSet1);
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+
+ /* subset with this element remains unchanged */
+ zRes1 = zSet1;
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, zSet->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert1(dd, extraZddMaximal, zSet, zRes);
+ return zRes;
+ }
+} /* end of extraZddMaximal */
+
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMinimal.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddMinimal(
+ DdManager * dd,
+ DdNode * zSet)
+{
+ DdNode *zRes;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( zSet == z0 )
+ return zSet;
+ /* the empty combinaTon, if present, is the only minimal combinaTon */
+ if ( Extra_zddEmptyBelongs(dd, zSet) )
+ return z1;
+
+ /* check cache */
+ zRes = cuddCacheLookup1Zdd(dd, extraZddMinimal, zSet);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1;
+
+ /* compute minimal for subsets without the top-most element */
+ zSet0 = extraZddMinimal(dd, cuddE(zSet));
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* compute minimal for subsets with the top-most element */
+ zSet1 = extraZddMinimal(dd, cuddT(zSet));
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* subset without this element remains unchanged */
+ zRes0 = zSet0;
+
+ /* remove subsets with this element that contain subsets without this element */
+ zRes1 = extraZddNotSupSet(dd, zSet1, zSet0);
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, zSet->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert1(dd, extraZddMinimal, zSet, zRes);
+ return zRes;
+ }
+} /* end of extraZddMinimal */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMaxUnion.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddMaxUnion(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *zRes;
+ int TopS, TopT;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( S == z0 )
+ return T;
+ if ( T == z0 )
+ return S;
+ if ( S == T )
+ return S;
+ if ( S == z1 )
+ return T;
+ if ( T == z1 )
+ return S;
+
+ /* the operation is commutative - normalize the problem */
+ TopS = dd->permZ[S->index];
+ TopT = dd->permZ[T->index];
+
+ if ( TopS > TopT || (TopS == TopT && S > T) )
+ return extraZddMaxUnion(dd, T, S);
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddMaxUnion, S, T);
+ if (zRes)
+ return zRes;
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1;
+
+ if ( TopS == TopT )
+ {
+ /* compute maximal for subsets without the top-most element */
+ zSet0 = extraZddMaxUnion(dd, cuddE(S), cuddE(T) );
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* compute maximal for subsets with the top-most element */
+ zSet1 = extraZddMaxUnion(dd, cuddT(S), cuddT(T) );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+ }
+ else /* if ( TopS < TopT ) */
+ {
+ /* compute maximal for subsets without the top-most element */
+ zSet0 = extraZddMaxUnion(dd, cuddE(S), T );
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* subset with this element is just the cofactor of S */
+ zSet1 = cuddT(S);
+ cuddRef( zSet1 );
+ }
+
+ /* remove subsets without this element covered by subsets with this element */
+ zRes0 = extraZddNotSubSet(dd, zSet0, zSet1);
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+
+ /* subset with this element remains unchanged */
+ zRes1 = zSet1;
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, S->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddMaxUnion, S, T, zRes);
+ return zRes;
+ }
+} /* end of extraZddMaxUnion */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMinUnion.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddMinUnion(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *zRes;
+ int TopS, TopT;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( S == z0 )
+ return T;
+ if ( T == z0 )
+ return S;
+ if ( S == T )
+ return S;
+ /* the empty combination, if present, is the only minimal combination */
+ if ( Extra_zddEmptyBelongs(dd, S) || Extra_zddEmptyBelongs(dd, T) )
+ return z1;
+
+ /* the operation is commutative - normalize the problem */
+ TopS = dd->permZ[S->index];
+ TopT = dd->permZ[T->index];
+
+ if ( TopS > TopT || (TopS == TopT && S > T) )
+ return extraZddMinUnion(dd, T, S);
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddMinUnion, S, T);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1;
+ if ( TopS == TopT )
+ {
+ /* compute maximal for subsets without the top-most element */
+ zSet0 = extraZddMinUnion(dd, cuddE(S), cuddE(T) );
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* compute maximal for subsets with the top-most element */
+ zSet1 = extraZddMinUnion(dd, cuddT(S), cuddT(T) );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+ }
+ else /* if ( TopS < TopT ) */
+ {
+ /* compute maximal for subsets without the top-most element */
+ zSet0 = extraZddMinUnion(dd, cuddE(S), T );
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* subset with this element is just the cofactor of S */
+ zSet1 = cuddT(S);
+ cuddRef( zSet1 );
+ }
+
+ /* subset without this element remains unchanged */
+ zRes0 = zSet0;
+
+ /* remove subsets with this element that contain subsets without this element */
+ zRes1 = extraZddNotSupSet(dd, zSet1, zSet0);
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, S->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddMinUnion, S, T, zRes);
+ return zRes;
+ }
+} /* end of extraZddMinUnion */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddDotProduct.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddDotProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *zRes;
+ int TopS, TopT;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( S == z0 || T == z0 )
+ return z0;
+ if ( S == z1 )
+ return T;
+ if ( T == z1 )
+ return S;
+
+ /* the operation is commutative - normalize the problem */
+ TopS = dd->permZ[S->index];
+ TopT = dd->permZ[T->index];
+
+ if ( TopS > TopT || (TopS == TopT && S > T) )
+ return extraZddDotProduct(dd, T, S);
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddDotProduct, S, T);
+ if (zRes)
+ return zRes;
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1, *zTemp;
+ if ( TopS == TopT )
+ {
+ /* compute the union of two cofactors of T (T0+T1) */
+ zTemp = cuddZddUnion(dd, cuddE(T), cuddT(T) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute DotProduct with the top element for subsets (S1, T0+T1) */
+ zSet0 = extraZddDotProduct(dd, cuddT(S), zTemp );
+ if ( zSet0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ return NULL;
+ }
+ cuddRef( zSet0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+
+ /* compute DotProduct with the top element for subsets (S0, T1) */
+ zSet1 = extraZddDotProduct(dd, cuddE(S), cuddT(T) );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* compute the union of these two partial results (zSet0 + zSet1) */
+ zRes1 = cuddZddUnion(dd, zSet0, zSet1 );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+
+ /* compute DotProduct for subsets without the top-most element */
+ zRes0 = extraZddDotProduct(dd, cuddE(S), cuddE(T) );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ }
+ else /* if ( TopS < TopT ) */
+ {
+ /* compute DotProduct with the top element for subsets (S1, T) */
+ zRes1 = extraZddDotProduct(dd, cuddT(S), T );
+ if ( zRes1 == NULL )
+ return NULL;
+ cuddRef( zRes1 );
+
+ /* compute DotProduct for subsets without the top-most element */
+ zRes0 = extraZddDotProduct(dd, cuddE(S), T );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ }
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, S->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddDotProduct, S, T, zRes);
+ return zRes;
+ }
+} /* end of extraZddDotProduct */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddCrossProduct.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddCrossProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *zRes;
+ int TopS, TopT;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( S == z0 || T == z0 )
+ return z0;
+ if ( S == z1 || T == z1 )
+ return z1;
+
+ /* the operation is commutative - normalize the problem */
+ TopS = dd->permZ[S->index];
+ TopT = dd->permZ[T->index];
+
+ if ( TopS > TopT || (TopS == TopT && S > T) )
+ return extraZddCrossProduct(dd, T, S);
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddCrossProduct, S, T);
+ if (zRes)
+ return zRes;
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1, *zTemp;
+
+ if ( TopS == TopT )
+ {
+ /* compute the union of two cofactors of T (T0+T1) */
+ zTemp = cuddZddUnion(dd, cuddE(T), cuddT(T) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute CrossProduct without the top element for subsets (S0, T0+T1) */
+ zSet0 = extraZddCrossProduct(dd, cuddE(S), zTemp );
+ if ( zSet0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ return NULL;
+ }
+ cuddRef( zSet0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+
+ /* compute CrossProduct without the top element for subsets (S1, T0) */
+ zSet1 = extraZddCrossProduct(dd, cuddT(S), cuddE(T) );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* compute the union of these two partial results (zSet0 + zSet1) */
+ zRes0 = cuddZddUnion(dd, zSet0, zSet1 );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+
+ /* compute CrossProduct for subsets with the top-most element */
+ zRes1 = extraZddCrossProduct(dd, cuddT(S), cuddT(T) );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zRes0);
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, S->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopS < TopT ) */
+ {
+ /* compute CrossProduct without the top element (S0, T) */
+ zSet0 = extraZddCrossProduct(dd, cuddE(S), T );
+ if ( zSet0 == NULL )
+ return NULL;
+ cuddRef( zSet0 );
+
+ /* compute CrossProduct without the top element (S1, T) */
+ zSet1 = extraZddCrossProduct(dd, cuddT(S), T );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* compute the union of these two partial results (zSet0 + zSet1) */
+ zRes = cuddZddUnion(dd, zSet0, zSet1 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ cuddDeref( zRes );
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddCrossProduct, S, T, zRes);
+ return zRes;
+ }
+} /* end of extraZddCrossProduct */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMaxDotProduct.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode *
+extraZddMaxDotProduct(
+ DdManager * dd,
+ DdNode * S,
+ DdNode * T)
+{
+ DdNode *zRes;
+ int TopS, TopT;
+ statLine(dd);
+
+ /* consider terminal cases */
+ if ( S == z0 || T == z0 )
+ return z0;
+ if ( S == z1 )
+ return T;
+ if ( T == z1 )
+ return S;
+
+ /* the operation is commutative - normalize the problem */
+ TopS = dd->permZ[S->index];
+ TopT = dd->permZ[T->index];
+
+ if ( TopS > TopT || (TopS == TopT && S > T) )
+ return extraZddMaxDotProduct(dd, T, S);
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddMaxDotProduct, S, T);
+ if (zRes)
+ return zRes;
+ else
+ {
+ DdNode *zSet0, *zSet1, *zRes0, *zRes1, *zTemp;
+ if ( TopS == TopT )
+ {
+ /* compute the union of two cofactors of T (T0+T1) */
+ zTemp = extraZddMaxUnion(dd, cuddE(T), cuddT(T) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute MaxDotProduct with the top element for subsets (S1, T0+T1) */
+ zSet0 = extraZddMaxDotProduct(dd, cuddT(S), zTemp );
+ if ( zSet0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ return NULL;
+ }
+ cuddRef( zSet0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+
+ /* compute MaxDotProduct with the top element for subsets (S0, T1) */
+ zSet1 = extraZddMaxDotProduct(dd, cuddE(S), cuddT(T) );
+ if ( zSet1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ return NULL;
+ }
+ cuddRef( zSet1 );
+
+ /* compute the union of these two partial results (zSet0 + zSet1) */
+ zRes1 = extraZddMaxUnion(dd, zSet0, zSet1 );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd(dd, zSet0);
+ Cudd_RecursiveDerefZdd(dd, zSet1);
+
+ /* compute MaxDotProduct for subsets without the top-most element */
+ zRes0 = extraZddMaxDotProduct(dd, cuddE(S), cuddE(T) );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ }
+ else /* if ( TopS < TopT ) */
+ {
+ /* compute MaxDotProduct with the top element for subsets (S1, T) */
+ zRes1 = extraZddMaxDotProduct(dd, cuddT(S), T );
+ if ( zRes1 == NULL )
+ return NULL;
+ cuddRef( zRes1 );
+
+ /* compute MaxDotProduct for subsets without the top-most element */
+ zRes0 = extraZddMaxDotProduct(dd, cuddE(S), T );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ }
+
+ /* remove subsets without this element covered by subsets with this element */
+ zRes0 = extraZddNotSubSet(dd, zTemp = zRes0, zRes1);
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+
+ /* create the new node */
+ zRes = cuddZddGetNode( dd, S->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddMaxDotProduct, S, T, zRes);
+ return zRes;
+ }
+} /* end of extraZddMaxDotProduct */
+
+/*---------------------------------------------------------------------------*/
+/* Definition of staTc Functions */
+/*---------------------------------------------------------------------------*/
+
+ABC_NAMESPACE_IMPL_END
diff --git a/src/bdd/extrab/extraBddMisc.c b/src/bdd/extrab/extraBddMisc.c
index 335f675..4200386 100644
--- a/src/bdd/extrab/extraBddMisc.c
+++ b/src/bdd/extrab/extraBddMisc.c
@@ -2723,8 +2723,8 @@ DdNode * Extra_bddTuples(
if ( K > nVars )
return NULL;
- /* the second argument in the recursive call stannds for <n>;
- /* reate the first argument, which stands for <k>
+ /* the second argument in the recursive call stands for <n>;
+ * create the first argument, which stands for <k>
* as when we are talking about the tuple of <k> out of <n> */
for ( i = 0; i < nVars-K; i++ )
VarsK = cuddT( VarsK );
diff --git a/src/bdd/extrab/extraBddSet.c b/src/bdd/extrab/extraBddSet.c
new file mode 100644
index 0000000..882c474
--- /dev/null
+++ b/src/bdd/extrab/extraBddSet.c
@@ -0,0 +1,941 @@
+/**CFile***********************************************************************
+
+ FileName [zSubSet.c]
+
+ PackageName [extra]
+
+ Synopsis [Experimental version of some ZDD operators.]
+
+ Description [External procedures included in this module:
+ <ul>
+ <li> Extra_zddSubSet();
+ <li> Extra_zddSupSet();
+ <li> Extra_zddNotSubSet();
+ <li> Extra_zddNotSupSet();
+ <li> Extra_zddMaxNotSupSet();
+ <li> Extra_zddEmptyBelongs();
+ <li> Extra_zddIsOneSubset();
+ </ul>
+ Internal procedures included in this module:
+ <ul>
+ <li> extraZddSubSet();
+ <li> extraZddSupSet();
+ <li> extraZddNotSubSet();
+ <li> extraZddNotSupSet();
+ <li> extraZddMaxNotSupSet();
+ </ul>
+ Static procedures included in this module:
+ <ul>
+ </ul>
+
+ SubSet, SupSet, NotSubSet, NotSupSet were introduced
+ by O.Coudert to solve problems arising in two-level SOP
+ minimization. See O. Coudert, "Two-Level Logic Minimization:
+ An Overview", Integration. Vol. 17, No. 2, pp. 97-140, Oct 1994.
+ ]
+
+ SeeAlso []
+
+ Author [Alan Mishchenko]
+
+ Copyright []
+
+ Revision [$zSubSet.c, v.1.2, November 16, 2000, alanmi $]
+
+******************************************************************************/
+
+#include "extraBdd.h"
+
+ABC_NAMESPACE_IMPL_START
+
+/*---------------------------------------------------------------------------*/
+/* Constant declarations */
+/*---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------*/
+/* Stucture declarations */
+/*---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------*/
+/* Type declarations */
+/*---------------------------------------------------------------------------*/
+
+
+/*---------------------------------------------------------------------------*/
+/* Variable declarations */
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/* Macro declarations */
+/*---------------------------------------------------------------------------*/
+
+
+/**AutomaticStart*************************************************************/
+
+/*---------------------------------------------------------------------------*/
+/* Static function prototypes */
+/*---------------------------------------------------------------------------*/
+
+/**AutomaticEnd***************************************************************/
+
+
+/*---------------------------------------------------------------------------*/
+/* Definition of exported functions */
+/*---------------------------------------------------------------------------*/
+
+/**Function********************************************************************
+
+ Synopsis [Computes subsets in X that are contained in some of the subsets of Y.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddNotSubSet, Extra_zddSupSet, Extra_zddNotSupSet]
+
+******************************************************************************/
+DdNode *
+Extra_zddSubSet(
+ DdManager * dd,
+ DdNode * X,
+ DdNode * Y)
+{
+ DdNode *res;
+ int autoDynZ;
+
+ autoDynZ = dd->autoDynZ;
+ dd->autoDynZ = 0;
+
+ do {
+ dd->reordered = 0;
+ res = extraZddSubSet(dd, X, Y);
+ } while (dd->reordered == 1);
+ dd->autoDynZ = autoDynZ;
+ return(res);
+
+} /* end of Extra_zddSubSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes subsets in X that contain some of the subsets of Y.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddSubSet, Extra_zddNotSubSet, Extra_zddNotSupSet]
+
+******************************************************************************/
+DdNode *
+Extra_zddSupSet(
+ DdManager * dd,
+ DdNode * X,
+ DdNode * Y)
+{
+ DdNode *res;
+ int autoDynZ;
+
+ autoDynZ = dd->autoDynZ;
+ dd->autoDynZ = 0;
+
+ do {
+ dd->reordered = 0;
+ res = extraZddSupSet(dd, X, Y);
+ } while (dd->reordered == 1);
+ dd->autoDynZ = autoDynZ;
+ return(res);
+
+} /* end of Extra_zddSupSet */
+
+/**Function********************************************************************
+
+ Synopsis [Computes subsets in X that are not contained in any of the subsets of Y.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddSubSet, Extra_zddSupSet, Extra_zddNotSupSet]
+
+******************************************************************************/
+DdNode *
+Extra_zddNotSubSet(
+ DdManager * dd,
+ DdNode * X,
+ DdNode * Y)
+{
+ DdNode *res;
+ int autoDynZ;
+
+ autoDynZ = dd->autoDynZ;
+ dd->autoDynZ = 0;
+
+ do {
+ dd->reordered = 0;
+ res = extraZddNotSubSet(dd, X, Y);
+ } while (dd->reordered == 1);
+ dd->autoDynZ = autoDynZ;
+ return(res);
+
+} /* end of Extra_zddNotSubSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes subsets in X that do not contain any of the subsets of Y.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddSubSet, Extra_zddSupSet, Extra_zddNotSubSet]
+
+******************************************************************************/
+DdNode *
+Extra_zddNotSupSet(
+ DdManager * dd,
+ DdNode * X,
+ DdNode * Y)
+{
+ DdNode *res;
+ int autoDynZ;
+
+ autoDynZ = dd->autoDynZ;
+ dd->autoDynZ = 0;
+
+ do {
+ dd->reordered = 0;
+ res = extraZddNotSupSet(dd, X, Y);
+ } while (dd->reordered == 1);
+ dd->autoDynZ = autoDynZ;
+ return(res);
+
+} /* end of Extra_zddNotSupSet */
+
+
+
+/**Function********************************************************************
+
+ Synopsis [Computes the maximal of subsets in X not contained in any of the subsets of Y.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso [Extra_zddSubSet, Extra_zddSupSet, Extra_zddSubSet, Extra_zddNotSupSet]
+
+******************************************************************************/
+DdNode *
+Extra_zddMaxNotSupSet(
+ DdManager * dd,
+ DdNode * X,
+ DdNode * Y)
+{
+ DdNode *res;
+ int autoDynZ;
+
+ autoDynZ = dd->autoDynZ;
+ dd->autoDynZ = 0;
+
+ do {
+ dd->reordered = 0;
+ res = extraZddMaxNotSupSet(dd, X, Y);
+ } while (dd->reordered == 1);
+ dd->autoDynZ = autoDynZ;
+ return(res);
+
+} /* end of Extra_zddMaxNotSupSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Returns 1 if ZDD contains the empty combination; 0 otherwise.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+******************************************************************************/
+int
+Extra_zddEmptyBelongs(
+ DdManager *dd,
+ DdNode* zS )
+{
+ while ( zS->index != CUDD_MAXINDEX )
+ zS = cuddE( zS );
+ return (int)( zS == z1 );
+
+} /* end of Extra_zddEmptyBelongs */
+
+
+/**Function********************************************************************
+
+ Synopsis [Returns 1 if the set is empty or consists of one subset only.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+******************************************************************************/
+int
+Extra_zddIsOneSubset(
+ DdManager * dd,
+ DdNode * zS )
+{
+ while ( zS->index != CUDD_MAXINDEX )
+ {
+ assert( cuddT(zS) != z0 );
+ if ( cuddE(zS) != z0 )
+ return 0;
+ zS = cuddT( zS );
+ }
+ return (int)( zS == z1 );
+
+} /* end of Extra_zddEmptyBelongs */
+
+
+/*---------------------------------------------------------------------------*/
+/* Definition of internal functions */
+/*---------------------------------------------------------------------------*/
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddSubSet.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode* extraZddSubSet( DdManager *dd, DdNode *X, DdNode *Y )
+{
+ DdNode *zRes;
+ statLine(dd);
+ /* any comb is a subset of itself */
+ if ( X == Y )
+ return X;
+ /* if X is empty, the result is empty */
+ if ( X == z0 )
+ return z0;
+ /* combs in X are notsubsets of non-existant combs in Y */
+ if ( Y == z0 )
+ return z0;
+ /* the empty comb is contained in all combs of Y */
+ if ( X == z1 )
+ return z1;
+ /* only {()} is the subset of {()} */
+ if ( Y == z1 ) /* check whether the empty combination is present in X */
+ return ( Extra_zddEmptyBelongs( dd, X )? z1: z0 );
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddSubSet, X, Y);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zRes0, *zRes1, *zTemp;
+ int TopLevelX = dd->permZ[ X->index ];
+ int TopLevelY = dd->permZ[ Y->index ];
+
+ if ( TopLevelX < TopLevelY )
+ {
+ /* compute combs of X without var that are notsubsets of combs with Y */
+ zRes = extraZddSubSet( dd, cuddE( X ), Y );
+ if ( zRes == NULL ) return NULL;
+ }
+ else if ( TopLevelX == TopLevelY )
+ {
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute combs of X without var that are notsubsets of combs is Temp */
+ zRes0 = extraZddSubSet( dd, cuddE( X ), zTemp );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+
+ /* combs of X with var that are notsubsets of combs in Y with var */
+ zRes1 = extraZddSubSet( dd, cuddT( X ), cuddT( Y ) );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopLevelX > TopLevelY ) */
+ {
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL ) return NULL;
+ cuddRef( zTemp );
+
+ /* compute combs that are notsubsets of Temp */
+ zRes = extraZddSubSet( dd, X, zTemp );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ cuddDeref( zRes );
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddSubSet, X, Y, zRes);
+ return zRes;
+ }
+} /* end of extraZddSubSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddSupSet.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode* extraZddSupSet( DdManager *dd, DdNode *X, DdNode *Y )
+{
+ DdNode *zRes;
+ statLine(dd);
+ /* any comb is a superset of itself */
+ if ( X == Y )
+ return X;
+ /* no comb in X is superset of non-existing combs */
+ if ( Y == z0 )
+ return z0;
+ /* any comb in X is the superset of the empty comb */
+ if ( Extra_zddEmptyBelongs( dd, Y ) )
+ return X;
+ /* if X is empty, the result is empty */
+ if ( X == z0 )
+ return z0;
+ /* if X is the empty comb (and Y does not contain it!), return empty */
+ if ( X == z1 )
+ return z0;
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddSupSet, X, Y);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zRes0, *zRes1, *zTemp;
+ int TopLevelX = dd->permZ[ X->index ];
+ int TopLevelY = dd->permZ[ Y->index ];
+
+ if ( TopLevelX < TopLevelY )
+ {
+ /* combinations of X without label that are supersets of combinations with Y */
+ zRes0 = extraZddSupSet( dd, cuddE( X ), Y );
+ if ( zRes0 == NULL ) return NULL;
+ cuddRef( zRes0 );
+
+ /* combinations of X with label that are supersets of combinations with Y */
+ zRes1 = extraZddSupSet( dd, cuddT( X ), Y );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else if ( TopLevelX == TopLevelY )
+ {
+ /* combs of X without var that are supersets of combs of Y without var */
+ zRes0 = extraZddSupSet( dd, cuddE( X ), cuddE( Y ) );
+ if ( zRes0 == NULL ) return NULL;
+ cuddRef( zRes0 );
+
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zTemp );
+
+ /* combs of X with label that are supersets of combs in Temp */
+ zRes1 = extraZddSupSet( dd, cuddT( X ), zTemp );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopLevelX > TopLevelY ) */
+ {
+ /* combs of X that are supersets of combs of Y without label */
+ zRes = extraZddSupSet( dd, X, cuddE( Y ) );
+ if ( zRes == NULL ) return NULL;
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddSupSet, X, Y, zRes);
+ return zRes;
+ }
+} /* end of extraZddSupSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddNotSubSet.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode* extraZddNotSubSet( DdManager *dd, DdNode *X, DdNode *Y )
+{
+ DdNode *zRes;
+ statLine(dd);
+ /* any comb is a subset of itself */
+ if ( X == Y )
+ return z0;
+ /* combs in X are notsubsets of non-existant combs in Y */
+ if ( Y == z0 )
+ return X;
+ /* only {()} is the subset of {()} */
+ if ( Y == z1 ) /* remove empty combination from X */
+ return cuddZddDiff( dd, X, z1 );
+ /* if X is empty, the result is empty */
+ if ( X == z0 )
+ return z0;
+ /* the empty comb is contained in all combs of Y */
+ if ( X == z1 )
+ return z0;
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddNotSubSet, X, Y);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zRes0, *zRes1, *zTemp;
+ int TopLevelX = dd->permZ[ X->index ];
+ int TopLevelY = dd->permZ[ Y->index ];
+
+ if ( TopLevelX < TopLevelY )
+ {
+ /* compute combs of X without var that are notsubsets of combs with Y */
+ zRes0 = extraZddNotSubSet( dd, cuddE( X ), Y );
+ if ( zRes0 == NULL )
+ return NULL;
+ cuddRef( zRes0 );
+
+ /* combs of X with var cannot be subsets of combs without var in Y */
+ zRes1 = cuddT( X );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ }
+ else if ( TopLevelX == TopLevelY )
+ {
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute combs of X without var that are notsubsets of combs is Temp */
+ zRes0 = extraZddNotSubSet( dd, cuddE( X ), zTemp );
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+
+ /* combs of X with var that are notsubsets of combs in Y with var */
+ zRes1 = extraZddNotSubSet( dd, cuddT( X ), cuddT( Y ) );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopLevelX > TopLevelY ) */
+ {
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ return NULL;
+ cuddRef( zTemp );
+
+ /* compute combs that are notsubsets of Temp */
+ zRes = extraZddNotSubSet( dd, X, zTemp );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ cuddDeref( zRes );
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddNotSubSet, X, Y, zRes);
+ return zRes;
+ }
+} /* end of extraZddNotSubSet */
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddNotSupSet.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode* extraZddNotSupSet( DdManager *dd, DdNode *X, DdNode *Y )
+{
+ DdNode *zRes;
+ statLine(dd);
+ /* any comb is a superset of itself */
+ if ( X == Y )
+ return z0;
+ /* no comb in X is superset of non-existing combs */
+ if ( Y == z0 )
+ return X;
+ /* any comb in X is the superset of the empty comb */
+ if ( Extra_zddEmptyBelongs( dd, Y ) )
+ return z0;
+ /* if X is empty, the result is empty */
+ if ( X == z0 )
+ return z0;
+ /* if X is the empty comb (and Y does not contain it!), return it */
+ if ( X == z1 )
+ return z1;
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddNotSupSet, X, Y);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zRes0, *zRes1, *zTemp;
+ int TopLevelX = dd->permZ[ X->index ];
+ int TopLevelY = dd->permZ[ Y->index ];
+
+ if ( TopLevelX < TopLevelY )
+ {
+ /* combinations of X without label that are supersets of combinations of Y */
+ zRes0 = extraZddNotSupSet( dd, cuddE( X ), Y );
+ if ( zRes0 == NULL )
+ return NULL;
+ cuddRef( zRes0 );
+
+ /* combinations of X with label that are supersets of combinations of Y */
+ zRes1 = extraZddNotSupSet( dd, cuddT( X ), Y );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else if ( TopLevelX == TopLevelY )
+ {
+ /* combs of X without var that are not supersets of combs of Y without var */
+ zRes0 = extraZddNotSupSet( dd, cuddE( X ), cuddE( Y ) );
+ if ( zRes0 == NULL )
+ return NULL;
+ cuddRef( zRes0 );
+
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zTemp );
+
+ /* combs of X with label that are supersets of combs in Temp */
+ zRes1 = extraZddNotSupSet( dd, cuddT( X ), zTemp );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopLevelX > TopLevelY ) */
+ {
+ /* combs of X that are supersets of combs of Y without label */
+ zRes = extraZddNotSupSet( dd, X, cuddE( Y ) );
+ if ( zRes == NULL ) return NULL;
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddNotSupSet, X, Y, zRes);
+ return zRes;
+ }
+} /* end of extraZddNotSupSet */
+
+
+
+/**Function********************************************************************
+
+ Synopsis [Performs the recursive step of Extra_zddMaxNotSupSet.]
+
+ Description []
+
+ SideEffects [None]
+
+ SeeAlso []
+
+******************************************************************************/
+DdNode* extraZddMaxNotSupSet( DdManager *dd, DdNode *X, DdNode *Y )
+{
+ DdNode *zRes;
+ statLine(dd);
+ /* any comb is a superset of itself */
+ if ( X == Y )
+ return z0;
+ /* no comb in X is superset of non-existing combs */
+ if ( Y == z0 )
+ return extraZddMaximal( dd, X );
+ /* any comb in X is the superset of the empty comb */
+ if ( Extra_zddEmptyBelongs( dd, Y ) )
+ return z0;
+ /* if X is empty, the result is empty */
+ if ( X == z0 )
+ return z0;
+ /* if X is the empty comb (and Y does not contain it!), return it */
+ if ( X == z1 )
+ return z1;
+
+ /* check cache */
+ zRes = cuddCacheLookup2Zdd(dd, extraZddMaxNotSupSet, X, Y);
+ if (zRes)
+ return(zRes);
+ else
+ {
+ DdNode *zRes0, *zRes1, *zTemp;
+ int TopLevelX = dd->permZ[ X->index ];
+ int TopLevelY = dd->permZ[ Y->index ];
+
+ if ( TopLevelX < TopLevelY )
+ {
+ /* combinations of X without label that are supersets of combinations with Y */
+ zRes0 = extraZddMaxNotSupSet( dd, cuddE( X ), Y );
+ if ( zRes0 == NULL )
+ return NULL;
+ cuddRef( zRes0 );
+
+ /* combinations of X with label that are supersets of combinations with Y */
+ zRes1 = extraZddMaxNotSupSet( dd, cuddT( X ), Y );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+
+ /* ---------------------------------------------------- */
+ /* remove subsets without this element covered by subsets with this element */
+ zRes0 = extraZddNotSubSet(dd, zTemp = zRes0, zRes1);
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ /* ---------------------------------------------------- */
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else if ( TopLevelX == TopLevelY )
+ {
+ /* combs of X without var that are supersets of combs of Y without var */
+ zRes0 = extraZddMaxNotSupSet( dd, cuddE( X ), cuddE( Y ) );
+ if ( zRes0 == NULL )
+ return NULL;
+ cuddRef( zRes0 );
+
+ /* merge combs of Y with and without var */
+ zTemp = cuddZddUnion( dd, cuddE( Y ), cuddT( Y ) );
+ if ( zTemp == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ return NULL;
+ }
+ cuddRef( zTemp );
+
+ /* combs of X with label that are supersets of combs in Temp */
+ zRes1 = extraZddMaxNotSupSet( dd, cuddT( X ), zTemp );
+ if ( zRes1 == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+ return NULL;
+ }
+ cuddRef( zRes1 );
+ Cudd_RecursiveDerefZdd( dd, zTemp );
+
+ /* ---------------------------------------------------- */
+ /* remove subsets without this element covered by subsets with this element */
+ zRes0 = extraZddNotSubSet(dd, zTemp = zRes0, zRes1);
+ if ( zRes0 == NULL )
+ {
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ Cudd_RecursiveDerefZdd(dd, zRes1);
+ return NULL;
+ }
+ cuddRef( zRes0 );
+ Cudd_RecursiveDerefZdd(dd, zTemp);
+ /* ---------------------------------------------------- */
+
+ /* compose Res0 and Res1 with the given ZDD variable */
+ zRes = cuddZddGetNode( dd, X->index, zRes1, zRes0 );
+ if ( zRes == NULL )
+ {
+ Cudd_RecursiveDerefZdd( dd, zRes0 );
+ Cudd_RecursiveDerefZdd( dd, zRes1 );
+ return NULL;
+ }
+ cuddDeref( zRes0 );
+ cuddDeref( zRes1 );
+ }
+ else /* if ( TopLevelX > TopLevelY ) */
+ {
+ /* combs of X that are supersets of combs of Y without label */
+ zRes = extraZddMaxNotSupSet( dd, X, cuddE( Y ) );
+ if ( zRes == NULL ) return NULL;
+ }
+
+ /* insert the result into cache */
+ cuddCacheInsert2(dd, extraZddMaxNotSupSet, X, Y, zRes);
+ return zRes;
+ }
+} /* end of extraZddMaxNotSupSet */
+
+
+/*---------------------------------------------------------------------------*/
+/* Definition of static functions */
+/*---------------------------------------------------------------------------*/
+
+
+ABC_NAMESPACE_IMPL_END
diff --git a/src/bdd/extrab/module.make b/src/bdd/extrab/module.make
index 62b578f..cee5ac8 100644
--- a/src/bdd/extrab/module.make
+++ b/src/bdd/extrab/module.make
@@ -2,7 +2,9 @@ SRC += src/bdd/extrab/extraBddAuto.c \
src/bdd/extrab/extraBddCas.c \
src/bdd/extrab/extraBddImage.c \
src/bdd/extrab/extraBddKmap.c \
+ src/bdd/extrab/extraBddMaxMin.c \
src/bdd/extrab/extraBddMisc.c \
+ src/bdd/extrab/extraBddSet.c \
src/bdd/extrab/extraBddSymm.c \
src/bdd/extrab/extraBddThresh.c \
src/bdd/extrab/extraBddTime.c \
diff --git a/src/map/amap/amapLib.c b/src/map/amap/amapLib.c
index b6350fe..26ef639 100644
--- a/src/map/amap/amapLib.c
+++ b/src/map/amap/amapLib.c
@@ -242,8 +242,11 @@ Amap_Gat_t * Amap_LibFindGate( Amap_Lib_t * p, unsigned uTruth )
Amap_Gat_t * pGate;
int i;
Vec_PtrForEachEntry( Amap_Gat_t *, p->vSorted, pGate, i )
+ {
+ if (( pGate == NULL ) || ( pGate->pFunc == NULL )) continue;
if ( pGate->nPins <= 5 && pGate->pFunc[0] == uTruth )
return pGate;
+ }
return NULL;
}
diff --git a/src/map/amap/amapLiberty.c b/src/map/amap/amapLiberty.c
index 13b18df..d5d2d72 100644
--- a/src/map/amap/amapLiberty.c
+++ b/src/map/amap/amapLiberty.c
@@ -209,6 +209,26 @@ int Amap_LibertyCellIsFlop( Amap_Tree_t * p, Amap_Item_t * pCell )
/**Function*************************************************************
+ Synopsis [Returns cell's function.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Amap_LibertyCellIsDontUse( Amap_Tree_t * p, Amap_Item_t * pCell )
+{
+ Amap_Item_t * pAttr;
+ Amap_ItemForEachChild( p, pCell, pAttr )
+ if ( !Amap_LibertyCompare(p, pAttr->Key, "dont_use") )
+ return 1;
+ return 0;
+}
+
+/**Function*************************************************************
+
Synopsis [Returns pin's function.]
Description []
@@ -414,6 +434,12 @@ int Amap_LibertyPrintGenlib( Amap_Tree_t * p, char * pFileName, int fVerbose )
printf( "Amap_LibertyPrintGenlib() skipped sequential cell \"%s\".\n", Amap_LibertyGetString(p, pCell->Head) );
continue;
}
+ if ( Amap_LibertyCellIsDontUse(p, pCell) )
+ {
+ if ( fVerbose )
+ printf( "Amap_LibertyPrintGenlib() skipped cell \"%s\" due to dont_use attribute.\n", Amap_LibertyGetString(p, pCell->Head) );
+ continue;
+ }
Counter = Amap_LibertyCellCountOutputs( p, pCell );
if ( Counter == 0 )
{
@@ -498,6 +524,12 @@ Vec_Str_t * Amap_LibertyPrintGenlibStr( Amap_Tree_t * p, int fVerbose )
printf( "Amap_LibertyPrintGenlib() skipped sequential cell \"%s\".\n", Amap_LibertyGetString(p, pCell->Head) );
continue;
}
+ if ( Amap_LibertyCellIsDontUse(p, pCell) )
+ {
+ if ( fVerbose )
+ printf( "Amap_LibertyPrintGenlib() skipped cell \"%s\" due to dont_use attribute.\n", Amap_LibertyGetString(p, pCell->Head) );
+ continue;
+ }
Counter = Amap_LibertyCellCountOutputs( p, pCell );
if ( Counter == 0 )
{
diff --git a/src/map/if/ifTune.c b/src/map/if/ifTune.c
index d1ed7ab..13e45f4 100644
--- a/src/map/if/ifTune.c
+++ b/src/map/if/ifTune.c
@@ -622,10 +622,10 @@ sat_solver * Ifn_ManSatBuild( Ifn_Ntk_t * p, Vec_Int_t ** pvPiVars, Vec_Int_t **
sat_solver * pSat = NULL;
*pvPiVars = *pvPoVars = NULL;
p1 = Ifn_ManStrFindModel( p );
-// Gia_AigerWrite( p1, "satbuild.aig", 0, 0 );
+// Gia_AigerWrite( p1, "satbuild.aig", 0, 0, 0 );
p2 = Ifn_ManStrFindCofactors( p->nInps, p1 );
Gia_ManStop( p1 );
-// Gia_AigerWrite( p2, "satbuild2.aig", 0, 0 );
+// Gia_AigerWrite( p2, "satbuild2.aig", 0, 0, 0 );
pSat = Ifn_ManStrFindSolver( p2, pvPiVars, pvPoVars );
Gia_ManStop( p2 );
return pSat;
diff --git a/src/map/scl/sclLiberty.c b/src/map/scl/sclLiberty.c
index fc06bc4..cd28a60 100644
--- a/src/map/scl/sclLiberty.c
+++ b/src/map/scl/sclLiberty.c
@@ -629,6 +629,14 @@ int Scl_LibertyReadCellIsFlop( Scl_Tree_t * p, Scl_Item_t * pCell )
return 1;
return 0;
}
+int Scl_LibertyReadCellIsDontUse( Scl_Tree_t * p, Scl_Item_t * pCell )
+{
+ Scl_Item_t * pAttr;
+ Scl_ItemForEachChild( p, pCell, pAttr )
+ if ( !Scl_LibertyCompare(p, pAttr->Key, "dont_use") )
+ return 1;
+ return 0;
+}
char * Scl_LibertyReadCellArea( Scl_Tree_t * p, Scl_Item_t * pCell )
{
Scl_Item_t * pArea;
@@ -704,6 +712,11 @@ Vec_Str_t * Scl_LibertyReadGenlibStr( Scl_Tree_t * p, int fVerbose )
if ( fVerbose ) printf( "Scl_LibertyReadGenlib() skipped sequential cell \"%s\".\n", Scl_LibertyReadString(p, pCell->Head) );
continue;
}
+ if ( Scl_LibertyReadCellIsDontUse(p, pCell) )
+ {
+ if ( fVerbose ) printf( "Scl_LibertyReadGenlib() skipped cell \"%s\" due to dont_use attribute.\n", Scl_LibertyReadString(p, pCell->Head) );
+ continue;
+ }
if ( Scl_LibertyReadCellIsThreeState(p, pCell) )
{
if ( fVerbose ) printf( "Scl_LibertyReadGenlib() skipped three-state cell \"%s\".\n", Scl_LibertyReadString(p, pCell->Head) );
@@ -1417,7 +1430,7 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
Vec_Wrd_t * vTruth;
char * pFormula, * pName;
int i, k, Counter, nOutputs, nCells;
- int nSkipped[3] = {0};
+ int nSkipped[4] = {0};
// read delay-table templates
vTemples = Scl_LibertyReadTemplates( p );
@@ -1451,6 +1464,12 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
nSkipped[0]++;
continue;
}
+ if ( Scl_LibertyReadCellIsDontUse(p, pCell) )
+ {
+ if ( fVeryVerbose ) printf( "Scl_LibertyReadGenlib() skipped cell \"%s\" due to dont_use attribute.\n", Scl_LibertyReadString(p, pCell->Head) );
+ nSkipped[3]++;
+ continue;
+ }
if ( Scl_LibertyReadCellIsThreeState(p, pCell) )
{
if ( fVeryVerbose ) printf( "Scl_LibertyReadGenlib() skipped three-state cell \"%s\".\n", Scl_LibertyReadString(p, pCell->Head) );
@@ -1473,6 +1492,8 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
{
if ( Scl_LibertyReadCellIsFlop(p, pCell) )
continue;
+ if ( Scl_LibertyReadCellIsDontUse(p, pCell) )
+ continue;
if ( Scl_LibertyReadCellIsThreeState(p, pCell) )
continue;
if ( (Counter = Scl_LibertyReadCellOutputNum(p, pCell)) == 0 )
@@ -1640,8 +1661,8 @@ Vec_Str_t * Scl_LibertyReadSclStr( Scl_Tree_t * p, int fVerbose, int fVeryVerbos
{
printf( "Library \"%s\" from \"%s\" has %d cells ",
Scl_LibertyReadString(p, Scl_LibertyRoot(p)->Head), p->pFileName, nCells );
- printf( "(%d skipped: %d seq; %d tri-state; %d no func). ",
- nSkipped[0]+nSkipped[1]+nSkipped[2], nSkipped[0], nSkipped[1], nSkipped[2] );
+ printf( "(%d skipped: %d seq; %d tri-state; %d no func; %d dont_use). ",
+ nSkipped[0]+nSkipped[1]+nSkipped[2], nSkipped[0], nSkipped[1], nSkipped[2], nSkipped[3] );
Abc_PrintTime( 1, "Time", Abc_Clock() - p->clkStart );
}
return vOut;
diff --git a/src/misc/extra/extraUtilMaj.c b/src/misc/extra/extraUtilMaj.c
index 3787593..8bdb081 100644
--- a/src/misc/extra/extraUtilMaj.c
+++ b/src/misc/extra/extraUtilMaj.c
@@ -370,7 +370,7 @@ int Gem_Enumerate( int nVars, int fDump, int fVerbose )
if ( Gem_FuncReduce( p, f, i, j ) )
return Gem_ManFree( p );
}
- printf( "Finished (functions = %10d) ", v, p->nObjs );
+ printf( "Finished (functions = %10d) ", p->nObjs );
Abc_PrintTime( 0, "Time", Abc_Clock() - clk );
if ( fDump ) Vec_MemDumpTruthTables( p->vTtMem, "enum", nVars );
Gem_ManFree( p );
diff --git a/src/misc/extra/extraUtilPath.c b/src/misc/extra/extraUtilPath.c
index c7231a0..165f402 100644
--- a/src/misc/extra/extraUtilPath.c
+++ b/src/misc/extra/extraUtilPath.c
@@ -98,7 +98,7 @@ void Abc_EnumeratePathsTest()
{
int nSize = 2;
Gia_Man_t * pGia = Abc_EnumeratePaths( nSize );
- Gia_AigerWrite( pGia, "testpath.aig", 0, 0 );
+ Gia_AigerWrite( pGia, "testpath.aig", 0, 0, 0 );
Gia_ManStop( pGia );
}
@@ -353,7 +353,7 @@ void Abc_GraphDeriveGiaDump( Vec_Wec_t * vNodes, Vec_Int_t * vEdges, int Size )
char pFileName[100];
Gia_Man_t * pGia = Abc_GraphDeriveGia( vNodes, vEdges );
sprintf( pFileName, "grid_%dx%d_e%03d.aig", Size, Size, Vec_IntSize(vEdges)/2 );
- Gia_AigerWrite( pGia, pFileName, 0, 0 );
+ Gia_AigerWrite( pGia, pFileName, 0, 0, 0 );
Gia_ManStop( pGia );
printf( "Finished dumping AIG into file \"%s\".\n", pFileName );
}
diff --git a/src/misc/extra/extraUtilPerm.c b/src/misc/extra/extraUtilPerm.c
index b077a7a..3e8505f 100644
--- a/src/misc/extra/extraUtilPerm.c
+++ b/src/misc/extra/extraUtilPerm.c
@@ -269,7 +269,7 @@ int Abc_ZddDiff( Abc_ZddMan * p, int a, int b )
else
r0 = Abc_ZddDiff( p, A->False, B->False ),
r1 = Abc_ZddDiff( p, A->True, B->True ),
- r = Abc_ZddUniqueCreate( p, A->Var, A->True, r0 );
+ r = Abc_ZddUniqueCreate( p, A->Var, r1, r0 );
return Abc_ZddCacheInsert( p, a, b, ABC_ZDD_OPER_DIFF, r );
}
int Abc_ZddUnion( Abc_ZddMan * p, int a, int b )
diff --git a/src/misc/util/abc_global.h b/src/misc/util/abc_global.h
index 14523ab..c27b907 100644
--- a/src/misc/util/abc_global.h
+++ b/src/misc/util/abc_global.h
@@ -357,6 +357,9 @@ static inline void Abc_Print( int level, const char * format, ... )
{
extern ABC_DLL int Abc_FrameIsBridgeMode();
va_list args;
+ extern unsigned enable_dbg_outs;
+ if ( !enable_dbg_outs )
+ return;
if ( ! Abc_FrameIsBridgeMode() ){
if ( level == ABC_ERROR )
diff --git a/src/misc/util/utilBridge.c b/src/misc/util/utilBridge.c
index f988b65..ecf8765 100644
--- a/src/misc/util/utilBridge.c
+++ b/src/misc/util/utilBridge.c
@@ -551,7 +551,7 @@ void Gia_ManFromBridgeTest( char * pFileName )
fclose ( pFile );
Gia_ManPrintStats( p, NULL );
- Gia_AigerWrite( p, "temp.aig", 0, 0 );
+ Gia_AigerWrite( p, "temp.aig", 0, 0, 0 );
Gia_ManToBridgeAbsNetlistTest( "par_.dump", p, BRIDGE_ABS_NETLIST );
Gia_ManStop( p );
diff --git a/src/misc/util/utilTruth.h b/src/misc/util/utilTruth.h
index bc6ad0d..3d3f80b 100644
--- a/src/misc/util/utilTruth.h
+++ b/src/misc/util/utilTruth.h
@@ -1154,6 +1154,10 @@ static inline int Abc_Tt6HasVar( word t, int iVar )
{
return ((t >> (1<<iVar)) & s_Truths6Neg[iVar]) != (t & s_Truths6Neg[iVar]);
}
+static inline int Abc_Tt6XorVar( word t, int iVar )
+{
+ return ((t >> (1<<iVar)) & s_Truths6Neg[iVar]) == ~(t & s_Truths6Neg[iVar]);
+}
static inline int Abc_TtHasVar( word * t, int nVars, int iVar )
{
assert( iVar < nVars );
@@ -3106,6 +3110,20 @@ static inline int Abc_Tt4Check( int t )
SeeAlso []
***********************************************************************/
+static inline int Abc_Tt6VarsAreSymmetric( word t, int iVar, int jVar )
+{
+ word * s_PMasks = s_PPMasks[iVar][jVar];
+ int shift = (1 << jVar) - (1 << iVar);
+ assert( iVar < jVar );
+ return ((t & s_PMasks[1]) << shift) == (t & s_PMasks[2]);
+}
+static inline int Abc_Tt6VarsAreAntiSymmetric( word t, int iVar, int jVar )
+{
+ word * s_PMasks = s_PPMasks[iVar][jVar];
+ int shift = (1 << jVar) + (1 << iVar);
+ assert( iVar < jVar );
+ return ((t & (s_PMasks[1] >> (1 << iVar))) << shift) == (t & (s_PMasks[2] << (1 << iVar)));
+}
static inline int Abc_TtVarsAreSymmetric( word * pTruth, int nVars, int i, int j, word * pCof0, word * pCof1 )
{
int nWords = Abc_TtWordNum( nVars );
@@ -3116,6 +3134,16 @@ static inline int Abc_TtVarsAreSymmetric( word * pTruth, int nVars, int i, int j
Abc_TtCofactor0( pCof1, nWords, j );
return Abc_TtEqual( pCof0, pCof1, nWords );
}
+static inline int Abc_TtVarsAreAntiSymmetric( word * pTruth, int nVars, int i, int j, word * pCof0, word * pCof1 )
+{
+ int nWords = Abc_TtWordNum( nVars );
+ assert( i < nVars && j < nVars );
+ Abc_TtCofactor0p( pCof0, pTruth, nWords, i );
+ Abc_TtCofactor1p( pCof1, pTruth, nWords, i );
+ Abc_TtCofactor0( pCof0, nWords, j );
+ Abc_TtCofactor1( pCof1, nWords, j );
+ return Abc_TtEqual( pCof0, pCof1, nWords );
+}
static inline int Abc_TtIsFullySymmetric( word * pTruth, int nVars )
{
int m, v, Polar = 0, Seen = 0;
diff --git a/src/misc/vec/vecMem.h b/src/misc/vec/vecMem.h
index 72b653b..c2bd06f 100644
--- a/src/misc/vec/vecMem.h
+++ b/src/misc/vec/vecMem.h
@@ -341,10 +341,24 @@ static int * Vec_MemHashLookup( Vec_Mem_t * p, word * pEntry )
return pSpot;
return pSpot;
}
+static void Vec_MemHashProfile( Vec_Mem_t * p )
+{
+ int e;
+ for ( e = 0; e < 1000; e++ )
+ {
+ int Count = 0;
+ int * pSpot = Vec_IntEntryP( p->vTable, e );
+ for ( ; *pSpot != -1; pSpot = Vec_IntEntryP(p->vNexts, *pSpot) )
+ Count++;
+ printf( "%d ", Count );
+ }
+ printf( "\n" );
+}
static void Vec_MemHashResize( Vec_Mem_t * p )
{
word * pEntry;
int i, * pSpot;
+ //Vec_MemHashProfile( p );
Vec_IntFill( p->vTable, Abc_PrimeCudd(2 * Vec_IntSize(p->vTable)), -1 );
Vec_IntClear( p->vNexts );
Vec_MemForEachEntry( p, pEntry, i )
diff --git a/src/opt/dau/dau.h b/src/opt/dau/dau.h
index 260d8c7..82e9b83 100644
--- a/src/opt/dau/dau.h
+++ b/src/opt/dau/dau.h
@@ -60,6 +60,7 @@ typedef enum {
typedef struct Dss_Man_t_ Dss_Man_t;
typedef struct Abc_TtHieMan_t_ Abc_TtHieMan_t;
+typedef unsigned(*TtCanonicizeFunc)(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag);
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
@@ -80,6 +81,12 @@ extern unsigned Abc_TtCanonicize( word * pTruth, int nVars, char * pCanonPe
extern unsigned Abc_TtCanonicizePerm( word * pTruth, int nVars, char * pCanonPerm );
extern unsigned Abc_TtCanonicizePhase( word * pTruth, int nVars );
extern int Abc_TtCountOnesInCofsSimple( word * pTruth, int nVars, int * pStore );
+extern unsigned Abc_TtCanonicizeHie(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int fExact );
+extern Abc_TtHieMan_t * Abc_TtHieManStart( int nVars, int nLevels );
+extern void Abc_TtHieManStop(Abc_TtHieMan_t * p );
+extern unsigned Abc_TtCanonicizeWrap(TtCanonicizeFunc func, Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag);
+extern unsigned Abc_TtCanonicizeAda(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int iThres);
+extern unsigned Abc_TtCanonicizeHie(Abc_TtHieMan_t * p, word * pTruthInit, int nVars, char * pCanonPerm, int fExact);
/*=== dauCount.c ==========================================================*/
extern int Abc_TtCountOnesInCofsQuick( word * pTruth, int nVars, int * pStore );
/*=== dauDsd.c ==========================================================*/
diff --git a/src/opt/dau/dauCanon.c b/src/opt/dau/dauCanon.c
index 918c7ce..357da50 100644
--- a/src/opt/dau/dauCanon.c
+++ b/src/opt/dau/dauCanon.c
@@ -64,11 +64,11 @@ static inline int Abc_TtCompare1VarCofs( word * pTruth, int nWords, int iVar )
return Cof0 < Cof1 ? -1 : 1;
return 0;
}
- if ( iVar <= 5 )
- {
+ if ( iVar <= 5 )
+ {
word Cof0, Cof1;
- int w, shift = (1 << iVar);
- for ( w = 0; w < nWords; w++ )
+ int w, shift = (1 << iVar);
+ for ( w = 0; w < nWords; w++ )
{
Cof0 = pTruth[w] & s_Truths6Neg[iVar];
Cof1 = (pTruth[w] >> shift) & s_Truths6Neg[iVar];
@@ -76,18 +76,18 @@ static inline int Abc_TtCompare1VarCofs( word * pTruth, int nWords, int iVar )
return Cof0 < Cof1 ? -1 : 1;
}
return 0;
- }
- // if ( iVar > 5 )
- {
+ }
+ // if ( iVar > 5 )
+ {
word * pLimit = pTruth + nWords;
- int i, iStep = Abc_TtWordNum(iVar);
+ int i, iStep = Abc_TtWordNum(iVar);
assert( nWords >= 2 );
- for ( ; pTruth < pLimit; pTruth += 2*iStep )
- for ( i = 0; i < iStep; i++ )
+ for ( ; pTruth < pLimit; pTruth += 2*iStep )
+ for ( i = 0; i < iStep; i++ )
if ( pTruth[i] != pTruth[i + iStep] )
return pTruth[i] < pTruth[i + iStep] ? -1 : 1;
return 0;
- }
+ }
}
static inline int Abc_TtCompare1VarCofsRev( word * pTruth, int nWords, int iVar )
{
@@ -99,11 +99,11 @@ static inline int Abc_TtCompare1VarCofsRev( word * pTruth, int nWords, int iVar
return Cof0 < Cof1 ? -1 : 1;
return 0;
}
- if ( iVar <= 5 )
- {
+ if ( iVar <= 5 )
+ {
word Cof0, Cof1;
- int w, shift = (1 << iVar);
- for ( w = nWords - 1; w >= 0; w-- )
+ int w, shift = (1 << iVar);
+ for ( w = nWords - 1; w >= 0; w-- )
{
Cof0 = pTruth[w] & s_Truths6Neg[iVar];
Cof1 = (pTruth[w] >> shift) & s_Truths6Neg[iVar];
@@ -111,18 +111,18 @@ static inline int Abc_TtCompare1VarCofsRev( word * pTruth, int nWords, int iVar
return Cof0 < Cof1 ? -1 : 1;
}
return 0;
- }
- // if ( iVar > 5 )
- {
+ }
+ // if ( iVar > 5 )
+ {
word * pLimit = pTruth + nWords;
- int i, iStep = Abc_TtWordNum(iVar);
+ int i, iStep = Abc_TtWordNum(iVar);
assert( nWords >= 2 );
- for ( pLimit -= 2*iStep; pLimit >= pTruth; pLimit -= 2*iStep )
- for ( i = iStep - 1; i >= 0; i-- )
+ for ( pLimit -= 2*iStep; pLimit >= pTruth; pLimit -= 2*iStep )
+ for ( i = iStep - 1; i >= 0; i-- )
if ( pLimit[i] != pLimit[i + iStep] )
return pLimit[i] < pLimit[i + iStep] ? -1 : 1;
return 0;
- }
+ }
}
*/
@@ -142,35 +142,35 @@ static inline int Abc_TtCheckEqual2VarCofs( word * pTruth, int nWords, int iVar,
assert( Num1 < Num2 && Num2 < 4 );
if ( nWords == 1 )
return ((pTruth[0] >> (Num2 * (1 << iVar))) & s_CMasks6[iVar]) == ((pTruth[0] >> (Num1 * (1 << iVar))) & s_CMasks6[iVar]);
- if ( iVar <= 4 )
- {
- int w, shift = (1 << iVar);
- for ( w = 0; w < nWords; w++ )
+ if ( iVar <= 4 )
+ {
+ int w, shift = (1 << iVar);
+ for ( w = 0; w < nWords; w++ )
if ( ((pTruth[w] >> Num2 * shift) & s_CMasks6[iVar]) != ((pTruth[w] >> Num1 * shift) & s_CMasks6[iVar]) )
return 0;
return 1;
- }
- if ( iVar == 5 )
- {
+ }
+ if ( iVar == 5 )
+ {
unsigned * pTruthU = (unsigned *)pTruth;
unsigned * pLimitU = (unsigned *)(pTruth + nWords);
assert( nWords >= 2 );
- for ( ; pTruthU < pLimitU; pTruthU += 4 )
+ for ( ; pTruthU < pLimitU; pTruthU += 4 )
if ( pTruthU[Num2] != pTruthU[Num1] )
return 0;
return 1;
- }
- // if ( iVar > 5 )
- {
+ }
+ // if ( iVar > 5 )
+ {
word * pLimit = pTruth + nWords;
- int i, iStep = Abc_TtWordNum(iVar);
+ int i, iStep = Abc_TtWordNum(iVar);
assert( nWords >= 4 );
- for ( ; pTruth < pLimit; pTruth += 4*iStep )
- for ( i = 0; i < iStep; i++ )
+ for ( ; pTruth < pLimit; pTruth += 4*iStep )
+ for ( i = 0; i < iStep; i++ )
if ( pTruth[i+Num2*iStep] != pTruth[i+Num1*iStep] )
return 0;
return 1;
- }
+ }
}
/**Function*************************************************************
@@ -195,11 +195,11 @@ static inline int Abc_TtCompare2VarCofs( word * pTruth, int nWords, int iVar, in
return Cof1 < Cof2 ? -1 : 1;
return 0;
}
- if ( iVar <= 4 )
- {
+ if ( iVar <= 4 )
+ {
word Cof1, Cof2;
- int w, shift = (1 << iVar);
- for ( w = 0; w < nWords; w++ )
+ int w, shift = (1 << iVar);
+ for ( w = 0; w < nWords; w++ )
{
Cof1 = (pTruth[w] >> Num1 * shift) & s_CMasks6[iVar];
Cof2 = (pTruth[w] >> Num2 * shift) & s_CMasks6[iVar];
@@ -207,30 +207,30 @@ static inline int Abc_TtCompare2VarCofs( word * pTruth, int nWords, int iVar, in
return Cof1 < Cof2 ? -1 : 1;
}
return 0;
- }
- if ( iVar == 5 )
- {
+ }
+ if ( iVar == 5 )
+ {
unsigned * pTruthU = (unsigned *)pTruth;
unsigned * pLimitU = (unsigned *)(pTruth + nWords);
assert( nWords >= 2 );
- for ( ; pTruthU < pLimitU; pTruthU += 4 )
+ for ( ; pTruthU < pLimitU; pTruthU += 4 )
if ( pTruthU[Num1] != pTruthU[Num2] )
return pTruthU[Num1] < pTruthU[Num2] ? -1 : 1;
return 0;
- }
- // if ( iVar > 5 )
- {
+ }
+ // if ( iVar > 5 )
+ {
word * pLimit = pTruth + nWords;
- int i, iStep = Abc_TtWordNum(iVar);
+ int i, iStep = Abc_TtWordNum(iVar);
int Offset1 = Num1*iStep;
int Offset2 = Num2*iStep;
assert( nWords >= 4 );
- for ( ; pTruth < pLimit; pTruth += 4*iStep )
- for ( i = 0; i < iStep; i++ )
+ for ( ; pTruth < pLimit; pTruth += 4*iStep )
+ for ( i = 0; i < iStep; i++ )
if ( pTruth[i + Offset1] != pTruth[i + Offset2] )
return pTruth[i + Offset1] < pTruth[i + Offset2] ? -1 : 1;
return 0;
- }
+ }
}
static inline int Abc_TtCompare2VarCofsRev( word * pTruth, int nWords, int iVar, int Num1, int Num2 )
{
@@ -243,11 +243,11 @@ static inline int Abc_TtCompare2VarCofsRev( word * pTruth, int nWords, int iVar,
return Cof1 < Cof2 ? -1 : 1;
return 0;
}
- if ( iVar <= 4 )
- {
+ if ( iVar <= 4 )
+ {
word Cof1, Cof2;
- int w, shift = (1 << iVar);
- for ( w = nWords - 1; w >= 0; w-- )
+ int w, shift = (1 << iVar);
+ for ( w = nWords - 1; w >= 0; w-- )
{
Cof1 = (pTruth[w] >> Num1 * shift) & s_CMasks6[iVar];
Cof2 = (pTruth[w] >> Num2 * shift) & s_CMasks6[iVar];
@@ -255,30 +255,30 @@ static inline int Abc_TtCompare2VarCofsRev( word * pTruth, int nWords, int iVar,
return Cof1 < Cof2 ? -1 : 1;
}
return 0;
- }
- if ( iVar == 5 )
- {
+ }
+ if ( iVar == 5 )
+ {
unsigned * pTruthU = (unsigned *)pTruth;
unsigned * pLimitU = (unsigned *)(pTruth + nWords);
assert( nWords >= 2 );
- for ( pLimitU -= 4; pLimitU >= pTruthU; pLimitU -= 4 )
+ for ( pLimitU -= 4; pLimitU >= pTruthU; pLimitU -= 4 )
if ( pLimitU[Num1] != pLimitU[Num2] )
return pLimitU[Num1] < pLimitU[Num2] ? -1 : 1;
return 0;
- }
- // if ( iVar > 5 )
- {
+ }
+ // if ( iVar > 5 )
+ {
word * pLimit = pTruth + nWords;
- int i, iStep = Abc_TtWordNum(iVar);
+ int i, iStep = Abc_TtWordNum(iVar);
int Offset1 = Num1*iStep;
int Offset2 = Num2*iStep;
assert( nWords >= 4 );
- for ( pLimit -= 4*iStep; pLimit >= pTruth; pLimit -= 4*iStep )
- for ( i = iStep - 1; i >= 0; i-- )
+ for ( pLimit -= 4*iStep; pLimit >= pTruth; pLimit -= 4*iStep )
+ for ( i = iStep - 1; i >= 0; i-- )
if ( pLimit[i + Offset1] != pLimit[i + Offset2] )
return pLimit[i + Offset1] < pLimit[i + Offset2] ? -1 : 1;
return 0;
- }
+ }
}
/**Function*************************************************************
@@ -292,13 +292,24 @@ static inline int Abc_TtCompare2VarCofsRev( word * pTruth, int nWords, int iVar,
SeeAlso []
***********************************************************************/
-#define DO_SMALL_TRUTHTABLE 0
+void Abc_TtNormalizeSmallTruth(word * pTruth, int nVars)
+{
+ if (nVars < 6) {
+ int shift, bits = (1 << nVars);
+ word base = *pTruth = *pTruth & ((((word)1) << bits) - 1);
+ for (shift = bits; shift < 64; shift += bits)
+ *pTruth |= base << shift;
+ }
+}
-static inline void Abc_TtNormalizeSmallTruth(word * pTruth, int nVars)
+inline void Abc_TtVerifySmallTruth(word * pTruth, int nVars)
{
-#if DO_SMALL_TRUTHTABLE
- if (nVars < 6)
- *pTruth &= (1ULL << (1 << nVars)) - 1;
+#ifndef NDEBUG
+ if (nVars < 6) {
+ word nTruth = *pTruth;
+ Abc_TtNormalizeSmallTruth(&nTruth, nVars);
+ assert(*pTruth == nTruth);
+ }
#endif
}
@@ -306,7 +317,7 @@ static inline int Abc_TtCountOnesInTruth( word * pTruth, int nVars )
{
int nWords = Abc_TtWordNum( nVars );
int k, Counter = 0;
- Abc_TtNormalizeSmallTruth(pTruth, nVars);
+ Abc_TtVerifySmallTruth(pTruth, nVars);
for ( k = 0; k < nWords; k++ )
if ( pTruth[k] )
Counter += Abc_TtCountOnes( pTruth[k] );
@@ -318,7 +329,7 @@ static inline void Abc_TtCountOnesInCofs( word * pTruth, int nVars, int * pStore
int i, k, Counter, nWords;
if ( nVars <= 6 )
{
- Abc_TtNormalizeSmallTruth(pTruth, nVars);
+ Abc_TtVerifySmallTruth(pTruth, nVars);
for ( i = 0; i < nVars; i++ )
pStore[i] = Abc_TtCountOnes( pTruth[0] & s_Truths6Neg[i] );
return;
@@ -1154,83 +1165,92 @@ unsigned Abc_TtCanonicizePhase( word * pTruth, int nVars )
struct Abc_TtHieMan_t_
{
- int nLastLevel, nWords;
- Vec_Mem_t * vTtMem[TT_MAX_LEVELS]; // truth table memory and hash tables
- Vec_Int_t * vRepres[TT_MAX_LEVELS]; // pointers to the representatives from the last hierarchical level
- int vTruthId[TT_MAX_LEVELS];
+ int nLastLevel, nWords;
+ Vec_Mem_t * vTtMem[TT_MAX_LEVELS]; // truth table memory and hash tables
+ Vec_Int_t * vRepres[TT_MAX_LEVELS]; // pointers to the representatives from the last hierarchical level
+ int vTruthId[TT_MAX_LEVELS];
};
Abc_TtHieMan_t * Abc_TtHieManStart(int nVars, int nLevels)
{
- Abc_TtHieMan_t * p = NULL;
- int i;
- if (nLevels > TT_MAX_LEVELS) return p;
- p = ABC_CALLOC(Abc_TtHieMan_t, 1);
- p->nLastLevel = nLevels - 1;
- p->nWords = Abc_TtWordNum(nVars);
- for (i = 0; i < nLevels; i++)
- {
- p->vTtMem[i] = Vec_MemAlloc(p->nWords, 12);
- Vec_MemHashAlloc(p->vTtMem[i], 10000);
- p->vRepres[i] = Vec_IntAlloc(1);
- }
- return p;
+ Abc_TtHieMan_t * p = NULL;
+ int i;
+ if (nLevels > TT_MAX_LEVELS) return p;
+ p = ABC_CALLOC(Abc_TtHieMan_t, 1);
+ p->nLastLevel = nLevels - 1;
+ p->nWords = Abc_TtWordNum(nVars);
+ for (i = 0; i < nLevels; i++)
+ {
+ p->vTtMem[i] = Vec_MemAlloc(p->nWords, 12);
+ Vec_MemHashAlloc(p->vTtMem[i], 10000);
+ p->vRepres[i] = Vec_IntAlloc(1);
+ }
+ return p;
}
void Abc_TtHieManStop(Abc_TtHieMan_t * p)
{
- int i;
- for (i = 0; i <= p->nLastLevel; i++)
- {
- Vec_MemHashFree(p->vTtMem[i]);
- Vec_MemFreeP(&p->vTtMem[i]);
- Vec_IntFree(p->vRepres[i]);
- }
- ABC_FREE(p);
+ int i;
+ for (i = 0; i <= p->nLastLevel; i++)
+ {
+ Vec_MemHashFree(p->vTtMem[i]);
+ Vec_MemFreeP(&p->vTtMem[i]);
+ Vec_IntFree(p->vRepres[i]);
+ }
+ ABC_FREE(p);
}
int Abc_TtHieRetrieveOrInsert(Abc_TtHieMan_t * p, int level, word * pTruth, word * pResult)
{
- int i, iSpot, truthId;
- word * pRepTruth;
- if (level < 0) level += p->nLastLevel + 1;
- if (level < 0 || level > p->nLastLevel) return -1;
- iSpot = *Vec_MemHashLookup(p->vTtMem[level], pTruth);
- if (iSpot == -1) {
- p->vTruthId[level] = Vec_MemHashInsert(p->vTtMem[level], pTruth);
- if (level < p->nLastLevel) return 0;
- iSpot = p->vTruthId[level];
- }
- // return the class representative
- if (level < p->nLastLevel)
- truthId = Vec_IntEntry(p->vRepres[level], iSpot);
- else
- truthId = iSpot;
- for (i = 0; i < level; i++)
- Vec_IntSetEntry(p->vRepres[i], p->vTruthId[i], truthId);
-
- pRepTruth = Vec_MemReadEntry(p->vTtMem[p->nLastLevel], truthId);
- if (level < p->nLastLevel) {
- Abc_TtCopy(pResult, pRepTruth, p->nWords, 0);
- return 1;
- }
- assert(Abc_TtEqual(pTruth, pRepTruth, p->nWords));
- if (pTruth != pResult)
- Abc_TtCopy(pResult, pRepTruth, p->nWords, 0);
- return 0;
+ int i, iSpot, truthId;
+ word * pRepTruth;
+ if (!p) return -1;
+ if (level < 0) level += p->nLastLevel + 1;
+ if (level < 0 || level > p->nLastLevel) return -1;
+ iSpot = *Vec_MemHashLookup(p->vTtMem[level], pTruth);
+ if (iSpot == -1) {
+ p->vTruthId[level] = Vec_MemHashInsert(p->vTtMem[level], pTruth);
+ if (level < p->nLastLevel) return 0;
+ iSpot = p->vTruthId[level];
+ }
+ // return the class representative
+ if (level < p->nLastLevel)
+ truthId = Vec_IntEntry(p->vRepres[level], iSpot);
+ else
+ truthId = iSpot;
+ for (i = 0; i < level; i++)
+ Vec_IntSetEntry(p->vRepres[i], p->vTruthId[i], truthId);
+
+ pRepTruth = Vec_MemReadEntry(p->vTtMem[p->nLastLevel], truthId);
+ if (level < p->nLastLevel) {
+ Abc_TtCopy(pResult, pRepTruth, p->nWords, 0);
+ return 1;
+ }
+ assert(Abc_TtEqual(pTruth, pRepTruth, p->nWords));
+ if (pTruth != pResult)
+ Abc_TtCopy(pResult, pRepTruth, p->nWords, 0);
+ return 0;
}
unsigned Abc_TtCanonicizeHie( Abc_TtHieMan_t * p, word * pTruthInit, int nVars, char * pCanonPerm, int fExact )
{
int fNaive = 1;
int pStore[17];
- static word pTruth[1024];
+ //static word pTruth[1024];
+ word * pTruth = pTruthInit;
unsigned uCanonPhase = 0;
int nOnes, nWords = Abc_TtWordNum( nVars );
int i, k;
assert( nVars <= 16 );
- Abc_TtCopy( pTruth, pTruthInit, nWords, 0 );
+ // handle constant
+ if ( nVars == 0 )
+ {
+ Abc_TtClear( pTruthInit, nWords );
+ return 0;
+ }
+
+ //Abc_TtCopy( pTruth, pTruthInit, nWords, 0 );
for ( i = 0; i < nVars; i++ )
pCanonPerm[i] = i;
@@ -1258,7 +1278,7 @@ unsigned Abc_TtCanonicizeHie( Abc_TtHieMan_t * p, word * pTruthInit, int nVars,
pStore[i] = nOnes - pStore[i];
}
// check cache
- if (Abc_TtHieRetrieveOrInsert(p, 1, pTruth, pTruthInit) > 0) return 0;
+ if (Abc_TtHieRetrieveOrInsert(p, 1, pTruth, pTruthInit) > 0) return 0;
// normalize permutation
{
@@ -1282,7 +1302,7 @@ unsigned Abc_TtCanonicizeHie( Abc_TtHieMan_t * p, word * pTruthInit, int nVars,
}
}
// check cache
- if (Abc_TtHieRetrieveOrInsert(p, 2, pTruth, pTruthInit) > 0) return 0;
+ if (Abc_TtHieRetrieveOrInsert(p, 2, pTruth, pTruthInit) > 0) return 0;
// iterate TT permutations for tied variables
for ( k = 0; k < 5; k++ )
@@ -1301,7 +1321,7 @@ unsigned Abc_TtCanonicizeHie( Abc_TtHieMan_t * p, word * pTruthInit, int nVars,
break;
}
// check cache
- if (Abc_TtHieRetrieveOrInsert(p, 3, pTruth, pTruthInit) > 0) return 0;
+ if (Abc_TtHieRetrieveOrInsert(p, 3, pTruth, pTruthInit) > 0) return 0;
// perform exact NPN using groups
if ( fExact ) {
@@ -1343,7 +1363,7 @@ unsigned Abc_TtCanonicizeHie( Abc_TtHieMan_t * p, word * pTruthInit, int nVars,
}
}
// update cache
- Abc_TtHieRetrieveOrInsert(p, 4, pTruth, pTruthInit);
+ Abc_TtHieRetrieveOrInsert(p, 4, pTruth, pTruthInit);
return 0;
}
@@ -1362,26 +1382,26 @@ SeeAlso []
typedef struct TiedGroup_
{
- char iStart; // index of Abc_TgMan_t::pPerm
- char nGVars; // the number of variables in the group
- char fPhased; // if the phases of the variables are determined
+ char iStart; // index of Abc_TgMan_t::pPerm
+ char nGVars; // the number of variables in the group
+ char fPhased; // if the phases of the variables are determined
} TiedGroup;
typedef struct Abc_TgMan_t_
{
- word *pTruth;
- int nVars; // the number of variables
- int nGVars; // the number of variables in groups ( symmetric variables purged )
- int nGroups; // the number of tied groups
- unsigned uPhase; // phase of each variable and the function
- char pPerm[16]; // permutation of variables, symmetric variables purged, for grouping
- char pPermT[16]; // permutation of variables, symmetric variables expanded, actual transformation for pTruth
- char pPermTRev[16]; // reverse permutation of pPermT
- signed char pPermDir[16]; // for generating the next permutation
- TiedGroup pGroup[16]; // tied groups
- // symemtric group attributes
- char symPhase[16]; // phase type of symemtric groups
- signed char symLink[17]; // singly linked list, indicate the variables in symemtric groups
+ word *pTruth;
+ int nVars; // the number of variables
+ int nGVars; // the number of variables in groups ( symmetric variables purged )
+ int nGroups; // the number of tied groups
+ unsigned uPhase; // phase of each variable and the function
+ char pPerm[16]; // permutation of variables, symmetric variables purged, for grouping
+ char pPermT[16]; // permutation of variables, symmetric variables expanded, actual transformation for pTruth
+ char pPermTRev[16]; // reverse permutation of pPermT
+ signed char pPermDir[16]; // for generating the next permutation
+ TiedGroup pGroup[16]; // tied groups
+ // symemtric group attributes
+ char symPhase[16]; // phase type of symemtric groups
+ signed char symLink[17]; // singly linked list, indicate the variables in symemtric groups
} Abc_TgMan_t;
#if !defined(NDEBUG) && !defined(CANON_VERIFY)
@@ -1402,59 +1422,58 @@ SeeAlso []
// Johnson¨CTrotter algorithm
static int Abc_NextPermSwapC(char * pData, signed char * pDir, int size)
{
- int i, j, k = -1;
- for (i = 0; i < size; i++)
- {
- j = i + pDir[i];
- if (j >= 0 && j < size && pData[i] > pData[j] && (k < 0 || pData[i] > pData[k]))
- k = i;
- }
- if (k < 0) k = 0;
-
- for (i = 0; i < size; i++)
- if (pData[i] > pData[k])
- pDir[i] = -pDir[i];
-
- j = k + pDir[k];
- return j < k ? j : k;
+ int i, j, k = -1;
+ for (i = 0; i < size; i++)
+ {
+ j = i + pDir[i];
+ if (j >= 0 && j < size && pData[i] > pData[j] && (k < 0 || pData[i] > pData[k]))
+ k = i;
+ }
+ if (k < 0) k = 0;
+
+ for (i = 0; i < size; i++)
+ if (pData[i] > pData[k])
+ pDir[i] = -pDir[i];
+
+ j = k + pDir[k];
+ return j < k ? j : k;
}
-typedef unsigned(*TtCanonicizeFunc)(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag);
unsigned Abc_TtCanonicizeWrap(TtCanonicizeFunc func, Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int flag)
{
- int nWords = Abc_TtWordNum(nVars);
- unsigned uCanonPhase1, uCanonPhase2;
- char pCanonPerm2[16];
- static word pTruth2[1024];
-
- if (Abc_TtCountOnesInTruth(pTruth, nVars) != (1 << (nVars - 1)))
- return func(p, pTruth, nVars, pCanonPerm, flag);
- Abc_TtCopy(pTruth2, pTruth, nWords, 1);
- Abc_TtNormalizeSmallTruth(pTruth2, nVars);
- uCanonPhase1 = func(p, pTruth, nVars, pCanonPerm, flag);
- uCanonPhase2 = func(p, pTruth2, nVars, pCanonPerm2, flag);
- if (Abc_TtCompareRev(pTruth, pTruth2, nWords) <= 0)
- return uCanonPhase1;
- Abc_TtCopy(pTruth, pTruth2, nWords, 0);
- memcpy(pCanonPerm, pCanonPerm2, nVars);
- return uCanonPhase2;
+ int nWords = Abc_TtWordNum(nVars);
+ unsigned uCanonPhase1, uCanonPhase2;
+ char pCanonPerm2[16];
+ static word pTruth2[1024];
+
+ Abc_TtNormalizeSmallTruth(pTruth, nVars);
+ if (Abc_TtCountOnesInTruth(pTruth, nVars) != nWords * 32)
+ return func(p, pTruth, nVars, pCanonPerm, flag);
+ Abc_TtCopy(pTruth2, pTruth, nWords, 1);
+ uCanonPhase1 = func(p, pTruth, nVars, pCanonPerm, flag);
+ uCanonPhase2 = func(p, pTruth2, nVars, pCanonPerm2, flag);
+ if (Abc_TtCompareRev(pTruth, pTruth2, nWords) <= 0)
+ return uCanonPhase1;
+ Abc_TtCopy(pTruth, pTruth2, nWords, 0);
+ memcpy(pCanonPerm, pCanonPerm2, nVars);
+ return uCanonPhase2;
}
word gpVerCopy[1024];
static int Abc_TtCannonVerify(word* pTruth, int nVars, char * pCanonPerm, unsigned uCanonPhase)
{
#ifdef CANON_VERIFY
- int nWords = Abc_TtWordNum(nVars);
- char pCanonPermCopy[16];
- static word pCopy2[1024];
- Abc_TtCopy(pCopy2, pTruth, nWords, 0);
- memcpy(pCanonPermCopy, pCanonPerm, sizeof(char) * nVars);
- Abc_TtImplementNpnConfig(pCopy2, nVars, pCanonPermCopy, uCanonPhase);
- Abc_TtNormalizeSmallTruth(pCopy2, nVars);
- return Abc_TtEqual(gpVerCopy, pCopy2, nWords);
+ int nWords = Abc_TtWordNum(nVars);
+ char pCanonPermCopy[16];
+ static word pCopy2[1024];
+ Abc_TtVerifySmallTruth(pTruth, nVars);
+ Abc_TtCopy(pCopy2, pTruth, nWords, 0);
+ memcpy(pCanonPermCopy, pCanonPerm, sizeof(char) * nVars);
+ Abc_TtImplementNpnConfig(pCopy2, nVars, pCanonPermCopy, uCanonPhase);
+ return Abc_TtEqual(gpVerCopy, pCopy2, nWords);
#else
- return 1;
+ return 1;
#endif
}
@@ -1472,44 +1491,44 @@ SeeAlso []
static void Abc_TginitMan(Abc_TgMan_t * pMan, word * pTruth, int nVars)
{
- int i;
- pMan->pTruth = pTruth;
- pMan->nVars = pMan->nGVars = nVars;
- pMan->uPhase = 0;
- for (i = 0; i < nVars; i++)
- {
- pMan->pPerm[i] = i;
- pMan->pPermT[i] = i;
- pMan->pPermTRev[i] = i;
- pMan->symPhase[i] = 1;
- }
+ int i;
+ pMan->pTruth = pTruth;
+ pMan->nVars = pMan->nGVars = nVars;
+ pMan->uPhase = 0;
+ for (i = 0; i < nVars; i++)
+ {
+ pMan->pPerm[i] = i;
+ pMan->pPermT[i] = i;
+ pMan->pPermTRev[i] = i;
+ pMan->symPhase[i] = 1;
+ }
}
static inline void Abc_TgManCopy(Abc_TgMan_t* pDst, word* pDstTruth, Abc_TgMan_t* pSrc)
{
- *pDst = *pSrc;
- Abc_TtCopy(pDstTruth, pSrc->pTruth, Abc_TtWordNum(pSrc->nVars), 0);
- pDst->pTruth = pDstTruth;
+ *pDst = *pSrc;
+ Abc_TtCopy(pDstTruth, pSrc->pTruth, Abc_TtWordNum(pSrc->nVars), 0);
+ pDst->pTruth = pDstTruth;
}
static inline int Abc_TgCannonVerify(Abc_TgMan_t* pMan)
{
- return Abc_TtCannonVerify(pMan->pTruth, pMan->nVars, pMan->pPermT, pMan->uPhase);
+ return Abc_TtCannonVerify(pMan->pTruth, pMan->nVars, pMan->pPermT, pMan->uPhase);
}
void Abc_TgExpendSymmetry(Abc_TgMan_t * pMan, char * pPerm, char * pDest);
static void CheckConfig(Abc_TgMan_t * pMan)
{
#ifndef NDEBUG
- int i;
- char pPermE[16];
- Abc_TgExpendSymmetry(pMan, pMan->pPerm, pPermE);
- for (i = 0; i < pMan->nVars; i++)
- {
- assert(pPermE[i] == pMan->pPermT[i]);
- assert(pMan->pPermTRev[(int)pMan->pPermT[i]] == i);
- }
- assert(Abc_TgCannonVerify(pMan));
+ int i;
+ char pPermE[16];
+ Abc_TgExpendSymmetry(pMan, pMan->pPerm, pPermE);
+ for (i = 0; i < pMan->nVars; i++)
+ {
+ assert(pPermE[i] == pMan->pPermT[i]);
+ assert(pMan->pPermTRev[(int)pMan->pPermT[i]] == i);
+ }
+ assert(Abc_TgCannonVerify(pMan));
#endif
}
@@ -1527,84 +1546,84 @@ SeeAlso []
static inline void Abc_TgFlipVar(Abc_TgMan_t* pMan, int iVar)
{
- int nWords = Abc_TtWordNum(pMan->nVars);
- int ivp = pMan->pPermTRev[iVar];
- Abc_TtFlip(pMan->pTruth, nWords, ivp);
- pMan->uPhase ^= 1 << ivp;
+ int nWords = Abc_TtWordNum(pMan->nVars);
+ int ivp = pMan->pPermTRev[iVar];
+ Abc_TtFlip(pMan->pTruth, nWords, ivp);
+ pMan->uPhase ^= 1 << ivp;
}
static inline void Abc_TgFlipSymGroupByVar(Abc_TgMan_t* pMan, int iVar)
{
- for (; iVar >= 0; iVar = pMan->symLink[iVar])
- if (pMan->symPhase[iVar])
- Abc_TgFlipVar(pMan, iVar);
+ for (; iVar >= 0; iVar = pMan->symLink[iVar])
+ if (pMan->symPhase[iVar])
+ Abc_TgFlipVar(pMan, iVar);
}
static inline void Abc_TgFlipSymGroup(Abc_TgMan_t* pMan, int idx)
{
- Abc_TgFlipSymGroupByVar(pMan, pMan->pPerm[idx]);
+ Abc_TgFlipSymGroupByVar(pMan, pMan->pPerm[idx]);
}
static inline void Abc_TgClearSymGroupPhase(Abc_TgMan_t* pMan, int iVar)
{
- for (; iVar >= 0; iVar = pMan->symLink[iVar])
- pMan->symPhase[iVar] = 0;
+ for (; iVar >= 0; iVar = pMan->symLink[iVar])
+ pMan->symPhase[iVar] = 0;
}
static void Abc_TgImplementPerm(Abc_TgMan_t* pMan, const char *pPermDest)
{
- int i, nVars = pMan->nVars;
- char *pPerm = pMan->pPermT;
- char *pRev = pMan->pPermTRev;
- unsigned uPhase = pMan->uPhase & (1 << nVars);
-
- for (i = 0; i < nVars; i++)
- pRev[(int)pPerm[i]] = i;
- for (i = 0; i < nVars; i++)
- pPerm[i] = pRev[(int)pPermDest[i]];
- for (i = 0; i < nVars; i++)
- pRev[(int)pPerm[i]] = i;
-
- Abc_TtImplementNpnConfig(pMan->pTruth, nVars, pRev, 0);
- Abc_TtNormalizeSmallTruth(pMan->pTruth, nVars);
-
- for (i = 0; i < nVars; i++)
- {
- if (pMan->uPhase & (1 << pPerm[i]))
- uPhase |= (1 << i);
- pPerm[i] = pPermDest[i];
- pRev[(int)pPerm[i]] = i;
- }
- pMan->uPhase = uPhase;
+ int i, nVars = pMan->nVars;
+ char *pPerm = pMan->pPermT;
+ char *pRev = pMan->pPermTRev;
+ unsigned uPhase = pMan->uPhase & (1 << nVars);
+
+ for (i = 0; i < nVars; i++)
+ pRev[(int)pPerm[i]] = i;
+ for (i = 0; i < nVars; i++)
+ pPerm[i] = pRev[(int)pPermDest[i]];
+ for (i = 0; i < nVars; i++)
+ pRev[(int)pPerm[i]] = i;
+
+ Abc_TtImplementNpnConfig(pMan->pTruth, nVars, pRev, 0);
+// Abc_TtVerifySmallTruth(pMan->pTruth, nVars);
+
+ for (i = 0; i < nVars; i++)
+ {
+ if (pMan->uPhase & (1 << pPerm[i]))
+ uPhase |= (1 << i);
+ pPerm[i] = pPermDest[i];
+ pRev[(int)pPerm[i]] = i;
+ }
+ pMan->uPhase = uPhase;
}
static void Abc_TgSwapAdjacentSymGroups(Abc_TgMan_t* pMan, int idx)
{
- int iVar, jVar, ix;
- char pPermNew[16];
- assert(idx < pMan->nGVars - 1);
- iVar = pMan->pPerm[idx];
- jVar = pMan->pPerm[idx + 1];
- pMan->pPerm[idx] = jVar;
- pMan->pPerm[idx + 1] = iVar;
- ABC_SWAP(char, pMan->pPermDir[idx], pMan->pPermDir[idx + 1]);
- if (pMan->symLink[iVar] >= 0 || pMan->symLink[jVar] >= 0)
- {
- Abc_TgExpendSymmetry(pMan, pMan->pPerm, pPermNew);
- Abc_TgImplementPerm(pMan, pPermNew);
- return;
- }
- // plain variable swap
- ix = pMan->pPermTRev[iVar];
- assert(pMan->pPermT[ix] == iVar && pMan->pPermT[ix + 1] == jVar);
- Abc_TtSwapAdjacent(pMan->pTruth, Abc_TtWordNum(pMan->nVars), ix);
- pMan->pPermT[ix] = jVar;
- pMan->pPermT[ix + 1] = iVar;
- pMan->pPermTRev[iVar] = ix + 1;
- pMan->pPermTRev[jVar] = ix;
- if (((pMan->uPhase >> ix) & 1) != ((pMan->uPhase >> (ix + 1)) & 1))
- pMan->uPhase ^= 1 << ix | 1 << (ix + 1);
- assert(Abc_TgCannonVerify(pMan));
+ int iVar, jVar, ix;
+ char pPermNew[16];
+ assert(idx < pMan->nGVars - 1);
+ iVar = pMan->pPerm[idx];
+ jVar = pMan->pPerm[idx + 1];
+ pMan->pPerm[idx] = jVar;
+ pMan->pPerm[idx + 1] = iVar;
+ ABC_SWAP(char, pMan->pPermDir[idx], pMan->pPermDir[idx + 1]);
+ if (pMan->symLink[iVar] >= 0 || pMan->symLink[jVar] >= 0)
+ {
+ Abc_TgExpendSymmetry(pMan, pMan->pPerm, pPermNew);
+ Abc_TgImplementPerm(pMan, pPermNew);
+ return;
+ }
+ // plain variable swap
+ ix = pMan->pPermTRev[iVar];
+ assert(pMan->pPermT[ix] == iVar && pMan->pPermT[ix + 1] == jVar);
+ Abc_TtSwapAdjacent(pMan->pTruth, Abc_TtWordNum(pMan->nVars), ix);
+ pMan->pPermT[ix] = jVar;
+ pMan->pPermT[ix + 1] = iVar;
+ pMan->pPermTRev[iVar] = ix + 1;
+ pMan->pPermTRev[jVar] = ix;
+ if (((pMan->uPhase >> ix) & 1) != ((pMan->uPhase >> (ix + 1)) & 1))
+ pMan->uPhase ^= 1 << ix | 1 << (ix + 1);
+ assert(Abc_TgCannonVerify(pMan));
}
/**Function*************************************************************
@@ -1623,33 +1642,33 @@ static word pSymCopy[1024];
static int Abc_TtIsSymmetric(word * pTruth, int nVars, int iVar, int jVar, int fPhase)
{
- int rv;
- int nWords = Abc_TtWordNum(nVars);
- Abc_TtCopy(pSymCopy, pTruth, nWords, 0);
- Abc_TtSwapVars(pSymCopy, nVars, iVar, jVar);
- rv = Abc_TtEqual(pTruth, pSymCopy, nWords) * 2;
- if (!fPhase) return rv;
- Abc_TtFlip(pSymCopy, nWords, iVar);
- Abc_TtFlip(pSymCopy, nWords, jVar);
- return rv + Abc_TtEqual(pTruth, pSymCopy, nWords);
+ int rv;
+ int nWords = Abc_TtWordNum(nVars);
+ Abc_TtCopy(pSymCopy, pTruth, nWords, 0);
+ Abc_TtSwapVars(pSymCopy, nVars, iVar, jVar);
+ rv = Abc_TtEqual(pTruth, pSymCopy, nWords) * 2;
+ if (!fPhase) return rv;
+ Abc_TtFlip(pSymCopy, nWords, iVar);
+ Abc_TtFlip(pSymCopy, nWords, jVar);
+ return rv + Abc_TtEqual(pTruth, pSymCopy, nWords);
}
static int Abc_TtIsSymmetricHigh(Abc_TgMan_t * pMan, int iVar, int jVar, int fPhase)
{
- int rv, iv, jv, n;
- int nWords = Abc_TtWordNum(pMan->nVars);
- Abc_TtCopy(pSymCopy, pMan->pTruth, nWords, 0);
- for (n = 0, iv = iVar, jv = jVar; iv >= 0 && jv >= 0; iv = pMan->symLink[iv], jv = pMan->symLink[jv], n++)
- Abc_TtSwapVars(pSymCopy, pMan->nVars, iv, jv);
- assert(iv < 0 && jv < 0); // two symmetric groups must have the same size
- rv = Abc_TtEqual(pMan->pTruth, pSymCopy, nWords) * 2;
- if (!fPhase) return rv;
- for (iv = iVar, jv = jVar; iv >= 0 && jv >= 0; iv = pMan->symLink[iv], jv = pMan->symLink[jv])
- {
- if (pMan->symPhase[iv]) Abc_TtFlip(pSymCopy, nWords, iv);
- if (pMan->symPhase[jv]) Abc_TtFlip(pSymCopy, nWords, jv);
- }
- return rv + Abc_TtEqual(pMan->pTruth, pSymCopy, nWords);
+ int rv, iv, jv, n;
+ int nWords = Abc_TtWordNum(pMan->nVars);
+ Abc_TtCopy(pSymCopy, pMan->pTruth, nWords, 0);
+ for (n = 0, iv = iVar, jv = jVar; iv >= 0 && jv >= 0; iv = pMan->symLink[iv], jv = pMan->symLink[jv], n++)
+ Abc_TtSwapVars(pSymCopy, pMan->nVars, iv, jv);
+ assert(iv < 0 && jv < 0); // two symmetric groups must have the same size
+ rv = Abc_TtEqual(pMan->pTruth, pSymCopy, nWords) * 2;
+ if (!fPhase) return rv;
+ for (iv = iVar, jv = jVar; iv >= 0 && jv >= 0; iv = pMan->symLink[iv], jv = pMan->symLink[jv])
+ {
+ if (pMan->symPhase[iv]) Abc_TtFlip(pSymCopy, nWords, iv);
+ if (pMan->symPhase[jv]) Abc_TtFlip(pSymCopy, nWords, jv);
+ }
+ return rv + Abc_TtEqual(pMan->pTruth, pSymCopy, nWords);
}
/**Function*************************************************************
@@ -1658,7 +1677,7 @@ Synopsis [Create groups by cofactor signatures]
Description [Similar to Abc_TtSemiCanonicize.
Use stable insertion sort to keep the order of the variables in the groups.
- Defer permutation. ]
+ Defer permutation. ]
SideEffects []
@@ -1668,53 +1687,53 @@ SeeAlso []
static void Abc_TgCreateGroups(Abc_TgMan_t * pMan)
{
- int pStore[17];
- int i, j, nOnes;
- int nVars = pMan->nVars, nWords = Abc_TtWordNum(nVars);
- TiedGroup * pGrp = pMan->pGroup;
- assert(nVars <= 16);
- // normalize polarity
- nOnes = Abc_TtCountOnesInTruth(pMan->pTruth, nVars);
- if (nOnes > (1 << (nVars - 1)))
- {
- Abc_TtNot(pMan->pTruth, nWords);
- nOnes = (1 << nVars) - nOnes;
- pMan->uPhase |= (1 << nVars);
- }
- // normalize phase
- Abc_TtCountOnesInCofs(pMan->pTruth, nVars, pStore);
- pStore[nVars] = nOnes;
- for (i = 0; i < nVars; i++)
- {
- if (pStore[i] >= nOnes - pStore[i])
- continue;
- Abc_TtFlip(pMan->pTruth, nWords, i);
- pMan->uPhase |= (1 << i);
- pStore[i] = nOnes - pStore[i];
- }
-
- // sort variables
- for (i = 1; i < nVars; i++)
- {
- int a = pStore[i]; char aa = pMan->pPerm[i];
- for (j = i; j > 0 && pStore[j - 1] > a; j--)
- pStore[j] = pStore[j - 1], pMan->pPerm[j] = pMan->pPerm[j - 1];
- pStore[j] = a; pMan->pPerm[j] = aa;
- }
- // group variables
-// Abc_SortIdxC(pStore, pMan->pPerm, nVars);
- pGrp[0].iStart = 0;
- pGrp[0].fPhased = pStore[0] * 2 != nOnes;
- for (i = j = 1; i < nVars; i++)
- {
- if (pStore[i] == pStore[i - 1]) continue;
- pGrp[j].iStart = i;
- pGrp[j].fPhased = pStore[i] * 2 != nOnes;
- pGrp[j - 1].nGVars = i - pGrp[j - 1].iStart;
- j++;
- }
- pGrp[j - 1].nGVars = i - pGrp[j - 1].iStart;
- pMan->nGroups = j;
+ int pStore[17];
+ int i, j, nOnes;
+ int nVars = pMan->nVars, nWords = Abc_TtWordNum(nVars);
+ TiedGroup * pGrp = pMan->pGroup;
+ assert(nVars <= 16);
+ // normalize polarity
+ nOnes = Abc_TtCountOnesInTruth(pMan->pTruth, nVars);
+ if (nOnes > nWords * 32)
+ {
+ Abc_TtNot(pMan->pTruth, nWords);
+ nOnes = nWords * 64 - nOnes;
+ pMan->uPhase |= (1 << nVars);
+ }
+ // normalize phase
+ Abc_TtCountOnesInCofs(pMan->pTruth, nVars, pStore);
+ pStore[nVars] = nOnes;
+ for (i = 0; i < nVars; i++)
+ {
+ if (pStore[i] >= nOnes - pStore[i])
+ continue;
+ Abc_TtFlip(pMan->pTruth, nWords, i);
+ pMan->uPhase |= (1 << i);
+ pStore[i] = nOnes - pStore[i];
+ }
+
+ // sort variables
+ for (i = 1; i < nVars; i++)
+ {
+ int a = pStore[i]; char aa = pMan->pPerm[i];
+ for (j = i; j > 0 && pStore[j - 1] > a; j--)
+ pStore[j] = pStore[j - 1], pMan->pPerm[j] = pMan->pPerm[j - 1];
+ pStore[j] = a; pMan->pPerm[j] = aa;
+ }
+ // group variables
+// Abc_SortIdxC(pStore, pMan->pPerm, nVars);
+ pGrp[0].iStart = 0;
+ pGrp[0].fPhased = pStore[0] * 2 != nOnes;
+ for (i = j = 1; i < nVars; i++)
+ {
+ if (pStore[i] == pStore[i - 1]) continue;
+ pGrp[j].iStart = i;
+ pGrp[j].fPhased = pStore[i] * 2 != nOnes;
+ pGrp[j - 1].nGVars = i - pGrp[j - 1].iStart;
+ j++;
+ }
+ pGrp[j - 1].nGVars = i - pGrp[j - 1].iStart;
+ pMan->nGroups = j;
}
/**Function*************************************************************
@@ -1731,135 +1750,135 @@ SeeAlso []
static int Abc_TgGroupSymmetry(Abc_TgMan_t * pMan, TiedGroup * pGrp, int doHigh)
{
- int i, j, iVar, jVar, nsym = 0;
- int fDone[16], scnt[16], stype[16];
- signed char *symLink = pMan->symLink;
-// char * symPhase = pMan->symPhase;
- int nGVars = pGrp->nGVars;
- char * pVars = pMan->pPerm + pGrp->iStart;
- int modified;
-
- for (i = 0; i < nGVars; i++)
- fDone[i] = 0, scnt[i] = 1;
-
- do {
- modified = 0;
- for (i = 0; i < nGVars - 1; i++)
- {
- iVar = pVars[i];
- if (iVar < 0 || fDone[i]) continue;
-// if (!pGrp->fPhased && !Abc_TtHasVar(pMan->pTruth, pMan->nVars, iVar)) continue;
- // Mark symmetric variables/groups
- for (j = i + 1; j < nGVars; j++)
- {
- jVar = pVars[j];
- if (jVar < 0 || scnt[j] != scnt[i]) // || pMan->symPhase[jVar] != pMan->symPhase[iVar])
- stype[j] = 0;
- else if (scnt[j] == 1)
- stype[j] = Abc_TtIsSymmetric(pMan->pTruth, pMan->nVars, iVar, jVar, !pGrp->fPhased);
- else
- stype[j] = Abc_TtIsSymmetricHigh(pMan, iVar, jVar, !pGrp->fPhased);
- }
- fDone[i] = 1;
- // Merge symmetric groups
- for (j = i + 1; j < nGVars; j++)
- {
- int ii;
- jVar = pVars[j];
- switch (stype[j])
- {
- case 1: // E-Symmetry
- Abc_TgFlipSymGroupByVar(pMan, jVar);
- // fallthrough
- case 2: // NE-Symmetry
- pMan->symPhase[iVar] += pMan->symPhase[jVar];
- break;
- case 3: // multiform Symmetry
- Abc_TgClearSymGroupPhase(pMan, jVar);
- break;
- default: // case 0: No Symmetry
- continue;
- }
-
- for (ii = iVar; symLink[ii] >= 0; ii = symLink[ii])
- ;
- symLink[ii] = jVar;
- pVars[j] = -1;
- scnt[i] += scnt[j];
- modified = 1;
- fDone[i] = 0;
- nsym++;
- }
- }
-// if (++order > 3) printf("%d", order);
- } while (doHigh && modified);
-
- return nsym;
+ int i, j, iVar, jVar, nsym = 0;
+ int fDone[16], scnt[16], stype[16];
+ signed char *symLink = pMan->symLink;
+// char * symPhase = pMan->symPhase;
+ int nGVars = pGrp->nGVars;
+ char * pVars = pMan->pPerm + pGrp->iStart;
+ int modified;
+
+ for (i = 0; i < nGVars; i++)
+ fDone[i] = 0, scnt[i] = 1;
+
+ do {
+ modified = 0;
+ for (i = 0; i < nGVars - 1; i++)
+ {
+ iVar = pVars[i];
+ if (iVar < 0 || fDone[i]) continue;
+// if (!pGrp->fPhased && !Abc_TtHasVar(pMan->pTruth, pMan->nVars, iVar)) continue;
+ // Mark symmetric variables/groups
+ for (j = i + 1; j < nGVars; j++)
+ {
+ jVar = pVars[j];
+ if (jVar < 0 || scnt[j] != scnt[i]) // || pMan->symPhase[jVar] != pMan->symPhase[iVar])
+ stype[j] = 0;
+ else if (scnt[j] == 1)
+ stype[j] = Abc_TtIsSymmetric(pMan->pTruth, pMan->nVars, iVar, jVar, !pGrp->fPhased);
+ else
+ stype[j] = Abc_TtIsSymmetricHigh(pMan, iVar, jVar, !pGrp->fPhased);
+ }
+ fDone[i] = 1;
+ // Merge symmetric groups
+ for (j = i + 1; j < nGVars; j++)
+ {
+ int ii;
+ jVar = pVars[j];
+ switch (stype[j])
+ {
+ case 1: // E-Symmetry
+ Abc_TgFlipSymGroupByVar(pMan, jVar);
+ // fallthrough
+ case 2: // NE-Symmetry
+ pMan->symPhase[iVar] += pMan->symPhase[jVar];
+ break;
+ case 3: // multiform Symmetry
+ Abc_TgClearSymGroupPhase(pMan, jVar);
+ break;
+ default: // case 0: No Symmetry
+ continue;
+ }
+
+ for (ii = iVar; symLink[ii] >= 0; ii = symLink[ii])
+ ;
+ symLink[ii] = jVar;
+ pVars[j] = -1;
+ scnt[i] += scnt[j];
+ modified = 1;
+ fDone[i] = 0;
+ nsym++;
+ }
+ }
+// if (++order > 3) printf("%d", order);
+ } while (doHigh && modified);
+
+ return nsym;
}
static void Abc_TgPurgeSymmetry(Abc_TgMan_t * pMan, int doHigh)
{
- int i, j, k, sum = 0, nVars = pMan->nVars;
- signed char *symLink = pMan->symLink;
- char gcnt[16] = { 0 };
- char * pPerm = pMan->pPerm;
-
- for (i = 0; i <= nVars; i++)
- symLink[i] = -1;
-
- // purge unsupported variables
- if (!pMan->pGroup[0].fPhased)
- {
- int iVar = pMan->nVars;
- for (j = 0; j < pMan->pGroup[0].nGVars; j++)
- {
- int jVar = pPerm[j];
- assert(jVar >= 0);
- if (!Abc_TtHasVar(pMan->pTruth, nVars, jVar))
- {
- symLink[jVar] = symLink[iVar];
- symLink[iVar] = jVar;
- pPerm[j] = -1;
- gcnt[0]++;
- }
- }
- }
-
- for (k = 0; k < pMan->nGroups; k++)
- gcnt[k] += Abc_TgGroupSymmetry(pMan, pMan->pGroup + k, doHigh);
-
- for (i = 0; i < nVars && pPerm[i] >= 0; i++)
- ;
- for (j = i + 1; ; i++, j++)
- {
- while (j < nVars && pPerm[j] < 0) j++;
- if (j >= nVars) break;
- pPerm[i] = pPerm[j];
- }
- for (k = 0; k < pMan->nGroups; k++)
- {
- pMan->pGroup[k].nGVars -= gcnt[k];
- pMan->pGroup[k].iStart -= sum;
- sum += gcnt[k];
- }
- if (pMan->pGroup[0].nGVars == 0)
- {
- pMan->nGroups--;
- memmove(pMan->pGroup, pMan->pGroup + 1, sizeof(TiedGroup) * pMan->nGroups);
- assert(pMan->pGroup[0].iStart == 0);
- }
- pMan->nGVars -= sum;
+ int i, j, k, sum = 0, nVars = pMan->nVars;
+ signed char *symLink = pMan->symLink;
+ char gcnt[16] = { 0 };
+ char * pPerm = pMan->pPerm;
+
+ for (i = 0; i <= nVars; i++)
+ symLink[i] = -1;
+
+ // purge unsupported variables
+ if (!pMan->pGroup[0].fPhased)
+ {
+ int iVar = pMan->nVars;
+ for (j = 0; j < pMan->pGroup[0].nGVars; j++)
+ {
+ int jVar = pPerm[j];
+ assert(jVar >= 0);
+ if (!Abc_TtHasVar(pMan->pTruth, nVars, jVar))
+ {
+ symLink[jVar] = symLink[iVar];
+ symLink[iVar] = jVar;
+ pPerm[j] = -1;
+ gcnt[0]++;
+ }
+ }
+ }
+
+ for (k = 0; k < pMan->nGroups; k++)
+ gcnt[k] += Abc_TgGroupSymmetry(pMan, pMan->pGroup + k, doHigh);
+
+ for (i = 0; i < nVars && pPerm[i] >= 0; i++)
+ ;
+ for (j = i + 1; ; i++, j++)
+ {
+ while (j < nVars && pPerm[j] < 0) j++;
+ if (j >= nVars) break;
+ pPerm[i] = pPerm[j];
+ }
+ for (k = 0; k < pMan->nGroups; k++)
+ {
+ pMan->pGroup[k].nGVars -= gcnt[k];
+ pMan->pGroup[k].iStart -= sum;
+ sum += gcnt[k];
+ }
+ if (pMan->pGroup[0].nGVars == 0)
+ {
+ pMan->nGroups--;
+ memmove(pMan->pGroup, pMan->pGroup + 1, sizeof(TiedGroup) * pMan->nGroups);
+ assert(pMan->pGroup[0].iStart == 0);
+ }
+ pMan->nGVars -= sum;
}
void Abc_TgExpendSymmetry(Abc_TgMan_t * pMan, char * pPerm, char * pDest)
{
- int i = 0, j, k;
- for (j = 0; j < pMan->nGVars; j++)
- for (k = pPerm[j]; k >= 0; k = pMan->symLink[k])
- pDest[i++] = k;
- for (k = pMan->symLink[pMan->nVars]; k >= 0; k = pMan->symLink[k])
- pDest[i++] = k;
- assert(i == pMan->nVars);
+ int i = 0, j, k;
+ for (j = 0; j < pMan->nGVars; j++)
+ for (k = pPerm[j]; k >= 0; k = pMan->symLink[k])
+ pDest[i++] = k;
+ for (k = pMan->symLink[pMan->nVars]; k >= 0; k = pMan->symLink[k])
+ pDest[i++] = k;
+ assert(i == pMan->nVars);
}
@@ -1876,130 +1895,130 @@ SeeAlso []
***********************************************************************/
static int Abc_TgSymGroupPerm(Abc_TgMan_t* pMan, int idx, TiedGroup* pTGrp)
{
- word* pTruth = pMan->pTruth;
- static word pCopy[1024];
- static word pBest[1024];
- int Config = 0;
- int nWords = Abc_TtWordNum(pMan->nVars);
- Abc_TgMan_t tgManCopy, tgManBest;
- int fSwapOnly = pTGrp->fPhased;
-
- CheckConfig(pMan);
- if (fSwapOnly)
- {
- Abc_TgManCopy(&tgManCopy, pCopy, pMan);
- Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pTruth, pCopy, nWords) < 0)
- {
- Abc_TgManCopy(pMan, pTruth, &tgManCopy);
- return 4;
- }
- return 0;
- }
-
- // save two copies
- Abc_TgManCopy(&tgManCopy, pCopy, pMan);
- Abc_TgManCopy(&tgManBest, pBest, pMan);
- // PXY
- // 001
- Abc_TgFlipSymGroup(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 1;
- // PXY
- // 011
- Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 3;
- // PXY
- // 010
- Abc_TgFlipSymGroup(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 2;
- // PXY
- // 110
- Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 6;
- // PXY
- // 111
- Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 7;
- // PXY
- // 101
- Abc_TgFlipSymGroup(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 5;
- // PXY
- // 100
- Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
- CheckConfig(&tgManCopy);
- if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
- Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 4;
- // PXY
- // 000
- Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
- CheckConfig(&tgManCopy);
- assert(Abc_TtEqual(pTruth, pCopy, nWords));
- if (Config == 0)
- return 0;
- assert(Abc_TtCompareRev(pTruth, pBest, nWords) == 1);
- Abc_TgManCopy(pMan, pTruth, &tgManBest);
- return Config;
+ word* pTruth = pMan->pTruth;
+ static word pCopy[1024];
+ static word pBest[1024];
+ int Config = 0;
+ int nWords = Abc_TtWordNum(pMan->nVars);
+ Abc_TgMan_t tgManCopy, tgManBest;
+ int fSwapOnly = pTGrp->fPhased;
+
+ CheckConfig(pMan);
+ if (fSwapOnly)
+ {
+ Abc_TgManCopy(&tgManCopy, pCopy, pMan);
+ Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pTruth, pCopy, nWords) < 0)
+ {
+ Abc_TgManCopy(pMan, pTruth, &tgManCopy);
+ return 4;
+ }
+ return 0;
+ }
+
+ // save two copies
+ Abc_TgManCopy(&tgManCopy, pCopy, pMan);
+ Abc_TgManCopy(&tgManBest, pBest, pMan);
+ // PXY
+ // 001
+ Abc_TgFlipSymGroup(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 1;
+ // PXY
+ // 011
+ Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 3;
+ // PXY
+ // 010
+ Abc_TgFlipSymGroup(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 2;
+ // PXY
+ // 110
+ Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 6;
+ // PXY
+ // 111
+ Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 7;
+ // PXY
+ // 101
+ Abc_TgFlipSymGroup(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 5;
+ // PXY
+ // 100
+ Abc_TgFlipSymGroup(&tgManCopy, idx + 1);
+ CheckConfig(&tgManCopy);
+ if (Abc_TtCompareRev(pBest, pCopy, nWords) == 1)
+ Abc_TgManCopy(&tgManBest, pBest, &tgManCopy), Config = 4;
+ // PXY
+ // 000
+ Abc_TgSwapAdjacentSymGroups(&tgManCopy, idx);
+ CheckConfig(&tgManCopy);
+ assert(Abc_TtEqual(pTruth, pCopy, nWords));
+ if (Config == 0)
+ return 0;
+ assert(Abc_TtCompareRev(pTruth, pBest, nWords) == 1);
+ Abc_TgManCopy(pMan, pTruth, &tgManBest);
+ return Config;
}
static int Abc_TgPermPhase(Abc_TgMan_t* pMan, int iVar)
{
- static word pCopy[1024];
- int nWords = Abc_TtWordNum(pMan->nVars);
- int ivp = pMan->pPermTRev[iVar];
- Abc_TtCopy(pCopy, pMan->pTruth, nWords, 0);
- Abc_TtFlip(pCopy, nWords, ivp);
- if (Abc_TtCompareRev(pMan->pTruth, pCopy, nWords) == 1)
- {
- Abc_TtCopy(pMan->pTruth, pCopy, nWords, 0);
- pMan->uPhase ^= 1 << ivp;
- return 16;
- }
- return 0;
+ static word pCopy[1024];
+ int nWords = Abc_TtWordNum(pMan->nVars);
+ int ivp = pMan->pPermTRev[iVar];
+ Abc_TtCopy(pCopy, pMan->pTruth, nWords, 0);
+ Abc_TtFlip(pCopy, nWords, ivp);
+ if (Abc_TtCompareRev(pMan->pTruth, pCopy, nWords) == 1)
+ {
+ Abc_TtCopy(pMan->pTruth, pCopy, nWords, 0);
+ pMan->uPhase ^= 1 << ivp;
+ return 16;
+ }
+ return 0;
}
static void Abc_TgSimpleEnumeration(Abc_TgMan_t * pMan)
{
- int i, j, k;
- int pGid[16];
-
- for (k = j = 0; j < pMan->nGroups; j++)
- for (i = 0; i < pMan->pGroup[j].nGVars; i++, k++)
- pGid[k] = j;
- assert(k == pMan->nGVars);
-
- for (k = 0; k < 5; k++)
- {
- int fChanges = 0;
- for (i = pMan->nGVars - 2; i >= 0; i--)
- if (pGid[i] == pGid[i + 1])
- fChanges |= Abc_TgSymGroupPerm(pMan, i, pMan->pGroup + pGid[i]);
- for (i = 1; i < pMan->nGVars - 1; i++)
- if (pGid[i] == pGid[i + 1])
- fChanges |= Abc_TgSymGroupPerm(pMan, i, pMan->pGroup + pGid[i]);
-
- for (i = pMan->nVars - 1; i >= 0; i--)
- if (pMan->symPhase[i])
- fChanges |= Abc_TgPermPhase(pMan, i);
- for (i = 1; i < pMan->nVars; i++)
- if (pMan->symPhase[i])
- fChanges |= Abc_TgPermPhase(pMan, i);
- if (!fChanges) break;
- }
- assert(Abc_TgCannonVerify(pMan));
+ int i, j, k;
+ int pGid[16];
+
+ for (k = j = 0; j < pMan->nGroups; j++)
+ for (i = 0; i < pMan->pGroup[j].nGVars; i++, k++)
+ pGid[k] = j;
+ assert(k == pMan->nGVars);
+
+ for (k = 0; k < 5; k++)
+ {
+ int fChanges = 0;
+ for (i = pMan->nGVars - 2; i >= 0; i--)
+ if (pGid[i] == pGid[i + 1])
+ fChanges |= Abc_TgSymGroupPerm(pMan, i, pMan->pGroup + pGid[i]);
+ for (i = 1; i < pMan->nGVars - 1; i++)
+ if (pGid[i] == pGid[i + 1])
+ fChanges |= Abc_TgSymGroupPerm(pMan, i, pMan->pGroup + pGid[i]);
+
+ for (i = pMan->nVars - 1; i >= 0; i--)
+ if (pMan->symPhase[i])
+ fChanges |= Abc_TgPermPhase(pMan, i);
+ for (i = 1; i < pMan->nVars; i++)
+ if (pMan->symPhase[i])
+ fChanges |= Abc_TgPermPhase(pMan, i);
+ if (!fChanges) break;
+ }
+ assert(Abc_TgCannonVerify(pMan));
}
/**Function*************************************************************
@@ -2016,194 +2035,198 @@ SeeAlso []
// enumeration time = exp((cost-27.12)*0.59)
static int Abc_TgEnumerationCost(Abc_TgMan_t * pMan)
{
- int cSym = 0;
- double cPerm = 0.0;
- TiedGroup * pGrp = 0;
- int i, j, n;
- if (pMan->nGroups == 0) return 0;
-
- for (i = 0; i < pMan->nGroups; i++)
- {
- pGrp = pMan->pGroup + i;
- n = pGrp->nGVars;
- if (n > 1)
- cPerm += 0.92 + log(n) / 2 + n * (log(n) - 1);
- }
- if (pMan->pGroup->fPhased)
- n = 0;
- else
- {
- char * pVars = pMan->pPerm;
- n = pMan->pGroup->nGVars;
- for (i = 0; i < n; i++)
- for (j = pVars[i]; j >= 0; j = pMan->symLink[j])
- cSym++;
- }
- // coefficients computed by linear regression
- return pMan->nVars + n * 1.09 + cPerm * 1.65 + 0.5;
-// return (rv > 60 ? 100000000 : 0) + n * 1000000 + cSym * 10000 + cPerm * 100 + 0.5;
+ int cSym = 0;
+ double cPerm = 0.0;
+ TiedGroup * pGrp = 0;
+ int i, j, n;
+ if (pMan->nGroups == 0) return 0;
+
+ for (i = 0; i < pMan->nGroups; i++)
+ {
+ pGrp = pMan->pGroup + i;
+ n = pGrp->nGVars;
+ if (n > 1)
+ cPerm += 0.92 + log(n) / 2 + n * (log(n) - 1);
+ }
+ if (pMan->pGroup->fPhased)
+ n = 0;
+ else
+ {
+ char * pVars = pMan->pPerm;
+ n = pMan->pGroup->nGVars;
+ for (i = 0; i < n; i++)
+ for (j = pVars[i]; j >= 0; j = pMan->symLink[j])
+ cSym++;
+ }
+ // coefficients computed by linear regression
+ return pMan->nVars + n * 1.09 + cPerm * 1.65 + 0.5;
+// return (rv > 60 ? 100000000 : 0) + n * 1000000 + cSym * 10000 + cPerm * 100 + 0.5;
}
static int Abc_TgIsInitPerm(char * pData, signed char * pDir, int size)
{
- int i;
- if (pDir[0] != -1) return 0;
- for (i = 1; i < size; i++)
- if (pDir[i] != -1 || pData[i] < pData[i - 1])
- return 0;
- return 1;
+ int i;
+ if (pDir[0] != -1) return 0;
+ for (i = 1; i < size; i++)
+ if (pDir[i] != -1 || pData[i] < pData[i - 1])
+ return 0;
+ return 1;
}
static void Abc_TgFirstPermutation(Abc_TgMan_t * pMan)
{
- int i;
- for (i = 0; i < pMan->nGVars; i++)
- pMan->pPermDir[i] = -1;
+ int i;
+ for (i = 0; i < pMan->nGVars; i++)
+ pMan->pPermDir[i] = -1;
#ifndef NDEBUG
- for (i = 0; i < pMan->nGroups; i++)
- {
- TiedGroup * pGrp = pMan->pGroup + i;
- int nGvars = pGrp->nGVars;
- char * pVars = pMan->pPerm + pGrp->iStart;
- signed char * pDirs = pMan->pPermDir + pGrp->iStart;
- assert(Abc_TgIsInitPerm(pVars, pDirs, nGvars));
- }
+ for (i = 0; i < pMan->nGroups; i++)
+ {
+ TiedGroup * pGrp = pMan->pGroup + i;
+ int nGvars = pGrp->nGVars;
+ char * pVars = pMan->pPerm + pGrp->iStart;
+ signed char * pDirs = pMan->pPermDir + pGrp->iStart;
+ assert(Abc_TgIsInitPerm(pVars, pDirs, nGvars));
+ }
#endif
}
static int Abc_TgNextPermutation(Abc_TgMan_t * pMan)
{
- int i, j, nGvars;
- TiedGroup * pGrp;
- char * pVars;
- signed char * pDirs;
- for (i = 0; i < pMan->nGroups; i++)
- {
- pGrp = pMan->pGroup + i;
- nGvars = pGrp->nGVars;
- if (nGvars == 1) continue;
- pVars = pMan->pPerm + pGrp->iStart;
- pDirs = pMan->pPermDir + pGrp->iStart;
- j = Abc_NextPermSwapC(pVars, pDirs, nGvars);
- if (j >= 0)
- {
- Abc_TgSwapAdjacentSymGroups(pMan, j + pGrp->iStart);
- return 1;
- }
- Abc_TgSwapAdjacentSymGroups(pMan, pGrp->iStart);
- assert(Abc_TgIsInitPerm(pVars, pDirs, nGvars));
- }
- return 0;
+ int i, j, nGvars;
+ TiedGroup * pGrp;
+ char * pVars;
+ signed char * pDirs;
+ for (i = 0; i < pMan->nGroups; i++)
+ {
+ pGrp = pMan->pGroup + i;
+ nGvars = pGrp->nGVars;
+ if (nGvars == 1) continue;
+ pVars = pMan->pPerm + pGrp->iStart;
+ pDirs = pMan->pPermDir + pGrp->iStart;
+ j = Abc_NextPermSwapC(pVars, pDirs, nGvars);
+ if (j >= 0)
+ {
+ Abc_TgSwapAdjacentSymGroups(pMan, j + pGrp->iStart);
+ return 1;
+ }
+ Abc_TgSwapAdjacentSymGroups(pMan, pGrp->iStart);
+ assert(Abc_TgIsInitPerm(pVars, pDirs, nGvars));
+ }
+ return 0;
}
static inline unsigned grayCode(unsigned a) { return a ^ (a >> 1); }
-static int grayFlip(unsigned a, int n)
+static int grayFlip(unsigned a)
{
- unsigned d = grayCode(a) ^ grayCode(a + 1);
- int i;
- for (i = 0; i < n; i++)
- if (d == 1U << i) return i;
- assert(0);
- return -1;
-}
+ int i;
+ for (i = 0, a++; ; i++)
+ if (a & (1 << i)) return i;
+ }
static inline void Abc_TgSaveBest(Abc_TgMan_t * pMan, Abc_TgMan_t * pBest)
{
- if (Abc_TtCompare(pBest->pTruth, pMan->pTruth, Abc_TtWordNum(pMan->nVars)) == 1)
- Abc_TgManCopy(pBest, pBest->pTruth, pMan);
+ if (Abc_TtCompare(pBest->pTruth, pMan->pTruth, Abc_TtWordNum(pMan->nVars)) == 1)
+ Abc_TgManCopy(pBest, pBest->pTruth, pMan);
}
static void Abc_TgPhaseEnumeration(Abc_TgMan_t * pMan, Abc_TgMan_t * pBest)
{
- char pFGrps[16];
- TiedGroup * pGrp = pMan->pGroup;
- int i, j, n = pGrp->nGVars;
-
- Abc_TgSaveBest(pMan, pBest);
- if (pGrp->fPhased) return;
-
- // sort by symPhase
- for (i = 0; i < n; i++)
- {
- char iv = pMan->pPerm[i];
- for (j = i; j > 0 && pMan->symPhase[(int)pFGrps[j-1]] > pMan->symPhase[(int)iv]; j--)
- pFGrps[j] = pFGrps[j - 1];
- pFGrps[j] = iv;
- }
-
- for (i = 0; i < (1 << n) - 1; i++)
- {
- Abc_TgFlipSymGroupByVar(pMan, pFGrps[grayFlip(i, n)]);
- Abc_TgSaveBest(pMan, pBest);
- }
+ char pFGrps[16];
+ TiedGroup * pGrp = pMan->pGroup;
+ int i, j, n = pGrp->nGVars;
+
+ Abc_TgSaveBest(pMan, pBest);
+ if (pGrp->fPhased) return;
+
+ // sort by symPhase
+ for (i = 0; i < n; i++)
+ {
+ char iv = pMan->pPerm[i];
+ for (j = i; j > 0 && pMan->symPhase[(int)pFGrps[j-1]] > pMan->symPhase[(int)iv]; j--)
+ pFGrps[j] = pFGrps[j - 1];
+ pFGrps[j] = iv;
+ }
+
+ for (i = 0; i < (1 << n) - 1; i++)
+ {
+ Abc_TgFlipSymGroupByVar(pMan, pFGrps[grayFlip(i)]);
+ Abc_TgSaveBest(pMan, pBest);
+ }
}
static void Abc_TgFullEnumeration(Abc_TgMan_t * pWork, Abc_TgMan_t * pBest)
{
-// static word pCopy[1024];
-// Abc_TgMan_t tgManCopy;
-// Abc_TgManCopy(&tgManCopy, pCopy, pMan);
-
- Abc_TgFirstPermutation(pWork);
- do Abc_TgPhaseEnumeration(pWork, pBest);
- while (Abc_TgNextPermutation(pWork));
- pBest->uPhase |= 1U << 30;
+// static word pCopy[1024];
+// Abc_TgMan_t tgManCopy;
+// Abc_TgManCopy(&tgManCopy, pCopy, pMan);
+
+ Abc_TgFirstPermutation(pWork);
+ do Abc_TgPhaseEnumeration(pWork, pBest);
+ while (Abc_TgNextPermutation(pWork));
+ pBest->uPhase |= 1 << 30;
}
unsigned Abc_TtCanonicizeAda(Abc_TtHieMan_t * p, word * pTruth, int nVars, char * pCanonPerm, int iThres)
{
- int nWords = Abc_TtWordNum(nVars);
- unsigned fExac = 0, fHash = 1U << 29;
- static word pCopy[1024];
- Abc_TgMan_t tgMan, tgManCopy;
- int iCost;
- const int MaxCost = 84; // maximun posible cost for function with 16 inputs
- const int doHigh = iThres / 100, iEnumThres = iThres % 100;
+ int nWords = Abc_TtWordNum(nVars);
+ unsigned fExac = 0, fHash = 1 << 29;
+ static word pCopy[1024];
+ Abc_TgMan_t tgMan, tgManCopy;
+ int iCost;
+ const int MaxCost = 84; // maximun posible cost for function with 16 inputs
+ const int doHigh = iThres / 100, iEnumThres = iThres % 100;
+
+ // handle constant
+ if ( nVars == 0 ) {
+ Abc_TtClear( pTruth, nWords );
+ return 0;
+ }
+ Abc_TtVerifySmallTruth(pTruth, nVars);
#ifdef CANON_VERIFY
- Abc_TtCopy(gpVerCopy, pTruth, nWords, 0);
+ Abc_TtCopy(gpVerCopy, pTruth, nWords, 0);
#endif
- assert(nVars <= 16);
- if (p && Abc_TtHieRetrieveOrInsert(p, -5, pTruth, pTruth) > 0) return fHash;
- Abc_TginitMan(&tgMan, pTruth, nVars);
- Abc_TgCreateGroups(&tgMan);
- if (p && Abc_TtHieRetrieveOrInsert(p, -4, pTruth, pTruth) > 0) return fHash;
- Abc_TgPurgeSymmetry(&tgMan, doHigh);
-
- Abc_TgExpendSymmetry(&tgMan, tgMan.pPerm, pCanonPerm);
- Abc_TgImplementPerm(&tgMan, pCanonPerm);
- assert(Abc_TgCannonVerify(&tgMan));
-
- if (p == NULL) {
- if (iEnumThres > MaxCost || Abc_TgEnumerationCost(&tgMan) < iEnumThres) {
- Abc_TgManCopy(&tgManCopy, pCopy, &tgMan);
- Abc_TgFullEnumeration(&tgManCopy, &tgMan);
- }
- else
- Abc_TgSimpleEnumeration(&tgMan);
- }
- else {
- iCost = Abc_TgEnumerationCost(&tgMan);
- if (iCost < iEnumThres) fExac = 1U << 30;
- if (Abc_TtHieRetrieveOrInsert(p, -3, pTruth, pTruth) > 0) return fHash + fExac;
- Abc_TgManCopy(&tgManCopy, pCopy, &tgMan);
- Abc_TgSimpleEnumeration(&tgMan);
- if (Abc_TtHieRetrieveOrInsert(p, -2, pTruth, pTruth) > 0) return fHash + fExac;
- if (fExac) {
- Abc_TgManCopy(&tgMan, pTruth, &tgManCopy);
- Abc_TgFullEnumeration(&tgManCopy, &tgMan);
- }
- Abc_TtHieRetrieveOrInsert(p, -1, pTruth, pTruth);
- }
- memcpy(pCanonPerm, tgMan.pPermT, sizeof(char) * nVars);
+ assert(nVars <= 16);
+ if (p && Abc_TtHieRetrieveOrInsert(p, -5, pTruth, pTruth) > 0) return fHash;
+ Abc_TginitMan(&tgMan, pTruth, nVars);
+ Abc_TgCreateGroups(&tgMan);
+ if (p && Abc_TtHieRetrieveOrInsert(p, -4, pTruth, pTruth) > 0) return fHash;
+ Abc_TgPurgeSymmetry(&tgMan, doHigh);
+
+ Abc_TgExpendSymmetry(&tgMan, tgMan.pPerm, pCanonPerm);
+ Abc_TgImplementPerm(&tgMan, pCanonPerm);
+ assert(Abc_TgCannonVerify(&tgMan));
+
+ if (p == NULL) {
+ if (iEnumThres > MaxCost || Abc_TgEnumerationCost(&tgMan) < iEnumThres) {
+ Abc_TgManCopy(&tgManCopy, pCopy, &tgMan);
+ Abc_TgFullEnumeration(&tgManCopy, &tgMan);
+ }
+ else
+ Abc_TgSimpleEnumeration(&tgMan);
+ }
+ else {
+ iCost = Abc_TgEnumerationCost(&tgMan);
+ if (iCost < iEnumThres) fExac = 1 << 30;
+ if (Abc_TtHieRetrieveOrInsert(p, -3, pTruth, pTruth) > 0) return fHash + fExac;
+ Abc_TgManCopy(&tgManCopy, pCopy, &tgMan);
+ Abc_TgSimpleEnumeration(&tgMan);
+ if (Abc_TtHieRetrieveOrInsert(p, -2, pTruth, pTruth) > 0) return fHash + fExac;
+ if (fExac) {
+ Abc_TgManCopy(&tgMan, pTruth, &tgManCopy);
+ Abc_TgFullEnumeration(&tgManCopy, &tgMan);
+ }
+ Abc_TtHieRetrieveOrInsert(p, -1, pTruth, pTruth);
+ }
+ memcpy(pCanonPerm, tgMan.pPermT, sizeof(char) * nVars);
#ifdef CANON_VERIFY
- if (!Abc_TgCannonVerify(&tgMan))
- printf("Canonical form verification failed!\n");
+ if (!Abc_TgCannonVerify(&tgMan))
+ printf("Canonical form verification failed!\n");
#endif
- return tgMan.uPhase;
+ return tgMan.uPhase;
}
////////////////////////////////////////////////////////////////////////
diff --git a/src/opt/dau/dauGia.c b/src/opt/dau/dauGia.c
index 424ec53..eebfa9a 100644
--- a/src/opt/dau/dauGia.c
+++ b/src/opt/dau/dauGia.c
@@ -449,6 +449,10 @@ int Dsm_ManTruthToGia( void * p, word * pTruth, Vec_Int_t * vLeaves, Vec_Int_t *
Abc_TtCopy( pTruthCopy, pTruth, Abc_TtWordNum(Vec_IntSize(vLeaves)), 0 );
m_Calls++;
assert( Vec_IntSize(vLeaves) <= DAU_DSD_MAX_VAR );
+ if ( Vec_IntSize(vLeaves) == 0 )
+ return (int)(pTruth[0] & 1);
+ if ( Vec_IntSize(vLeaves) == 1 )
+ return Abc_LitNotCond( Vec_IntEntry(vLeaves, 0), (int)(pTruth[0] & 1) );
// collect delay information
if ( fDelayBalance && fUseMuxes )
{
diff --git a/src/opt/dau/dauNpn.c b/src/opt/dau/dauNpn.c
index d8c1911..b57ade6 100644
--- a/src/opt/dau/dauNpn.c
+++ b/src/opt/dau/dauNpn.c
@@ -21,6 +21,7 @@
#include "dauInt.h"
#include "misc/util/utilTruth.h"
#include "misc/extra/extra.h"
+#include "bool/lucky/lucky.h"
ABC_NAMESPACE_IMPL_START
@@ -122,6 +123,7 @@ void Dau_TruthEnum()
{
FILE * pFile = fopen( pFileName, "wb" );
int RetValue = fwrite( pTable, 8, nSizeW, pFile );
+ RetValue = 0;
fclose( pFile );
ABC_FREE( pTable );
}
@@ -144,31 +146,42 @@ unsigned * Dau_ReadFile( char * pFileName, int nSizeW )
abctime clk = Abc_Clock();
FILE * pFile = fopen( pFileName, "rb" );
unsigned * p = (unsigned *)ABC_CALLOC(word, nSizeW);
- int RetValue = fread( p, sizeof(word), nSizeW, pFile );
- fclose( pFile );
+ int RetValue = pFile ? fread( p, sizeof(word), nSizeW, pFile ) : 0;
+ RetValue = 0;
+ if ( pFile )
+ {
+ printf( "Finished reading file \"%s\".\n", pFileName );
+ fclose( pFile );
+ }
+ else
+ printf( "Cannot open input file \"%s\".\n", pFileName );
Abc_PrintTime( 1, "File reading", Abc_Clock() - clk );
return p;
}
-void Dau_AddFunction( word tCur, int nVars, unsigned * pTable, Vec_Int_t * vNpns )
+int Dau_AddFunction( word tCur, int nVars, unsigned * pTable, Vec_Int_t * vNpns, Vec_Int_t * vNpns_ )
{
int Digit = (1 << nVars)-1;
word tMask = Abc_Tt6Mask( 1 << nVars );
word tNorm = (tCur >> Digit) & 1 ? ~tCur : tCur;
unsigned t = (unsigned)(tNorm & tMask);
- unsigned tRep = pTable[t];
- unsigned tRep2 = pTable[tRep & 0x7FFFFFFF];
+ unsigned tRep = pTable[t] & 0x7FFFFFFF;
+ unsigned tRep2 = pTable[tRep];
assert( ((tNorm >> Digit) & 1) == 0 );
if ( (tRep2 >> 31) == 0 ) // first time
{
Vec_IntPush( vNpns, tRep2 );
- pTable[tRep & 0x7FFFFFFF] = tRep2 | (1 << 31);
+ if ( Abc_TtSupportSize(&tCur, nVars) < nVars )
+ Vec_IntPush( vNpns_, tRep2 );
+ pTable[tRep] = tRep2 | (1 << 31);
+ return tRep2;
}
-
+ return 0;
}
void Dau_NetworkEnum()
{
abctime clk = Abc_Clock();
int Limit = 2;
+ int UseTwo = 0;
#ifdef USE4VARS
int nVars = 4;
int nSizeW = 1 << 14;
@@ -178,146 +191,626 @@ void Dau_NetworkEnum()
int nSizeW = 1 << 30;
char * pFileName = "tableW30.data";
#endif
- unsigned * pTable = Dau_ReadFile( pFileName, nSizeW );
- Vec_Int_t * vNpns = Vec_IntAlloc( 1000 );
- int i, v, g, k, m, Entry, Count = 1, iPrev = 0, iLast = 1;
+ unsigned * pTable = Dau_ReadFile( pFileName, nSizeW );
+ Vec_Wec_t * vNpns = Vec_WecStart( 32 );
+ Vec_Wec_t * vNpns_ = Vec_WecStart( 32 );
+ int i, v, u, g, k, m, n, Res, Entry;
unsigned Inv = (unsigned)Abc_Tt6Mask(1 << (nVars-1));
+ // create constant function and buffer/inverter function
pTable[0] |= (1 << 31);
pTable[Inv] |= (1 << 31);
- Vec_IntPushTwo( vNpns, 0, Inv );
- Vec_IntForEachEntryStart( vNpns, Entry, i, 1 )
+ Vec_IntPushTwo( Vec_WecEntry(vNpns, 0), 0, Inv );
+ Vec_IntPushTwo( Vec_WecEntry(vNpns_, 0), 0, Inv );
+ printf("Nodes = %2d. New = %6d. Total = %6d. New = %6d. Total = %6d. ",
+ 0, Vec_IntSize(Vec_WecEntry(vNpns, 0)), Vec_WecSizeSize(vNpns),
+ Vec_IntSize(Vec_WecEntry(vNpns_, 0)), Vec_WecSizeSize(vNpns_) );
+ Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ // numerate other functions based on how many nodes they have
+ for ( n = 1; n < 32; n++ )
{
- word uTruth = (((word)Entry) << 32) | (word)Entry;
- int nSupp = Abc_TtSupportSize( &uTruth, nVars );
- //printf( "Exploring function %4d with %d vars: ", i, nSupp );
- //printf( " %04x\n", (int)uTruth );
- //Dau_DsdPrintFromTruth( &uTruth, 4 );
- for ( v = 0; v < nSupp; v++ )
+ Vec_Int_t * vFuncsN2 = n > 1 ? Vec_WecEntry( vNpns, n-2 ) : NULL;
+ Vec_Int_t * vFuncsN1 = Vec_WecEntry( vNpns, n-1 );
+ Vec_Int_t * vFuncsN = Vec_WecEntry( vNpns, n );
+ Vec_Int_t * vFuncsN_ = Vec_WecEntry( vNpns_,n );
+ Vec_IntForEachEntry( vFuncsN1, Entry, i )
{
- word tGate, tCur;
- word Cof0 = Abc_Tt6Cofactor0( uTruth, nVars-1-v );
- word Cof1 = Abc_Tt6Cofactor1( uTruth, nVars-1-v );
- for ( g = 0; g < Limit; g++ )
+ word uTruth = (((word)Entry) << 32) | (word)Entry;
+ int nSupp = Abc_TtSupportSize( &uTruth, nVars );
+ assert( nSupp == 6 || !Abc_Tt6HasVar(uTruth, nVars-1-nSupp) );
+ //printf( "Exploring function %4d with %d vars: ", i, nSupp );
+ //printf( " %04x\n", (int)uTruth );
+ //Dau_DsdPrintFromTruth( &uTruth, 4 );
+ for ( v = 0; v < nSupp; v++ )
{
- if ( nSupp < nVars )
+ word tGate, tCur;
+ word Cof0 = Abc_Tt6Cofactor0( uTruth, nVars-1-v );
+ word Cof1 = Abc_Tt6Cofactor1( uTruth, nVars-1-v );
+ for ( g = 0; g < Limit; g++ )
{
- if ( g == 0 )
+ if ( nSupp < nVars )
{
- tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-nSupp];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
-
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ if ( g == 0 )
+ {
+ tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-nSupp];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
+ else
+ {
+ tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-nSupp];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
+ }
+ }
+ for ( g = 0; g < Limit; g++ )
+ {
+ // add one cross bar
+ for ( k = 0; k < nSupp; k++ ) if ( k != v )
+ {
+ if ( g == 0 )
+ {
+ tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tGate = s_Truths6[nVars-1-v] & ~s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
+ else
+ {
+ tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
}
- else
+ }
+ for ( g = 0; g < Limit; g++ )
+ {
+ // add two cross bars
+ for ( k = 0; k < nSupp; k++ ) if ( k != v )
+ for ( m = k+1; m < nSupp; m++ ) if ( m != v )
{
- tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-nSupp];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ if ( g == 0 )
+ {
+ tGate = s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tGate = s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tGate = ~s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tGate = ~s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
+ else
+ {
+ tGate = s_Truths6[nVars-1-m] ^ s_Truths6[nVars-1-k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ }
}
}
}
- for ( g = 0; g < Limit; g++ )
+ }
+ if ( UseTwo && vFuncsN2 )
+ Vec_IntForEachEntry( vFuncsN2, Entry, i )
+ {
+ word uTruth = (((word)Entry) << 32) | (word)Entry;
+ int nSupp = Abc_TtSupportSize( &uTruth, nVars );
+ assert( nSupp == 6 || !Abc_Tt6HasVar(uTruth, nVars-1-nSupp) );
+ //printf( "Exploring function %4d with %d vars: ", i, nSupp );
+ //printf( " %04x\n", (int)uTruth );
+ //Dau_DsdPrintFromTruth( &uTruth, 4 );
+ for ( v = 0; v < nSupp; v++ )
+// for ( u = v+1; u < nSupp; u++ ) if ( u != v )
+ for ( u = 0; u < nSupp; u++ ) if ( u != v )
{
+ word tGate1, tGate2, tCur;
+ word Cof0 = Abc_Tt6Cofactor0( uTruth, nVars-1-v );
+ word Cof1 = Abc_Tt6Cofactor1( uTruth, nVars-1-v );
+
+ word Cof00 = Abc_Tt6Cofactor0( Cof0, nVars-1-u );
+ word Cof01 = Abc_Tt6Cofactor1( Cof0, nVars-1-u );
+ word Cof10 = Abc_Tt6Cofactor0( Cof1, nVars-1-u );
+ word Cof11 = Abc_Tt6Cofactor1( Cof1, nVars-1-u );
+
+ tGate1 = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-u];
+ tGate2 = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-u];
+
+ Cof0 = (tGate2 & Cof00) | (~tGate2 & Cof01);
+ Cof1 = (tGate2 & Cof10) | (~tGate2 & Cof11);
+
+ tCur = (tGate1 & Cof1) | (~tGate1 & Cof0);
+ Res = Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ if ( Res )
+ printf( "Found function %d\n", Res );
+
+ tCur = (tGate1 & Cof0) | (~tGate1 & Cof1);
+ Res = Dau_AddFunction( tCur, nVars, pTable, vFuncsN, vFuncsN_ );
+ if ( Res )
+ printf( "Found function %d\n", Res );
+ }
+ }
+ printf("Nodes = %2d. New = %6d. Total = %6d. New = %6d. Total = %6d. ",
+ n, Vec_IntSize(vFuncsN), Vec_WecSizeSize(vNpns), Vec_IntSize(vFuncsN_), Vec_WecSizeSize(vNpns_) );
+ Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ fflush(stdout);
+ if ( Vec_IntSize(vFuncsN) == 0 )
+ break;
+ }
+// printf( "Functions with 7 nodes:\n" );
+// Vec_IntForEachEntry( Vec_WecEntry(vNpns_,7), Entry, i )
+// printf( "%04x ", Entry );
+// printf( "\n" );
+
+ Vec_WecFree( vNpns );
+ Vec_WecFree( vNpns_ );
+ ABC_FREE( pTable );
+ Abc_PrintTime( 1, "Total time", Abc_Clock() - clk );
+ fflush(stdout);
+}
+void Dau_NetworkEnumTest()
+{
+ //Dau_TruthEnum();
+ Dau_NetworkEnum();
+}
+
+
+
+/**Function*************************************************************
+
+ Synopsis [Count the number of symmetric pairs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Dau_CountSymms( word t, int nVars )
+{
+ word Cof0, Cof1;
+ int i, j, nPairs = 0;
+ for ( i = 0; i < nVars; i++ )
+ for ( j = i+1; j < nVars; j++ )
+ nPairs += Abc_TtVarsAreSymmetric(&t, nVars, i, j, &Cof0, &Cof1);
+ return nPairs;
+}
+int Dau_CountSymms2( word t, int nVars )
+{
+ word Cof0, Cof1;
+ int i, j, SymVars = 0;
+ for ( i = 0; i < nVars; i++ )
+ for ( j = i+1; j < nVars; j++ )
+ if ( Abc_TtVarsAreSymmetric(&t, nVars, i, j, &Cof0, &Cof1) )
+ SymVars |= (1 << j);
+ return SymVars;
+}
+int Dau_CountCompl1( word t, int v, int nVars )
+{
+ word tNew = Abc_Tt6Flip(t, v);
+ int k;
+ if ( tNew == ~t )
+ return 1;
+ for ( k = 0; k < nVars; k++ ) if ( k != v )
+ if ( tNew == Abc_Tt6Flip(t, k) )
+ return 1;
+ return 0;
+}
+int Dau_CountCompl( word t, int nVars )
+{
+ int i, nPairs = 0;
+ for ( i = 0; i < nVars; i++ )
+ nPairs += Dau_CountCompl1(t, i, nVars);
+ return nPairs;
+}
+
+/**Function*************************************************************
+
+ Synopsis [Performs exact canonicization of semi-canonical classes.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Vec_Wrd_t * Dau_ExactNpnForClasses( Vec_Mem_t * vTtMem, Vec_Int_t * vNodSup, int nVars, int nInputs )
+{
+ Vec_Wrd_t * vCanons = Vec_WrdStart( Vec_IntSize(vNodSup) );
+ word pAuxWord[1024], pAuxWord1[1024];
+ word uTruth; int i, Entry;
+ permInfo * pi = setPermInfoPtr(nVars);
+ Vec_IntForEachEntry( vNodSup, Entry, i )
+ {
+ if ( (Entry & 0xF) > nVars )
+ continue;
+ uTruth = *Vec_MemReadEntry( vTtMem, i );
+ simpleMinimal(&uTruth, pAuxWord, pAuxWord1, pi, nVars);
+ Vec_WrdWriteEntry( vCanons, i, uTruth );
+ }
+ freePermInfoPtr(pi);
+ return vCanons;
+}
+void Dau_ExactNpnPrint( Vec_Mem_t * vTtMem, Vec_Int_t * vNodSup, int nVars, int nInputs, int nNodesMax )
+{
+ abctime clk = Abc_Clock(); int n, nTotal = 0;
+ Vec_Wrd_t * vCanons = Dau_ExactNpnForClasses( vTtMem, vNodSup, nVars, nInputs );
+ Vec_Mem_t * vTtMem2 = Vec_MemAlloc( Vec_MemEntrySize(vTtMem), 10 );
+ Vec_MemHashAlloc( vTtMem2, 1<<10 );
+ Abc_PrintTime( 1, "Exact NPN computation time", Abc_Clock() - clk );
+ printf( "Final results:\n" );
+ for ( n = 0; n <= nNodesMax; n++ )
+ {
+ int i, Entry, Entry2, nEntries2, Counter = 0, Counter2 = 0;
+ Vec_IntForEachEntry( vNodSup, Entry, i )
+ {
+ if ( (Entry & 0xF) > nVars || (Entry >> 16) != n )
+ continue;
+ Counter++;
+ nEntries2 = Vec_MemEntryNum(vTtMem2);
+ Entry2 = Vec_MemHashInsert( vTtMem2, Vec_WrdEntryP(vCanons, i) );
+ if ( nEntries2 == Vec_MemEntryNum(vTtMem2) ) // found in the table - not new
+ continue;
+ Counter2++;
+ }
+ nTotal += Counter2;
+ printf( "Nodes = %2d. ", n );
+ printf( "Semi-canonical = %8d. ", Counter );
+ printf( "Canonical = %8d. ", Counter2 );
+ printf( "Total = %8d.", nTotal );
+ printf( "\n" );
+ }
+ Vec_MemHashFree( vTtMem2 );
+ Vec_MemFreeP( &vTtMem2 );
+ Vec_WrdFree( vCanons );
+ fflush(stdout);
+}
+
+/**Function*************************************************************
+
+ Synopsis [Saving hash tables.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Dau_TablesSave( int nInputs, int nVars, Vec_Mem_t * vTtMem, Vec_Int_t * vNodSup, int nFronts, abctime clk )
+{
+ FILE * pFile;
+ char FileName[100];
+ int i, nWords = Abc_TtWordNum(nInputs);
+ // NPN classes
+ sprintf( FileName, "npn%d%d.ttd", nInputs, nVars );
+ pFile = fopen( FileName, "wb" );
+ for ( i = 0; i < Vec_MemEntryNum(vTtMem); i++ )
+ fwrite( Vec_MemReadEntry(vTtMem, i), 8, nWords, pFile );
+ fwrite( Vec_IntArray(vNodSup), 4, Vec_IntSize(vNodSup), pFile );
+ fclose( pFile );
+// printf( "Dumped files with %10d classes after exploring %10d frontiers.\n",
+// Vec_IntSize(vNodSup), nFronts );
+ printf( "Dumped file \"%s\" with %10d classes after exploring %10d frontiers. ",
+ FileName, Vec_IntSize(vNodSup), nFronts );
+ Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ fflush(stdout);
+}
+
+/**Function*************************************************************
+
+ Synopsis [Dump functions by the number of nodes.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Dau_DumpFuncs( Vec_Mem_t * vTtMem, Vec_Int_t * vNodSup, int nVars, int nMax )
+{
+ FILE * pFile[20];
+ int Counters[20] = {0};
+ int n, i;
+ assert( nVars == 4 || nVars == 5 );
+ for ( n = 0; n <= nMax; n++ )
+ {
+ char FileName[100];
+ sprintf( FileName, "func%d_min%d.tt", nVars, n );
+ pFile[n] = fopen( FileName, "wb" );
+ }
+ for ( i = 0; i < Vec_MemEntryNum(vTtMem); i++ )
+ {
+ word * pTruth = Vec_MemReadEntry( vTtMem, i );
+ int NodSup = Vec_IntEntry( vNodSup, i );
+ if ( (NodSup & 0xF) != nVars )
+ continue;
+ Counters[NodSup >> 16]++;
+ if ( nVars == 4 )
+ fprintf( pFile[NodSup >> 16], "%04x\n", (int)(0xFFFF & pTruth[0]) );
+ else if ( nVars == 5 )
+ fprintf( pFile[NodSup >> 16], "%08x\n", (int)(0xFFFFFFFF & pTruth[0]) );
+ }
+ for ( n = 0; n <= nMax; n++ )
+ {
+ printf( "Dumped %8d %d-node %d-input functions into file.\n", Counters[n], n, nVars );
+ fclose( pFile[n] );
+ }
+}
+
+/**Function*************************************************************
+
+ Synopsis [Function enumeration.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Dau_CountFuncs( Vec_Int_t * vNodSup, int iStart, int iStop, int nVars )
+{
+ int i, Entry, Count = 0;
+ Vec_IntForEachEntryStartStop( vNodSup, Entry, i, iStart, iStop )
+ Count += ((Entry & 0xF) <= nVars);
+ return Count;
+}
+int Dau_PrintStats( int nNodes, int nInputs, int nVars, Vec_Int_t * vNodSup, int iStart, int iStop, word nSteps, int Count2, abctime clk )
+{
+ int nNew;
+ printf("N =%2d | ", nNodes );
+ printf("C =%12.0f ", (double)(iword)nSteps );
+ printf("New%d =%10d ", nInputs, iStop-iStart );
+ printf("All%d =%10d | ", nInputs, iStop );
+ printf("New%d =%8d ", nVars, nNew = Dau_CountFuncs(vNodSup, iStart, iStop, nVars) );
+ printf("All%d =%8d ", nVars, Dau_CountFuncs(vNodSup, 0, iStop, nVars) );
+ printf("Two =%6d ", Count2 );
+ //Abc_PrintTime( 1, "T", Abc_Clock() - clk );
+ Abc_Print(1, "%9.2f sec\n", 1.0*(Abc_Clock() - clk)/(CLOCKS_PER_SEC));
+ fflush(stdout);
+ return nNew;
+}
+
+
+int Dau_InsertFunction( Abc_TtHieMan_t * pMan, word * pCur, int nNodes, int nInputs, int nVars0, int nVars,
+ Vec_Mem_t * vTtMem, Vec_Int_t * vNodSup, int nFronts, abctime clk )
+{
+ int DumpDelta = 1000000;
+ char Perm[16] = {0};
+ int nVarsNew = Abc_TtMinBase( pCur, NULL, nVars, nInputs );
+ //unsigned Phase = Abc_TtCanonicizeHie( pMan, pCur, nVarsNew, Perm, 1 );
+ unsigned Phase = Abc_TtCanonicizeWrap( Abc_TtCanonicizeAda, pMan, pCur, nVarsNew, Perm, 99 );
+ int nEntries = Vec_MemEntryNum(vTtMem);
+ int Entry = Vec_MemHashInsert( vTtMem, pCur );
+ if ( nEntries == Vec_MemEntryNum(vTtMem) ) // found in the table - not new
+ return 0;
+ Entry = 0;
+ Phase = 0;
+ // this is a new class
+ Vec_IntPush( vNodSup, (nNodes << 16) | nVarsNew );
+ assert( Vec_MemEntryNum(vTtMem) == Vec_IntSize(vNodSup) );
+ if ( Vec_IntSize(vNodSup) % DumpDelta == 0 )
+ Dau_TablesSave( nInputs, nVars0, vTtMem, vNodSup, nFronts, clk );
+ return 1;
+}
+void Dau_FunctionEnum( int nInputs, int nVars, int nNodeMax, int fUseTwo, int fReduce, int fVerbose )
+{
+ abctime clk = Abc_Clock();
+ int nWords = Abc_TtWordNum(nInputs); word nSteps = 0;
+ Abc_TtHieMan_t * pMan = Abc_TtHieManStart( nInputs, 5 );
+ Vec_Mem_t * vTtMem = Vec_MemAlloc( nWords, 16 );
+ Vec_Int_t * vNodSup = Vec_IntAlloc( 1 << 16 );
+ int v, u, k, m, n, Entry, nNew, Limit[32] = {1, 2};
+ word Truth[4] = {0};
+ assert( nVars >= 3 && nVars <= nInputs && nInputs <= 6 );
+ Vec_MemHashAlloc( vTtMem, 1<<16 );
+ // add constant 0
+ Vec_MemHashInsert( vTtMem, Truth );
+ Vec_IntPush( vNodSup, 0 ); // nodes=0, supp=0
+ // add buffer/inverter
+ Abc_TtIthVar( Truth, 0, nInputs );
+ Abc_TtNot( Truth, nWords );
+ Vec_MemHashInsert( vTtMem, Truth );
+ Vec_IntPush( vNodSup, 1 ); // nodes=0, supp=1
+ Dau_PrintStats( 0, nInputs, nVars, vNodSup, 0, 2, nSteps, 0, clk );
+ // numerate other functions based on how many nodes they have
+ for ( n = 1; n <= nNodeMax; n++ )
+ {
+ int Count2 = 0;
+ int fExpand = !(fReduce && n == nNodeMax);
+ for ( Entry = Limit[n-1]; Entry < Limit[n]; Entry++ )
+ {
+ word * pTruth = Vec_MemReadEntry( vTtMem, Entry );
+ int NodSup = Vec_IntEntry(vNodSup, Entry);
+ int nSupp = 0xF & NodSup;
+ int SymVars = Dau_CountSymms2( pTruth[0], nSupp );
+ assert( n-1 == (NodSup >> 16) );
+ assert( !Abc_Tt6HasVar(*pTruth, nSupp) );
+ //printf( "Exploring function %4d with %d vars: ", i, nSupp );
+ //printf( " %04x\n", (int)uTruth );
+ //Dau_DsdPrintFromTruth( &uTruth, 4 );
+ for ( v = 0; v < nSupp; v++ ) if ( (SymVars & (1 << v)) == 0 )
+ {
+ word tGate, tCur;
+ word Cof0 = Abc_Tt6Cofactor0( *pTruth, v );
+ word Cof1 = Abc_Tt6Cofactor1( *pTruth, v );
+ // add one extra variable to support
+ if ( nSupp < nInputs && fExpand )
+ {
+ tGate = s_Truths6[v] & s_Truths6[nSupp];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp+1, vTtMem, vNodSup, Entry, clk );
+
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp+1, vTtMem, vNodSup, Entry, clk );
+
+
+ tGate = s_Truths6[v] ^ s_Truths6[nSupp];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp+1, vTtMem, vNodSup, Entry, clk );
+
+ nSteps += 3;
+ }
// add one cross bar
- for ( k = 0; k < nSupp; k++ ) if ( k != v )
+ if ( fExpand )
+ for ( k = 0; k < nSupp; k++ ) if ( k != v && ((SymVars & (1 << k)) == 0 || k == v+1) )
{
- if ( g == 0 )
- {
- tGate = s_Truths6[nVars-1-v] & s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = s_Truths6[v] & s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tGate = s_Truths6[nVars-1-v] & ~s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = s_Truths6[v] & ~s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
- }
- else
- {
- tGate = s_Truths6[nVars-1-v] ^ s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
- }
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+
+
+ tGate = s_Truths6[v] ^ s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+
+ nSteps += 5;
}
- }
- for ( g = 0; g < Limit; g++ )
- {
// add two cross bars
- for ( k = 0; k < nSupp; k++ ) if ( k != v )
- for ( m = k+1; m < nSupp; m++ ) if ( m != v )
+ for ( k = 0; k < nSupp; k++ ) if ( k != v )//&& ((SymVars & (1 << k)) == 0) )
+ for ( m = k+1; m < nSupp; m++ ) if ( m != v )//&& ((SymVars & (1 << m)) == 0 || m == k+1) )
{
- if ( g == 0 )
- {
- tGate = s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = s_Truths6[m] & s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tGate = s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = s_Truths6[m] & ~s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tGate = ~s_Truths6[nVars-1-m] & s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = ~s_Truths6[m] & s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tGate = ~s_Truths6[nVars-1-m] & ~s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
+ tGate = ~s_Truths6[m] & ~s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
- tCur = (tGate & Cof0) | (~tGate & Cof1);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
- }
- else
- {
- tGate = s_Truths6[nVars-1-m] ^ s_Truths6[nVars-1-k];
- tCur = (tGate & Cof1) | (~tGate & Cof0);
- Dau_AddFunction( tCur, nVars, pTable, vNpns );
- }
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+
+
+ tGate = s_Truths6[m] ^ s_Truths6[k];
+ tCur = (tGate & Cof1) | (~tGate & Cof0);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+
+ tGate = s_Truths6[m] ^ s_Truths6[k];
+ tCur = (tGate & Cof0) | (~tGate & Cof1);
+ Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+
+ nSteps += 10;
}
}
- }
- if ( i == iLast )
+ }
+ if ( fUseTwo && n > 2 && fExpand )
+ for ( Entry = Limit[n-2]; Entry < Limit[n-1]; Entry++ )
{
- //printf("Finished %d nodes with %d functions.\n", Count++, Vec_IntSize(vNpns) );
- iPrev = iLast;
- iLast = Vec_IntSize(vNpns)-1;
- printf("Finished %2d nodes with %6d functions out of %6d. ", Count++, iLast - iPrev, Vec_IntSize(vNpns) );
- Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
- fflush(stdout);
+ word * pTruth = Vec_MemReadEntry( vTtMem, Entry );
+ int NodSup = Vec_IntEntry(vNodSup, Entry);
+ int nSupp = 0xF & NodSup; int g1, g2;
+ assert( n-2 == (NodSup >> 16) );
+ assert( !Abc_Tt6HasVar(*pTruth, nSupp) );
+ for ( v = 0; v < nSupp; v++ )
+ for ( u = 0; u < nSupp; u++ ) if ( u != v )
+ {
+ word Cof0 = Abc_Tt6Cofactor0( *pTruth, v );
+ word Cof1 = Abc_Tt6Cofactor1( *pTruth, v );
+
+ word Cof00 = Abc_Tt6Cofactor0( Cof0, u );
+ word Cof01 = Abc_Tt6Cofactor1( Cof0, u );
+ word Cof10 = Abc_Tt6Cofactor0( Cof1, u );
+ word Cof11 = Abc_Tt6Cofactor1( Cof1, u );
+
+ word tGates[5], tCur;
+ tGates[0] = s_Truths6[v] & s_Truths6[u];
+ tGates[1] = s_Truths6[v] & ~s_Truths6[u];
+ tGates[2] = ~s_Truths6[v] & s_Truths6[u];
+ tGates[3] = s_Truths6[v] | s_Truths6[u];
+ tGates[4] = s_Truths6[v] ^ s_Truths6[u];
+
+ for ( g1 = 0; g1 < 5; g1++ )
+ for ( g2 = g1+1; g2 < 5; g2++ )
+ {
+ Cof0 = (tGates[g1] & Cof01) | (~tGates[g1] & Cof00);
+ Cof1 = (tGates[g1] & Cof11) | (~tGates[g1] & Cof10);
+
+ tCur = (tGates[g2] & Cof1) | (~tGates[g2] & Cof0);
+ Count2 += Dau_InsertFunction( pMan, &tCur, n, nInputs, nVars, nSupp, vTtMem, vNodSup, Entry, clk );
+ }
+ }
}
+ Limit[n+1] = Vec_IntSize(vNodSup);
+ nNew = Dau_PrintStats( n, nInputs, nVars, vNodSup, Limit[n], Limit[n+1], nSteps, Count2, clk );
+ if ( nNew == 0 )
+ break;
}
- Vec_IntFree( vNpns );
- ABC_FREE( pTable );
- Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ Dau_TablesSave( nInputs, nVars, vTtMem, vNodSup, Vec_IntSize(vNodSup), clk );
+ Abc_PrintTime( 1, "Total time", Abc_Clock() - clk );
+ //Dau_DumpFuncs( vTtMem, vNodSup, nVars, nNodeMax );
+ //Dau_ExactNpnPrint( vTtMem, vNodSup, nVars, nInputs, n );
+ Abc_TtHieManStop( pMan );
+ Vec_MemHashFree( vTtMem );
+ Vec_MemFreeP( &vTtMem );
+ Vec_IntFree( vNodSup );
fflush(stdout);
}
-void Dau_NetworkEnumTest()
-{
- //Dau_TruthEnum();
- Dau_NetworkEnum();
-}
-
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
-
ABC_NAMESPACE_IMPL_END
diff --git a/src/opt/dau/dauNpn2.c b/src/opt/dau/dauNpn2.c
new file mode 100644
index 0000000..bca65ad
--- /dev/null
+++ b/src/opt/dau/dauNpn2.c
@@ -0,0 +1,507 @@
+/**CFile****************************************************************
+
+ FileName [dau.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [DAG-aware unmapping.]
+
+ Synopsis []
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - June 20, 2005.]
+
+ Revision [$Id: dau.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "dauInt.h"
+#include "misc/util/utilTruth.h"
+#include "misc/extra/extra.h"
+
+ABC_NAMESPACE_IMPL_START
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+typedef struct Dtt_Man_t_ Dtt_Man_t;
+struct Dtt_Man_t_
+{
+ int nVars; // variable number
+ int nPerms; // number of permutations
+ int nComps; // number of complementations
+ int * pPerms; // permutations
+ int * pComps; // complementations
+ word * pPres; // function marks
+ Vec_Int_t * vFanins; // node fanins
+ Vec_Int_t * vTruths; // node truth tables
+ Vec_Int_t * vConfigs; // configurations
+ Vec_Int_t * vClasses; // node NPN classes
+ Vec_Int_t * vTruthNpns; // truth tables of the classes
+ Vec_Wec_t * vFunNodes; // nodes by NPN class
+ Vec_Int_t * vTemp; // temporary
+ Vec_Int_t * vTemp2; // temporary
+ unsigned FunMask; // function mask
+ unsigned CmpMask; // function mask
+ unsigned BinMask; // hash mask
+ unsigned * pBins; // hash bins
+ Vec_Int_t * vUsedBins; // used bins
+ int Counts[32]; // node counts
+ int nClasses; // count of classes
+ unsigned * pTable; // mapping of funcs into their classes
+ int * pNodes; // the number of nodes in min-node network
+ int * pTimes; // the number of different min-node networks
+ char * pVisited; // visited classes
+ Vec_Int_t * vVisited; // the number of visited classes
+};
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+unsigned * Dau_ReadFile2( char * pFileName, int nSizeW )
+{
+ abctime clk = Abc_Clock();
+ FILE * pFile = fopen( pFileName, "rb" );
+ unsigned * p = (unsigned *)ABC_CALLOC(word, nSizeW);
+ int RetValue = pFile ? fread( p, sizeof(word), nSizeW, pFile ) : 0;
+ RetValue = 0;
+ if ( pFile )
+ {
+ printf( "Finished reading file \"%s\".\n", pFileName );
+ fclose( pFile );
+ }
+ else
+ printf( "Cannot open input file \"%s\".\n", pFileName );
+ Abc_PrintTime( 1, "File reading", Abc_Clock() - clk );
+ return p;
+}
+void Dtt_ManRenum( int nVars, unsigned * pTable, int * pnClasses )
+{
+ unsigned i, Limit = 1 << ((1 << nVars)-1), Count = 0;
+ for ( i = 0; i < Limit; i++ )
+ if ( pTable[i] == i )
+ pTable[i] = Count++;
+ else
+ {
+ assert( pTable[i] < i );
+ pTable[i] = pTable[pTable[i]];
+ }
+ printf( "The total number of NPN classes = %d.\n", Count );
+ *pnClasses = Count;
+}
+unsigned * Dtt_ManLoadClasses( int nVars, int * pnClasses )
+{
+ unsigned * pTable = NULL;
+ if ( nVars == 4 )
+ pTable = Dau_ReadFile2( "tableW14.data", 1 << 14 );
+ else if ( nVars == 5 )
+ pTable = Dau_ReadFile2( "tableW30.data", 1 << 30 );
+ else assert( 0 );
+ Dtt_ManRenum( nVars, pTable, pnClasses );
+ return pTable;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Dtt_ManAddVisited( Dtt_Man_t * p, unsigned Truth2, int n )
+{
+ unsigned Truth = Truth2 & p->CmpMask ? ~Truth2 : Truth2;
+ unsigned Class = p->pTable[Truth & p->FunMask];
+ assert( Class < (unsigned)p->nClasses );
+ if ( p->pNodes[Class] < n )
+ return;
+ assert( p->pNodes[Class] == n );
+ if ( p->pVisited[Class] )
+ return;
+ p->pVisited[Class] = 1;
+ Vec_IntPush( p->vVisited, Class );
+}
+void Dtt_ManProcessVisited( Dtt_Man_t * p )
+{
+ int i, Class;
+ Vec_IntForEachEntry( p->vVisited, Class, i )
+ {
+ assert( p->pVisited[Class] );
+ p->pVisited[Class] = 0;
+ p->pTimes[Class]++;
+ }
+ Vec_IntClear( p->vVisited );
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+Dtt_Man_t * Dtt_ManAlloc( int nVars, int fMulti )
+{
+ Dtt_Man_t * p = ABC_CALLOC( Dtt_Man_t, 1 );
+ p->nVars = nVars;
+ p->nPerms = Extra_Factorial( nVars );
+ p->nComps = 1 << nVars;
+ p->pPerms = Extra_PermSchedule( nVars );
+ p->pComps = Extra_GreyCodeSchedule( nVars );
+ p->pPres = ABC_CALLOC( word, 1 << (p->nComps - 7) );
+ p->vFanins = Vec_IntAlloc( 2*617000 );
+ p->vTruths = Vec_IntAlloc( 617000 );
+ p->vConfigs = Vec_IntAlloc( 617000 );
+ p->vClasses = Vec_IntAlloc( 617000 );
+ p->vTruthNpns = Vec_IntAlloc( 617000 );
+ p->vFunNodes = Vec_WecStart( 16 );
+ p->vTemp = Vec_IntAlloc( 4000 );
+ p->vTemp2 = Vec_IntAlloc( 4000 );
+ p->FunMask = nVars == 5 ? ~0 : (nVars == 4 ? 0xFFFF : 0xFF);
+ p->CmpMask = nVars == 5 ? 1 << 31 : (nVars == 4 ? 1 << 15 : 1 << 7);
+ p->BinMask = 0x3FFF;
+ p->pBins = ABC_FALLOC( unsigned, p->BinMask + 1 );
+ p->vUsedBins = Vec_IntAlloc( 4000 );
+ if ( !fMulti ) return p;
+ p->pTable = Dtt_ManLoadClasses( p->nVars, &p->nClasses );
+ p->pNodes = ABC_CALLOC( int, p->nClasses );
+ p->pTimes = ABC_CALLOC( int, p->nClasses );
+ p->pVisited = ABC_CALLOC( char, p->nClasses );
+ p->vVisited = Vec_IntAlloc( 1000 );
+ return p;
+}
+void Dtt_ManFree( Dtt_Man_t * p )
+{
+ Vec_IntFreeP( &p->vVisited );
+ ABC_FREE( p->pTable );
+ ABC_FREE( p->pNodes );
+ ABC_FREE( p->pTimes );
+ ABC_FREE( p->pVisited );
+ Vec_IntFreeP( &p->vFanins );
+ Vec_IntFreeP( &p->vTruths );
+ Vec_IntFreeP( &p->vConfigs );
+ Vec_IntFreeP( &p->vClasses );
+ Vec_IntFreeP( &p->vTruthNpns );
+ Vec_WecFreeP( &p->vFunNodes );
+ Vec_IntFreeP( &p->vTemp );
+ Vec_IntFreeP( &p->vTemp2 );
+ Vec_IntFreeP( &p->vUsedBins );
+ ABC_FREE( p->pPerms );
+ ABC_FREE( p->pComps );
+ ABC_FREE( p->pPres );
+ ABC_FREE( p->pBins );
+ ABC_FREE( p );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Collect representatives of the same class.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline unsigned Dtt_ManHashKey( Dtt_Man_t * p, unsigned Truth )
+{
+ static unsigned s_P[4] = { 1699, 5147, 7103, 8147 };
+ unsigned char * pD = (unsigned char*)&Truth;
+ return pD[0] * s_P[0] + pD[1] * s_P[1] + pD[2] * s_P[2] + pD[3] * s_P[3];
+}
+int Dtt_ManCheckHash( Dtt_Man_t * p, unsigned Truth )
+{
+ unsigned Hash = Dtt_ManHashKey(p, Truth);
+ unsigned * pSpot = p->pBins + (Hash & p->BinMask);
+ for ( ; ~*pSpot; Hash++, pSpot = p->pBins + (Hash & p->BinMask) )
+ if ( *pSpot == Truth ) // equal
+ return 0;
+ Vec_IntPush( p->vUsedBins, pSpot - p->pBins );
+ *pSpot = Truth;
+ return 1;
+}
+Vec_Int_t * Dtt_ManCollect( Dtt_Man_t * p, unsigned Truth, Vec_Int_t * vFuns )
+{
+ int i, k, Entry;
+ word tCur = ((word)Truth << 32) | (word)Truth;
+ Vec_IntClear( vFuns );
+ for ( i = 0; i < p->nPerms; i++ )
+ {
+ for ( k = 0; k < p->nComps; k++ )
+ {
+// unsigned tTemp = (unsigned)(tCur & 1 ? ~tCur : tCur);
+ unsigned tTemp = (unsigned)(tCur & p->CmpMask ? ~tCur : tCur);
+ if ( Dtt_ManCheckHash( p, tTemp ) )
+ Vec_IntPush( vFuns, tTemp );
+ tCur = Abc_Tt6Flip( tCur, p->pComps[k] );
+ }
+ tCur = Abc_Tt6SwapAdjacent( tCur, p->pPerms[i] );
+ }
+ assert( tCur == (((word)Truth << 32) | (word)Truth) );
+ // clean hash table
+ Vec_IntForEachEntry( p->vUsedBins, Entry, i )
+ p->pBins[Entry] = ~0;
+ Vec_IntClear( p->vUsedBins );
+ //printf( "%d ", Vec_IntSize(vFuns) );
+ return vFuns;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline int Dtt_ManGetFun( Dtt_Man_t * p, unsigned tFun )
+{
+ tFun = tFun & p->CmpMask ? ~tFun : tFun;
+ return Abc_TtGetBit( p->pPres, tFun & p->FunMask );
+}
+static inline void Dtt_ManSetFun( Dtt_Man_t * p, unsigned tFun )
+{
+ tFun = tFun & p->CmpMask ? ~tFun : tFun;
+ //assert( !Dtt_ManGetFun(p, fFun & p->FunMask );
+ Abc_TtSetBit( p->pPres, tFun & p->FunMask );
+}
+void Dtt_ManAddFunction( Dtt_Man_t * p, int n, int FanI, int FanJ, int Type, unsigned Truth )
+{
+ Vec_Int_t * vFuncs = Dtt_ManCollect( p, Truth, p->vTemp2 );
+ unsigned Min = Vec_IntFindMin( vFuncs );
+ int i, nObjs = Vec_IntSize(p->vFanins)/2;
+ int nNodesI = 0xF & (Vec_IntEntry(p->vConfigs, FanI) >> 3);
+ int nNodesJ = 0xF & (Vec_IntEntry(p->vConfigs, FanJ) >> 3);
+ int nNodes = nNodesI + nNodesJ + 1;
+ assert( nObjs == Vec_IntSize(p->vTruths) );
+ assert( nObjs == Vec_IntSize(p->vConfigs) );
+ assert( nObjs == Vec_IntSize(p->vClasses) );
+ Vec_WecPush( p->vFunNodes, n, nObjs );
+ Vec_IntPushTwo( p->vFanins, FanI, FanJ );
+ Vec_IntPush( p->vTruths, Truth );
+ Vec_IntPush( p->vConfigs, (nNodes << 3) | Type );
+ Vec_IntPush( p->vClasses, Vec_IntSize(p->vTruthNpns) );
+ Vec_IntPush( p->vTruthNpns, Min );
+ Vec_IntForEachEntry( vFuncs, Min, i )
+ Dtt_ManSetFun( p, Min );
+ assert( nNodes < 32 );
+ p->Counts[nNodes]++;
+
+ if ( p->pTable == NULL )
+ return;
+ Truth = Truth & p->CmpMask ? ~Truth : Truth;
+ Truth &= p->FunMask;
+ assert( p->pNodes[p->pTable[Truth]] == 0 );
+ p->pNodes[p->pTable[Truth]] = n;
+}
+
+int Dtt_PrintStats( int nNodes, int nVars, Vec_Wec_t * vFunNodes, word nSteps, abctime clk, int fDelay, word nMultis )
+{
+ int nNew = Vec_IntSize(Vec_WecEntry(vFunNodes, nNodes));
+ printf("%c =%2d | ", fDelay ? 'D':'N', nNodes );
+ printf("C =%12.0f | ", (double)(iword)nSteps );
+ printf("New%d =%10d ", nVars, nNew + (int)(nNodes==0) );
+ printf("All%d =%10d | ", nVars, Vec_WecSizeSize(vFunNodes)+1 );
+ printf("Multi =%10d | ", (int)nMultis );
+ Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
+ //Abc_Print(1, "%9.2f sec\n", 1.0*(Abc_Clock() - clk)/(CLOCKS_PER_SEC));
+ fflush(stdout);
+ return nNew;
+}
+void Dtt_PrintDistrib( Dtt_Man_t * p )
+{
+ int i;
+ printf( "NPN classes for each node count (N):\n" );
+ for ( i = 0; i < 32; i++ )
+ if ( p->Counts[i] )
+ printf( "N = %2d : NPN = %6d\n", i, p->Counts[i] );
+}
+void Dtt_PrintMulti2( Dtt_Man_t * p )
+{
+ int i, n;
+ for ( n = 0; n <= 7; n++ )
+ {
+ printf( "n=%d : ", n);
+ for ( i = 0; i < p->nClasses; i++ )
+ if ( p->pNodes[i] == n )
+ printf( "%d ", p->pTimes[i] );
+ printf( "\n" );
+ }
+}
+void Dtt_PrintMulti1( Dtt_Man_t * p )
+{
+ int i, n, Entry, Count, Prev;
+ for ( n = 0; n < 16; n++ )
+ {
+ Vec_Int_t * vTimes = Vec_IntAlloc( 100 );
+ Vec_Int_t * vUsed = Vec_IntAlloc( 100 );
+ for ( i = 0; i < p->nClasses; i++ )
+ if ( p->pNodes[i] == n )
+ Vec_IntPush( vTimes, p->pTimes[i] );
+ if ( Vec_IntSize(vTimes) == 0 )
+ {
+ Vec_IntFree(vTimes);
+ Vec_IntFree(vUsed);
+ break;
+ }
+ Vec_IntSort( vTimes, 0 );
+ Count = 1;
+ Prev = Vec_IntEntry( vTimes, 0 );
+ Vec_IntForEachEntryStart( vTimes, Entry, i, 1 )
+ if ( Prev == Entry )
+ Count++;
+ else
+ {
+ assert( Prev < Entry );
+ Vec_IntPushTwo( vUsed, Prev, Count );
+ Count = 1;
+ Prev = Entry;
+ }
+ if ( Count > 0 )
+ Vec_IntPushTwo( vUsed, Prev, Count );
+ printf( "n=%d : ", n);
+ Vec_IntForEachEntryDouble( vUsed, Prev, Entry, i )
+ printf( "%d=%d ", Prev, Entry );
+ printf( "\n" );
+ Vec_IntFree( vTimes );
+ Vec_IntFree( vUsed );
+ }
+}
+void Dtt_PrintMulti( Dtt_Man_t * p )
+{
+ int n, Counts[13][11] = {{0}};
+ for ( n = 0; n < 13; n++ )
+ {
+ int i, Total = 0, Count = 0;
+ for ( i = 0; i < p->nClasses; i++ )
+ if ( p->pNodes[i] == n )
+ {
+ int Log = Abc_Base2Log(p->pTimes[i]);
+ assert( Log < 11 );
+ if ( p->pTimes[i] < 2 )
+ Counts[n][0]++;
+ else
+ Counts[n][Log]++;
+ Total += p->pTimes[i];
+ Count++;
+ }
+ if ( Count == 0 )
+ break;
+ printf( "n=%2d : ", n );
+ printf( "All = %7d ", Count );
+ printf( "Ave = %6.2f ", 1.0*Total/Count );
+ for ( i = 0; i < 11; i++ )
+ if ( Counts[n][i] )
+ printf( "%6d", Counts[n][i] );
+ else
+ printf( "%6s", "" );
+ printf( "\n" );
+ }
+}
+void Dtt_EnumerateLf( int nVars, int nNodeMax, int fDelay, int fMulti, int fVerbose )
+{
+ abctime clk = Abc_Clock(); word nSteps = 0, nMultis = 0;
+ Dtt_Man_t * p = Dtt_ManAlloc( nVars, fMulti ); int n, i, j;
+ // constant zero class
+ Vec_IntPushTwo( p->vFanins, 0, 0 );
+ Vec_IntPush( p->vTruths, 0 );
+ Vec_IntPush( p->vConfigs, 0 );
+ Vec_IntPush( p->vClasses, Vec_IntSize(p->vTruthNpns) );
+ Vec_IntPush( p->vTruthNpns, 0 );
+ Dtt_ManSetFun( p, 0 );
+ // buffer class
+ Vec_WecPush( p->vFunNodes, 0, Vec_IntSize(p->vFanins)/2 );
+ Vec_IntPushTwo( p->vFanins, 0, 0 );
+ Vec_IntPush( p->vTruths, (unsigned)s_Truths6[0] );
+ Vec_IntPush( p->vConfigs, 0 );
+ Vec_IntPush( p->vClasses, Vec_IntSize(p->vTruthNpns) );
+ Vec_IntPush( p->vTruthNpns, (unsigned)s_Truths6[0] );
+ for ( i = 0; i < nVars; i++ )
+ Dtt_ManSetFun( p, (unsigned)s_Truths6[i] );
+ p->Counts[0] = 2;
+ // enumerate
+ Dtt_PrintStats(0, nVars, p->vFunNodes, nSteps, clk, fDelay, 0);
+ for ( n = 1; n <= nNodeMax; n++ )
+ {
+ for ( i = 0, j = n - 1; i < n; i++, j = j - 1 + fDelay ) if ( i <= j )
+ {
+ Vec_Int_t * vFaninI = Vec_WecEntry( p->vFunNodes, i );
+ Vec_Int_t * vFaninJ = Vec_WecEntry( p->vFunNodes, j );
+ int k, i0, j0, EntryI, EntryJ;
+ Vec_IntForEachEntry( vFaninI, EntryI, i0 )
+ {
+ unsigned TruthI = Vec_IntEntry(p->vTruths, EntryI);
+ Vec_Int_t * vFuns = Dtt_ManCollect( p, TruthI, p->vTemp );
+ int Start = i == j ? i0 : 0;
+ Vec_IntForEachEntryStart( vFaninJ, EntryJ, j0, Start )
+ {
+ unsigned Truth, TruthJ = Vec_IntEntry(p->vTruths, EntryJ);
+ Vec_IntForEachEntry( vFuns, Truth, k )
+ {
+ if ( !Dtt_ManGetFun(p, TruthJ & Truth) )
+ Dtt_ManAddFunction( p, n, EntryI, EntryJ, 0, TruthJ & Truth );
+ if ( !Dtt_ManGetFun(p, TruthJ & ~Truth) )
+ Dtt_ManAddFunction( p, n, EntryI, EntryJ, 1, TruthJ & ~Truth );
+ if ( !Dtt_ManGetFun(p, ~TruthJ & Truth) )
+ Dtt_ManAddFunction( p, n, EntryI, EntryJ, 2, ~TruthJ & Truth );
+ if ( !Dtt_ManGetFun(p, TruthJ | Truth) )
+ Dtt_ManAddFunction( p, n, EntryI, EntryJ, 3, TruthJ | Truth );
+ if ( !Dtt_ManGetFun(p, TruthJ ^ Truth) )
+ Dtt_ManAddFunction( p, n, EntryI, EntryJ, 4, TruthJ ^ Truth );
+ nSteps += 5;
+
+ if ( p->pTable ) Dtt_ManAddVisited( p, TruthJ & Truth, n );
+ if ( p->pTable ) Dtt_ManAddVisited( p, TruthJ & ~Truth, n );
+ if ( p->pTable ) Dtt_ManAddVisited( p, ~TruthJ & Truth, n );
+ if ( p->pTable ) Dtt_ManAddVisited( p, TruthJ | Truth, n );
+ if ( p->pTable ) Dtt_ManAddVisited( p, TruthJ ^ Truth, n );
+ }
+ nMultis++;
+ if ( p->pTable ) Dtt_ManProcessVisited( p );
+ }
+ }
+ }
+ if ( Dtt_PrintStats(n, nVars, p->vFunNodes, nSteps, clk, fDelay, nMultis) == 0 )
+ break;
+ }
+ if ( fDelay )
+ Dtt_PrintDistrib( p );
+ if ( p->pTable )
+ Dtt_PrintMulti( p );
+ Dtt_ManFree( p );
+}
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+ABC_NAMESPACE_IMPL_END
+
diff --git a/src/opt/dau/module.make b/src/opt/dau/module.make
index efc34a1..5feb104 100644
--- a/src/opt/dau/module.make
+++ b/src/opt/dau/module.make
@@ -8,4 +8,5 @@ SRC += src/opt/dau/dauCanon.c \
src/opt/dau/dauMerge.c \
src/opt/dau/dauNonDsd.c \
src/opt/dau/dauNpn.c \
+ src/opt/dau/dauNpn2.c \
src/opt/dau/dauTree.c
diff --git a/src/proof/abs/absGla.c b/src/proof/abs/absGla.c
index 698d415..bd6b8c7 100644
--- a/src/proof/abs/absGla.c
+++ b/src/proof/abs/absGla.c
@@ -1430,7 +1430,7 @@ void Ga2_GlaDumpAbsracted( Ga2_Man_t * p, int fVerbose )
// dump abstraction map
Vec_IntFreeP( &p->pGia->vGateClasses );
p->pGia->vGateClasses = Ga2_ManAbsTranslate( p );
- Gia_AigerWrite( p->pGia, pFileName, 0, 0 );
+ Gia_AigerWrite( p->pGia, pFileName, 0, 0, 0 );
}
else if ( p->pPars->fDumpVabs )
{
@@ -1443,7 +1443,7 @@ void Ga2_GlaDumpAbsracted( Ga2_Man_t * p, int fVerbose )
vGateClasses = Ga2_ManAbsTranslate( p );
pAbs = Gia_ManDupAbsGates( p->pGia, vGateClasses );
Gia_ManCleanValue( p->pGia );
- Gia_AigerWrite( pAbs, pFileName, 0, 0 );
+ Gia_AigerWrite( pAbs, pFileName, 0, 0, 0 );
Gia_ManStop( pAbs );
Vec_IntFreeP( &vGateClasses );
}
@@ -1563,7 +1563,7 @@ int Gia_ManPerformGla( Gia_Man_t * pAig, Abs_Par_t * pPars )
Vec_IntWriteEntry( pAig->vGateClasses, i, 1 );
Gia_ManForEachRo( pAig, pObj, i )
Vec_IntWriteEntry( pAig->vGateClasses, Gia_ObjId(pAig, pObj), 1 );
- Gia_AigerWrite( pAig, pFileName, 0, 0 );
+ Gia_AigerWrite( pAig, pFileName, 0, 0, 0 );
Vec_IntFree( pAig->vGateClasses );
pAig->vGateClasses = vMap;
if ( p->pPars->fVerbose )
diff --git a/src/proof/abs/absGlaOld.c b/src/proof/abs/absGlaOld.c
index 70bd2e9..45ed139 100644
--- a/src/proof/abs/absGlaOld.c
+++ b/src/proof/abs/absGlaOld.c
@@ -1619,7 +1619,7 @@ void Gia_GlaDumpAbsracted( Gla_Man_t * p, int fVerbose )
pAbs = Gia_ManDupAbsGates( p->pGia0, vGateClasses );
Vec_IntFreeP( &vGateClasses );
// write into file
- Gia_AigerWrite( pAbs, pFileName, 0, 0 );
+ Gia_AigerWrite( pAbs, pFileName, 0, 0, 0 );
Gia_ManStop( pAbs );
}
diff --git a/src/proof/abs/absVta.c b/src/proof/abs/absVta.c
index 01680a3..597e4b7 100644
--- a/src/proof/abs/absVta.c
+++ b/src/proof/abs/absVta.c
@@ -1439,7 +1439,7 @@ void Gia_VtaDumpAbsracted( Vta_Man_t * p, int fVerbose )
pAbs = Gia_ManDupAbsGates( p->pGia, p->pGia->vGateClasses );
Vec_IntFreeP( &p->pGia->vGateClasses );
// send it out
- Gia_AigerWrite( pAbs, pFileName, 0, 0 );
+ Gia_AigerWrite( pAbs, pFileName, 0, 0, 0 );
Gia_ManStop( pAbs );
}
diff --git a/src/proof/acec/acecCore.c b/src/proof/acec/acecCore.c
index 1a575fb..033fbc3 100644
--- a/src/proof/acec/acecCore.c
+++ b/src/proof/acec/acecCore.c
@@ -527,7 +527,7 @@ int Acec_Solve( Gia_Man_t * pGia0, Gia_Man_t * pGia1, Acec_ParCec_t * pPars )
if ( fDumpMiter )
{
Abc_Print( 0, "The verification miter is written into file \"%s\".\n", "acec_miter.aig" );
- Gia_AigerWrite( pMiter, "acec_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "acec_miter.aig", 0, 0, 0 );
}
status = Cec_ManVerify( pMiter, pCecPars );
ABC_SWAP( Abc_Cex_t *, pGia0->pCexComb, pMiter->pCexComb );
diff --git a/src/proof/acec/acecOrder.c b/src/proof/acec/acecOrder.c
index 93ef7f1..4eb79fe 100644
--- a/src/proof/acec/acecOrder.c
+++ b/src/proof/acec/acecOrder.c
@@ -173,7 +173,7 @@ Vec_Int_t * Gia_PolynFindOrder( Gia_Man_t * pGia, Vec_Int_t * vFadds, Vec_Int_t
{
Gia_Man_t * pNew;
pNew = Gia_ManDupAndCones( pGia, Vec_IntArray(vLeft), Vec_IntSize(vLeft), 0 );
- Gia_AigerWrite( pNew, "leftover.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "leftover.aig", 0, 0, 0 );
printf( "Leftover AIG with %d nodes is dumped into file \"%s\".\n", Gia_ManAndNum(pNew), "leftover.aig" );
Gia_ManStop( pNew );
}
diff --git a/src/proof/cec/cecCec.c b/src/proof/cec/cecCec.c
index be6df65..ee45aa6 100644
--- a/src/proof/cec/cecCec.c
+++ b/src/proof/cec/cecCec.c
@@ -392,7 +392,7 @@ int Cec_ManVerify( Gia_Man_t * pInit, Cec_ParCec_t * pPars )
{
ABC_FREE( pNew->pReprs );
ABC_FREE( pNew->pNexts );
- Gia_AigerWrite( pNew, "gia_cec_undecided.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "gia_cec_undecided.aig", 0, 0, 0 );
Abc_Print( 1, "The result is written into file \"%s\".\n", "gia_cec_undecided.aig" );
}
if ( pPars->TimeLimit && (Abc_Clock() - clkTotal)/CLOCKS_PER_SEC >= pPars->TimeLimit )
diff --git a/src/proof/cec/cecCore.c b/src/proof/cec/cecCore.c
index 250cb69..b952965 100644
--- a/src/proof/cec/cecCore.c
+++ b/src/proof/cec/cecCore.c
@@ -407,7 +407,7 @@ p->timeSim += Abc_Clock() - clk;
}
pSrm = Cec_ManFraSpecReduction( p );
-// Gia_AigerWrite( pSrm, "gia_srm.aig", 0, 0 );
+// Gia_AigerWrite( pSrm, "gia_srm.aig", 0, 0, 0 );
if ( pPars->fVeryVerbose )
Gia_ManPrintStats( pSrm, NULL );
@@ -493,7 +493,7 @@ p->timeSat += Abc_Clock() - clk;
Abc_Print( 1, "Increasing conflict limit to %d.\n", pParsSat->nBTLimit );
if ( fOutputResult )
{
- Gia_AigerWrite( p->pAig, "gia_cec_temp.aig", 0, 0 );
+ Gia_AigerWrite( p->pAig, "gia_cec_temp.aig", 0, 0, 0 );
Abc_Print( 1,"The result is written into file \"%s\".\n", "gia_cec_temp.aig" );
}
}
diff --git a/src/proof/cec/cecCorr.c b/src/proof/cec/cecCorr.c
index 3bff4d3..fdc6029 100644
--- a/src/proof/cec/cecCorr.c
+++ b/src/proof/cec/cecCorr.c
@@ -1196,7 +1196,7 @@ Gia_Man_t * Cec_ManLSCorrespondence( Gia_Man_t * pAig, Cec_ParCor_t * pPars )
pNew = Gia_ManCorrReduce( pAig );
pNew = Gia_ManSeqCleanup( pTemp = pNew );
Gia_ManStop( pTemp );
- //Gia_AigerWrite( pNew, "reduced.aig", 0, 0 );
+ //Gia_AigerWrite( pNew, "reduced.aig", 0, 0, 0 );
}
// report the results
if ( pPars->fVerbose )
diff --git a/src/proof/cec/cecSeq.c b/src/proof/cec/cecSeq.c
index f39fb2a..81420e0 100644
--- a/src/proof/cec/cecSeq.c
+++ b/src/proof/cec/cecSeq.c
@@ -401,14 +401,14 @@ int Cec_ManSeqSemiformal( Gia_Man_t * pAig, Cec_ParSmf_t * pPars )
}
// write equivalence classes
- Gia_AigerWrite( pAig, "gore.aig", 0, 0 );
+ Gia_AigerWrite( pAig, "gore.aig", 0, 0, 0 );
// reduce the model
pReduce = Gia_ManSpecReduce( pAig, 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/proof/cec/cecSolve.c b/src/proof/cec/cecSolve.c
index ee9b8e7..02f14b7 100644
--- a/src/proof/cec/cecSolve.c
+++ b/src/proof/cec/cecSolve.c
@@ -742,7 +742,7 @@ clk2 = Abc_Clock();
if ( status == -1 )
{
Gia_Man_t * pTemp = Gia_ManDupDfsCone( pAig, pObj );
- Gia_AigerWrite( pTemp, "gia_hard.aig", 0, 0 );
+ Gia_AigerWrite( pTemp, "gia_hard.aig", 0, 0, 0 );
Gia_ManStop( pTemp );
Abc_Print( 1, "Dumping hard cone into file \"%s\".\n", "gia_hard.aig" );
}
diff --git a/src/proof/cec/cecSynth.c b/src/proof/cec/cecSynth.c
index 6e5fd22..9465858 100644
--- a/src/proof/cec/cecSynth.c
+++ b/src/proof/cec/cecSynth.c
@@ -309,7 +309,7 @@ int Cec_SequentialSynthesisPart( Gia_Man_t * p, Cec_ParSeq_t * pPars )
{
pTemp = Gia_ManRegCreatePart( p, vPart, &nCountPis, &nCountRegs, NULL );
sprintf( Buffer, "part%03d.aig", i );
- Gia_AigerWrite( pTemp, Buffer, 0, 0 );
+ Gia_AigerWrite( pTemp, Buffer, 0, 0, 0 );
Abc_Print( 1, "part%03d.aig : Reg = %4d. PI = %4d. (True = %4d. Regs = %4d.) And = %5d.\n",
i, Vec_IntSize(vPart), Gia_ManCiNum(pTemp)-Vec_IntSize(vPart), nCountPis, nCountRegs, Gia_ManAndNum(pTemp) );
Gia_ManStop( pTemp );
diff --git a/src/proof/pdr/pdrCore.c b/src/proof/pdr/pdrCore.c
index 21c713b..4e206b9 100644
--- a/src/proof/pdr/pdrCore.c
+++ b/src/proof/pdr/pdrCore.c
@@ -1427,6 +1427,7 @@ int Pdr_ManSolve( Aig_Man_t * pAig, Pdr_Par_t * pPars )
char * pFileName = Extra_FileNameGenericAppend(p->pAig->pName, "_inv.pla");
Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
Pdr_ManDumpClauses( p, pFileName, RetValue==1 );
+ printf( "Dumped inductive invariant in file \"%s\".\n", pFileName );
}
else if ( RetValue == 1 )
Abc_FrameSetInv( Pdr_ManDeriveInfinityClauses( p, RetValue!=1 ) );
diff --git a/src/sat/bmc/bmc.h b/src/sat/bmc/bmc.h
index 71a3359..12439fa 100644
--- a/src/sat/bmc/bmc.h
+++ b/src/sat/bmc/bmc.h
@@ -58,6 +58,7 @@ struct Bmc_EsPar_t_
int fOrderNodes;
int fEnumSols;
int fFewerVars;
+ int RuntimeLim;
int fVerbose;
char * pTtStr;
};
@@ -76,6 +77,7 @@ static inline void Bmc_EsParSetDefault( Bmc_EsPar_t * pPars )
pPars->fOrderNodes = 0;
pPars->fEnumSols = 0;
pPars->fFewerVars = 0;
+ pPars->RuntimeLim = 0;
pPars->fVerbose = 1;
}
@@ -186,6 +188,7 @@ struct Bmc_ParFf_t_
int fNonStrict;
int fBasic;
int fFfOnly;
+ int fCheckUntest;
int fDump;
int fDumpDelay;
int fDumpUntest;
diff --git a/src/sat/bmc/bmcBmcAnd.c b/src/sat/bmc/bmcBmcAnd.c
index 04d4435..b9c2db2 100644
--- a/src/sat/bmc/bmcBmcAnd.c
+++ b/src/sat/bmc/bmcBmcAnd.c
@@ -711,7 +711,7 @@ int Gia_ManBmcPerform_Unr( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
if ( pPars->fDumpFrames )
{
p->pFrames = Gia_ManCleanup( p->pFrames );
- Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0 );
+ Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0, 0 );
printf( "Dumped unfolded frames into file \"frames.aig\".\n" );
Gia_ManStop( p->pFrames );
}
@@ -793,7 +793,7 @@ int Gia_ManBmcPerform_old_cnf( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
Gia_ManPrintStats( p->pFrames, NULL );
if ( pPars->fDumpFrames )
{
- Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0 );
+ Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0, 0 );
printf( "Dumped unfolded frames into file \"frames.aig\".\n" );
}
for ( f = 0; f < nFramesMax; f++ )
@@ -977,7 +977,7 @@ int Gia_ManBmcPerformInt( Gia_Man_t * pGia, Bmc_AndPar_t * pPars )
Gia_ManPrintStats( p->pFrames, NULL );
if ( pPars->fDumpFrames )
{
- Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0 );
+ Gia_AigerWrite( p->pFrames, "frames.aig", 0, 0, 0 );
printf( "Dumped unfolded frames into file \"frames.aig\".\n" );
}
if ( pPars->fUseOldCnf )
diff --git a/src/sat/bmc/bmcCexDepth.c b/src/sat/bmc/bmcCexDepth.c
index 38b57d5..f0883f9 100644
--- a/src/sat/bmc/bmcCexDepth.c
+++ b/src/sat/bmc/bmcCexDepth.c
@@ -110,7 +110,7 @@ Gia_Man_t * Bmc_CexTarget( Gia_Man_t * p, int nFrames )
Gia_ManPrintStats( pNew, NULL );
pTemp = Gia_ManDupAppendCones( p, &pNew, 1, 1 );
Gia_ManStop( pNew );
- Gia_AigerWrite( pTemp, "miter3.aig", 0, 0 );
+ Gia_AigerWrite( pTemp, "miter3.aig", 0, 0, 0 );
return pTemp;
}
@@ -308,7 +308,7 @@ Gia_Man_t * Bmc_CexBuildNetwork2Test( Gia_Man_t * p, Abc_Cex_t * pCex, int nFram
Vec_PtrPush( vCones, pNew );
}
pNew = Gia_ManDupAppendCones( p, (Gia_Man_t **)Vec_PtrArray(vCones), Vec_PtrSize(vCones), 1 );
- Gia_AigerWrite( pNew, "miter2.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "miter2.aig", 0, 0, 0 );
//Bmc_CexDumpAogStats( pNew, Abc_Clock() - clk );
Vec_PtrForEachEntry( Gia_Man_t *, vCones, pTemp, i )
Gia_ManStop( pTemp );
diff --git a/src/sat/bmc/bmcCexMin2.c b/src/sat/bmc/bmcCexMin2.c
index b851460..b39b8ee 100644
--- a/src/sat/bmc/bmcCexMin2.c
+++ b/src/sat/bmc/bmcCexMin2.c
@@ -334,7 +334,7 @@ Abc_Cex_t * Gia_ManCexMin( Gia_Man_t * p, Abc_Cex_t * pCex, int iFrameStart, int
printf( "%3d : ", iFrameStart );
Gia_ManPrintStats( pNew, NULL );
if ( fVerbose )
- Gia_AigerWrite( pNew, "temp.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "temp.aig", 0, 0, 0 );
Gia_ManStop( pNew );
}
else // CEX min
@@ -345,7 +345,7 @@ Abc_Cex_t * Gia_ManCexMin( Gia_Man_t * p, Abc_Cex_t * pCex, int iFrameStart, int
printf( "%3d : ", f );
Gia_ManPrintStats( pNew, NULL );
if ( fVerbose )
- Gia_AigerWrite( pNew, "temp.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "temp.aig", 0, 0, 0 );
Gia_ManStop( pNew );
}
}
diff --git a/src/sat/bmc/bmcCexTools.c b/src/sat/bmc/bmcCexTools.c
index 9c80b27..5a29c8b 100644
--- a/src/sat/bmc/bmcCexTools.c
+++ b/src/sat/bmc/bmcCexTools.c
@@ -173,7 +173,7 @@ void Bmc_CexPerformUnrollingTest( Gia_Man_t * p, Abc_Cex_t * pCex )
abctime clk = Abc_Clock();
pNew = Bmc_CexPerformUnrolling( p, pCex );
Gia_ManPrintStats( pNew, NULL );
- Gia_AigerWrite( pNew, "unroll.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "unroll.aig", 0, 0, 0 );
//Bmc_CexDumpAogStats( pNew, Abc_Clock() - clk );
Gia_ManStop( pNew );
printf( "CE-induced network is written into file \"unroll.aig\".\n" );
@@ -285,7 +285,7 @@ void Bmc_CexBuildNetworkTest( Gia_Man_t * p, Abc_Cex_t * pCex )
abctime clk = Abc_Clock();
pNew = Bmc_CexBuildNetwork( p, pCex );
Gia_ManPrintStats( pNew, NULL );
- Gia_AigerWrite( pNew, "unate.aig", 0, 0 );
+ Gia_AigerWrite( pNew, "unate.aig", 0, 0, 0 );
//Bmc_CexDumpAogStats( pNew, Abc_Clock() - clk );
Gia_ManStop( pNew );
printf( "CE-induced network is written into file \"unate.aig\".\n" );
diff --git a/src/sat/bmc/bmcEco.c b/src/sat/bmc/bmcEco.c
index 9d30fc0..b42d527 100644
--- a/src/sat/bmc/bmcEco.c
+++ b/src/sat/bmc/bmcEco.c
@@ -291,7 +291,7 @@ void Bmc_EcoMiterTest()
Vec_IntPush( vFans, Gia_ObjId(pOld, pObj) );
pMiter = Bmc_EcoMiter( pGold, pOld, vFans );
Vec_IntFree( vFans );
- Gia_AigerWrite( pMiter, "eco_miter.aig", 0, 0 );
+ Gia_AigerWrite( pMiter, "eco_miter.aig", 0, 0, 0 );
// find the patch
RetValue = Bmc_EcoPatch( pMiter, Gia_ManCiNum(pGold), Gia_ManCoNum(pGold) );
if ( RetValue == 1 )
diff --git a/src/sat/bmc/bmcFault.c b/src/sat/bmc/bmcFault.c
index 0f63fa6..28d8a0c 100644
--- a/src/sat/bmc/bmcFault.c
+++ b/src/sat/bmc/bmcFault.c
@@ -22,6 +22,7 @@
#include "sat/cnf/cnf.h"
#include "sat/bsat/satStore.h"
#include "aig/gia/giaAig.h"
+#include "misc/extra/extra.h"
ABC_NAMESPACE_IMPL_START
@@ -58,6 +59,7 @@ void Gia_ParFfSetDefault( Bmc_ParFf_t * p )
p->nIterCheck = 0;
p->fBasic = 0;
p->fFfOnly = 0;
+ p->fCheckUntest = 0;
p->fDump = 0;
p->fDumpUntest = 0;
p->fVerbose = 0;
@@ -476,6 +478,7 @@ Gia_Man_t * Gia_ManFOFUnfold( Gia_Man_t * p, Vec_Int_t * vMap )
Gia_Man_t * pNew, * pTemp;
Gia_Obj_t * pObj;
int i, iCtrl0, iCtrl1, iCtrl2, iCtrl3, iMuxA, iMuxB, iFuncVars = 0;
+ int VarLimit = 4 * Gia_ManAndNum(p);
pNew = Gia_ManStart( 9 * Gia_ManObjNum(p) );
pNew->pName = Abc_UtilStrsav( p->pName );
Gia_ManHashAlloc( pNew );
@@ -484,22 +487,22 @@ Gia_Man_t * Gia_ManFOFUnfold( Gia_Man_t * p, Vec_Int_t * vMap )
pObj->Value = Gia_ManAppendCi( pNew );
Gia_ManForEachAnd( p, pObj, i )
{
- if ( Vec_IntEntry(vMap, iFuncVars++) )
+ if ( Vec_IntEntry(vMap, iFuncVars++) && iFuncVars < VarLimit )
iCtrl0 = Gia_ManAppendCi(pNew);
else
iCtrl0 = 0, Gia_ManAppendCi(pNew);
- if ( Vec_IntEntry(vMap, iFuncVars++) )
+ if ( Vec_IntEntry(vMap, iFuncVars++) && iFuncVars < VarLimit )
iCtrl1 = Gia_ManAppendCi(pNew);
else
iCtrl1 = 0, Gia_ManAppendCi(pNew);
- if ( Vec_IntEntry(vMap, iFuncVars++) )
+ if ( Vec_IntEntry(vMap, iFuncVars++) && iFuncVars < VarLimit )
iCtrl2 = Gia_ManAppendCi(pNew);
else
iCtrl2 = 0, Gia_ManAppendCi(pNew);
- if ( Vec_IntEntry(vMap, iFuncVars++) )
+ if ( Vec_IntEntry(vMap, iFuncVars++) && iFuncVars < VarLimit )
iCtrl3 = Gia_ManAppendCi(pNew);
else
iCtrl3 = 0, Gia_ManAppendCi(pNew);
@@ -751,7 +754,7 @@ Gia_Man_t * Gia_ManFormulaUnfold( Gia_Man_t * p, char * pForm, int fFfOnly )
Gia_ManStop( pTemp );
assert( Gia_ManPiNum(pNew) == Gia_ManCiNum(p) + nPars * (fFfOnly ? Count : Gia_ManAndNum(p)) );
// if ( fUseFaults )
-// Gia_AigerWrite( pNew, "newfault.aig", 0, 0 );
+// Gia_AigerWrite( pNew, "newfault.aig", 0, 0, 0 );
return pNew;
}
@@ -1257,7 +1260,7 @@ int Gia_ManFaultPrepare( Gia_Man_t * p, Gia_Man_t * pG, Bmc_ParFf_t * pPars, int
p1 = Gia_ManFOFUnfold( p, vMap );
if ( pPars->Algo != 1 )
p0 = Gia_ManDeriveDup( pG, Gia_ManCiNum(p1) - Gia_ManCiNum(pG) );
-// Gia_AigerWrite( p1, "newfault.aig", 0, 0 );
+// Gia_AigerWrite( p1, "newfault.aig", 0, 0, 0 );
// printf( "Dumped circuit with fault parameters into file \"newfault.aig\".\n" );
// create miter
@@ -1441,6 +1444,19 @@ void Gia_ManFaultTest( Gia_Man_t * p, Gia_Man_t * pG, Bmc_ParFf_t * pPars )
return;
}
+ printf( "Options: " );
+ printf( "Untestable faults = %s. ", pPars->fCheckUntest || pPars->fDumpDelay ? "yes": "no" );
+ if ( pPars->nCardConstr )
+ printf( "Using %sstrict cardinality %d. ", pPars->fNonStrict ? "non-" : "", pPars->nCardConstr );
+ if ( pPars->fFfOnly )
+ printf( "Faults at FF outputs only = yes. " );
+ if ( pPars->nTimeOut )
+ printf( "Runtime limit = %d sec. ", pPars->nTimeOut );
+ if ( p != pG && pG->pSpec )
+ printf( "Golden model = %s. ", pG->pSpec );
+ printf( "Verbose = %s. ", pPars->fVerbose ? "yes": "no" );
+ printf( "\n" );
+
// select algorithm
if ( pPars->Algo == 0 )
nFuncVars = Gia_ManCiNum(p);
@@ -1565,7 +1581,7 @@ finish:
// dump the test suite
if ( pPars->fDump )
{
- char * pFileName = "tests.txt";
+ char * pFileName = p->pSpec ? Extra_FileNameGenericAppend(p->pSpec, "_tests.txt") : "tests.txt";
if ( pPars->fDumpDelay && pPars->Algo == 1 )
{
Gia_ManDumpTestsDelay( vTests, Iter, pFileName, p );
@@ -1579,7 +1595,7 @@ finish:
}
// compute untestable faults
- if ( Iter && (p != pG || pPars->fDumpUntest) )
+ if ( Iter && (p != pG || pPars->fDumpUntest || pPars->fCheckUntest) )
{
abctime clkTotal = Abc_Clock();
// restart the SAT solver
@@ -1680,7 +1696,7 @@ finish:
if ( pPars->fDumpUntest && status == l_True )
{
abctime clk = Abc_Clock();
- char * pFileName = "untest.txt";
+ char * pFileName = p->pSpec ? Extra_FileNameGenericAppend(p->pSpec, "_untest.txt") : "untest.txt";
int nUntests = Gia_ManDumpUntests( pM, pCnf, pSat, nFuncVars, pFileName, pPars->fVerbose );
if ( p == pG )
printf( "Dumped %d untestable multiple faults into file \"%s\". ", nUntests, pFileName );
diff --git a/src/sat/bmc/bmcMaj.c b/src/sat/bmc/bmcMaj.c
index 4f2c8db..08571a3 100644
--- a/src/sat/bmc/bmcMaj.c
+++ b/src/sat/bmc/bmcMaj.c
@@ -500,6 +500,8 @@ Exa_Man_t * Exa_ManAlloc( Bmc_EsPar_t * pPars, word * pTruth )
p->vInfo = Exa_ManTruthTables( p );
p->pSat = bmcg_sat_solver_start();
bmcg_sat_solver_set_nvars( p->pSat, p->iVar );
+ if ( pPars->RuntimeLim )
+ bmcg_sat_solver_set_runtime_limit( p->pSat, Abc_Clock() + pPars->RuntimeLim * CLOCKS_PER_SEC );
return p;
}
void Exa_ManFree( Exa_Man_t * p )
@@ -572,6 +574,59 @@ static inline int Exa_ManEval( Exa_Man_t * p )
SeeAlso []
***********************************************************************/
+void Exa_ManDumpBlif( Exa_Man_t * p, int fCompl )
+{
+ char Buffer[1000];
+ char FileName[1000];
+ FILE * pFile;
+ int i, k, iVar;
+ if ( fCompl )
+ Abc_TtNot( p->pTruth, p->nWords );
+ Extra_PrintHexadecimalString( Buffer, (unsigned *)p->pTruth, p->nVars );
+ if ( fCompl )
+ Abc_TtNot( p->pTruth, p->nWords );
+ sprintf( FileName, "%s_%d_%d.blif", Buffer, 2, p->nNodes );
+ pFile = fopen( FileName, "wb" );
+ fprintf( pFile, "# Realization of the %d-input function %s using %d two-input gates:\n", p->nVars, Buffer, p->nNodes );
+ fprintf( pFile, ".model %s_%d_%d\n", Buffer, 2, p->nNodes );
+ fprintf( pFile, ".inputs" );
+ for ( i = 0; i < p->nVars; i++ )
+ fprintf( pFile, " %c", 'a'+i );
+ fprintf( pFile, "\n" );
+ fprintf( pFile, ".outputs F\n" );
+ for ( i = p->nObjs - 1; i >= p->nVars; i-- )
+ {
+ int iVarStart = 1 + 3*(i - p->nVars);
+ int Val1 = bmcg_sat_solver_read_cex_varvalue(p->pSat, iVarStart);
+ int Val2 = bmcg_sat_solver_read_cex_varvalue(p->pSat, iVarStart+1);
+ int Val3 = bmcg_sat_solver_read_cex_varvalue(p->pSat, iVarStart+2);
+
+ fprintf( pFile, ".names" );
+ for ( k = 1; k >= 0; k-- )
+ {
+ iVar = Exa_ManFindFanin( p, i, k );
+ if ( iVar >= 0 && iVar < p->nVars )
+ fprintf( pFile, " %c", 'a'+iVar );
+ else
+ fprintf( pFile, " %02d", iVar );
+ }
+ if ( i == p->nObjs - 1 )
+ fprintf( pFile, " F\n" );
+ else
+ fprintf( pFile, " %02d\n", i );
+ if ( i == p->nObjs - 1 && fCompl )
+ fprintf( pFile, "00 1\n" );
+ if ( (i == p->nObjs - 1 && fCompl) ^ Val1 )
+ fprintf( pFile, "01 1\n" );
+ if ( (i == p->nObjs - 1 && fCompl) ^ Val2 )
+ fprintf( pFile, "10 1\n" );
+ if ( (i == p->nObjs - 1 && fCompl) ^ Val3 )
+ fprintf( pFile, "11 1\n" );
+ }
+ fprintf( pFile, ".end\n\n" );
+ fclose( pFile );
+ printf( "Solution was dumped into file \"%s\".\n", FileName );
+}
void Exa_ManPrintSolution( Exa_Man_t * p, int fCompl )
{
int i, k, iVar;
@@ -775,10 +830,18 @@ void Exa_ManExactSynthesis( Bmc_EsPar_t * pPars )
printf( "The problem has no solution.\n" );
break;
}
+ if ( status == GLUCOSE_UNDEC )
+ {
+ printf( "The problem timed out after %d sec.\n", pPars->RuntimeLim );
+ break;
+ }
iMint = Exa_ManEval( p );
}
if ( iMint == -1 )
+ {
Exa_ManPrintSolution( p, fCompl );
+ Exa_ManDumpBlif( p, fCompl );
+ }
Exa_ManFree( p );
Abc_PrintTime( 1, "Total runtime", Abc_Clock() - clkTotal );
}
@@ -915,6 +978,8 @@ static Exa3_Man_t * Exa3_ManAlloc( Bmc_EsPar_t * pPars, word * pTruth )
p->vUsed3 = Vec_BitStart( (1 << p->pPars->nVars) * p->pPars->nNodes * p->nObjs * p->nObjs * p->nObjs );
p->pSat = bmcg_sat_solver_start();
bmcg_sat_solver_set_nvars( p->pSat, p->iVar );
+ if ( pPars->RuntimeLim )
+ bmcg_sat_solver_set_runtime_limit( p->pSat, Abc_Clock() + pPars->RuntimeLim * CLOCKS_PER_SEC );
return p;
}
static void Exa3_ManFree( Exa3_Man_t * p )
@@ -1267,15 +1332,17 @@ void Exa3_ManExactSynthesis( Bmc_EsPar_t * pPars )
status = bmcg_sat_solver_solve( p->pSat, NULL, 0 );
if ( pPars->fVerbose && (!pPars->fUseIncr || i % 100 == 0) )
Exa3_ManPrint( p, i, iMint, Abc_Clock() - clkTotal );
- if ( status == GLUCOSE_UNSAT )
+ if ( status == GLUCOSE_UNSAT || status == GLUCOSE_UNDEC )
break;
iMint = Exa3_ManEval( p );
}
- if ( pPars->fVerbose )
+ if ( pPars->fVerbose && status != GLUCOSE_UNDEC )
Exa3_ManPrint( p, i, iMint, Abc_Clock() - clkTotal );
if ( iMint == -1 )
Exa3_ManPrintSolution( p, fCompl );
- else
+ else if ( status == GLUCOSE_UNDEC )
+ printf( "The problem timed out after %d sec.\n", pPars->RuntimeLim );
+ else
printf( "The problem has no solution.\n" );
printf( "Added = %d. Tried = %d. ", p->nUsed[1], p->nUsed[0] );
Exa3_ManFree( p );
diff --git a/src/sat/bmc/bmcUnroll.c b/src/sat/bmc/bmcUnroll.c
index 0ad9271..1051393 100644
--- a/src/sat/bmc/bmcUnroll.c
+++ b/src/sat/bmc/bmcUnroll.c
@@ -489,8 +489,8 @@ void Unr_ManTest( Gia_Man_t * pGia, int nFrames )
Gia_ManPrintStats( pFrames0, NULL );
Gia_ManPrintStats( pFrames1, NULL );
-Gia_AigerWrite( pFrames0, "frames0.aig", 0, 0 );
-Gia_AigerWrite( pFrames1, "frames1.aig", 0, 0 );
+Gia_AigerWrite( pFrames0, "frames0.aig", 0, 0, 0 );
+Gia_AigerWrite( pFrames1, "frames1.aig", 0, 0, 0 );
Gia_ManStop( pFrames0 );
Gia_ManStop( pFrames1 );