Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abc
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
abc
Commits
b9e0c95b
Commit
b9e0c95b
authored
Feb 09, 2007
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Version abc70209
parent
a13c64a5
Hide whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
968 additions
and
1516 deletions
+968
-1516
abc.dsp
+4
-0
abc.plg
+0
-25
abc.rc
+6
-0
abclib.plg
+0
-903
abctestlib.plg
+0
-35
src/base/abc/abc.h
+20
-18
src/base/abc/abcCheck.c
+18
-7
src/base/abc/abcDfs.c
+295
-237
src/base/abc/abcFanio.c
+2
-0
src/base/abc/abcHie.c
+289
-200
src/base/abc/abcLib.c
+9
-3
src/base/abc/abcNames.c
+5
-11
src/base/abc/abcNetlist.c
+2
-1
src/base/abc/abcNtk.c
+6
-10
src/base/abc/abcObj.c
+10
-6
src/base/abc/abcSop.c
+6
-0
src/base/abc/abcUtil.c
+31
-0
src/base/abc/module.make
+1
-0
src/base/abci/abc.c
+2
-1
src/base/abci/abcPrint.c
+2
-5
src/base/abci/abcStrash.c
+0
-1
src/base/cmd/cmd.c
+3
-3
src/base/io/io.c
+56
-17
src/base/io/io.h
+4
-2
src/base/io/ioReadBlif.c
+12
-4
src/base/io/ioReadBlifMv.c
+28
-10
src/base/io/ioUtil.c
+121
-1
src/base/io/ioWriteBlif.c
+14
-8
src/base/io/ioWriteBlifMv.c
+2
-1
src/base/main/mainFrame.c
+1
-1
src/base/ver/verCore.c
+1
-1
src/map/mapper/mapperCanon.c
+4
-2
src/map/mapper/mapperRefs.c
+2
-2
src/opt/fxu/fxuCreate.c
+2
-1
src/opt/fxu/fxuReduce.c
+10
-0
No files found.
abc.dsp
View file @
b9e0c95b
...
@@ -118,6 +118,10 @@ SOURCE=.\src\base\abc\abcFunc.c
...
@@ -118,6 +118,10 @@ SOURCE=.\src\base\abc\abcFunc.c
# End Source File
# End Source File
# Begin Source File
# Begin Source File
SOURCE=.\src\base\abc\abcHie.c
# End Source File
# Begin Source File
SOURCE=.\src\base\abc\abcInt.h
SOURCE=.\src\base\abc\abcInt.h
# End Source File
# End Source File
# Begin Source File
# Begin Source File
...
...
abc.plg
deleted
100644 → 0
View file @
a13c64a5
<html>
<body>
<pre>
<h1>
Build Log
</h1>
<h3>
--------------------Configuration: abc - Win32 Debug--------------------
</h3>
<h3>
Command Lines
</h3>
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP83C.tmp" with contents
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\base\abc" /I "src\base\abci" /I "src\base\abcs" /I "src\base\seq" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\bsat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\cut" /I "src\opt\dec" /I "src\opt\fxu" /I "src\opt\sim" /I "src\opt\rwr" /I "src\opt\kit" /I "src\opt\res" /I "src\map\fpga" /I "src\map\if" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\mvc" /I "src\misc\util" /I "src\misc\npn" /I "src\misc\vec" /I "src\misc\espresso" /I "src\misc\nm" /I "src\misc\hash" /I "src\aig\ivy" /I "src\aig\hop" /I "src\aig\rwt" /I "src\aig\deco" /I "src\aig\mem" /I "src\temp\esop" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "__STDC__" /FR"Debug/" /Fp"Debug/abc.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\_projects\abc\src\base\abc\abcObj.c"
]
Creating command line "cl.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP83C.tmp"
<h3>
Output Window
</h3>
Compiling...
abcObj.c
<h3>
Results
</h3>
abcObj.obj - 0 error(s), 0 warning(s)
</pre>
</body>
</html>
abc.rc
View file @
b9e0c95b
...
@@ -47,6 +47,7 @@ alias r3 retime -M 3
...
@@ -47,6 +47,7 @@ alias r3 retime -M 3
alias r3f retime -M 3 -f
alias r3f retime -M 3 -f
alias r3b retime -M 3 -b
alias r3b retime -M 3 -b
alias ren renode
alias ren renode
alias rh read_hie
alias rl read_blif
alias rl read_blif
alias rb read_bench
alias rb read_bench
alias ret retime
alias ret retime
...
@@ -76,6 +77,7 @@ alias trt "r c.blif; st; tr0; b; tr1"
...
@@ -76,6 +77,7 @@ alias trt "r c.blif; st; tr0; b; tr1"
alias u undo
alias u undo
alias w write
alias w write
alias wb write_blif
alias wb write_blif
alias wh write_hie
alias wl write_blif
alias wl write_blif
alias wp write_pla
alias wp write_pla
alias wv write_verilog
alias wv write_verilog
...
@@ -106,6 +108,9 @@ alias compress2rs "b -l; rs -K 6 -l; rw -l; rs -K 6 -N 2 -l; rf -l; rs -K 8 -l;
...
@@ -106,6 +108,9 @@ alias compress2rs "b -l; rs -K 6 -l; rw -l; rs -K 6 -N 2 -l; rf -l; rs -K 8 -l;
alias resyn2rsdc "b; rs -K 6 -F 2; rw; rs -K 6 -N 2 -F 2; rf; rs -K 8 -F 2; b; rs -K 8 -N 2 -F 2; rw; rs -K 10 -F 2; rwz; rs -K 10 -N 2 -F 2; b; rs -K 12 -F 2; rfz; rs -K 12 -N 2 -F 2; rwz; b"
alias resyn2rsdc "b; rs -K 6 -F 2; rw; rs -K 6 -N 2 -F 2; rf; rs -K 8 -F 2; b; rs -K 8 -N 2 -F 2; rw; rs -K 10 -F 2; rwz; rs -K 10 -N 2 -F 2; b; rs -K 12 -F 2; rfz; rs -K 12 -N 2 -F 2; rwz; b"
alias compress2rsdc "b -l; rs -K 6 -F 2 -l; rw -l; rs -K 6 -N 2 -F 2 -l; rf -l; rs -K 8 -F 2 -l; b -l; rs -K 8 -N 2 -F 2 -l; rw -l; rs -K 10 -F 2 -l; rwz -l; rs -K 10 -N 2 -F 2 -l; b -l; rs -K 12 -F 2 -l; rfz -l; rs -K 12 -N 2 -F 2 -l; rwz -l; b -l"
alias compress2rsdc "b -l; rs -K 6 -F 2 -l; rw -l; rs -K 6 -N 2 -F 2 -l; rf -l; rs -K 8 -F 2 -l; b -l; rs -K 8 -N 2 -F 2 -l; rw -l; rs -K 10 -F 2 -l; rwz -l; rs -K 10 -N 2 -F 2 -l; b -l; rs -K 12 -F 2 -l; rfz -l; rs -K 12 -N 2 -F 2 -l; rwz -l; b -l"
# minimizing for FF literals
alias fflitmin "compress2rs; ren; sop; ps -f"
# temporaries
# temporaries
#alias t "rvl th/lib.v; rvv th/t2.v"
#alias t "rvl th/lib.v; rvv th/t2.v"
#alias t "so c/pure_sat/test.c"
#alias t "so c/pure_sat/test.c"
...
@@ -113,5 +118,6 @@ alias compress2rsdc "b -l; rs -K 6 -F 2 -l; rw -l; rs -K 6 -N 2 -F 2 -l; rf -l;
...
@@ -113,5 +118,6 @@ alias compress2rsdc "b -l; rs -K 6 -F 2 -l; rw -l; rs -K 6 -N 2 -F 2 -l; rf -l;
alias t0 "r res.blif; aig; mfs"
alias t0 "r res.blif; aig; mfs"
alias t "r res2.blif; aig; mfs"
alias t "r res2.blif; aig; mfs"
alias tt "rh a/quip_opt/nut_002_opt.blif"
abclib.plg
deleted
100644 → 0
View file @
a13c64a5
<html>
<body>
<pre>
<h1>
Build Log
</h1>
<h3>
--------------------Configuration: abclib - Win32 Debug--------------------
</h3>
<h3>
Command Lines
</h3>
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137A.tmp" with contents
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\base\abc" /I "src\base\abci" /I "src\base\abcs" /I "src\base\seq" /I "src\base\cmd" /I "src\base\io" /I "src\base\main" /I "src\bdd\cudd" /I "src\bdd\epd" /I "src\bdd\mtr" /I "src\bdd\parse" /I "src\bdd\dsd" /I "src\bdd\reo" /I "src\sop\ft" /I "src\sat\asat" /I "src\sat\bsat" /I "src\sat\msat" /I "src\sat\fraig" /I "src\opt\cut" /I "src\opt\dec" /I "src\opt\fxu" /I "src\opt\sim" /I "src\opt\rwr" /I "src\opt\kit" /I "src\map\fpga" /I "src\map\if" /I "src\map\mapper" /I "src\map\mio" /I "src\map\super" /I "src\misc\extra" /I "src\misc\st" /I "src\misc\mvc" /I "src\misc\util" /I "src\misc\npn" /I "src\misc\vec" /I "src\misc\espresso" /I "src\misc\nm" /I "src\misc\hash" /I "src\aig\ivy" /I "src\aig\hop" /I "src\aig\rwt" /I "src\aig\deco" /I "src\aig\mem" /I "src\temp\esop" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "__STDC__" /D "HAVE_ASSERT_H" /FR"abclib\DebugLib/" /Fp"abclib\DebugLib/abclib.pch" /YX /Fo"abclib\DebugLib/" /Fd"abclib\DebugLib/" /FD /GZ /c
"C:\_projects\abc\src\sat\asat\jfront.c"
]
Creating command line "cl.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137A.tmp"
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137B.tmp" with contents
[
/nologo /out:"abclib\abclib_debug.lib"
.\abclib\DebugLib\abcAig.obj
.\abclib\DebugLib\abcCheck.obj
.\abclib\DebugLib\abcDfs.obj
.\abclib\DebugLib\abcFanio.obj
.\abclib\DebugLib\abcFunc.obj
.\abclib\DebugLib\abcLatch.obj
.\abclib\DebugLib\abcLib.obj
.\abclib\DebugLib\abcMinBase.obj
.\abclib\DebugLib\abcNames.obj
.\abclib\DebugLib\abcNetlist.obj
.\abclib\DebugLib\abcNtk.obj
.\abclib\DebugLib\abcObj.obj
.\abclib\DebugLib\abcRefs.obj
.\abclib\DebugLib\abcShow.obj
.\abclib\DebugLib\abcSop.obj
.\abclib\DebugLib\abcUtil.obj
.\abclib\DebugLib\abc.obj
.\abclib\DebugLib\abcAttach.obj
.\abclib\DebugLib\abcAuto.obj
.\abclib\DebugLib\abcBalance.obj
.\abclib\DebugLib\abcBmc.obj
.\abclib\DebugLib\abcClpBdd.obj
.\abclib\DebugLib\abcClpSop.obj
.\abclib\DebugLib\abcCut.obj
.\abclib\DebugLib\abcDebug.obj
.\abclib\DebugLib\abcDress.obj
.\abclib\DebugLib\abcDsd.obj
.\abclib\DebugLib\abcEspresso.obj
.\abclib\DebugLib\abcExtract.obj
.\abclib\DebugLib\abcFpga.obj
.\abclib\DebugLib\abcFpgaFast.obj
.\abclib\DebugLib\abcFraig.obj
.\abclib\DebugLib\abcFxu.obj
.\abclib\DebugLib\abcGen.obj
.\abclib\DebugLib\abcIf.obj
.\abclib\DebugLib\abcIvy.obj
.\abclib\DebugLib\abcLut.obj
.\abclib\DebugLib\abcMap.obj
.\abclib\DebugLib\abcMini.obj
.\abclib\DebugLib\abcMiter.obj
.\abclib\DebugLib\abcMulti.obj
.\abclib\DebugLib\abcMv.obj
.\abclib\DebugLib\abcNtbdd.obj
.\abclib\DebugLib\abcOrder.obj
.\abclib\DebugLib\abcPrint.obj
.\abclib\DebugLib\abcProve.obj
.\abclib\DebugLib\abcReconv.obj
.\abclib\DebugLib\abcRefactor.obj
.\abclib\DebugLib\abcRenode.obj
.\abclib\DebugLib\abcReorder.obj
.\abclib\DebugLib\abcRestruct.obj
.\abclib\DebugLib\abcResub.obj
.\abclib\DebugLib\abcRewrite.obj
.\abclib\DebugLib\abcRr.obj
.\abclib\DebugLib\abcSat.obj
.\abclib\DebugLib\abcStrash.obj
.\abclib\DebugLib\abcSweep.obj
.\abclib\DebugLib\abcSymm.obj
.\abclib\DebugLib\abcTiming.obj
.\abclib\DebugLib\abcUnate.obj
.\abclib\DebugLib\abcUnreach.obj
.\abclib\DebugLib\abcVerify.obj
.\abclib\DebugLib\abcXsim.obj
.\abclib\DebugLib\cmd.obj
.\abclib\DebugLib\cmdAlias.obj
.\abclib\DebugLib\cmdApi.obj
.\abclib\DebugLib\cmdFlag.obj
.\abclib\DebugLib\cmdHist.obj
.\abclib\DebugLib\cmdUtils.obj
.\abclib\DebugLib\io.obj
.\abclib\DebugLib\ioReadAiger.obj
.\abclib\DebugLib\ioReadBaf.obj
.\abclib\DebugLib\ioReadBench.obj
.\abclib\DebugLib\ioReadBlif.obj
.\abclib\DebugLib\ioReadBlifAig.obj
.\abclib\DebugLib\ioReadEdif.obj
.\abclib\DebugLib\ioReadEqn.obj
.\abclib\DebugLib\ioReadPla.obj
.\abclib\DebugLib\ioUtil.obj
.\abclib\DebugLib\ioWriteAiger.obj
.\abclib\DebugLib\ioWriteBaf.obj
.\abclib\DebugLib\ioWriteBench.obj
.\abclib\DebugLib\ioWriteBlif.obj
.\abclib\DebugLib\ioWriteCnf.obj
.\abclib\DebugLib\ioWriteDot.obj
.\abclib\DebugLib\ioWriteEqn.obj
.\abclib\DebugLib\ioWriteGml.obj
.\abclib\DebugLib\ioWriteList.obj
.\abclib\DebugLib\ioWritePla.obj
.\abclib\DebugLib\ioWriteVer.obj
.\abclib\DebugLib\ioWriteVerAux.obj
.\abclib\DebugLib\libSupport.obj
.\abclib\DebugLib\main.obj
.\abclib\DebugLib\mainFrame.obj
.\abclib\DebugLib\mainInit.obj
.\abclib\DebugLib\mainUtils.obj
.\abclib\DebugLib\verCore.obj
.\abclib\DebugLib\verFormula.obj
.\abclib\DebugLib\verParse.obj
.\abclib\DebugLib\verStream.obj
.\abclib\DebugLib\verWords.obj
.\abclib\DebugLib\cuddAddAbs.obj
.\abclib\DebugLib\cuddAddApply.obj
.\abclib\DebugLib\cuddAddFind.obj
.\abclib\DebugLib\cuddAddInv.obj
.\abclib\DebugLib\cuddAddIte.obj
.\abclib\DebugLib\cuddAddNeg.obj
.\abclib\DebugLib\cuddAddWalsh.obj
.\abclib\DebugLib\cuddAndAbs.obj
.\abclib\DebugLib\cuddAnneal.obj
.\abclib\DebugLib\cuddApa.obj
.\abclib\DebugLib\cuddAPI.obj
.\abclib\DebugLib\cuddApprox.obj
.\abclib\DebugLib\cuddBddAbs.obj
.\abclib\DebugLib\cuddBddCorr.obj
.\abclib\DebugLib\cuddBddIte.obj
.\abclib\DebugLib\cuddBridge.obj
.\abclib\DebugLib\cuddCache.obj
.\abclib\DebugLib\cuddCheck.obj
.\abclib\DebugLib\cuddClip.obj
.\abclib\DebugLib\cuddCof.obj
.\abclib\DebugLib\cuddCompose.obj
.\abclib\DebugLib\cuddDecomp.obj
.\abclib\DebugLib\cuddEssent.obj
.\abclib\DebugLib\cuddExact.obj
.\abclib\DebugLib\cuddExport.obj
.\abclib\DebugLib\cuddGenCof.obj
.\abclib\DebugLib\cuddGenetic.obj
.\abclib\DebugLib\cuddGroup.obj
.\abclib\DebugLib\cuddHarwell.obj
.\abclib\DebugLib\cuddInit.obj
.\abclib\DebugLib\cuddInteract.obj
.\abclib\DebugLib\cuddLCache.obj
.\abclib\DebugLib\cuddLevelQ.obj
.\abclib\DebugLib\cuddLinear.obj
.\abclib\DebugLib\cuddLiteral.obj
.\abclib\DebugLib\cuddMatMult.obj
.\abclib\DebugLib\cuddPriority.obj
.\abclib\DebugLib\cuddRead.obj
.\abclib\DebugLib\cuddRef.obj
.\abclib\DebugLib\cuddReorder.obj
.\abclib\DebugLib\cuddSat.obj
.\abclib\DebugLib\cuddSign.obj
.\abclib\DebugLib\cuddSolve.obj
.\abclib\DebugLib\cuddSplit.obj
.\abclib\DebugLib\cuddSubsetHB.obj
.\abclib\DebugLib\cuddSubsetSP.obj
.\abclib\DebugLib\cuddSymmetry.obj
.\abclib\DebugLib\cuddTable.obj
.\abclib\DebugLib\cuddUtil.obj
.\abclib\DebugLib\cuddWindow.obj
.\abclib\DebugLib\cuddZddCount.obj
.\abclib\DebugLib\cuddZddFuncs.obj
.\abclib\DebugLib\cuddZddGroup.obj
.\abclib\DebugLib\cuddZddIsop.obj
.\abclib\DebugLib\cuddZddLin.obj
.\abclib\DebugLib\cuddZddMisc.obj
.\abclib\DebugLib\cuddZddPort.obj
.\abclib\DebugLib\cuddZddReord.obj
.\abclib\DebugLib\cuddZddSetop.obj
.\abclib\DebugLib\cuddZddSymm.obj
.\abclib\DebugLib\cuddZddUtil.obj
.\abclib\DebugLib\epd.obj
.\abclib\DebugLib\mtrBasic.obj
.\abclib\DebugLib\mtrGroup.obj
.\abclib\DebugLib\parseCore.obj
.\abclib\DebugLib\parseEqn.obj
.\abclib\DebugLib\parseStack.obj
.\abclib\DebugLib\dsdApi.obj
.\abclib\DebugLib\dsdCheck.obj
.\abclib\DebugLib\dsdLocal.obj
.\abclib\DebugLib\dsdMan.obj
.\abclib\DebugLib\dsdProc.obj
.\abclib\DebugLib\dsdTree.obj
.\abclib\DebugLib\reoApi.obj
.\abclib\DebugLib\reoCore.obj
.\abclib\DebugLib\reoProfile.obj
.\abclib\DebugLib\reoSift.obj
.\abclib\DebugLib\reoSwap.obj
.\abclib\DebugLib\reoTest.obj
.\abclib\DebugLib\reoTransfer.obj
.\abclib\DebugLib\reoUnits.obj
.\abclib\DebugLib\added.obj
.\abclib\DebugLib\asatmem.obj
.\abclib\DebugLib\solver.obj
.\abclib\DebugLib\msatActivity.obj
.\abclib\DebugLib\msatClause.obj
.\abclib\DebugLib\msatClauseVec.obj
.\abclib\DebugLib\msatMem.obj
.\abclib\DebugLib\msatOrderH.obj
.\abclib\DebugLib\msatQueue.obj
.\abclib\DebugLib\msatRead.obj
.\abclib\DebugLib\msatSolverApi.obj
.\abclib\DebugLib\msatSolverCore.obj
.\abclib\DebugLib\msatSolverIo.obj
.\abclib\DebugLib\msatSolverSearch.obj
.\abclib\DebugLib\msatSort.obj
.\abclib\DebugLib\msatVec.obj
.\abclib\DebugLib\fraigApi.obj
.\abclib\DebugLib\fraigCanon.obj
.\abclib\DebugLib\fraigChoice.obj
.\abclib\DebugLib\fraigFanout.obj
.\abclib\DebugLib\fraigFeed.obj
.\abclib\DebugLib\fraigMan.obj
.\abclib\DebugLib\fraigMem.obj
.\abclib\DebugLib\fraigNode.obj
.\abclib\DebugLib\fraigPrime.obj
.\abclib\DebugLib\fraigSat.obj
.\abclib\DebugLib\fraigTable.obj
.\abclib\DebugLib\fraigUtil.obj
.\abclib\DebugLib\fraigVec.obj
.\abclib\DebugLib\csat_apis.obj
.\abclib\DebugLib\satMem.obj
.\abclib\DebugLib\satSolver.obj
.\abclib\DebugLib\satUtil.obj
.\abclib\DebugLib\fxu.obj
.\abclib\DebugLib\fxuCreate.obj
.\abclib\DebugLib\fxuHeapD.obj
.\abclib\DebugLib\fxuHeapS.obj
.\abclib\DebugLib\fxuList.obj
.\abclib\DebugLib\fxuMatrix.obj
.\abclib\DebugLib\fxuPair.obj
.\abclib\DebugLib\fxuPrint.obj
.\abclib\DebugLib\fxuReduce.obj
.\abclib\DebugLib\fxuSelect.obj
.\abclib\DebugLib\fxuSingle.obj
.\abclib\DebugLib\fxuUpdate.obj
.\abclib\DebugLib\rwrDec.obj
.\abclib\DebugLib\rwrEva.obj
.\abclib\DebugLib\rwrExp.obj
.\abclib\DebugLib\rwrLib.obj
.\abclib\DebugLib\rwrMan.obj
.\abclib\DebugLib\rwrPrint.obj
.\abclib\DebugLib\rwrTemp.obj
.\abclib\DebugLib\rwrUtil.obj
.\abclib\DebugLib\cutApi.obj
.\abclib\DebugLib\cutCut.obj
.\abclib\DebugLib\cutExpand.obj
.\abclib\DebugLib\cutMan.obj
.\abclib\DebugLib\cutMerge.obj
.\abclib\DebugLib\cutNode.obj
.\abclib\DebugLib\cutOracle.obj
.\abclib\DebugLib\cutPre22.obj
.\abclib\DebugLib\cutSeq.obj
.\abclib\DebugLib\cutTruth.obj
.\abclib\DebugLib\decAbc.obj
.\abclib\DebugLib\decFactor.obj
.\abclib\DebugLib\decMan.obj
.\abclib\DebugLib\decPrint.obj
.\abclib\DebugLib\decUtil.obj
.\abclib\DebugLib\simMan.obj
.\abclib\DebugLib\simSat.obj
.\abclib\DebugLib\simSeq.obj
.\abclib\DebugLib\simSupp.obj
.\abclib\DebugLib\simSwitch.obj
.\abclib\DebugLib\simSym.obj
.\abclib\DebugLib\simSymSat.obj
.\abclib\DebugLib\simSymSim.obj
.\abclib\DebugLib\simSymStr.obj
.\abclib\DebugLib\simUtils.obj
.\abclib\DebugLib\retArea.obj
.\abclib\DebugLib\retCore.obj
.\abclib\DebugLib\retDelay.obj
.\abclib\DebugLib\retFlow.obj
.\abclib\DebugLib\retIncrem.obj
.\abclib\DebugLib\retInit.obj
.\abclib\DebugLib\retLvalue.obj
.\abclib\DebugLib\kitBdd.obj
.\abclib\DebugLib\kitFactor.obj
.\abclib\DebugLib\kitGraph.obj
.\abclib\DebugLib\kitHop.obj
.\abclib\DebugLib\kitIsop.obj
.\abclib\DebugLib\kitSop.obj
.\abclib\DebugLib\kitTruth.obj
.\abclib\DebugLib\fpga.obj
.\abclib\DebugLib\fpgaCore.obj
.\abclib\DebugLib\fpgaCreate.obj
.\abclib\DebugLib\fpgaCut.obj
.\abclib\DebugLib\fpgaCutUtils.obj
.\abclib\DebugLib\fpgaFanout.obj
.\abclib\DebugLib\fpgaLib.obj
.\abclib\DebugLib\fpgaMatch.obj
.\abclib\DebugLib\fpgaSwitch.obj
.\abclib\DebugLib\fpgaTime.obj
.\abclib\DebugLib\fpgaTruth.obj
.\abclib\DebugLib\fpgaUtils.obj
.\abclib\DebugLib\fpgaVec.obj
.\abclib\DebugLib\mapper.obj
.\abclib\DebugLib\mapperCanon.obj
.\abclib\DebugLib\mapperCore.obj
.\abclib\DebugLib\mapperCreate.obj
.\abclib\DebugLib\mapperCut.obj
.\abclib\DebugLib\mapperCutUtils.obj
.\abclib\DebugLib\mapperFanout.obj
.\abclib\DebugLib\mapperLib.obj
.\abclib\DebugLib\mapperMatch.obj
.\abclib\DebugLib\mapperRefs.obj
.\abclib\DebugLib\mapperSuper.obj
.\abclib\DebugLib\mapperSwitch.obj
.\abclib\DebugLib\mapperTable.obj
.\abclib\DebugLib\mapperTime.obj
.\abclib\DebugLib\mapperTree.obj
.\abclib\DebugLib\mapperTruth.obj
.\abclib\DebugLib\mapperUtils.obj
.\abclib\DebugLib\mapperVec.obj
.\abclib\DebugLib\mio.obj
.\abclib\DebugLib\mioApi.obj
.\abclib\DebugLib\mioFunc.obj
.\abclib\DebugLib\mioRead.obj
.\abclib\DebugLib\mioUtils.obj
.\abclib\DebugLib\super.obj
.\abclib\DebugLib\superAnd.obj
.\abclib\DebugLib\superGate.obj
.\abclib\DebugLib\superWrite.obj
.\abclib\DebugLib\ifCore.obj
.\abclib\DebugLib\ifCut.obj
.\abclib\DebugLib\ifMan.obj
.\abclib\DebugLib\ifMap.obj
.\abclib\DebugLib\ifPrepro.obj
.\abclib\DebugLib\ifReduce.obj
.\abclib\DebugLib\ifSeq.obj
.\abclib\DebugLib\ifTime.obj
.\abclib\DebugLib\ifTruth.obj
.\abclib\DebugLib\ifUtil.obj
.\abclib\DebugLib\extraBddAuto.obj
.\abclib\DebugLib\extraBddKmap.obj
.\abclib\DebugLib\extraBddMisc.obj
.\abclib\DebugLib\extraBddSymm.obj
.\abclib\DebugLib\extraBddUnate.obj
.\abclib\DebugLib\extraUtilBitMatrix.obj
.\abclib\DebugLib\extraUtilCanon.obj
.\abclib\DebugLib\extraUtilFile.obj
.\abclib\DebugLib\extraUtilMemory.obj
.\abclib\DebugLib\extraUtilMisc.obj
.\abclib\DebugLib\extraUtilProgress.obj
.\abclib\DebugLib\extraUtilReader.obj
.\abclib\DebugLib\extraUtilTruth.obj
.\abclib\DebugLib\extraUtilUtil.obj
.\abclib\DebugLib\st.obj
.\abclib\DebugLib\stmm.obj
.\abclib\DebugLib\mvc.obj
.\abclib\DebugLib\mvcApi.obj
.\abclib\DebugLib\mvcCompare.obj
.\abclib\DebugLib\mvcContain.obj
.\abclib\DebugLib\mvcCover.obj
.\abclib\DebugLib\mvcCube.obj
.\abclib\DebugLib\mvcDivide.obj
.\abclib\DebugLib\mvcDivisor.obj
.\abclib\DebugLib\mvcList.obj
.\abclib\DebugLib\mvcLits.obj
.\abclib\DebugLib\mvcMan.obj
.\abclib\DebugLib\mvcOpAlg.obj
.\abclib\DebugLib\mvcOpBool.obj
.\abclib\DebugLib\mvcPrint.obj
.\abclib\DebugLib\mvcSort.obj
.\abclib\DebugLib\mvcUtils.obj
.\abclib\DebugLib\cofactor.obj
.\abclib\DebugLib\cols.obj
.\abclib\DebugLib\compl.obj
.\abclib\DebugLib\contain.obj
.\abclib\DebugLib\cubehack.obj
.\abclib\DebugLib\cubestr.obj
.\abclib\DebugLib\cvrin.obj
.\abclib\DebugLib\cvrm.obj
.\abclib\DebugLib\cvrmisc.obj
.\abclib\DebugLib\cvrout.obj
.\abclib\DebugLib\dominate.obj
.\abclib\DebugLib\equiv.obj
.\abclib\DebugLib\espresso.obj
.\abclib\DebugLib\essen.obj
.\abclib\DebugLib\exact.obj
.\abclib\DebugLib\expand.obj
.\abclib\DebugLib\gasp.obj
.\abclib\DebugLib\gimpel.obj
.\abclib\DebugLib\globals.obj
.\abclib\DebugLib\hack.obj
.\abclib\DebugLib\indep.obj
.\abclib\DebugLib\irred.obj
.\abclib\DebugLib\map.obj
.\abclib\DebugLib\matrix.obj
.\abclib\DebugLib\mincov.obj
.\abclib\DebugLib\opo.obj
.\abclib\DebugLib\pair.obj
.\abclib\DebugLib\part.obj
.\abclib\DebugLib\primes.obj
.\abclib\DebugLib\reduce.obj
.\abclib\DebugLib\rows.obj
.\abclib\DebugLib\set.obj
.\abclib\DebugLib\setc.obj
.\abclib\DebugLib\sharp.obj
.\abclib\DebugLib\sminterf.obj
.\abclib\DebugLib\solution.obj
.\abclib\DebugLib\sparse.obj
.\abclib\DebugLib\unate.obj
.\abclib\DebugLib\verify.obj
.\abclib\DebugLib\nmApi.obj
.\abclib\DebugLib\nmTable.obj
.\abclib\DebugLib\hopBalance.obj
.\abclib\DebugLib\hopCheck.obj
.\abclib\DebugLib\hopDfs.obj
.\abclib\DebugLib\hopMan.obj
.\abclib\DebugLib\hopMem.obj
.\abclib\DebugLib\hopObj.obj
.\abclib\DebugLib\hopOper.obj
.\abclib\DebugLib\hopTable.obj
.\abclib\DebugLib\hopUtil.obj
.\abclib\DebugLib\ivyBalance.obj
.\abclib\DebugLib\ivyCanon.obj
.\abclib\DebugLib\ivyCheck.obj
.\abclib\DebugLib\ivyCut.obj
.\abclib\DebugLib\ivyCutTrav.obj
.\abclib\DebugLib\ivyDfs.obj
.\abclib\DebugLib\ivyDsd.obj
.\abclib\DebugLib\ivyFanout.obj
.\abclib\DebugLib\ivyFastMap.obj
.\abclib\DebugLib\ivyFraig.obj
.\abclib\DebugLib\ivyHaig.obj
.\abclib\DebugLib\ivyMan.obj
.\abclib\DebugLib\ivyMem.obj
.\abclib\DebugLib\ivyMulti.obj
.\abclib\DebugLib\ivyObj.obj
.\abclib\DebugLib\ivyOper.obj
.\abclib\DebugLib\ivyResyn.obj
.\abclib\DebugLib\ivyRwr.obj
.\abclib\DebugLib\ivySeq.obj
.\abclib\DebugLib\ivyShow.obj
.\abclib\DebugLib\ivyTable.obj
.\abclib\DebugLib\ivyUtil.obj
.\abclib\DebugLib\rwtDec.obj
.\abclib\DebugLib\rwtMan.obj
.\abclib\DebugLib\rwtUtil.obj
.\abclib\DebugLib\mem.obj
.\abclib\DebugLib\jfront.obj
]
Creating command line "link.exe -lib @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137B.tmp"
<h3>
Output Window
</h3>
Compiling...
jfront.c
Creating library...
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137C.tmp" with contents
[
/nologo /o"abclib\DebugLib/abclib.bsc"
.\abclib\DebugLib\abcAig.sbr
.\abclib\DebugLib\abcCheck.sbr
.\abclib\DebugLib\abcDfs.sbr
.\abclib\DebugLib\abcFanio.sbr
.\abclib\DebugLib\abcFunc.sbr
.\abclib\DebugLib\abcLatch.sbr
.\abclib\DebugLib\abcLib.sbr
.\abclib\DebugLib\abcMinBase.sbr
.\abclib\DebugLib\abcNames.sbr
.\abclib\DebugLib\abcNetlist.sbr
.\abclib\DebugLib\abcNtk.sbr
.\abclib\DebugLib\abcObj.sbr
.\abclib\DebugLib\abcRefs.sbr
.\abclib\DebugLib\abcShow.sbr
.\abclib\DebugLib\abcSop.sbr
.\abclib\DebugLib\abcUtil.sbr
.\abclib\DebugLib\abc.sbr
.\abclib\DebugLib\abcAttach.sbr
.\abclib\DebugLib\abcAuto.sbr
.\abclib\DebugLib\abcBalance.sbr
.\abclib\DebugLib\abcBmc.sbr
.\abclib\DebugLib\abcClpBdd.sbr
.\abclib\DebugLib\abcClpSop.sbr
.\abclib\DebugLib\abcCut.sbr
.\abclib\DebugLib\abcDebug.sbr
.\abclib\DebugLib\abcDress.sbr
.\abclib\DebugLib\abcDsd.sbr
.\abclib\DebugLib\abcEspresso.sbr
.\abclib\DebugLib\abcExtract.sbr
.\abclib\DebugLib\abcFpga.sbr
.\abclib\DebugLib\abcFpgaFast.sbr
.\abclib\DebugLib\abcFraig.sbr
.\abclib\DebugLib\abcFxu.sbr
.\abclib\DebugLib\abcGen.sbr
.\abclib\DebugLib\abcIf.sbr
.\abclib\DebugLib\abcIvy.sbr
.\abclib\DebugLib\abcLut.sbr
.\abclib\DebugLib\abcMap.sbr
.\abclib\DebugLib\abcMini.sbr
.\abclib\DebugLib\abcMiter.sbr
.\abclib\DebugLib\abcMulti.sbr
.\abclib\DebugLib\abcMv.sbr
.\abclib\DebugLib\abcNtbdd.sbr
.\abclib\DebugLib\abcOrder.sbr
.\abclib\DebugLib\abcPrint.sbr
.\abclib\DebugLib\abcProve.sbr
.\abclib\DebugLib\abcReconv.sbr
.\abclib\DebugLib\abcRefactor.sbr
.\abclib\DebugLib\abcRenode.sbr
.\abclib\DebugLib\abcReorder.sbr
.\abclib\DebugLib\abcRestruct.sbr
.\abclib\DebugLib\abcResub.sbr
.\abclib\DebugLib\abcRewrite.sbr
.\abclib\DebugLib\abcRr.sbr
.\abclib\DebugLib\abcSat.sbr
.\abclib\DebugLib\abcStrash.sbr
.\abclib\DebugLib\abcSweep.sbr
.\abclib\DebugLib\abcSymm.sbr
.\abclib\DebugLib\abcTiming.sbr
.\abclib\DebugLib\abcUnate.sbr
.\abclib\DebugLib\abcUnreach.sbr
.\abclib\DebugLib\abcVerify.sbr
.\abclib\DebugLib\abcXsim.sbr
.\abclib\DebugLib\cmd.sbr
.\abclib\DebugLib\cmdAlias.sbr
.\abclib\DebugLib\cmdApi.sbr
.\abclib\DebugLib\cmdFlag.sbr
.\abclib\DebugLib\cmdHist.sbr
.\abclib\DebugLib\cmdUtils.sbr
.\abclib\DebugLib\io.sbr
.\abclib\DebugLib\ioReadAiger.sbr
.\abclib\DebugLib\ioReadBaf.sbr
.\abclib\DebugLib\ioReadBench.sbr
.\abclib\DebugLib\ioReadBlif.sbr
.\abclib\DebugLib\ioReadBlifAig.sbr
.\abclib\DebugLib\ioReadEdif.sbr
.\abclib\DebugLib\ioReadEqn.sbr
.\abclib\DebugLib\ioReadPla.sbr
.\abclib\DebugLib\ioUtil.sbr
.\abclib\DebugLib\ioWriteAiger.sbr
.\abclib\DebugLib\ioWriteBaf.sbr
.\abclib\DebugLib\ioWriteBench.sbr
.\abclib\DebugLib\ioWriteBlif.sbr
.\abclib\DebugLib\ioWriteCnf.sbr
.\abclib\DebugLib\ioWriteDot.sbr
.\abclib\DebugLib\ioWriteEqn.sbr
.\abclib\DebugLib\ioWriteGml.sbr
.\abclib\DebugLib\ioWriteList.sbr
.\abclib\DebugLib\ioWritePla.sbr
.\abclib\DebugLib\ioWriteVer.sbr
.\abclib\DebugLib\ioWriteVerAux.sbr
.\abclib\DebugLib\libSupport.sbr
.\abclib\DebugLib\main.sbr
.\abclib\DebugLib\mainFrame.sbr
.\abclib\DebugLib\mainInit.sbr
.\abclib\DebugLib\mainUtils.sbr
.\abclib\DebugLib\verCore.sbr
.\abclib\DebugLib\verFormula.sbr
.\abclib\DebugLib\verParse.sbr
.\abclib\DebugLib\verStream.sbr
.\abclib\DebugLib\verWords.sbr
.\abclib\DebugLib\cuddAddAbs.sbr
.\abclib\DebugLib\cuddAddApply.sbr
.\abclib\DebugLib\cuddAddFind.sbr
.\abclib\DebugLib\cuddAddInv.sbr
.\abclib\DebugLib\cuddAddIte.sbr
.\abclib\DebugLib\cuddAddNeg.sbr
.\abclib\DebugLib\cuddAddWalsh.sbr
.\abclib\DebugLib\cuddAndAbs.sbr
.\abclib\DebugLib\cuddAnneal.sbr
.\abclib\DebugLib\cuddApa.sbr
.\abclib\DebugLib\cuddAPI.sbr
.\abclib\DebugLib\cuddApprox.sbr
.\abclib\DebugLib\cuddBddAbs.sbr
.\abclib\DebugLib\cuddBddCorr.sbr
.\abclib\DebugLib\cuddBddIte.sbr
.\abclib\DebugLib\cuddBridge.sbr
.\abclib\DebugLib\cuddCache.sbr
.\abclib\DebugLib\cuddCheck.sbr
.\abclib\DebugLib\cuddClip.sbr
.\abclib\DebugLib\cuddCof.sbr
.\abclib\DebugLib\cuddCompose.sbr
.\abclib\DebugLib\cuddDecomp.sbr
.\abclib\DebugLib\cuddEssent.sbr
.\abclib\DebugLib\cuddExact.sbr
.\abclib\DebugLib\cuddExport.sbr
.\abclib\DebugLib\cuddGenCof.sbr
.\abclib\DebugLib\cuddGenetic.sbr
.\abclib\DebugLib\cuddGroup.sbr
.\abclib\DebugLib\cuddHarwell.sbr
.\abclib\DebugLib\cuddInit.sbr
.\abclib\DebugLib\cuddInteract.sbr
.\abclib\DebugLib\cuddLCache.sbr
.\abclib\DebugLib\cuddLevelQ.sbr
.\abclib\DebugLib\cuddLinear.sbr
.\abclib\DebugLib\cuddLiteral.sbr
.\abclib\DebugLib\cuddMatMult.sbr
.\abclib\DebugLib\cuddPriority.sbr
.\abclib\DebugLib\cuddRead.sbr
.\abclib\DebugLib\cuddRef.sbr
.\abclib\DebugLib\cuddReorder.sbr
.\abclib\DebugLib\cuddSat.sbr
.\abclib\DebugLib\cuddSign.sbr
.\abclib\DebugLib\cuddSolve.sbr
.\abclib\DebugLib\cuddSplit.sbr
.\abclib\DebugLib\cuddSubsetHB.sbr
.\abclib\DebugLib\cuddSubsetSP.sbr
.\abclib\DebugLib\cuddSymmetry.sbr
.\abclib\DebugLib\cuddTable.sbr
.\abclib\DebugLib\cuddUtil.sbr
.\abclib\DebugLib\cuddWindow.sbr
.\abclib\DebugLib\cuddZddCount.sbr
.\abclib\DebugLib\cuddZddFuncs.sbr
.\abclib\DebugLib\cuddZddGroup.sbr
.\abclib\DebugLib\cuddZddIsop.sbr
.\abclib\DebugLib\cuddZddLin.sbr
.\abclib\DebugLib\cuddZddMisc.sbr
.\abclib\DebugLib\cuddZddPort.sbr
.\abclib\DebugLib\cuddZddReord.sbr
.\abclib\DebugLib\cuddZddSetop.sbr
.\abclib\DebugLib\cuddZddSymm.sbr
.\abclib\DebugLib\cuddZddUtil.sbr
.\abclib\DebugLib\epd.sbr
.\abclib\DebugLib\mtrBasic.sbr
.\abclib\DebugLib\mtrGroup.sbr
.\abclib\DebugLib\parseCore.sbr
.\abclib\DebugLib\parseEqn.sbr
.\abclib\DebugLib\parseStack.sbr
.\abclib\DebugLib\dsdApi.sbr
.\abclib\DebugLib\dsdCheck.sbr
.\abclib\DebugLib\dsdLocal.sbr
.\abclib\DebugLib\dsdMan.sbr
.\abclib\DebugLib\dsdProc.sbr
.\abclib\DebugLib\dsdTree.sbr
.\abclib\DebugLib\reoApi.sbr
.\abclib\DebugLib\reoCore.sbr
.\abclib\DebugLib\reoProfile.sbr
.\abclib\DebugLib\reoSift.sbr
.\abclib\DebugLib\reoSwap.sbr
.\abclib\DebugLib\reoTest.sbr
.\abclib\DebugLib\reoTransfer.sbr
.\abclib\DebugLib\reoUnits.sbr
.\abclib\DebugLib\added.sbr
.\abclib\DebugLib\asatmem.sbr
.\abclib\DebugLib\solver.sbr
.\abclib\DebugLib\msatActivity.sbr
.\abclib\DebugLib\msatClause.sbr
.\abclib\DebugLib\msatClauseVec.sbr
.\abclib\DebugLib\msatMem.sbr
.\abclib\DebugLib\msatOrderH.sbr
.\abclib\DebugLib\msatQueue.sbr
.\abclib\DebugLib\msatRead.sbr
.\abclib\DebugLib\msatSolverApi.sbr
.\abclib\DebugLib\msatSolverCore.sbr
.\abclib\DebugLib\msatSolverIo.sbr
.\abclib\DebugLib\msatSolverSearch.sbr
.\abclib\DebugLib\msatSort.sbr
.\abclib\DebugLib\msatVec.sbr
.\abclib\DebugLib\fraigApi.sbr
.\abclib\DebugLib\fraigCanon.sbr
.\abclib\DebugLib\fraigChoice.sbr
.\abclib\DebugLib\fraigFanout.sbr
.\abclib\DebugLib\fraigFeed.sbr
.\abclib\DebugLib\fraigMan.sbr
.\abclib\DebugLib\fraigMem.sbr
.\abclib\DebugLib\fraigNode.sbr
.\abclib\DebugLib\fraigPrime.sbr
.\abclib\DebugLib\fraigSat.sbr
.\abclib\DebugLib\fraigTable.sbr
.\abclib\DebugLib\fraigUtil.sbr
.\abclib\DebugLib\fraigVec.sbr
.\abclib\DebugLib\csat_apis.sbr
.\abclib\DebugLib\satMem.sbr
.\abclib\DebugLib\satSolver.sbr
.\abclib\DebugLib\satUtil.sbr
.\abclib\DebugLib\fxu.sbr
.\abclib\DebugLib\fxuCreate.sbr
.\abclib\DebugLib\fxuHeapD.sbr
.\abclib\DebugLib\fxuHeapS.sbr
.\abclib\DebugLib\fxuList.sbr
.\abclib\DebugLib\fxuMatrix.sbr
.\abclib\DebugLib\fxuPair.sbr
.\abclib\DebugLib\fxuPrint.sbr
.\abclib\DebugLib\fxuReduce.sbr
.\abclib\DebugLib\fxuSelect.sbr
.\abclib\DebugLib\fxuSingle.sbr
.\abclib\DebugLib\fxuUpdate.sbr
.\abclib\DebugLib\rwrDec.sbr
.\abclib\DebugLib\rwrEva.sbr
.\abclib\DebugLib\rwrExp.sbr
.\abclib\DebugLib\rwrLib.sbr
.\abclib\DebugLib\rwrMan.sbr
.\abclib\DebugLib\rwrPrint.sbr
.\abclib\DebugLib\rwrTemp.sbr
.\abclib\DebugLib\rwrUtil.sbr
.\abclib\DebugLib\cutApi.sbr
.\abclib\DebugLib\cutCut.sbr
.\abclib\DebugLib\cutExpand.sbr
.\abclib\DebugLib\cutMan.sbr
.\abclib\DebugLib\cutMerge.sbr
.\abclib\DebugLib\cutNode.sbr
.\abclib\DebugLib\cutOracle.sbr
.\abclib\DebugLib\cutPre22.sbr
.\abclib\DebugLib\cutSeq.sbr
.\abclib\DebugLib\cutTruth.sbr
.\abclib\DebugLib\decAbc.sbr
.\abclib\DebugLib\decFactor.sbr
.\abclib\DebugLib\decMan.sbr
.\abclib\DebugLib\decPrint.sbr
.\abclib\DebugLib\decUtil.sbr
.\abclib\DebugLib\simMan.sbr
.\abclib\DebugLib\simSat.sbr
.\abclib\DebugLib\simSeq.sbr
.\abclib\DebugLib\simSupp.sbr
.\abclib\DebugLib\simSwitch.sbr
.\abclib\DebugLib\simSym.sbr
.\abclib\DebugLib\simSymSat.sbr
.\abclib\DebugLib\simSymSim.sbr
.\abclib\DebugLib\simSymStr.sbr
.\abclib\DebugLib\simUtils.sbr
.\abclib\DebugLib\retArea.sbr
.\abclib\DebugLib\retCore.sbr
.\abclib\DebugLib\retDelay.sbr
.\abclib\DebugLib\retFlow.sbr
.\abclib\DebugLib\retIncrem.sbr
.\abclib\DebugLib\retInit.sbr
.\abclib\DebugLib\retLvalue.sbr
.\abclib\DebugLib\kitBdd.sbr
.\abclib\DebugLib\kitFactor.sbr
.\abclib\DebugLib\kitGraph.sbr
.\abclib\DebugLib\kitHop.sbr
.\abclib\DebugLib\kitIsop.sbr
.\abclib\DebugLib\kitSop.sbr
.\abclib\DebugLib\kitTruth.sbr
.\abclib\DebugLib\fpga.sbr
.\abclib\DebugLib\fpgaCore.sbr
.\abclib\DebugLib\fpgaCreate.sbr
.\abclib\DebugLib\fpgaCut.sbr
.\abclib\DebugLib\fpgaCutUtils.sbr
.\abclib\DebugLib\fpgaFanout.sbr
.\abclib\DebugLib\fpgaLib.sbr
.\abclib\DebugLib\fpgaMatch.sbr
.\abclib\DebugLib\fpgaSwitch.sbr
.\abclib\DebugLib\fpgaTime.sbr
.\abclib\DebugLib\fpgaTruth.sbr
.\abclib\DebugLib\fpgaUtils.sbr
.\abclib\DebugLib\fpgaVec.sbr
.\abclib\DebugLib\mapper.sbr
.\abclib\DebugLib\mapperCanon.sbr
.\abclib\DebugLib\mapperCore.sbr
.\abclib\DebugLib\mapperCreate.sbr
.\abclib\DebugLib\mapperCut.sbr
.\abclib\DebugLib\mapperCutUtils.sbr
.\abclib\DebugLib\mapperFanout.sbr
.\abclib\DebugLib\mapperLib.sbr
.\abclib\DebugLib\mapperMatch.sbr
.\abclib\DebugLib\mapperRefs.sbr
.\abclib\DebugLib\mapperSuper.sbr
.\abclib\DebugLib\mapperSwitch.sbr
.\abclib\DebugLib\mapperTable.sbr
.\abclib\DebugLib\mapperTime.sbr
.\abclib\DebugLib\mapperTree.sbr
.\abclib\DebugLib\mapperTruth.sbr
.\abclib\DebugLib\mapperUtils.sbr
.\abclib\DebugLib\mapperVec.sbr
.\abclib\DebugLib\mio.sbr
.\abclib\DebugLib\mioApi.sbr
.\abclib\DebugLib\mioFunc.sbr
.\abclib\DebugLib\mioRead.sbr
.\abclib\DebugLib\mioUtils.sbr
.\abclib\DebugLib\super.sbr
.\abclib\DebugLib\superAnd.sbr
.\abclib\DebugLib\superGate.sbr
.\abclib\DebugLib\superWrite.sbr
.\abclib\DebugLib\ifCore.sbr
.\abclib\DebugLib\ifCut.sbr
.\abclib\DebugLib\ifMan.sbr
.\abclib\DebugLib\ifMap.sbr
.\abclib\DebugLib\ifPrepro.sbr
.\abclib\DebugLib\ifReduce.sbr
.\abclib\DebugLib\ifSeq.sbr
.\abclib\DebugLib\ifTime.sbr
.\abclib\DebugLib\ifTruth.sbr
.\abclib\DebugLib\ifUtil.sbr
.\abclib\DebugLib\extraBddAuto.sbr
.\abclib\DebugLib\extraBddKmap.sbr
.\abclib\DebugLib\extraBddMisc.sbr
.\abclib\DebugLib\extraBddSymm.sbr
.\abclib\DebugLib\extraBddUnate.sbr
.\abclib\DebugLib\extraUtilBitMatrix.sbr
.\abclib\DebugLib\extraUtilCanon.sbr
.\abclib\DebugLib\extraUtilFile.sbr
.\abclib\DebugLib\extraUtilMemory.sbr
.\abclib\DebugLib\extraUtilMisc.sbr
.\abclib\DebugLib\extraUtilProgress.sbr
.\abclib\DebugLib\extraUtilReader.sbr
.\abclib\DebugLib\extraUtilTruth.sbr
.\abclib\DebugLib\extraUtilUtil.sbr
.\abclib\DebugLib\st.sbr
.\abclib\DebugLib\stmm.sbr
.\abclib\DebugLib\mvc.sbr
.\abclib\DebugLib\mvcApi.sbr
.\abclib\DebugLib\mvcCompare.sbr
.\abclib\DebugLib\mvcContain.sbr
.\abclib\DebugLib\mvcCover.sbr
.\abclib\DebugLib\mvcCube.sbr
.\abclib\DebugLib\mvcDivide.sbr
.\abclib\DebugLib\mvcDivisor.sbr
.\abclib\DebugLib\mvcList.sbr
.\abclib\DebugLib\mvcLits.sbr
.\abclib\DebugLib\mvcMan.sbr
.\abclib\DebugLib\mvcOpAlg.sbr
.\abclib\DebugLib\mvcOpBool.sbr
.\abclib\DebugLib\mvcPrint.sbr
.\abclib\DebugLib\mvcSort.sbr
.\abclib\DebugLib\mvcUtils.sbr
.\abclib\DebugLib\cofactor.sbr
.\abclib\DebugLib\cols.sbr
.\abclib\DebugLib\compl.sbr
.\abclib\DebugLib\contain.sbr
.\abclib\DebugLib\cubehack.sbr
.\abclib\DebugLib\cubestr.sbr
.\abclib\DebugLib\cvrin.sbr
.\abclib\DebugLib\cvrm.sbr
.\abclib\DebugLib\cvrmisc.sbr
.\abclib\DebugLib\cvrout.sbr
.\abclib\DebugLib\dominate.sbr
.\abclib\DebugLib\equiv.sbr
.\abclib\DebugLib\espresso.sbr
.\abclib\DebugLib\essen.sbr
.\abclib\DebugLib\exact.sbr
.\abclib\DebugLib\expand.sbr
.\abclib\DebugLib\gasp.sbr
.\abclib\DebugLib\gimpel.sbr
.\abclib\DebugLib\globals.sbr
.\abclib\DebugLib\hack.sbr
.\abclib\DebugLib\indep.sbr
.\abclib\DebugLib\irred.sbr
.\abclib\DebugLib\map.sbr
.\abclib\DebugLib\matrix.sbr
.\abclib\DebugLib\mincov.sbr
.\abclib\DebugLib\opo.sbr
.\abclib\DebugLib\pair.sbr
.\abclib\DebugLib\part.sbr
.\abclib\DebugLib\primes.sbr
.\abclib\DebugLib\reduce.sbr
.\abclib\DebugLib\rows.sbr
.\abclib\DebugLib\set.sbr
.\abclib\DebugLib\setc.sbr
.\abclib\DebugLib\sharp.sbr
.\abclib\DebugLib\sminterf.sbr
.\abclib\DebugLib\solution.sbr
.\abclib\DebugLib\sparse.sbr
.\abclib\DebugLib\unate.sbr
.\abclib\DebugLib\verify.sbr
.\abclib\DebugLib\nmApi.sbr
.\abclib\DebugLib\nmTable.sbr
.\abclib\DebugLib\hopBalance.sbr
.\abclib\DebugLib\hopCheck.sbr
.\abclib\DebugLib\hopDfs.sbr
.\abclib\DebugLib\hopMan.sbr
.\abclib\DebugLib\hopMem.sbr
.\abclib\DebugLib\hopObj.sbr
.\abclib\DebugLib\hopOper.sbr
.\abclib\DebugLib\hopTable.sbr
.\abclib\DebugLib\hopUtil.sbr
.\abclib\DebugLib\ivyBalance.sbr
.\abclib\DebugLib\ivyCanon.sbr
.\abclib\DebugLib\ivyCheck.sbr
.\abclib\DebugLib\ivyCut.sbr
.\abclib\DebugLib\ivyCutTrav.sbr
.\abclib\DebugLib\ivyDfs.sbr
.\abclib\DebugLib\ivyDsd.sbr
.\abclib\DebugLib\ivyFanout.sbr
.\abclib\DebugLib\ivyFastMap.sbr
.\abclib\DebugLib\ivyFraig.sbr
.\abclib\DebugLib\ivyHaig.sbr
.\abclib\DebugLib\ivyMan.sbr
.\abclib\DebugLib\ivyMem.sbr
.\abclib\DebugLib\ivyMulti.sbr
.\abclib\DebugLib\ivyObj.sbr
.\abclib\DebugLib\ivyOper.sbr
.\abclib\DebugLib\ivyResyn.sbr
.\abclib\DebugLib\ivyRwr.sbr
.\abclib\DebugLib\ivySeq.sbr
.\abclib\DebugLib\ivyShow.sbr
.\abclib\DebugLib\ivyTable.sbr
.\abclib\DebugLib\ivyUtil.sbr
.\abclib\DebugLib\rwtDec.sbr
.\abclib\DebugLib\rwtMan.sbr
.\abclib\DebugLib\rwtUtil.sbr
.\abclib\DebugLib\mem.sbr
.\abclib\DebugLib\jfront.sbr]
Creating command line "bscmake.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP137C.tmp"
Creating browse info file...
<h3>
Output Window
</h3>
<h3>
Results
</h3>
abclib_debug.lib - 0 error(s), 0 warning(s)
</pre>
</body>
</html>
abctestlib.plg
deleted
100644 → 0
View file @
a13c64a5
<html>
<body>
<pre>
<h1>
Build Log
</h1>
<h3>
--------------------Configuration: abctestlib - Win32 Debug--------------------
</h3>
<h3>
Command Lines
</h3>
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP1389.tmp" with contents
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/abctestlib.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"C:\_projects\abc\demo.c"
]
Creating command line "cl.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP1389.tmp"
Creating temporary file "C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP138A.tmp" with contents
[
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 C:\_projects\abc\abclib\abclib_debug.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/abctestlib.pdb" /debug /machine:I386 /out:"_TEST/abctestlib.exe" /pdbtype:sept
.\Debug\demo.obj
]
Creating command line "link.exe @C:\DOCUME~1\alanmi\LOCALS~1\Temp\RSP138A.tmp"
<h3>
Output Window
</h3>
Compiling...
demo.c
Linking...
Creating command line "bscmake.exe /nologo /o"Debug/abctestlib.bsc" .\Debug\demo.sbr"
Creating browse info file...
<h3>
Output Window
</h3>
<h3>
Results
</h3>
abctestlib.exe - 0 error(s), 0 warning(s)
</pre>
</body>
</html>
src/base/abc/abc.h
View file @
b9e0c95b
...
@@ -90,11 +90,10 @@ typedef enum {
...
@@ -90,11 +90,10 @@ typedef enum {
ABC_OBJ_ASSERT
,
// 7: assertion terminal
ABC_OBJ_ASSERT
,
// 7: assertion terminal
ABC_OBJ_NET
,
// 8: net
ABC_OBJ_NET
,
// 8: net
ABC_OBJ_NODE
,
// 9: node
ABC_OBJ_NODE
,
// 9: node
ABC_OBJ_GATE
,
// 10: mapped node
ABC_OBJ_LATCH
,
// 10: latch
ABC_OBJ_LATCH
,
// 11: latch
ABC_OBJ_WHITEBOX
,
// 11: box with known contents
ABC_OBJ_TRI
,
// 12: tristate element
ABC_OBJ_BLACKBOX
,
// 12: box with unknown contents
ABC_OBJ_BLACKBOX
,
// 13: box with unknown contents
ABC_OBJ_NUMBER
// 13: unused
ABC_OBJ_NUMBER
// 14: unused
}
Abc_ObjType_t
;
}
Abc_ObjType_t
;
// latch initial values
// latch initial values
...
@@ -188,8 +187,7 @@ struct Abc_Ntk_t_
...
@@ -188,8 +187,7 @@ struct Abc_Ntk_t_
Abc_Ntk_t
*
pNetBackup
;
// the pointer to the previous backup network
Abc_Ntk_t
*
pNetBackup
;
// the pointer to the previous backup network
int
iStep
;
// the generation number for the given network
int
iStep
;
// the generation number for the given network
// hierarchy
// hierarchy
stmm_table
*
tName2Model
;
// the table hashing names into network pointers (or NULL if no hierarchy)
Abc_Lib_t
*
pDesign
;
Vec_Int_t
*
pBlackBoxes
;
// stores pairs (PI num, PO num) for each model, including the base model (or NULL if no hierarchy)
short
fHieVisited
;
// flag to mark the visited network
short
fHieVisited
;
// flag to mark the visited network
short
fHiePath
;
// flag to mark the network on the path
short
fHiePath
;
// flag to mark the network on the path
// miscellaneous data members
// miscellaneous data members
...
@@ -197,7 +195,6 @@ struct Abc_Ntk_t_
...
@@ -197,7 +195,6 @@ struct Abc_Ntk_t_
Extra_MmFixed_t
*
pMmObj
;
// memory manager for objects
Extra_MmFixed_t
*
pMmObj
;
// memory manager for objects
Extra_MmStep_t
*
pMmStep
;
// memory manager for arrays
Extra_MmStep_t
*
pMmStep
;
// memory manager for arrays
void
*
pManFunc
;
// functionality manager (AIG manager, BDD manager, or memory manager for SOPs)
void
*
pManFunc
;
// functionality manager (AIG manager, BDD manager, or memory manager for SOPs)
Abc_Lib_t
*
pDesign
;
// Abc_Lib_t * pVerLib; // for structural verilog designs
// Abc_Lib_t * pVerLib; // for structural verilog designs
Abc_ManTime_t
*
pManTime
;
// the timing manager (for mapped networks) stores arrival/required times for all nodes
Abc_ManTime_t
*
pManTime
;
// the timing manager (for mapped networks) stores arrival/required times for all nodes
void
*
pManCut
;
// the cut manager (for AIGs) stores information about the cuts computed for the nodes
void
*
pManCut
;
// the cut manager (for AIGs) stores information about the cuts computed for the nodes
...
@@ -299,9 +296,8 @@ static inline int Abc_NtkBiNum( Abc_Ntk_t * pNtk ) { return pN
...
@@ -299,9 +296,8 @@ static inline int Abc_NtkBiNum( Abc_Ntk_t * pNtk ) { return pN
static
inline
int
Abc_NtkBoNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_BO
];
}
static
inline
int
Abc_NtkBoNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_BO
];
}
static
inline
int
Abc_NtkNetNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_NET
];
}
static
inline
int
Abc_NtkNetNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_NET
];
}
static
inline
int
Abc_NtkNodeNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_NODE
];
}
static
inline
int
Abc_NtkNodeNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_NODE
];
}
static
inline
int
Abc_NtkGateNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_GATE
];
}
static
inline
int
Abc_NtkLatchNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_LATCH
];
}
static
inline
int
Abc_NtkLatchNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_LATCH
];
}
static
inline
int
Abc_Ntk
TriNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_TRI
];
}
static
inline
int
Abc_Ntk
WhiteboxNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_WHITEBOX
];
}
static
inline
int
Abc_NtkBlackboxNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_BLACKBOX
];
}
static
inline
int
Abc_NtkBlackboxNum
(
Abc_Ntk_t
*
pNtk
)
{
return
pNtk
->
nObjCounts
[
ABC_OBJ_BLACKBOX
];
}
static
inline
bool
Abc_NtkIsComb
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkLatchNum
(
pNtk
)
==
0
;
}
static
inline
bool
Abc_NtkIsComb
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkLatchNum
(
pNtk
)
==
0
;
}
static
inline
bool
Abc_NtkHasOnlyLatchBoxes
(
Abc_Ntk_t
*
pNtk
){
return
Abc_NtkLatchNum
(
pNtk
)
==
Abc_NtkBoxNum
(
pNtk
);
}
static
inline
bool
Abc_NtkHasOnlyLatchBoxes
(
Abc_Ntk_t
*
pNtk
){
return
Abc_NtkLatchNum
(
pNtk
)
==
Abc_NtkBoxNum
(
pNtk
);
}
...
@@ -315,8 +311,7 @@ static inline Abc_Obj_t * Abc_NtkCreateBo( Abc_Ntk_t * pNtk ) { return Ab
...
@@ -315,8 +311,7 @@ static inline Abc_Obj_t * Abc_NtkCreateBo( Abc_Ntk_t * pNtk ) { return Ab
static
inline
Abc_Obj_t
*
Abc_NtkCreateAssert
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_ASSERT
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateAssert
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_ASSERT
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateNode
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_NODE
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateNode
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_NODE
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateLatch
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_LATCH
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateLatch
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_LATCH
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateGate
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_GATE
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateWhitebox
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_WHITEBOX
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateTri
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_TRI
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateBlackbox
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_BLACKBOX
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateBlackbox
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_BLACKBOX
);
}
// reading objects
// reading objects
...
@@ -361,11 +356,11 @@ static inline bool Abc_ObjIsCo( Abc_Obj_t * pObj ) { return pO
...
@@ -361,11 +356,11 @@ static inline bool Abc_ObjIsCo( Abc_Obj_t * pObj ) { return pO
static
inline
bool
Abc_ObjIsTerm
(
Abc_Obj_t
*
pObj
)
{
return
Abc_ObjIsCi
(
pObj
)
||
Abc_ObjIsCo
(
pObj
);
}
static
inline
bool
Abc_ObjIsTerm
(
Abc_Obj_t
*
pObj
)
{
return
Abc_ObjIsCi
(
pObj
)
||
Abc_ObjIsCo
(
pObj
);
}
static
inline
bool
Abc_ObjIsNet
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_NET
;
}
static
inline
bool
Abc_ObjIsNet
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_NET
;
}
static
inline
bool
Abc_ObjIsNode
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_NODE
;
}
static
inline
bool
Abc_ObjIsNode
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_NODE
;
}
static
inline
bool
Abc_ObjIsGate
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_GATE
;
}
static
inline
bool
Abc_ObjIsLatch
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
;
}
static
inline
bool
Abc_ObjIsLatch
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
;
}
static
inline
bool
Abc_ObjIsTri
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_TRI
;
}
static
inline
bool
Abc_ObjIsBox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
||
pObj
->
Type
==
ABC_OBJ_WHITEBOX
||
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;
}
static
inline
bool
Abc_ObjIsWhitebox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_WHITEBOX
;}
static
inline
bool
Abc_ObjIsBlackbox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;}
static
inline
bool
Abc_ObjIsBlackbox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;}
static
inline
bool
Abc_ObjIsBox
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
Type
==
ABC_OBJ_LATCH
||
pObj
->
Type
==
ABC_OBJ_TRI
||
pObj
->
Type
==
ABC_OBJ_BLACKBOX
;
}
static
inline
void
Abc_ObjBlackboxToWhitebox
(
Abc_Obj_t
*
pObj
)
{
assert
(
Abc_ObjIsBlackbox
(
pObj
)
);
pObj
->
Type
=
ABC_OBJ_WHITEBOX
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_BLACKBOX
]
--
;
pObj
->
pNtk
->
nObjCounts
[
ABC_OBJ_WHITEBOX
]
++
;
}
// working with fanin/fanout edges
// working with fanin/fanout edges
static
inline
int
Abc_ObjFaninNum
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
vFanins
.
nSize
;
}
static
inline
int
Abc_ObjFaninNum
(
Abc_Obj_t
*
pObj
)
{
return
pObj
->
vFanins
.
nSize
;
}
...
@@ -470,9 +465,9 @@ static inline void Abc_ObjSetMvVar( Abc_Obj_t * pObj, void * pV) { Vec_At
...
@@ -470,9 +465,9 @@ static inline void Abc_ObjSetMvVar( Abc_Obj_t * pObj, void * pV) { Vec_At
#define Abc_NtkForEachLatchOutput( pNtk, pObj, i ) \
#define Abc_NtkForEachLatchOutput( pNtk, pObj, i ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_ObjFanout0(Abc_NtkBox(pNtk, i))), 1); i++ ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_ObjFanout0(Abc_NtkBox(pNtk, i))), 1); i++ ) \
if ( !Abc_ObjIsLatch(Abc_NtkBox(pNtk, i)) ) {} else
if ( !Abc_ObjIsLatch(Abc_NtkBox(pNtk, i)) ) {} else
#define Abc_NtkForEach
Tri( pNtk, pObj, i )
\
#define Abc_NtkForEach
Whitebox( pNtk, pObj, i )
\
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ ) \
if ( !Abc_ObjIs
Tri
(pObj) ) {} else
if ( !Abc_ObjIs
Whitebox
(pObj) ) {} else
#define Abc_NtkForEachBlackbox( pNtk, pObj, i ) \
#define Abc_NtkForEachBlackbox( pNtk, pObj, i ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ ) \
if ( !Abc_ObjIsBlackbox(pObj) ) {} else
if ( !Abc_ObjIsBlackbox(pObj) ) {} else
...
@@ -536,6 +531,7 @@ extern bool Abc_NtkCheckRead( Abc_Ntk_t * pNtk );
...
@@ -536,6 +531,7 @@ extern bool Abc_NtkCheckRead( Abc_Ntk_t * pNtk );
extern
bool
Abc_NtkDoCheck
(
Abc_Ntk_t
*
pNtk
);
extern
bool
Abc_NtkDoCheck
(
Abc_Ntk_t
*
pNtk
);
extern
bool
Abc_NtkCheckObj
(
Abc_Ntk_t
*
pNtk
,
Abc_Obj_t
*
pObj
);
extern
bool
Abc_NtkCheckObj
(
Abc_Ntk_t
*
pNtk
,
Abc_Obj_t
*
pObj
);
extern
bool
Abc_NtkCompareSignals
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fOnlyPis
,
int
fComb
);
extern
bool
Abc_NtkCompareSignals
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fOnlyPis
,
int
fComb
);
extern
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
);
/*=== abcCollapse.c ==========================================================*/
/*=== abcCollapse.c ==========================================================*/
extern
Abc_Ntk_t
*
Abc_NtkCollapse
(
Abc_Ntk_t
*
pNtk
,
int
fBddSizeMax
,
int
fDualRail
,
int
fReorder
,
int
fVerbose
);
extern
Abc_Ntk_t
*
Abc_NtkCollapse
(
Abc_Ntk_t
*
pNtk
,
int
fBddSizeMax
,
int
fDualRail
,
int
fReorder
,
int
fVerbose
);
/*=== abcCut.c ==========================================================*/
/*=== abcCut.c ==========================================================*/
...
@@ -550,6 +546,8 @@ extern Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNode
...
@@ -550,6 +546,8 @@ extern Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNode
extern
Vec_Ptr_t
*
Abc_NtkDfsReverse
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsReverse
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsSeq
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsSeq
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsSeqReverse
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsSeqReverse
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkDfsIter
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
);
extern
Vec_Ptr_t
*
Abc_NtkDfsHie
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
);
extern
bool
Abc_NtkIsDfsOrdered
(
Abc_Ntk_t
*
pNtk
);
extern
bool
Abc_NtkIsDfsOrdered
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkSupport
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkSupport
(
Abc_Ntk_t
*
pNtk
);
extern
Vec_Ptr_t
*
Abc_NtkNodeSupport
(
Abc_Ntk_t
*
pNtk
,
Abc_Obj_t
**
ppNodes
,
int
nNodes
);
extern
Vec_Ptr_t
*
Abc_NtkNodeSupport
(
Abc_Ntk_t
*
pNtk
,
Abc_Obj_t
**
ppNodes
,
int
nNodes
);
...
@@ -589,6 +587,10 @@ extern int Abc_NtkMapToSop( Abc_Ntk_t * pNtk );
...
@@ -589,6 +587,10 @@ extern int Abc_NtkMapToSop( Abc_Ntk_t * pNtk );
extern
int
Abc_NtkLogicToSop
(
Abc_Ntk_t
*
pNtk
,
int
fDirect
);
extern
int
Abc_NtkLogicToSop
(
Abc_Ntk_t
*
pNtk
,
int
fDirect
);
extern
int
Abc_NtkLogicToBdd
(
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_NtkLogicToBdd
(
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_NtkLogicToAig
(
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_NtkLogicToAig
(
Abc_Ntk_t
*
pNtk
);
/*=== abcHie.c ==========================================================*/
extern
Abc_Ntk_t
*
Abc_NtkFlattenLogicHierarchy
(
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_NtkConvertBlackboxes
(
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_NtkInsertNewLogic
(
Abc_Ntk_t
*
pNtkH
,
Abc_Ntk_t
*
pNtkL
);
/*=== abcLatch.c ==========================================================*/
/*=== abcLatch.c ==========================================================*/
extern
bool
Abc_NtkLatchIsSelfFeed
(
Abc_Obj_t
*
pLatch
);
extern
bool
Abc_NtkLatchIsSelfFeed
(
Abc_Obj_t
*
pLatch
);
extern
int
Abc_NtkCountSelfFeedLatches
(
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_NtkCountSelfFeedLatches
(
Abc_Ntk_t
*
pNtk
);
...
@@ -597,7 +599,7 @@ extern Vec_Int_t * Abc_NtkCollectLatchValues( Abc_Ntk_t * pNtk );
...
@@ -597,7 +599,7 @@ extern Vec_Int_t * Abc_NtkCollectLatchValues( Abc_Ntk_t * pNtk );
extern
void
Abc_NtkInsertLatchValues
(
Abc_Ntk_t
*
pNtk
,
Vec_Int_t
*
vValues
);
extern
void
Abc_NtkInsertLatchValues
(
Abc_Ntk_t
*
pNtk
,
Vec_Int_t
*
vValues
);
/*=== abcLib.c ==========================================================*/
/*=== abcLib.c ==========================================================*/
extern
Abc_Lib_t
*
Abc_LibCreate
(
char
*
pName
);
extern
Abc_Lib_t
*
Abc_LibCreate
(
char
*
pName
);
extern
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
);
extern
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtk
);
extern
void
Abc_LibPrint
(
Abc_Lib_t
*
pLib
);
extern
void
Abc_LibPrint
(
Abc_Lib_t
*
pLib
);
extern
int
Abc_LibAddModel
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtk
);
extern
int
Abc_LibAddModel
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_LibFindModelByName
(
Abc_Lib_t
*
pLib
,
char
*
pName
);
extern
Abc_Ntk_t
*
Abc_LibFindModelByName
(
Abc_Lib_t
*
pLib
,
char
*
pName
);
...
...
src/base/abc/abcCheck.c
View file @
b9e0c95b
...
@@ -38,8 +38,6 @@ static bool Abc_NtkComparePis( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fComb )
...
@@ -38,8 +38,6 @@ static bool Abc_NtkComparePis( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fComb )
static
bool
Abc_NtkComparePos
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fComb
);
static
bool
Abc_NtkComparePos
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fComb
);
static
bool
Abc_NtkCompareLatches
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fComb
);
static
bool
Abc_NtkCompareLatches
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fComb
);
static
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
@@ -112,7 +110,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
...
@@ -112,7 +110,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
}
}
}
}
if
(
!
Abc_NtkBlackboxNum
(
pNtk
)
)
if
(
Abc_NtkHasOnlyLatchBoxes
(
pNtk
)
)
{
{
// check CI/CO numbers
// check CI/CO numbers
if
(
Abc_NtkPiNum
(
pNtk
)
+
Abc_NtkLatchNum
(
pNtk
)
!=
Abc_NtkCiNum
(
pNtk
)
)
if
(
Abc_NtkPiNum
(
pNtk
)
+
Abc_NtkLatchNum
(
pNtk
)
!=
Abc_NtkCiNum
(
pNtk
)
)
...
@@ -196,7 +194,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
...
@@ -196,7 +194,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
// check the EXDC network if present
// check the EXDC network if present
if
(
pNtk
->
pExdc
)
if
(
pNtk
->
pExdc
)
Abc_NtkCheck
(
pNtk
->
pExdc
);
Abc_NtkCheck
(
pNtk
->
pExdc
);
/*
// check the hierarchy
// check the hierarchy
if ( Abc_NtkIsNetlist(pNtk) && pNtk->tName2Model )
if ( Abc_NtkIsNetlist(pNtk) && pNtk->tName2Model )
{
{
...
@@ -217,6 +215,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
...
@@ -217,6 +215,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
return 0;
return 0;
}
}
}
}
*/
return
1
;
return
1
;
}
}
...
@@ -746,7 +745,6 @@ bool Abc_NtkCompareSignals( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fOnlyPis,
...
@@ -746,7 +745,6 @@ bool Abc_NtkCompareSignals( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fOnlyPis,
return
1
;
return
1
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns 0 if the network hierachy contains a cycle.]
Synopsis [Returns 0 if the network hierachy contains a cycle.]
...
@@ -774,6 +772,8 @@ int Abc_NtkIsAcyclicHierarchy_rec( Abc_Ntk_t * pNtk )
...
@@ -774,6 +772,8 @@ int Abc_NtkIsAcyclicHierarchy_rec( Abc_Ntk_t * pNtk )
// go through all the children networks
// go through all the children networks
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
{
{
if
(
Abc_ObjIsLatch
(
pObj
)
)
continue
;
pNtkNext
=
pObj
->
pData
;
pNtkNext
=
pObj
->
pData
;
assert
(
pNtkNext
!=
NULL
);
assert
(
pNtkNext
!=
NULL
);
if
(
pNtkNext
->
fHiePath
)
if
(
pNtkNext
->
fHiePath
)
...
@@ -799,9 +799,20 @@ int Abc_NtkIsAcyclicHierarchy_rec( Abc_Ntk_t * pNtk )
...
@@ -799,9 +799,20 @@ int Abc_NtkIsAcyclicHierarchy_rec( Abc_Ntk_t * pNtk )
***********************************************************************/
***********************************************************************/
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
)
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
)
{
{
assert
(
Abc_NtkIsNetlist
(
pNtk
)
&&
pNtk
->
tName2Model
);
Abc_Ntk_t
*
pTemp
;
int
i
,
RetValue
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
&&
pNtk
->
pDesign
);
// clear the modules
Vec_PtrForEachEntry
(
pNtk
->
pDesign
->
vModules
,
pTemp
,
i
)
pTemp
->
fHieVisited
=
pTemp
->
fHiePath
=
0
;
// traverse
pNtk
->
fHiePath
=
1
;
pNtk
->
fHiePath
=
1
;
return
Abc_NtkIsAcyclicHierarchy_rec
(
pNtk
);
RetValue
=
Abc_NtkIsAcyclicHierarchy_rec
(
pNtk
);
pNtk
->
fHiePath
=
0
;
// clear the modules
Vec_PtrForEachEntry
(
pNtk
->
pDesign
->
vModules
,
pTemp
,
i
)
pTemp
->
fHieVisited
=
pTemp
->
fHiePath
=
0
;
return
RetValue
;
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/base/abc/abcDfs.c
View file @
b9e0c95b
...
@@ -24,20 +24,44 @@
...
@@ -24,20 +24,44 @@
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
static
void
Abc_NtkDfs_iter
(
Vec_Ptr_t
*
vStack
,
Abc_Obj_t
*
pRoot
,
Vec_Ptr_t
*
vNodes
);
static
void
Abc_NtkDfs_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
);
static
void
Abc_AigDfs_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
);
static
void
Abc_NtkDfsReverse_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
);
static
void
Abc_NtkNodeSupport_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
);
static
void
Abc_DfsLevelizedTfo_rec
(
Abc_Obj_t
*
pNode
,
Vec_Vec_t
*
vLevels
);
static
bool
Abc_NtkIsAcyclic_rec
(
Abc_Obj_t
*
pNode
);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkDfs_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
Abc_Obj_t
*
pFanin
;
int
i
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the CI
if
(
Abc_ObjIsCi
(
pNode
)
||
(
Abc_NtkIsStrash
(
pNode
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pNode
))
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
||
Abc_ObjIsBox
(
pNode
)
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
pFanin
),
vNodes
);
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
pNode
);
}
/**Function*************************************************************
Synopsis [Returns the DFS ordered array of logic nodes.]
Synopsis [Returns the DFS ordered array of logic nodes.]
Description [Collects only the internal nodes, leaving CIs and CO.
Description [Collects only the internal nodes, leaving CIs and CO.
...
@@ -105,6 +129,7 @@ Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes
...
@@ -105,6 +129,7 @@ Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Synopsis [Performs DFS for one node.]
...
@@ -116,9 +141,9 @@ Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes
...
@@ -116,9 +141,9 @@ Vec_Ptr_t * Abc_NtkDfsNodes( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNodes
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkDfs_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
void
Abc_NtkDfs
Reverse
_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
{
Abc_Obj_t
*
pFan
in
;
Abc_Obj_t
*
pFan
out
;
int
i
;
int
i
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
// if this node is already visited, skip
...
@@ -127,57 +152,57 @@ void Abc_NtkDfs_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
...
@@ -127,57 +152,57 @@ void Abc_NtkDfs_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the CI
// skip the CI
if
(
Abc_ObjIsC
i
(
pNode
)
||
(
Abc_NtkIsStrash
(
pNode
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pNode
)
)
)
if
(
Abc_ObjIsC
o
(
pNode
)
)
return
;
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
||
Abc_ObjIsBox
(
pNode
)
);
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
pNode
=
Abc_ObjFanout0Ntk
(
pNode
);
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
pFanin
),
vNodes
);
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
Abc_NtkDfsReverse_rec
(
pFanout
,
vNodes
);
// add the node after the fanins have been added
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
pNode
);
Vec_PtrPush
(
vNodes
,
pNode
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the DFS ordered array of logic nodes.]
Synopsis [Returns the
reverse
DFS ordered array of logic nodes.]
Description [Collects only the internal nodes, leaving
CIs and CO
.
Description [Collects only the internal nodes, leaving
out CIs/COs
.
However it marks
with the current TravId both CIs and COs
.]
However it marks
both CIs and COs with the current TravId
.]
SideEffects []
SideEffects []
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Ptr_t
*
Abc_NtkDfs
Iter
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
)
Vec_Ptr_t
*
Abc_NtkDfs
Reverse
(
Abc_Ntk_t
*
pNtk
)
{
{
Vec_Ptr_t
*
vNodes
,
*
vStack
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
,
*
pFanout
;
int
i
;
int
i
,
k
;
// set the traversal ID
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
1000
);
vNodes
=
Vec_PtrAlloc
(
100
);
vStack
=
Vec_PtrAlloc
(
1000
);
Abc_NtkForEachCi
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
{
{
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NtkDfs_iter
(
vStack
,
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pObj
)),
vNodes
);
pObj
=
Abc_ObjFanout0Ntk
(
pObj
);
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
k
)
Abc_NtkDfsReverse_rec
(
pFanout
,
vNodes
);
}
}
// collect dangling nodes if asked to
// add constant nodes in the end
if
(
fCollectAll
)
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
{
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
if
(
Abc_NodeIsConst
(
pObj
)
)
Abc_NtkDfs_iter
(
vStack
,
pObj
,
vNodes
);
Vec_PtrPush
(
vNodes
,
pObj
);
}
Vec_PtrFree
(
vStack
);
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [
Iterative version of the DFS procedur
e.]
Synopsis [
Performs DFS for one nod
e.]
Description []
Description []
...
@@ -186,89 +211,52 @@ Vec_Ptr_t * Abc_NtkDfsIter( Abc_Ntk_t * pNtk, int fCollectAll )
...
@@ -186,89 +211,52 @@ Vec_Ptr_t * Abc_NtkDfsIter( Abc_Ntk_t * pNtk, int fCollectAll )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkDfs
_iter
(
Vec_Ptr_t
*
vStack
,
Abc_Obj_t
*
pRoot
,
Vec_Ptr_t
*
vNodes
)
void
Abc_NtkDfs
Seq_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
{
Abc_Obj_t
*
p
Node
,
*
p
Fanin
;
Abc_Obj_t
*
pFanin
;
int
i
Fanin
;
int
i
;
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
p
Root
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pRoot
);
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the CI
// visit the transitive fanin of the node
if
(
Abc_ObjIsCi
(
pRoot
)
||
(
Abc_NtkIsStrash
(
pRoot
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pRoot
))
)
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
return
;
Abc_NtkDfsSeq_rec
(
pFanin
,
vNodes
);
// add the CI
// add the node after the fanins have been added
Vec_PtrClear
(
vStack
);
Vec_PtrPush
(
vNodes
,
pNode
);
Vec_PtrPush
(
vStack
,
pRoot
);
Vec_PtrPush
(
vStack
,
(
void
*
)
0
);
while
(
Vec_PtrSize
(
vStack
)
>
0
)
{
// get the node and its fanin
iFanin
=
(
int
)
Vec_PtrPop
(
vStack
);
pNode
=
Vec_PtrPop
(
vStack
);
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// add it to the array of nodes if we finished
if
(
iFanin
==
Abc_ObjFaninNum
(
pNode
)
)
{
Vec_PtrPush
(
vNodes
,
pNode
);
continue
;
}
// explore the next fanin
Vec_PtrPush
(
vStack
,
pNode
);
Vec_PtrPush
(
vStack
,
(
void
*
)(
iFanin
+
1
)
);
// get the fanin
pFanin
=
Abc_ObjFanin0Ntk
(
Abc_ObjFanin
(
pNode
,
iFanin
)
);
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pFanin
)
)
continue
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pFanin
);
// skip the CI
if
(
Abc_ObjIsCi
(
pFanin
)
||
(
Abc_NtkIsStrash
(
pFanin
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pFanin
))
)
continue
;
Vec_PtrPush
(
vStack
,
pFanin
);
Vec_PtrPush
(
vStack
,
(
void
*
)
0
);
}
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the
reverse DFS ordered array of logic node
s.]
Synopsis [Returns the
array of nodes and latches reachable from PO
s.]
Description [Collects only the internal nodes, leaving out CIs/COs.
Description []
However it marks both CIs and COs with the current TravId.]
SideEffects []
SideEffects []
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Ptr_t
*
Abc_NtkDfs
Reverse
(
Abc_Ntk_t
*
pNtk
)
Vec_Ptr_t
*
Abc_NtkDfs
Seq
(
Abc_Ntk_t
*
pNtk
)
{
{
Vec_Ptr_t
*
vNodes
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
,
*
pFanout
;
Abc_Obj_t
*
pObj
;
int
i
,
k
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachCi
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
{
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
Abc_NodeSetTravIdCurrent
(
pObj
);
// mark the PIs
pObj
=
Abc_ObjFanout0Ntk
(
pObj
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
k
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
Abc_NtkDfsReverse_rec
(
pFanout
,
vNodes
);
}
// add constant nodes in the end
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
if
(
Abc_NodeIsConst
(
pObj
)
)
Vec_PtrPush
(
vNodes
,
pObj
);
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Synopsis [Performs DFS for one node.]
...
@@ -280,31 +268,25 @@ Vec_Ptr_t * Abc_NtkDfsReverse( Abc_Ntk_t * pNtk )
...
@@ -280,31 +268,25 @@ Vec_Ptr_t * Abc_NtkDfsReverse( Abc_Ntk_t * pNtk )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkDfsReverse_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
void
Abc_NtkDfs
Seq
Reverse_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
{
Abc_Obj_t
*
pFanout
;
Abc_Obj_t
*
pFanout
;
int
i
;
int
i
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the CI
if
(
Abc_ObjIsCo
(
pNode
)
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
// visit the transitive fanin of the node
pNode
=
Abc_ObjFanout0Ntk
(
pNode
);
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
Abc_NtkDfsReverse_rec
(
pFanout
,
vNodes
);
Abc_NtkDfs
Seq
Reverse_rec
(
pFanout
,
vNodes
);
// add the node after the fanins have been added
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
pNode
);
Vec_PtrPush
(
vNodes
,
pNode
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [
Performs DFS for one node
.]
Synopsis [
Returns the array of nodes and latches reachable from POs
.]
Description []
Description []
...
@@ -313,51 +295,121 @@ void Abc_NtkDfsReverse_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
...
@@ -313,51 +295,121 @@ void Abc_NtkDfsReverse_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkDfsSeq_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
Vec_Ptr_t
*
Abc_NtkDfsSeqReverse
(
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Obj_t
*
pFanin
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
;
int
i
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeqReverse_rec
(
pObj
,
vNodes
);
// mark the logic feeding into POs
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
return
vNodes
;
}
/**Function*************************************************************
Synopsis [Iterative version of the DFS procedure.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkDfs_iter
(
Vec_Ptr_t
*
vStack
,
Abc_Obj_t
*
pRoot
,
Vec_Ptr_t
*
vNodes
)
{
Abc_Obj_t
*
pNode
,
*
pFanin
;
int
iFanin
;
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Root
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
Abc_NodeSetTravIdCurrent
(
pRoot
);
// visit the transitive fanin of the node
// skip the CI
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
if
(
Abc_ObjIsCi
(
pRoot
)
||
(
Abc_NtkIsStrash
(
pRoot
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pRoot
))
)
Abc_NtkDfsSeq_rec
(
pFanin
,
vNodes
);
return
;
// add the node after the fanins have been added
// add the CI
Vec_PtrPush
(
vNodes
,
pNode
);
Vec_PtrClear
(
vStack
);
Vec_PtrPush
(
vStack
,
pRoot
);
Vec_PtrPush
(
vStack
,
(
void
*
)
0
);
while
(
Vec_PtrSize
(
vStack
)
>
0
)
{
// get the node and its fanin
iFanin
=
(
int
)
Vec_PtrPop
(
vStack
);
pNode
=
Vec_PtrPop
(
vStack
);
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// add it to the array of nodes if we finished
if
(
iFanin
==
Abc_ObjFaninNum
(
pNode
)
)
{
Vec_PtrPush
(
vNodes
,
pNode
);
continue
;
}
// explore the next fanin
Vec_PtrPush
(
vStack
,
pNode
);
Vec_PtrPush
(
vStack
,
(
void
*
)(
iFanin
+
1
)
);
// get the fanin
pFanin
=
Abc_ObjFanin0Ntk
(
Abc_ObjFanin
(
pNode
,
iFanin
)
);
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pFanin
)
)
continue
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pFanin
);
// skip the CI
if
(
Abc_ObjIsCi
(
pFanin
)
||
(
Abc_NtkIsStrash
(
pFanin
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pFanin
))
)
continue
;
Vec_PtrPush
(
vStack
,
pFanin
);
Vec_PtrPush
(
vStack
,
(
void
*
)
0
);
}
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the
array of nodes and latches reachable from PO
s.]
Synopsis [Returns the
DFS ordered array of logic node
s.]
Description []
Description [Collects only the internal nodes, leaving CIs and CO.
However it marks with the current TravId both CIs and COs.]
SideEffects []
SideEffects []
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Ptr_t
*
Abc_NtkDfs
Seq
(
Abc_Ntk_t
*
pNtk
)
Vec_Ptr_t
*
Abc_NtkDfs
Iter
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
)
{
{
Vec_Ptr_t
*
vNodes
;
Vec_Ptr_t
*
vNodes
,
*
vStack
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
vNodes
=
Vec_PtrAlloc
(
1000
);
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
vStack
=
Vec_PtrAlloc
(
1000
);
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
// mark the PIs
{
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
Abc_NtkDfs_iter
(
vStack
,
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pObj
)),
vNodes
);
}
// collect dangling nodes if asked to
if
(
fCollectAll
)
{
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_NtkDfs_iter
(
vStack
,
pObj
,
vNodes
);
}
Vec_PtrFree
(
vStack
);
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Synopsis [Performs DFS for one node.]
...
@@ -369,51 +421,55 @@ Vec_Ptr_t * Abc_NtkDfsSeq( Abc_Ntk_t * pNtk )
...
@@ -369,51 +421,55 @@ Vec_Ptr_t * Abc_NtkDfsSeq( Abc_Ntk_t * pNtk )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_NtkDfs
SeqReverse_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
void
Abc_NtkDfs
Hie_rec
(
Abc_Obj_t
*
pObj
,
Vec_Ptr_t
*
vNodes
)
{
{
Abc_Obj_t
*
pFan
out
;
Abc_Obj_t
*
pFan
in
;
int
i
;
int
i
;
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Obj
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
p
Node
);
Abc_NodeSetTravIdCurrent
(
p
Obj
);
// visit the transitive fanin of the node
// visit the transitive fanin of the node
Abc_ObjForEachFan
out
(
pNode
,
pFanout
,
i
)
Abc_ObjForEachFan
in
(
pObj
,
pFanin
,
i
)
Abc_NtkDfs
SeqReverse_rec
(
pFanout
,
vNodes
);
Abc_NtkDfs
Hie_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
p
Node
);
Vec_PtrPush
(
vNodes
,
p
Obj
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the
array of nodes and latches reachable from PO
s.]
Synopsis [Returns the
DFS ordered array of all object
s.]
Description []
Description [
This procedure collects everything from POs to PIs.
]
SideEffects []
SideEffects []
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Vec_Ptr_t
*
Abc_NtkDfs
SeqReverse
(
Abc_Ntk_t
*
pNtk
)
Vec_Ptr_t
*
Abc_NtkDfs
Hie
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
)
{
{
Vec_Ptr_t
*
vNodes
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
;
Abc_Obj_t
*
pObj
;
int
i
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeqReverse_rec
(
pObj
,
vNodes
);
// mark the logic feeding into POs
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
Abc_NtkDfsHie_rec
(
pObj
,
vNodes
);
// collect dangling nodes if asked to
if
(
fCollectAll
)
{
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_NtkDfs_rec
(
pObj
,
vNodes
);
}
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns 1 if the ordering of nodes is DFS.]
Synopsis [Returns 1 if the ordering of nodes is DFS.]
...
@@ -452,6 +508,40 @@ bool Abc_NtkIsDfsOrdered( Abc_Ntk_t * pNtk )
...
@@ -452,6 +508,40 @@ bool Abc_NtkIsDfsOrdered( Abc_Ntk_t * pNtk )
return
1
;
return
1
;
}
}
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkNodeSupport_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
Abc_Obj_t
*
pFanin
;
int
i
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// collect the CI
if
(
Abc_ObjIsCi
(
pNode
)
||
Abc_ObjFaninNum
(
pNode
)
==
0
)
{
Vec_PtrPush
(
vNodes
,
pNode
);
return
;
}
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkNodeSupport_rec
(
Abc_ObjFanin0Ntk
(
pFanin
),
vNodes
);
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the set of CI nodes in the support of the given nodes.]
Synopsis [Returns the set of CI nodes in the support of the given nodes.]
...
@@ -511,6 +601,7 @@ Vec_Ptr_t * Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNod
...
@@ -511,6 +601,7 @@ Vec_Ptr_t * Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNod
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
Synopsis [Performs DFS for one node.]
...
@@ -522,29 +613,30 @@ Vec_Ptr_t * Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNod
...
@@ -522,29 +613,30 @@ Vec_Ptr_t * Abc_NtkNodeSupport( Abc_Ntk_t * pNtk, Abc_Obj_t ** ppNodes, int nNod
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_
NtkNodeSupport
_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
void
Abc_
AigDfs
_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNodes
)
{
{
Abc_Obj_t
*
pFanin
;
Abc_Obj_t
*
pFanin
;
int
i
;
int
i
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
Abc_NodeSetTravIdCurrent
(
pNode
);
// collect the CI
// skip the PI
if
(
Abc_ObjIsCi
(
pNode
)
||
Abc_ObjFaninNum
(
pNode
)
==
0
)
if
(
Abc_ObjIsCi
(
pNode
)
||
Abc_AigNodeIsConst
(
pNode
)
)
{
Vec_PtrPush
(
vNodes
,
pNode
);
return
;
return
;
}
assert
(
Abc_ObjIsNode
(
pNode
)
);
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkNodeSupport_rec
(
Abc_ObjFanin0Ntk
(
pFanin
),
vNodes
);
Abc_AigDfs_rec
(
pFanin
,
vNodes
);
// visit the equivalent nodes
if
(
Abc_AigNodeIsChoice
(
pNode
)
)
for
(
pFanin
=
pNode
->
pData
;
pFanin
;
pFanin
=
pFanin
->
pData
)
Abc_AigDfs_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
pNode
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns the DFS ordered array of logic nodes.]
Synopsis [Returns the DFS ordered array of logic nodes.]
...
@@ -585,39 +677,36 @@ Vec_Ptr_t * Abc_AigDfs( Abc_Ntk_t * pNtk, int fCollectAll, int fCollectCos )
...
@@ -585,39 +677,36 @@ Vec_Ptr_t * Abc_AigDfs( Abc_Ntk_t * pNtk, int fCollectAll, int fCollectCos )
return
vNodes
;
return
vNodes
;
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [
Performs DFS for one node
.]
Synopsis [
Collects nodes in the DFS manner by level
.]
Description []
Description [
The number of levels should be set!!!
]
SideEffects []
SideEffects []
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_
AigDfs_rec
(
Abc_Obj_t
*
pNode
,
Vec_Ptr_t
*
vNode
s
)
void
Abc_
DfsLevelizedTfo_rec
(
Abc_Obj_t
*
pNode
,
Vec_Vec_t
*
vLevel
s
)
{
{
Abc_Obj_t
*
pFan
in
;
Abc_Obj_t
*
pFan
out
;
int
i
;
int
i
;
// if this node is already visited, skip
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
return
;
// mark the node as visited
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the
PI
// skip the
terminals
if
(
Abc_ObjIsC
i
(
pNode
)
||
Abc_AigNodeIsConst
(
pNode
)
)
if
(
Abc_ObjIsC
o
(
pNode
)
)
return
;
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
);
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
// add the node to the structure
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Vec_VecPush
(
vLevels
,
pNode
->
Level
,
pNode
);
Abc_AigDfs_rec
(
pFanin
,
vNodes
);
// visit the TFO
// visit the equivalent nodes
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
if
(
Abc_AigNodeIsChoice
(
pNode
)
)
Abc_DfsLevelizedTfo_rec
(
pFanout
,
vLevels
);
for
(
pFanin
=
pNode
->
pData
;
pFanin
;
pFanin
=
pFanin
->
pData
)
Abc_AigDfs_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
pNode
);
}
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -653,37 +742,6 @@ Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, bool fTfi )
...
@@ -653,37 +742,6 @@ Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, bool fTfi )
return
vLevels
;
return
vLevels
;
}
}
/**Function*************************************************************
Synopsis [Collects nodes in the DFS manner by level.]
Description [The number of levels should be set!!!]
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_DfsLevelizedTfo_rec
(
Abc_Obj_t
*
pNode
,
Vec_Vec_t
*
vLevels
)
{
Abc_Obj_t
*
pFanout
;
int
i
;
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the terminals
if
(
Abc_ObjIsCo
(
pNode
)
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
);
// add the node to the structure
Vec_VecPush
(
vLevels
,
pNode
->
Level
,
pNode
);
// visit the TFO
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
Abc_DfsLevelizedTfo_rec
(
pFanout
,
vLevels
);
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -823,51 +881,6 @@ int Abc_NtkLevelReverse( Abc_Ntk_t * pNtk )
...
@@ -823,51 +881,6 @@ int Abc_NtkLevelReverse( Abc_Ntk_t * pNtk )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Detects combinational loops.]
Description [This procedure is based on the idea suggested by Donald Chai.
As we traverse the network and visit the nodes, we need to distinquish
three types of nodes: (1) those that are visited for the first time,
(2) those that have been visited in this traversal but are currently not
on the traversal path, (3) those that have been visited and are currently
on the travesal path. When the node of type (3) is encountered, it means
that there is a combinational loop. To mark the three types of nodes,
two new values of the traversal IDs are used.]
SideEffects []
SeeAlso []
***********************************************************************/
bool
Abc_NtkIsAcyclic
(
Abc_Ntk_t
*
pNtk
)
{
Abc_Obj_t
*
pNode
;
int
fAcyclic
,
i
;
// set the traversal ID for this DFS ordering
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// pNode->TravId == pNet->nTravIds means "pNode is on the path"
// pNode->TravId == pNet->nTravIds - 1 means "pNode is visited but is not on the path"
// pNode->TravId < pNet->nTravIds - 1 means "pNode is not visited"
// traverse the network to detect cycles
fAcyclic
=
1
;
Abc_NtkForEachCo
(
pNtk
,
pNode
,
i
)
{
pNode
=
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pNode
));
if
(
Abc_NodeIsTravIdPrevious
(
pNode
)
)
continue
;
// traverse the output logic cone
if
(
fAcyclic
=
Abc_NtkIsAcyclic_rec
(
pNode
)
)
continue
;
// stop as soon as the first loop is detected
fprintf
(
stdout
,
" (cone of CO
\"
%s
\"
)
\n
"
,
Abc_ObjName
(
pNode
)
);
break
;
}
return
fAcyclic
;
}
/**Function*************************************************************
Synopsis [Recursively detects combinational loops.]
Synopsis [Recursively detects combinational loops.]
Description []
Description []
...
@@ -919,6 +932,51 @@ bool Abc_NtkIsAcyclic_rec( Abc_Obj_t * pNode )
...
@@ -919,6 +932,51 @@ bool Abc_NtkIsAcyclic_rec( Abc_Obj_t * pNode )
return
1
;
return
1
;
}
}
/**Function*************************************************************
Synopsis [Detects combinational loops.]
Description [This procedure is based on the idea suggested by Donald Chai.
As we traverse the network and visit the nodes, we need to distinquish
three types of nodes: (1) those that are visited for the first time,
(2) those that have been visited in this traversal but are currently not
on the traversal path, (3) those that have been visited and are currently
on the travesal path. When the node of type (3) is encountered, it means
that there is a combinational loop. To mark the three types of nodes,
two new values of the traversal IDs are used.]
SideEffects []
SeeAlso []
***********************************************************************/
bool
Abc_NtkIsAcyclic
(
Abc_Ntk_t
*
pNtk
)
{
Abc_Obj_t
*
pNode
;
int
fAcyclic
,
i
;
// set the traversal ID for this DFS ordering
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
// pNode->TravId == pNet->nTravIds means "pNode is on the path"
// pNode->TravId == pNet->nTravIds - 1 means "pNode is visited but is not on the path"
// pNode->TravId < pNet->nTravIds - 1 means "pNode is not visited"
// traverse the network to detect cycles
fAcyclic
=
1
;
Abc_NtkForEachCo
(
pNtk
,
pNode
,
i
)
{
pNode
=
Abc_ObjFanin0Ntk
(
Abc_ObjFanin0
(
pNode
));
if
(
Abc_NodeIsTravIdPrevious
(
pNode
)
)
continue
;
// traverse the output logic cone
if
(
fAcyclic
=
Abc_NtkIsAcyclic_rec
(
pNode
)
)
continue
;
// stop as soon as the first loop is detected
fprintf
(
stdout
,
" (cone of CO
\"
%s
\"
)
\n
"
,
Abc_ObjName
(
pNode
)
);
break
;
}
return
fAcyclic
;
}
/**Function*************************************************************
/**Function*************************************************************
...
...
src/base/abc/abcFanio.c
View file @
b9e0c95b
...
@@ -53,6 +53,8 @@ void Abc_ObjAddFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin )
...
@@ -53,6 +53,8 @@ void Abc_ObjAddFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin )
{
{
int
x
=
0
;
int
x
=
0
;
}
}
// printf( "Adding fanin of %s ", Abc_ObjName(pObj) );
// printf( "to be %s\n", Abc_ObjName(pFanin) );
}
}
...
...
src/base/abc/abcHie.c
View file @
b9e0c95b
...
@@ -24,18 +24,131 @@
...
@@ -24,18 +24,131 @@
/// DECLARATIONS ///
/// DECLARATIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
extern
Abc_Ntk_t
*
Abc_NtkFlattenLogicHierarchy
(
Abc_Ntk_t
*
pNtk
);
extern
Abc_Ntk_t
*
Abc_NtkConvertBlackboxes
(
Abc_Ntk_t
*
pNtk
);
extern
void
Abc_NtkInsertNewLogic
(
Abc_Ntk_t
*
pNtkHie
,
Abc_Ntk_t
*
pNtk
);
static
void
Abc_NtkFlattenLogicHierarchy_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Ntk_t
*
pNtkOld
,
int
*
pCounter
);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Recursively flattens logic hierarchy of the netlist.]
Description [When this procedure is called, the PI/PO nets of the old
netlist point to the corresponding nets of the flattened netlist.]
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkFlattenLogicHierarchy_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Ntk_t
*
pNtk
,
int
*
pCounter
)
{
char
Suffix
[
1000
]
=
{
0
};
Abc_Ntk_t
*
pNtkModel
;
Abc_Obj_t
*
pObj
,
*
pTerm
,
*
pNet
,
*
pFanin
;
int
i
,
k
;
// process the blackbox
if
(
Abc_NtkHasBlackbox
(
pNtk
)
)
{
// duplicate the blackbox
assert
(
Abc_NtkBoxNum
(
pNtk
)
==
1
);
pObj
=
Abc_NtkBox
(
pNtk
,
0
);
Abc_NtkDupBox
(
pNtkNew
,
pObj
,
1
);
// connect blackbox fanins to the PI nets
assert
(
Abc_ObjFaninNum
(
pObj
->
pCopy
)
==
Abc_NtkPiNum
(
pNtk
)
);
Abc_NtkForEachPi
(
pNtk
,
pTerm
,
i
)
Abc_ObjAddFanin
(
Abc_ObjFanin
(
pObj
->
pCopy
,
i
),
Abc_ObjFanout0
(
pTerm
)
);
// connect blackbox fanouts to the PO nets
assert
(
Abc_ObjFanoutNum
(
pObj
->
pCopy
)
==
Abc_NtkPoNum
(
pNtk
)
);
Abc_NtkForEachPo
(
pNtk
,
pTerm
,
i
)
Abc_ObjAddFanin
(
Abc_ObjFanin0
(
pTerm
),
Abc_ObjFanout
(
pObj
->
pCopy
,
i
)
);
return
;
}
(
*
pCounter
)
++
;
// create the prefix, which will be appended to the internal names
if
(
*
pCounter
)
sprintf
(
Suffix
,
"_%s_%d"
,
Abc_NtkName
(
pNtk
),
*
pCounter
);
// duplicate nets of all boxes, including latches
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
{
Abc_ObjForEachFanin
(
pObj
,
pTerm
,
k
)
{
pNet
=
Abc_ObjFanin0
(
pTerm
);
if
(
pNet
->
pCopy
)
continue
;
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjNameSuffix
(
pNet
,
Suffix
)
);
}
Abc_ObjForEachFanout
(
pObj
,
pTerm
,
k
)
{
pNet
=
Abc_ObjFanout0
(
pTerm
);
if
(
pNet
->
pCopy
)
continue
;
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjNameSuffix
(
pNet
,
Suffix
)
);
}
}
// mark objects that will not be used
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkForEachPi
(
pNtk
,
pTerm
,
i
)
Abc_NodeSetTravIdCurrent
(
pTerm
);
Abc_NtkForEachPo
(
pNtk
,
pTerm
,
i
)
Abc_NodeSetTravIdCurrent
(
pTerm
);
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
{
if
(
Abc_ObjIsLatch
(
pObj
)
)
continue
;
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_ObjForEachFanin
(
pObj
,
pTerm
,
k
)
Abc_NodeSetTravIdCurrent
(
pTerm
);
Abc_ObjForEachFanout
(
pObj
,
pTerm
,
k
)
Abc_NodeSetTravIdCurrent
(
pTerm
);
}
// duplicate objects that do not have prototypes yet
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
{
if
(
Abc_NodeIsTravIdCurrent
(
pObj
)
)
continue
;
if
(
pObj
->
pCopy
)
continue
;
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
}
// connect objects
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
k
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pFanin
)
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
// call recursively
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
{
if
(
Abc_ObjIsLatch
(
pObj
)
)
continue
;
pNtkModel
=
pObj
->
pData
;
// check the match between the number of actual and formal parameters
assert
(
Abc_ObjFaninNum
(
pObj
)
==
Abc_NtkPiNum
(
pNtkModel
)
);
assert
(
Abc_ObjFanoutNum
(
pObj
)
==
Abc_NtkPoNum
(
pNtkModel
)
);
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtkModel
);
// map PIs/POs
Abc_ObjForEachFanin
(
pObj
,
pTerm
,
k
)
Abc_ObjFanout0
(
Abc_NtkPi
(
pNtkModel
,
k
)
)
->
pCopy
=
Abc_ObjFanin0
(
pTerm
)
->
pCopy
;
Abc_ObjForEachFanout
(
pObj
,
pTerm
,
k
)
Abc_ObjFanin0
(
Abc_NtkPo
(
pNtkModel
,
k
)
)
->
pCopy
=
Abc_ObjFanout0
(
pTerm
)
->
pCopy
;
// call recursively
Abc_NtkFlattenLogicHierarchy_rec
(
pNtkNew
,
pNtkModel
,
pCounter
);
}
}
/**Function*************************************************************
Synopsis [Flattens the logic hierarchy of the netlist.]
Synopsis [Flattens the logic hierarchy of the netlist.]
Description []
Description []
...
@@ -48,121 +161,61 @@ static void Abc_NtkFlattenLogicHierarchy_rec( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * p
...
@@ -48,121 +161,61 @@ static void Abc_NtkFlattenLogicHierarchy_rec( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * p
Abc_Ntk_t
*
Abc_NtkFlattenLogicHierarchy
(
Abc_Ntk_t
*
pNtk
)
Abc_Ntk_t
*
Abc_NtkFlattenLogicHierarchy
(
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Ntk_t
*
pNtkNew
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Obj_t
*
p
Obj
,
*
pNet
;
Abc_Obj_t
*
p
Term
,
*
pNet
;
int
i
,
Counter
=
0
;
int
i
,
Counter
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// start the network
// start the network
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
// duplicate the name and the spec
// duplicate the name and the spec
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// clean the node copy fields
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtk
);
Abc_NtkCleanCopy
(
pNtk
);
// duplicate PIs/POs and their nets
// duplicate PIs/POs and their nets
Abc_NtkForEachPi
(
pNtk
,
p
Obj
,
i
)
Abc_NtkForEachPi
(
pNtk
,
p
Term
,
i
)
{
{
Abc_NtkDupObj
(
pNtkNew
,
p
Obj
,
0
);
Abc_NtkDupObj
(
pNtkNew
,
p
Term
,
0
);
pNet
=
Abc_ObjFanout0
(
p
Obj
);
pNet
=
Abc_ObjFanout0
(
p
Term
);
Abc_NtkDupObj
(
pNtkNew
,
pNet
,
1
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
Abc_ObjAddFanin
(
pNet
->
pCopy
,
p
Obj
->
pCopy
);
Abc_ObjAddFanin
(
pNet
->
pCopy
,
p
Term
->
pCopy
);
}
}
Abc_NtkForEachPo
(
pNtk
,
p
Obj
,
i
)
Abc_NtkForEachPo
(
pNtk
,
p
Term
,
i
)
{
{
Abc_NtkDupObj
(
pNtkNew
,
p
Obj
,
0
);
Abc_NtkDupObj
(
pNtkNew
,
p
Term
,
0
);
pNet
=
Abc_ObjFanin0
(
p
Obj
);
pNet
=
Abc_ObjFanin0
(
p
Term
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
Abc_ObjAddFanin
(
p
Obj
->
pCopy
,
pNet
->
pCopy
);
Abc_ObjAddFanin
(
p
Term
->
pCopy
,
pNet
->
pCopy
);
}
}
// recursively flatten hierarchy, create internal logic, add new PI/PO names if there are black boxes
// recursively flatten hierarchy, create internal logic, add new PI/PO names if there are black boxes
Counter
=
-
1
;
Abc_NtkFlattenLogicHierarchy_rec
(
pNtkNew
,
pNtk
,
&
Counter
);
Abc_NtkFlattenLogicHierarchy_rec
(
pNtkNew
,
pNtk
,
&
Counter
);
printf
(
"Abc_NtkFlattenLogicHierarchy(): Flattened %d logic boxes. Left %d block boxes.
\n
"
,
printf
(
"Abc_NtkFlattenLogicHierarchy(): Flattened %d logic instances. Preserved %d black boxes.
\n
"
,
Counter
-
1
,
Abc_NtkBlackboxNum
(
pNtkNew
)
);
Counter
,
Abc_NtkBlackboxNum
(
pNtkNew
)
);
// copy the timing information
// copy the timing information
// Abc_ManTimeDup( pNtk, pNtkNew );
// Abc_ManTimeDup( pNtk, pNtkNew );
// duplicate EXDC
// duplicate EXDC
if
(
pNtk
->
pExdc
)
if
(
pNtk
->
pExdc
)
printf
(
"EXDC is not transformed.
\n
"
);
printf
(
"EXDC is not transformed.
\n
"
);
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
fprintf
(
stdout
,
"Abc_NtkFlattenLogicHierarchy(): Network check has failed.
\n
"
);
return
pNtkNew
;
}
/**Function*************************************************************
Synopsis [Recursively flattens the logic hierarchy of the netlist.]
Description [When this procedure is called, the PI/PO nets of the netlist
are already assigned.]
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkFlattenLogicHierarchy_rec
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Ntk_t
*
pNtkOld
,
int
*
pCounter
)
{
Vec_Ptr_t
*
vNodes
;
Abc_Ntk_t
*
pNtkModel
;
Abc_Obj_t
*
pObj
,
*
pTerm
,
*
pFanin
,
*
pNet
;
int
i
,
k
;
(
*
pCounter
)
++
;
// collect nodes and boxes in topological order
vNodes
=
Abc_NtkDfs
(
pNtkOld
,
0
);
// duplicate nodes and blackboxes, call recursively for logic boxes
Vec_PtrForEachEntry
(
vNodes
,
pObj
,
i
)
{
{
if
(
Abc_ObjIsNode
(
pObj
)
)
fprintf
(
stdout
,
"Abc_NtkFlattenLogicHierarchy(): Network check has failed.
\n
"
);
{
Abc_NtkDelete
(
pNtkNew
);
// duplicate the node
return
NULL
;
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
0
);
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pNet
->
pCopy
);
// duplicate the net
pNet
=
Abc_ObjFanout0
(
pObj
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
Abc_ObjAddFanin
(
pNet
->
pCopy
,
pObj
->
pCopy
);
continue
;
}
if
(
Abc_ObjIsBlackbox
(
pObj
)
)
{
// duplicate the box
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
1
);
// connect the fanins
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pNet
->
pCopy
);
// duplicate fanout nets and connect them
Abc_ObjForEachFanout
(
pObj
,
pNet
,
i
)
{
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
Abc_ObjAddFanin
(
pNet
->
pCopy
,
pObj
->
pCopy
);
}
continue
;
}
assert
(
Abc_ObjIsBox
(
pObj
)
);
pNtkModel
=
pObj
->
pData
;
assert
(
pNtkModel
&&
!
Abc_NtkHasBlackbox
(
pNtkModel
)
);
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtkModel
);
// consider this blackbox
// copy the PIs/POs of the box
Abc_NtkForEachPi
(
pNtkModel
,
pTerm
,
k
)
Abc_ObjFanout
(
pTerm
,
k
)
->
pCopy
=
Abc_ObjFanin
(
pObj
,
k
);
Abc_NtkForEachPo
(
pNtkModel
,
pTerm
,
k
)
Abc_ObjFanin
(
pTerm
,
k
)
->
pCopy
=
Abc_ObjFanout
(
pObj
,
k
);
// call recursively
Abc_NtkFlattenLogicHierarchy_rec
(
pNtkNew
,
pNtkModel
,
pCounter
);
}
}
// connect the POs
return
pNtkNew
;
Abc_NtkForEachPo
(
pNtkOld
,
pTerm
,
k
)
pTerm
->
pCopy
=
Abc_ObjFanin0
(
pTerm
)
->
pCopy
;
Vec_PtrFree
(
vNodes
);
}
}
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Extracts blackboxes by making them into additional PIs/POs.]
Synopsis [Extracts blackboxes by making them into additional PIs/POs.]
Description []
Description [The input netlist has not logic hierarchy. The resulting
netlist has additional PIs/POs for each blackbox input/output.]
SideEffects []
SideEffects []
...
@@ -172,68 +225,74 @@ void Abc_NtkFlattenLogicHierarchy_rec( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * pNtkOld,
...
@@ -172,68 +225,74 @@ void Abc_NtkFlattenLogicHierarchy_rec( Abc_Ntk_t * pNtkNew, Abc_Ntk_t * pNtkOld,
Abc_Ntk_t
*
Abc_NtkConvertBlackboxes
(
Abc_Ntk_t
*
pNtk
)
Abc_Ntk_t
*
Abc_NtkConvertBlackboxes
(
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Ntk_t
*
pNtkNew
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Obj_t
*
pObj
,
*
pNet
;
Abc_Obj_t
*
pObj
,
*
pNet
,
*
pFanin
,
*
pTerm
;
int
i
,
k
;
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkBlackboxNum
(
pNtk
)
==
Abc_NtkBoxNum
(
pNtk
)
-
Abc_NtkLatchNum
(
pNtk
)
);
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
// start the network
// start the network
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
// duplicate the name and the spec
// duplicate the name and the spec
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// pNtkNew->pSpec = Extra_UtilStrsav( pNtk->pSpec );
// clean the node copy fields
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtk
);
Abc_NtkCleanCopy
(
pNtk
);
// create PIs/POs for the box inputs outputs
// create PIs/POs for the box inputs/outputs
// mark the nodes that should not be connected
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
{
pObj
->
pCopy
=
pObj
;
// placeholder
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_ObjForEachFanout
(
pObj
,
p
Net
,
k
)
Abc_ObjForEachFanout
(
pObj
,
p
Term
,
k
)
{
{
pNet
=
Abc_ObjFanout0
(
pTerm
);
if
(
pNet
->
pCopy
)
if
(
pNet
->
pCopy
)
continue
;
{
pNet
->
pCopy
=
Abc_NtkCreatePi
(
pNtkNew
);
printf
(
"Error in Abc_NtkConvertBlackboxes(): Output %s of a black box has a non-unique name.
\n
"
,
Abc_ObjName
(
pNet
->
pCopy
)
);
Abc_ObjAssignName
(
pNet
->
pCopy
,
Abc_ObjName
(
pNet
),
NULL
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
pTerm
->
pCopy
=
Abc_NtkCreatePi
(
pNtkNew
);
Abc_NodeSetTravIdCurrent
(
pTerm
);
}
}
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
}
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
Abc_ObjForEachFanin
(
pObj
,
pTerm
,
k
)
{
{
pNet
=
Abc_ObjFanin0
(
pTerm
);
if
(
pNet
->
pCopy
)
if
(
pNet
->
pCopy
)
{
Abc_NodeSetTravIdCurrent
(
pTerm
);
continue
;
continue
;
pNet
->
pCopy
=
Abc_NtkCreatePo
(
pNtkNew
);
}
Abc_ObjAssignName
(
pNet
->
pCopy
,
Abc_ObjName
(
pNet
),
NULL
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
pTerm
->
pCopy
=
Abc_NtkCreatePo
(
pNtkNew
);
}
}
}
}
// duplicate other objects
// duplicate other objects
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
pObj
->
pCopy
==
NULL
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
&&
pObj
->
pCopy
==
NULL
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
Abc_ObjIsNet
(
pObj
)
);
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
Abc_ObjIsNet
(
pObj
)
);
// connect all objects
//
duplicate all objects besides the boxe
s
//
connect all object
s
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_ObjIsBlackbox
(
pObj
)
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
Abc_ObjIsNet
(
pObj
)
);
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
k
)
// create PIs/POs for the nets belonging to the boxes
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
if
(
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNet
))
)
Abc_NtkCreatePi
(
pNtkNew
)
}
// check integrity
// connect all objects, besides blackboxes
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
{
{
if
(
!
Abc_ObjIsBlackbox
(
pObj
)
)
fprintf
(
stdout
,
"Abc_NtkConvertBlackboxes(): Network check has failed.
\n
"
);
continue
;
Abc_NtkDelete
(
pNtkNew
);
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
return
NULL
;
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pNet
->
pCopy
);
}
}
if
(
!
Abc_NtkCheck
(
pNtkHie
)
)
fprintf
(
stdout
,
"Abc_NtkInsertNewLogic(): Network check has failed.
\n
"
);
return
pNtkNew
;
return
pNtkNew
;
}
}
...
@@ -242,99 +301,129 @@ Abc_Ntk_t * Abc_NtkConvertBlackboxes( Abc_Ntk_t * pNtk )
...
@@ -242,99 +301,129 @@ Abc_Ntk_t * Abc_NtkConvertBlackboxes( Abc_Ntk_t * pNtk )
Synopsis [Inserts blackboxes into the netlist.]
Synopsis [Inserts blackboxes into the netlist.]
Description [The first arg is the netlist with blackboxes without logic hierarchy.
Description [The first arg is the netlist with blackboxes without logic hierarchy.
The second arg is a non-hierarchical netlist derived from
logic network
after processing.
The second arg is a non-hierarchical netlist derived from
the above netlist
after processing.
This procedure
inserts the logic back into the original hierarhical netlist.
This procedure
create a new netlist, which is comparable to the original netlist with
The result is updated original hierarchical netlist
.]
blackboxes, except that it contains logic nodes from the netlist after processing
.]
SideEffects []
SideEffects [This procedure silently assumes that blackboxes appear
only in the top-level model. If they appear in other models as well,
the name of the model and its number were appended to the names of
blackbox inputs/outputs.]
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
int
Abc_NtkInsertNewLogic
(
Abc_Ntk_t
*
pNtkHie
,
Abc_Ntk_t
*
pNtk
)
Abc_Ntk_t
*
Abc_NtkInsertNewLogic
(
Abc_Ntk_t
*
pNtkH
,
Abc_Ntk_t
*
pNtkL
)
{
{
Abc_Obj_t
*
pObj
,
*
pNet
,
*
pNetLogic
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Obj_t
*
pObjH
,
*
pObjL
,
*
pNetH
,
*
pNetL
,
*
pTermH
;
int
i
,
k
;
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtkHie
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtkH
)
);
assert
(
Abc_NtkBlackboxNum
(
pNtk
)
==
0
);
assert
(
Abc_NtkWhiteboxNum
(
pNtkH
)
==
0
);
Abc_NtkCleanCopy
(
pNtk
);
assert
(
Abc_NtkBlackboxNum
(
pNtkL
)
>
0
);
// mark PIs/POs/blackboxes and their nets
// map the nets into the corresponding nets of the logic design
assert
(
Abc_NtkIsNetlist
(
pNtkL
)
);
Abc_NtkForEachPi
(
pNtkHie
,
pObj
,
i
)
assert
(
Abc_NtkWhiteboxNum
(
pNtkL
)
==
0
);
assert
(
Abc_NtkBlackboxNum
(
pNtkL
)
==
0
);
// prepare the logic network for copying
Abc_NtkCleanCopy
(
pNtkL
);
// start the network
pNtkNew
=
Abc_NtkAlloc
(
pNtkH
->
ntkType
,
pNtkH
->
ntkFunc
,
1
);
// duplicate the name and the spec
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtkH
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtkH
->
pSpec
);
// make sure every PI/PO has a PI/PO in the processed network
Abc_NtkForEachPi
(
pNtkH
,
pObjH
,
i
)
{
{
pObj
->
fMarkA
=
1
;
pNetH
=
Abc_ObjFanout0
(
pObjH
);
pNet
=
Abc_ObjFanout0
(
pObj
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
pNet
->
fMarkA
=
1
;
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNetL
)
)
)
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
{
assert
(
pNetLogic
);
printf
(
"There is no PI corresponding to the PI %s.
\n
"
,
Abc_ObjName
(
pNetH
)
);
pNetLogic
->
pCopy
=
pNet
;
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanin0
(
pNetL
),
0
);
}
}
Abc_NtkForEachPo
(
pNtkH
ie
,
pObj
,
i
)
Abc_NtkForEachPo
(
pNtkH
,
pObjH
,
i
)
{
{
pObj
->
fMarkA
=
1
;
pNetH
=
Abc_ObjFanin0
(
pObjH
);
pNet
=
Abc_ObjFanin0
(
pObj
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
pNet
->
fMarkA
=
1
;
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPo
(
Abc_ObjFanout0
(
pNetL
)
)
)
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
{
assert
(
pNetLogic
);
printf
(
"There is no PO corresponding to the PO %s.
\n
"
,
Abc_ObjName
(
pNetH
)
);
pNetLogic
->
pCopy
=
pNet
;
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanout0
(
pNetL
),
0
);
}
}
Abc_NtkForEachBlackbox
(
pNtkHie
,
pObj
,
i
)
// make sure every BB has a PI/PO in the processed network
Abc_NtkForEachBlackbox
(
pNtkH
,
pObjH
,
i
)
{
{
pObj
->
fMarkA
=
1
;
// duplicate the box
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
Abc_NtkDupObj
(
pNtkNew
,
pObjH
,
1
);
// look and fanins/fanouts of the box
Abc_ObjForEachFanin
(
pObjH
,
pTermH
,
k
)
{
{
pNet
->
fMarkA
=
1
;
pNetH
=
Abc_ObjFanin0
(
pTermH
);
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
assert
(
pNetLogic
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPo
(
Abc_ObjFanout0
(
pNetL
)
)
)
pNetLogic
->
pCopy
=
pNet
;
{
printf
(
"There is no PO corresponding to the input %s of blackbox %s.
\n
"
,
Abc_ObjName
(
pNetH
),
Abc_ObjName
(
pObjH
)
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanout0
(
pNetL
),
0
);
// connect
Abc_ObjAddFanin
(
pObjH
->
pCopy
,
Abc_ObjFanout0
(
pNetL
)
->
pCopy
);
}
}
Abc_ObjForEachFanout
(
pObj
,
pNet
,
k
)
Abc_ObjForEachFanout
(
pObj
H
,
pTermH
,
k
)
{
{
pNet
->
fMarkA
=
1
;
pNetH
=
Abc_ObjFanout0
(
pTermH
);
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
assert
(
pNetLogic
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNetL
)
)
)
pNetLogic
->
pCopy
=
pNet
;
{
printf
(
"There is no PI corresponding to the inpout %s of blackbox %s.
\n
"
,
Abc_ObjName
(
pNetH
),
Abc_ObjName
(
pObjH
)
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanin0
(
pNetL
),
0
);
// connect
Abc_ObjAddFanin
(
Abc_ObjFanin0
(
pNetL
)
->
pCopy
,
pObjH
->
pCopy
);
}
}
}
}
// remove all other logic fro the hierarchical netlist
Abc_NtkForEachObj
(
pNtkHie
,
pObj
,
i
)
// duplicate other objects of the logic network
{
Abc_NtkForEachObj
(
pNtkL
,
pObjL
,
i
)
if
(
pObj
->
fMarkA
)
if
(
pObjL
->
pCopy
)
pObj
->
fMarkA
=
0
;
Abc_NtkDupObj
(
pNtkNew
,
pObjL
,
0
);
else
Abc_NtkDeleteObj
(
pObj
);
// connect objects
}
Abc_NtkForEachObj
(
pNtkL
,
pObjL
,
i
)
// mark PI/PO nets of the network
Abc_ObjForEachFanin
(
pObjL
,
pNetL
,
k
)
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_ObjAddFanin
(
pObjL
->
pCopy
,
pNetL
->
pCopy
);
Abc_ObjFanout0
(
pObj
)
->
fMarkA
=
1
;
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
// check integrity
Abc_ObjFanin0
(
pObj
)
->
fMarkA
=
1
;
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
// make sure only these nodes are assigned the copy
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
{
assert
(
pObj
->
fMarkA
==
(
pObj
->
pCopy
!=
NULL
)
);
pObj
->
fMarkA
=
0
;
if
(
pObj
->
pCopy
)
continue
;
if
(
Abc_ObjIsPi
(
pObj
)
||
Abc_ObjIsPi
(
pObj
)
)
continue
;
Abc_NtkDupObj
(
pNtkHie
,
pObj
,
0
);
}
// connect all the nodes, except the PIs and POs
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
{
if
(
Abc_ObjIsPi
(
pObj
)
||
Abc_ObjIsPi
(
pObj
)
)
continue
;
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pNet
->
pCopy
);
}
if
(
!
Abc_NtkCheck
(
pNtkHie
)
)
{
{
fprintf
(
stdout
,
"Abc_NtkInsertNewLogic(): Network check has failed.
\n
"
);
fprintf
(
stdout
,
"Abc_NtkInsertNewLogic(): Network check has failed.
\n
"
);
return
0
;
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
}
return
1
;
return
pNtkNew
;
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/base/abc/abcLib.c
View file @
b9e0c95b
...
@@ -64,7 +64,7 @@ Abc_Lib_t * Abc_LibCreate( char * pName )
...
@@ -64,7 +64,7 @@ Abc_Lib_t * Abc_LibCreate( char * pName )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
)
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtkSave
)
{
{
Abc_Ntk_t
*
pNtk
;
Abc_Ntk_t
*
pNtk
;
int
i
;
int
i
;
...
@@ -79,6 +79,8 @@ void Abc_LibFree( Abc_Lib_t * pLib )
...
@@ -79,6 +79,8 @@ void Abc_LibFree( Abc_Lib_t * pLib )
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
{
{
// pNtk->pManFunc = NULL;
// pNtk->pManFunc = NULL;
if
(
pNtk
==
pNtkSave
)
continue
;
Abc_NtkDelete
(
pNtk
);
Abc_NtkDelete
(
pNtk
);
}
}
Vec_PtrFree
(
pLib
->
vModules
);
Vec_PtrFree
(
pLib
->
vModules
);
...
@@ -108,11 +110,15 @@ void Abc_LibPrint( Abc_Lib_t * pLib )
...
@@ -108,11 +110,15 @@ void Abc_LibPrint( Abc_Lib_t * pLib )
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
{
{
printf
(
"%2d : %20s "
,
i
+
1
,
pNtk
->
pName
);
printf
(
"%2d : %20s "
,
i
+
1
,
pNtk
->
pName
);
printf
(
"nd = %6d lat = %6d box = %3d
\n
"
,
Abc_NtkNodeNum
(
pNtk
),
Abc_NtkLatchNum
(
pNtk
),
Abc_NtkBlackboxNum
(
pNtk
)
);
printf
(
"nd = %6d lat = %6d whitebox = %3d blackbox = %3d
\n
"
,
Abc_NtkNodeNum
(
pNtk
),
Abc_NtkLatchNum
(
pNtk
),
Abc_NtkWhiteboxNum
(
pNtk
),
Abc_NtkBlackboxNum
(
pNtk
)
);
if
(
Abc_NtkBlackboxNum
(
pNtk
)
==
0
)
if
(
Abc_NtkBlackboxNum
(
pNtk
)
==
0
)
continue
;
continue
;
Abc_NtkForEachWhitebox
(
pNtk
,
pObj
,
k
)
printf
(
" %20s (whitebox)
\n
"
,
Abc_NtkName
(
pObj
->
pData
)
);
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
k
)
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
k
)
printf
(
" %20s (
submodel
)
\n
"
,
Abc_NtkName
(
pObj
->
pData
)
);
printf
(
" %20s (
blackbox
)
\n
"
,
Abc_NtkName
(
pObj
->
pData
)
);
}
}
}
}
...
...
src/base/abc/abcNames.c
View file @
b9e0c95b
...
@@ -414,9 +414,9 @@ void Abc_NtkAddDummyAssertNames( Abc_Ntk_t * pNtk )
...
@@ -414,9 +414,9 @@ void Abc_NtkAddDummyAssertNames( Abc_Ntk_t * pNtk )
***********************************************************************/
***********************************************************************/
void
Abc_NtkAddDummyBoxNames
(
Abc_Ntk_t
*
pNtk
)
void
Abc_NtkAddDummyBoxNames
(
Abc_Ntk_t
*
pNtk
)
{
{
Abc_Obj_t
*
pObj
,
*
pTerm
;
Abc_Obj_t
*
pObj
;
int
nDigits
,
nDigitsF
,
i
,
k
;
int
nDigits
,
i
;
char
*
pName
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
)
;
nDigits
=
Extra_Base10Log
(
Abc_NtkLatchNum
(
pNtk
)
);
nDigits
=
Extra_Base10Log
(
Abc_NtkLatchNum
(
pNtk
)
);
Abc_NtkForEachLatch
(
pNtk
,
pObj
,
i
)
Abc_NtkForEachLatch
(
pNtk
,
pObj
,
i
)
{
{
...
@@ -424,14 +424,7 @@ void Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk )
...
@@ -424,14 +424,7 @@ void Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk )
Abc_ObjAssignName
(
Abc_ObjFanin0
(
pObj
),
Abc_ObjNameDummy
(
"Li"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanin0
(
pObj
),
Abc_ObjNameDummy
(
"Li"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanout0
(
pObj
),
Abc_ObjNameDummy
(
"Lo"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanout0
(
pObj
),
Abc_ObjNameDummy
(
"Lo"
,
i
,
nDigits
),
NULL
);
}
}
nDigits
=
Extra_Base10Log
(
Abc_NtkTriNum
(
pNtk
)
);
/*
Abc_NtkForEachTri
(
pNtk
,
pObj
,
i
)
{
Abc_ObjAssignName
(
pObj
,
Abc_ObjNameDummy
(
"T"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanin0
(
pObj
),
Abc_ObjNameDummy
(
"Ti0"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanin1
(
pObj
),
Abc_ObjNameDummy
(
"Ti1"
,
i
,
nDigits
),
NULL
);
Abc_ObjAssignName
(
Abc_ObjFanout0
(
pObj
),
Abc_ObjNameDummy
(
"To"
,
i
,
nDigits
),
NULL
);
}
nDigits = Extra_Base10Log( Abc_NtkBlackboxNum(pNtk) );
nDigits = Extra_Base10Log( Abc_NtkBlackboxNum(pNtk) );
Abc_NtkForEachBlackbox( pNtk, pObj, i )
Abc_NtkForEachBlackbox( pNtk, pObj, i )
{
{
...
@@ -443,6 +436,7 @@ void Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk )
...
@@ -443,6 +436,7 @@ void Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk )
Abc_ObjForEachFanout( pObj, pTerm, k )
Abc_ObjForEachFanout( pObj, pTerm, k )
Abc_ObjAssignName( Abc_ObjFanin0(pObj), pName, Abc_ObjNameDummy("o", k, nDigitsF) );
Abc_ObjAssignName( Abc_ObjFanin0(pObj), pName, Abc_ObjNameDummy("o", k, nDigitsF) );
}
}
*/
}
}
/**Function*************************************************************
/**Function*************************************************************
...
...
src/base/abc/abcNetlist.c
View file @
b9e0c95b
...
@@ -49,7 +49,8 @@ Abc_Ntk_t * Abc_NtkNetlistToLogic( Abc_Ntk_t * pNtk )
...
@@ -49,7 +49,8 @@ Abc_Ntk_t * Abc_NtkNetlistToLogic( Abc_Ntk_t * pNtk )
int
i
,
k
;
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// consider simple case when there is hierarchy
// consider simple case when there is hierarchy
assert
(
pNtk
->
tName2Model
==
NULL
);
assert
(
pNtk
->
pDesign
==
NULL
);
// assert( pNtk->tName2Model == NULL );
// if ( pNtk->tName2Model )
// if ( pNtk->tName2Model )
// return Abc_NtkNetlistToLogicHie( pNtk );
// return Abc_NtkNetlistToLogicHie( pNtk );
// start the network
// start the network
...
...
src/base/abc/abcNtk.c
View file @
b9e0c95b
...
@@ -840,17 +840,13 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
...
@@ -840,17 +840,13 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
else
if
(
!
Abc_NtkHasBlackbox
(
pNtk
)
)
else
if
(
!
Abc_NtkHasBlackbox
(
pNtk
)
)
assert
(
0
);
assert
(
0
);
// free the hierarchy
// free the hierarchy
if
(
Abc_NtkIsNetlist
(
pNtk
)
&&
pNtk
->
tName2Model
)
if
(
pNtk
->
pDesign
)
{
{
stmm_generator
*
gen
;
Abc_LibFree
(
pNtk
->
pDesign
,
pNtk
);
Abc_Ntk_t
*
pNtkTemp
;
pNtk
->
pDesign
=
NULL
;
char
*
pName
;
stmm_foreach_item
(
pNtk
->
tName2Model
,
gen
,
&
pName
,
(
char
**
)
&
pNtkTemp
)
Abc_NtkDelete
(
pNtkTemp
);
stmm_free_table
(
pNtk
->
tName2Model
);
}
}
if
(
pNtk
->
pBlackBoxes
)
//
if ( pNtk->pBlackBoxes )
Vec_IntFree
(
pNtk
->
pBlackBoxes
);
//
Vec_IntFree( pNtk->pBlackBoxes );
// free node attributes
// free node attributes
Vec_PtrForEachEntry
(
pNtk
->
vAttrs
,
pAttrMan
,
i
)
Vec_PtrForEachEntry
(
pNtk
->
vAttrs
,
pAttrMan
,
i
)
if
(
pAttrMan
)
if
(
pAttrMan
)
...
@@ -879,7 +875,7 @@ void Abc_NtkFixNonDrivenNets( Abc_Ntk_t * pNtk )
...
@@ -879,7 +875,7 @@ void Abc_NtkFixNonDrivenNets( Abc_Ntk_t * pNtk )
if
(
Abc_NtkNodeNum
(
pNtk
)
==
0
)
if
(
Abc_NtkNodeNum
(
pNtk
)
==
0
)
{
{
pNtk
->
ntkFunc
=
ABC_FUNC_BLACKBOX
;
//
pNtk->ntkFunc = ABC_FUNC_BLACKBOX;
return
;
return
;
}
}
...
...
src/base/abc/abcObj.c
View file @
b9e0c95b
...
@@ -140,11 +140,10 @@ Abc_Obj_t * Abc_NtkCreateObj( Abc_Ntk_t * pNtk, Abc_ObjType_t Type )
...
@@ -140,11 +140,10 @@ Abc_Obj_t * Abc_NtkCreateObj( Abc_Ntk_t * pNtk, Abc_ObjType_t Type )
break
;
break
;
case
ABC_OBJ_NET
:
case
ABC_OBJ_NET
:
case
ABC_OBJ_NODE
:
case
ABC_OBJ_NODE
:
case
ABC_OBJ_GATE
:
break
;
break
;
case
ABC_OBJ_LATCH
:
case
ABC_OBJ_LATCH
:
pObj
->
pData
=
(
void
*
)
ABC_INIT_NONE
;
pObj
->
pData
=
(
void
*
)
ABC_INIT_NONE
;
case
ABC_OBJ_
TRI
:
case
ABC_OBJ_
WHITEBOX
:
case
ABC_OBJ_BLACKBOX
:
case
ABC_OBJ_BLACKBOX
:
if
(
pNtk
->
vBoxes
)
Vec_PtrPush
(
pNtk
->
vBoxes
,
pObj
);
if
(
pNtk
->
vBoxes
)
Vec_PtrPush
(
pNtk
->
vBoxes
,
pObj
);
break
;
break
;
...
@@ -220,7 +219,6 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
...
@@ -220,7 +219,6 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
Vec_PtrRemove
(
pNtk
->
vCos
,
pObj
);
Vec_PtrRemove
(
pNtk
->
vCos
,
pObj
);
break
;
break
;
case
ABC_OBJ_NET
:
case
ABC_OBJ_NET
:
case
ABC_OBJ_GATE
:
break
;
break
;
case
ABC_OBJ_NODE
:
case
ABC_OBJ_NODE
:
if
(
Abc_NtkHasBdd
(
pNtk
)
)
if
(
Abc_NtkHasBdd
(
pNtk
)
)
...
@@ -228,7 +226,7 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
...
@@ -228,7 +226,7 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
pObj
->
pData
=
NULL
;
pObj
->
pData
=
NULL
;
break
;
break
;
case
ABC_OBJ_LATCH
:
case
ABC_OBJ_LATCH
:
case
ABC_OBJ_
TRI
:
case
ABC_OBJ_
WHITEBOX
:
case
ABC_OBJ_BLACKBOX
:
case
ABC_OBJ_BLACKBOX
:
if
(
pNtk
->
vBoxes
)
Vec_PtrRemove
(
pNtk
->
vBoxes
,
pObj
);
if
(
pNtk
->
vBoxes
)
Vec_PtrRemove
(
pNtk
->
vBoxes
,
pObj
);
break
;
break
;
...
@@ -324,9 +322,15 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName
...
@@ -324,9 +322,15 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName
if
(
fCopyName
)
if
(
fCopyName
)
{
{
if
(
Abc_ObjIsCi
(
pObj
)
)
if
(
Abc_ObjIsCi
(
pObj
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanout0Ntk
(
pObj
)),
NULL
);
{
if
(
!
Abc_NtkIsNetlist
(
pNtkNew
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanout0Ntk
(
pObj
)),
NULL
);
}
else
if
(
Abc_ObjIsCo
(
pObj
)
)
else
if
(
Abc_ObjIsCo
(
pObj
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanin0Ntk
(
pObj
)),
NULL
);
{
if
(
!
Abc_NtkIsNetlist
(
pNtkNew
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanin0Ntk
(
pObj
)),
NULL
);
}
else
if
(
Abc_ObjIsBox
(
pObj
)
||
Abc_ObjIsNet
(
pObj
)
)
else
if
(
Abc_ObjIsBox
(
pObj
)
||
Abc_ObjIsNet
(
pObj
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
pObj
),
NULL
);
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
pObj
),
NULL
);
}
}
...
...
src/base/abc/abcSop.c
View file @
b9e0c95b
...
@@ -840,6 +840,12 @@ char * Abc_SopFromTruthBin( char * pTruth )
...
@@ -840,6 +840,12 @@ char * Abc_SopFromTruthBin( char * pTruth )
if
(
Digit
==
1
)
if
(
Digit
==
1
)
Vec_IntPush
(
vMints
,
nTruthSize
-
1
-
i
);
Vec_IntPush
(
vMints
,
nTruthSize
-
1
-
i
);
}
}
if
(
Vec_IntSize
(
vMints
)
==
0
||
Vec_IntSize
(
vMints
)
==
nTruthSize
)
{
Vec_IntFree
(
vMints
);
printf
(
"Cannot create constant function.
\n
"
);
return
NULL
;
}
// create the SOP representation of the minterms
// create the SOP representation of the minterms
Length
=
Vec_IntSize
(
vMints
)
*
(
nVars
+
3
);
Length
=
Vec_IntSize
(
vMints
)
*
(
nVars
+
3
);
...
...
src/base/abc/abcUtil.c
View file @
b9e0c95b
...
@@ -735,6 +735,12 @@ bool Abc_NtkLogicHasSimpleCos( Abc_Ntk_t * pNtk )
...
@@ -735,6 +735,12 @@ bool Abc_NtkLogicHasSimpleCos( Abc_Ntk_t * pNtk )
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkForEachCo
(
pNtk
,
pNode
,
i
)
Abc_NtkForEachCo
(
pNtk
,
pNode
,
i
)
{
{
/*
if ( strcmp( Abc_ObjName(pNode), "g704" ) == 0 )
{
int s = 1;
}
*/
// if the driver is complemented, this is an error
// if the driver is complemented, this is an error
pDriver
=
Abc_ObjFanin0
(
pNode
);
pDriver
=
Abc_ObjFanin0
(
pNode
);
if
(
Abc_ObjFaninC0
(
pNode
)
)
if
(
Abc_ObjFaninC0
(
pNode
)
)
...
@@ -1564,6 +1570,31 @@ int Abc_NtkCrossCut( Abc_Ntk_t * pNtk )
...
@@ -1564,6 +1570,31 @@ int Abc_NtkCrossCut( Abc_Ntk_t * pNtk )
}
}
/**Function*************************************************************
Synopsis [Prints all 3-var functions.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Abc_NtkPrint256
()
{
FILE
*
pFile
;
int
i
;
pFile
=
fopen
(
"4varfs.txt"
,
"w"
);
for
(
i
=
1
;
i
<
(
1
<<
16
)
-
1
;
i
++
)
{
fprintf
(
pFile
,
"read_truth "
);
Extra_PrintBinary
(
pFile
,
&
i
,
16
);
fprintf
(
pFile
,
"; clp; st; w 1.blif; map; cec 1.blif
\n
"
);
}
fclose
(
pFile
);
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/base/abc/module.make
View file @
b9e0c95b
...
@@ -3,6 +3,7 @@ SRC += src/base/abc/abcAig.c \
...
@@ -3,6 +3,7 @@ SRC += src/base/abc/abcAig.c \
src/base/abc/abcDfs.c
\
src/base/abc/abcDfs.c
\
src/base/abc/abcFanio.c
\
src/base/abc/abcFanio.c
\
src/base/abc/abcFunc.c
\
src/base/abc/abcFunc.c
\
src/base/abc/abcHie.c
\
src/base/abc/abcLatch.c
\
src/base/abc/abcLatch.c
\
src/base/abc/abcLib.c
\
src/base/abc/abcLib.c
\
src/base/abc/abcMinBase.c
\
src/base/abc/abcMinBase.c
\
...
...
src/base/abci/abc.c
View file @
b9e0c95b
...
@@ -288,7 +288,8 @@ void Abc_Init( Abc_Frame_t * pAbc )
...
@@ -288,7 +288,8 @@ void Abc_Init( Abc_Frame_t * pAbc )
// Map_Var3Print();
// Map_Var3Print();
// Map_Var4Test();
// Map_Var4Test();
}
// Abc_NtkPrint256();
}
/**Function*************************************************************
/**Function*************************************************************
...
...
src/base/abci/abcPrint.c
View file @
b9e0c95b
...
@@ -896,14 +896,11 @@ void Abc_ObjPrint( FILE * pFile, Abc_Obj_t * pObj )
...
@@ -896,14 +896,11 @@ void Abc_ObjPrint( FILE * pFile, Abc_Obj_t * pObj )
case
ABC_OBJ_NODE
:
case
ABC_OBJ_NODE
:
fprintf
(
pFile
,
"Node "
);
fprintf
(
pFile
,
"Node "
);
break
;
break
;
case
ABC_OBJ_GATE
:
fprintf
(
pFile
,
"Gate "
);
break
;
case
ABC_OBJ_LATCH
:
case
ABC_OBJ_LATCH
:
fprintf
(
pFile
,
"Latch "
);
fprintf
(
pFile
,
"Latch "
);
break
;
break
;
case
ABC_OBJ_
TRI
:
case
ABC_OBJ_
WHITEBOX
:
fprintf
(
pFile
,
"
Tristate
"
);
fprintf
(
pFile
,
"
Whitebox
"
);
break
;
break
;
case
ABC_OBJ_BLACKBOX
:
case
ABC_OBJ_BLACKBOX
:
fprintf
(
pFile
,
"Blackbox"
);
fprintf
(
pFile
,
"Blackbox"
);
...
...
src/base/abci/abcStrash.c
View file @
b9e0c95b
...
@@ -218,7 +218,6 @@ int Abc_NtkAppend( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fAddPos )
...
@@ -218,7 +218,6 @@ int Abc_NtkAppend( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fAddPos )
***********************************************************************/
***********************************************************************/
void
Abc_NtkStrashPerform
(
Abc_Ntk_t
*
pNtkOld
,
Abc_Ntk_t
*
pNtkNew
,
bool
fAllNodes
)
void
Abc_NtkStrashPerform
(
Abc_Ntk_t
*
pNtkOld
,
Abc_Ntk_t
*
pNtkNew
,
bool
fAllNodes
)
{
{
extern
Vec_Ptr_t
*
Abc_NtkDfsIter
(
Abc_Ntk_t
*
pNtk
,
int
fCollectAll
);
ProgressBar
*
pProgress
;
ProgressBar
*
pProgress
;
Vec_Ptr_t
*
vNodes
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pNodeOld
;
Abc_Obj_t
*
pNodeOld
;
...
...
src/base/cmd/cmd.c
View file @
b9e0c95b
...
@@ -1271,7 +1271,7 @@ int CmdCommandSis( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1271,7 +1271,7 @@ int CmdCommandSis( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
goto
usage
;
}
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_sis_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_sis_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
Abc_NtkDelete
(
pNetlist
);
// create the file for sis
// create the file for sis
...
@@ -1412,7 +1412,7 @@ int CmdCommandMvsis( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1412,7 +1412,7 @@ int CmdCommandMvsis( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
goto
usage
;
}
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_mvsis_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_mvsis_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
Abc_NtkDelete
(
pNetlist
);
// create the file for MVSIS
// create the file for MVSIS
...
@@ -1558,7 +1558,7 @@ int CmdCommandCapo( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1558,7 +1558,7 @@ int CmdCommandCapo( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
goto
usage
;
}
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_capo_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_capo_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
Abc_NtkDelete
(
pNetlist
);
// create the file for Capo
// create the file for Capo
...
...
src/base/io/io.c
View file @
b9e0c95b
...
@@ -40,6 +40,7 @@ static int IoCommandReadVer ( Abc_Frame_t * pAbc, int argc, char **argv );
...
@@ -40,6 +40,7 @@ static int IoCommandReadVer ( Abc_Frame_t * pAbc, int argc, char **argv );
static
int
IoCommandReadVerLib
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandReadVerLib
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWrite
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWrite
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteHie
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteAiger
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteAiger
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteBaf
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteBaf
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteBlif
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
static
int
IoCommandWriteBlif
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
);
...
@@ -75,7 +76,7 @@ extern Abc_Lib_t * Ver_ParseFile( char * pFileName, Abc_Lib_t * pGateLib, int fC
...
@@ -75,7 +76,7 @@ extern Abc_Lib_t * Ver_ParseFile( char * pFileName, Abc_Lib_t * pGateLib, int fC
void
Io_Init
(
Abc_Frame_t
*
pAbc
)
void
Io_Init
(
Abc_Frame_t
*
pAbc
)
{
{
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read"
,
IoCommandRead
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read"
,
IoCommandRead
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"r
h"
,
IoCommandReadHie
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"r
ead_hie"
,
IoCommandReadHie
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_aiger"
,
IoCommandReadAiger
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_aiger"
,
IoCommandReadAiger
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_baf"
,
IoCommandReadBaf
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_baf"
,
IoCommandReadBaf
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_blif"
,
IoCommandReadBlif
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_blif"
,
IoCommandReadBlif
,
1
);
...
@@ -89,6 +90,7 @@ void Io_Init( Abc_Frame_t * pAbc )
...
@@ -89,6 +90,7 @@ void Io_Init( Abc_Frame_t * pAbc )
// Cmd_CommandAdd( pAbc, "I/O", "read_verlib", IoCommandReadVerLib, 0 );
// Cmd_CommandAdd( pAbc, "I/O", "read_verlib", IoCommandReadVerLib, 0 );
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write"
,
IoCommandWrite
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write"
,
IoCommandWrite
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_hie"
,
IoCommandWriteHie
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_aiger"
,
IoCommandWriteAiger
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_aiger"
,
IoCommandWriteAiger
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_baf"
,
IoCommandWriteBaf
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_baf"
,
IoCommandWriteBaf
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_blif"
,
IoCommandWriteBlif
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_blif"
,
IoCommandWriteBlif
,
0
);
...
@@ -169,6 +171,7 @@ usage:
...
@@ -169,6 +171,7 @@ usage:
fprintf
(
pAbc
->
Err
,
"usage: read [-ch] <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"usage: read [-ch] <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
replaces the current network by the network read from <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
replaces the current network by the network read from <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
by calling the parser that matches the extension of <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
by calling the parser that matches the extension of <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
(to read a hierarchical design, use
\"
read_hie
\"
)
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
-c : toggle network check after reading [default = %s]
\n
"
,
fCheck
?
"yes"
:
"no"
);
fprintf
(
pAbc
->
Err
,
"
\t
-c : toggle network check after reading [default = %s]
\n
"
,
fCheck
?
"yes"
:
"no"
);
fprintf
(
pAbc
->
Err
,
"
\t
-h : prints the command summary
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
-h : prints the command summary
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
file : the name of a file to read
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
file : the name of a file to read
\n
"
);
...
@@ -190,7 +193,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -190,7 +193,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
{
{
Abc_Ntk_t
*
pNtk
;
Abc_Ntk_t
*
pNtk
;
char
*
pFileName
;
char
*
pFileName
;
int
fCheck
,
fBlifMv
;
int
fCheck
;
int
c
;
int
c
;
fCheck
=
1
;
fCheck
=
1
;
...
@@ -213,18 +216,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -213,18 +216,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
// get the input file name
// get the input file name
pFileName
=
argv
[
globalUtilOptind
];
pFileName
=
argv
[
globalUtilOptind
];
// read the file using the corresponding file reader
// read the file using the corresponding file reader
// pNtk = Io_Read( pFileName, Io_ReadFileType(pFileName), fCheck );
pNtk
=
Io_ReadHie
(
pFileName
,
Io_ReadFileType
(
pFileName
),
fCheck
);
if
(
Io_ReadFileType
(
pFileName
)
==
IO_FILE_BLIFMV
)
fBlifMv
=
1
;
else
if
(
Io_ReadFileType
(
pFileName
)
==
IO_FILE_BLIF
)
fBlifMv
=
0
;
else
{
printf
(
"Wrong file type.
\n
"
);
return
1
;
}
Io_ReadBlifMv
(
pFileName
,
fBlifMv
,
fCheck
);
pNtk
=
NULL
;
if
(
pNtk
==
NULL
)
if
(
pNtk
==
NULL
)
return
0
;
return
0
;
// replace the current network
// replace the current network
...
@@ -232,7 +224,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -232,7 +224,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
return
0
;
usage:
usage:
fprintf
(
pAbc
->
Err
,
"usage: r
h
[-ch] <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"usage: r
ead_hie
[-ch] <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
reads hierarchical design represented in BLIF or BLIF-MV
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
reads hierarchical design represented in BLIF or BLIF-MV
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
by calling the parser that matches the extension of <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
by calling the parser that matches the extension of <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
-c : toggle network check after reading [default = %s]
\n
"
,
fCheck
?
"yes"
:
"no"
);
fprintf
(
pAbc
->
Err
,
"
\t
-c : toggle network check after reading [default = %s]
\n
"
,
fCheck
?
"yes"
:
"no"
);
...
@@ -820,7 +812,7 @@ int IoCommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -820,7 +812,7 @@ int IoCommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
// derive root design
// derive root design
pNtk
=
Abc_LibDeriveRoot
(
pDesign
);
pNtk
=
Abc_LibDeriveRoot
(
pDesign
);
Abc_LibFree
(
pDesign
);
Abc_LibFree
(
pDesign
,
NULL
);
if
(
pNtk
==
NULL
)
if
(
pNtk
==
NULL
)
{
{
fprintf
(
pAbc
->
Err
,
"Deriving root module has failed.
\n
"
);
fprintf
(
pAbc
->
Err
,
"Deriving root module has failed.
\n
"
);
...
@@ -910,7 +902,7 @@ int IoCommandReadVerLib( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -910,7 +902,7 @@ int IoCommandReadVerLib( Abc_Frame_t * pAbc, int argc, char ** argv )
printf
(
"The library contains %d gates.
\n
"
,
st_count
(
pLibrary
->
tModules
)
);
printf
(
"The library contains %d gates.
\n
"
,
st_count
(
pLibrary
->
tModules
)
);
// free old library
// free old library
if
(
Abc_FrameReadLibVer
()
)
if
(
Abc_FrameReadLibVer
()
)
Abc_LibFree
(
Abc_FrameReadLibVer
()
);
Abc_LibFree
(
Abc_FrameReadLibVer
()
,
NULL
);
// read new library
// read new library
Abc_FrameSetLibVer
(
pLibrary
);
Abc_FrameSetLibVer
(
pLibrary
);
return
0
;
return
0
;
...
@@ -980,6 +972,53 @@ usage:
...
@@ -980,6 +972,53 @@ usage:
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
int
IoCommandWriteHie
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
char
*
pBaseName
,
*
pFileName
;
int
c
;
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"h"
)
)
!=
EOF
)
{
switch
(
c
)
{
case
'h'
:
goto
usage
;
default:
goto
usage
;
}
}
if
(
argc
!=
globalUtilOptind
+
2
)
goto
usage
;
// get the output file name
pBaseName
=
argv
[
globalUtilOptind
];
pFileName
=
argv
[
globalUtilOptind
+
1
];
// call the corresponding file writer
// Io_Write( pAbc->pNtkCur, pFileName, Io_ReadFileType(pFileName) );
Io_WriteHie
(
pAbc
->
pNtkCur
,
pFileName
,
Io_ReadFileType
(
pFileName
),
pBaseName
);
return
0
;
usage:
fprintf
(
pAbc
->
Err
,
"usage: write_hie [-h] <orig> <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
writes the current network into <file> by calling
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
the hierarchical writer that matches the extension of <file>
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
-h : print the help massage
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
orig : the name of the original file with the hierarchical design
\n
"
);
fprintf
(
pAbc
->
Err
,
"
\t
file : the name of the file to write
\n
"
);
return
1
;
}
/**Function*************************************************************
Synopsis []
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
IoCommandWriteAiger
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
int
IoCommandWriteAiger
(
Abc_Frame_t
*
pAbc
,
int
argc
,
char
**
argv
)
{
{
char
*
pFileName
;
char
*
pFileName
;
...
...
src/base/io/io.h
View file @
b9e0c95b
...
@@ -75,7 +75,7 @@ extern Abc_Ntk_t * Io_ReadBaf( char * pFileName, int fCheck );
...
@@ -75,7 +75,7 @@ extern Abc_Ntk_t * Io_ReadBaf( char * pFileName, int fCheck );
/*=== abcReadBlif.c ===========================================================*/
/*=== abcReadBlif.c ===========================================================*/
extern
Abc_Ntk_t
*
Io_ReadBlif
(
char
*
pFileName
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_ReadBlif
(
char
*
pFileName
,
int
fCheck
);
/*=== abcReadBlifMv.c =========================================================*/
/*=== abcReadBlifMv.c =========================================================*/
extern
Abc_
Lib
_t
*
Io_ReadBlifMv
(
char
*
pFileName
,
int
fBlifMv
,
int
fCheck
);
extern
Abc_
Ntk
_t
*
Io_ReadBlifMv
(
char
*
pFileName
,
int
fBlifMv
,
int
fCheck
);
/*=== abcReadBench.c ==========================================================*/
/*=== abcReadBench.c ==========================================================*/
extern
Abc_Ntk_t
*
Io_ReadBench
(
char
*
pFileName
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_ReadBench
(
char
*
pFileName
,
int
fCheck
);
/*=== abcReadEdif.c ===========================================================*/
/*=== abcReadEdif.c ===========================================================*/
...
@@ -92,7 +92,7 @@ extern void Io_WriteAiger( Abc_Ntk_t * pNtk, char * pFileName );
...
@@ -92,7 +92,7 @@ extern void Io_WriteAiger( Abc_Ntk_t * pNtk, char * pFileName );
extern
void
Io_WriteBaf
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
);
extern
void
Io_WriteBaf
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
);
/*=== abcWriteBlif.c ==========================================================*/
/*=== abcWriteBlif.c ==========================================================*/
extern
void
Io_WriteBlifLogic
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
int
fWriteLatches
);
extern
void
Io_WriteBlifLogic
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
int
fWriteLatches
);
extern
void
Io_WriteBlif
Netlist
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
int
fWriteLatches
);
extern
void
Io_WriteBlif
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
int
fWriteLatches
);
extern
void
Io_WriteTimingInfo
(
FILE
*
pFile
,
Abc_Ntk_t
*
pNtk
);
extern
void
Io_WriteTimingInfo
(
FILE
*
pFile
,
Abc_Ntk_t
*
pNtk
);
/*=== abcWriteBlifMv.c ==========================================================*/
/*=== abcWriteBlifMv.c ==========================================================*/
extern
void
Io_WriteBlifMvDesign
(
Abc_Lib_t
*
pLib
,
char
*
FileName
);
extern
void
Io_WriteBlifMvDesign
(
Abc_Lib_t
*
pLib
,
char
*
FileName
);
...
@@ -119,7 +119,9 @@ extern void Io_WriteVerilog( Abc_Ntk_t * pNtk, char * FileName, in
...
@@ -119,7 +119,9 @@ extern void Io_WriteVerilog( Abc_Ntk_t * pNtk, char * FileName, in
extern
Io_FileType_t
Io_ReadFileType
(
char
*
pFileName
);
extern
Io_FileType_t
Io_ReadFileType
(
char
*
pFileName
);
extern
Abc_Ntk_t
*
Io_ReadNetlist
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_ReadNetlist
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_Read
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_Read
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
);
extern
Abc_Ntk_t
*
Io_ReadHie
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
);
extern
void
Io_Write
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
Io_FileType_t
FileType
);
extern
void
Io_Write
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
Io_FileType_t
FileType
);
extern
void
Io_WriteHie
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
Io_FileType_t
FileType
,
char
*
pBaseName
);
extern
Abc_Obj_t
*
Io_ReadCreatePi
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
extern
Abc_Obj_t
*
Io_ReadCreatePi
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
extern
Abc_Obj_t
*
Io_ReadCreatePo
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
extern
Abc_Obj_t
*
Io_ReadCreatePo
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
extern
Abc_Obj_t
*
Io_ReadCreateAssert
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
extern
Abc_Obj_t
*
Io_ReadCreateAssert
(
Abc_Ntk_t
*
pNtk
,
char
*
pName
);
...
...
src/base/io/ioReadBlif.c
View file @
b9e0c95b
...
@@ -157,6 +157,7 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
...
@@ -157,6 +157,7 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
p
->
pNtkMaster
=
pNtkMaster
=
pNtk
;
p
->
pNtkMaster
=
pNtkMaster
=
pNtk
;
continue
;
continue
;
}
}
/*
// make sure hierarchy does not have the network with this name
// make sure hierarchy does not have the network with this name
if ( pNtkMaster->tName2Model && stmm_is_member( pNtkMaster->tName2Model, pNtk->pName ) )
if ( pNtkMaster->tName2Model && stmm_is_member( pNtkMaster->tName2Model, pNtk->pName ) )
{
{
...
@@ -172,8 +173,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
...
@@ -172,8 +173,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
if ( pNtkMaster->tName2Model == NULL )
if ( pNtkMaster->tName2Model == NULL )
pNtkMaster->tName2Model = stmm_init_table(strcmp, stmm_strhash);
pNtkMaster->tName2Model = stmm_init_table(strcmp, stmm_strhash);
stmm_insert( pNtkMaster->tName2Model, pNtk->pName, (char *)pNtk );
stmm_insert( pNtkMaster->tName2Model, pNtk->pName, (char *)pNtk );
*/
}
}
/*
// if there is a hierarchy, connect the boxes
// if there is a hierarchy, connect the boxes
if ( pNtkMaster && pNtkMaster->tName2Model )
if ( pNtkMaster && pNtkMaster->tName2Model )
{
{
...
@@ -183,7 +185,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
...
@@ -183,7 +185,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
return NULL;
return NULL;
}
}
}
}
else
if
(
!
p
->
fError
)
else
*/
if
(
!
p
->
fError
)
Abc_NtkFinalizeRead
(
pNtkMaster
);
Abc_NtkFinalizeRead
(
pNtkMaster
);
// return the master network
// return the master network
return
pNtkMaster
;
return
pNtkMaster
;
...
@@ -252,8 +256,8 @@ Abc_Ntk_t * Io_ReadBlifNetworkOne( Io_ReadBlif_t * p )
...
@@ -252,8 +256,8 @@ Abc_Ntk_t * Io_ReadBlifNetworkOne( Io_ReadBlif_t * p )
fStatus
=
Io_ReadBlifNetworkInputArrival
(
p
,
p
->
vTokens
);
fStatus
=
Io_ReadBlifNetworkInputArrival
(
p
,
p
->
vTokens
);
else
if
(
!
strcmp
(
pDirective
,
".default_input_arrival"
)
)
else
if
(
!
strcmp
(
pDirective
,
".default_input_arrival"
)
)
fStatus
=
Io_ReadBlifNetworkDefaultInputArrival
(
p
,
p
->
vTokens
);
fStatus
=
Io_ReadBlifNetworkDefaultInputArrival
(
p
,
p
->
vTokens
);
else
if
(
!
strcmp
(
pDirective
,
".subckt"
)
)
//
else if ( !strcmp( pDirective, ".subckt" ) )
fStatus
=
Io_ReadBlifNetworkSubcircuit
(
p
,
p
->
vTokens
);
//
fStatus = Io_ReadBlifNetworkSubcircuit( p, p->vTokens );
else
if
(
!
strcmp
(
pDirective
,
".exdc"
)
)
else
if
(
!
strcmp
(
pDirective
,
".exdc"
)
)
break
;
break
;
else
if
(
!
strcmp
(
pDirective
,
".end"
)
)
else
if
(
!
strcmp
(
pDirective
,
".end"
)
)
...
@@ -1064,6 +1068,8 @@ int Io_ReadBlifNetworkConnectBoxesOne( Io_ReadBlif_t * p, Abc_Ntk_t * pNtk, stmm
...
@@ -1064,6 +1068,8 @@ int Io_ReadBlifNetworkConnectBoxesOne( Io_ReadBlif_t * p, Abc_Ntk_t * pNtk, stmm
return
0
;
return
0
;
}
}
#if 0
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Connect the boxes in the hierarchy of networks.]
Synopsis [Connect the boxes in the hierarchy of networks.]
...
@@ -1090,6 +1096,8 @@ int Io_ReadBlifNetworkConnectBoxes( Io_ReadBlif_t * p, Abc_Ntk_t * pNtkMaster )
...
@@ -1090,6 +1096,8 @@ int Io_ReadBlifNetworkConnectBoxes( Io_ReadBlif_t * p, Abc_Ntk_t * pNtkMaster )
return 0;
return 0;
}
}
#endif
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
...
...
src/base/io/ioReadBlifMv.c
View file @
b9e0c95b
...
@@ -119,12 +119,12 @@ extern void Abc_NtkStartMvVars( Abc_Ntk_t * pNtk );
...
@@ -119,12 +119,12 @@ extern void Abc_NtkStartMvVars( Abc_Ntk_t * pNtk );
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Abc_
Lib
_t
*
Io_ReadBlifMv
(
char
*
pFileName
,
int
fBlifMv
,
int
fCheck
)
Abc_
Ntk
_t
*
Io_ReadBlifMv
(
char
*
pFileName
,
int
fBlifMv
,
int
fCheck
)
{
{
FILE
*
pFile
;
FILE
*
pFile
;
Io_MvMan_t
*
p
;
Io_MvMan_t
*
p
;
Abc_Lib_t
*
pDesign
;
Abc_Ntk_t
*
pNtk
;
Abc_Ntk_t
*
pNtk
;
Abc_Lib_t
*
pDesign
;
char
*
pDesignName
;
char
*
pDesignName
;
int
i
;
int
i
;
...
@@ -171,18 +171,33 @@ Abc_Lib_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck )
...
@@ -171,18 +171,33 @@ Abc_Lib_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck )
if
(
!
Abc_NtkCheckRead
(
pNtk
)
)
if
(
!
Abc_NtkCheckRead
(
pNtk
)
)
{
{
printf
(
"Io_ReadBlifMv: The network check has failed for network %s.
\n
"
,
pNtk
->
pName
);
printf
(
"Io_ReadBlifMv: The network check has failed for network %s.
\n
"
,
pNtk
->
pName
);
Abc_LibFree
(
pDesign
);
Abc_LibFree
(
pDesign
,
NULL
);
return
NULL
;
return
NULL
;
}
}
}
}
}
}
// pDesign should be linked to all models of the design
// pDesign should be linked to all models of the design
Io_WriteBlifMvDesign
(
pDesign
,
"_temp_.mv"
);
// extract the master network
Abc_LibPrint
(
pDesign
);
pNtk
=
Vec_PtrEntry
(
pDesign
->
vModules
,
0
);
Abc_LibFree
(
pDesign
);
pNtk
->
pDesign
=
pDesign
;
return
NULL
;
// return pDesign;
// verify the design for cyclic dependence
assert
(
Vec_PtrSize
(
pDesign
->
vModules
)
>
0
);
if
(
Vec_PtrSize
(
pDesign
->
vModules
)
==
1
)
{
printf
(
"Warning: The design is not hierarchical.
\n
"
);
Abc_LibFree
(
pDesign
,
pNtk
);
pNtk
->
pDesign
=
NULL
;
}
else
Abc_NtkIsAcyclicHierarchy
(
pNtk
);
//Io_WriteBlifMvDesign( pDesign, "_temp_.mv" );
//Abc_LibPrint( pDesign );
//Abc_LibFree( pDesign );
//return NULL;
return
pNtk
;
}
}
/**Function*************************************************************
/**Function*************************************************************
...
@@ -225,7 +240,7 @@ static void Io_MvFree( Io_MvMan_t * p )
...
@@ -225,7 +240,7 @@ static void Io_MvFree( Io_MvMan_t * p )
Io_MvMod_t
*
pMod
;
Io_MvMod_t
*
pMod
;
int
i
;
int
i
;
if
(
p
->
pDesign
)
if
(
p
->
pDesign
)
Abc_LibFree
(
p
->
pDesign
);
Abc_LibFree
(
p
->
pDesign
,
NULL
);
if
(
p
->
pBuffer
)
if
(
p
->
pBuffer
)
free
(
p
->
pBuffer
);
free
(
p
->
pBuffer
);
if
(
p
->
vLines
)
if
(
p
->
vLines
)
...
@@ -899,7 +914,10 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine )
...
@@ -899,7 +914,10 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine )
ppNames
=
(
char
**
)
Vec_PtrArray
(
vTokens
)
+
2
+
p
->
pMan
->
fBlifMv
;
ppNames
=
(
char
**
)
Vec_PtrArray
(
vTokens
)
+
2
+
p
->
pMan
->
fBlifMv
;
// create the box with these terminals
// create the box with these terminals
pBox
=
Abc_NtkCreateBlackbox
(
p
->
pNtk
);
if
(
Abc_NtkHasBlackbox
(
pModel
)
)
pBox
=
Abc_NtkCreateBlackbox
(
p
->
pNtk
);
else
pBox
=
Abc_NtkCreateWhitebox
(
p
->
pNtk
);
pBox
->
pData
=
pModel
;
pBox
->
pData
=
pModel
;
if
(
p
->
pMan
->
fBlifMv
)
if
(
p
->
pMan
->
fBlifMv
)
Abc_ObjAssignName
(
pBox
,
Vec_PtrEntry
(
vTokens
,
2
),
NULL
);
Abc_ObjAssignName
(
pBox
,
Vec_PtrEntry
(
vTokens
,
2
),
NULL
);
...
...
src/base/io/ioUtil.c
View file @
b9e0c95b
...
@@ -179,6 +179,69 @@ Abc_Ntk_t * Io_Read( char * pFileName, Io_FileType_t FileType, int fCheck )
...
@@ -179,6 +179,69 @@ Abc_Ntk_t * Io_Read( char * pFileName, Io_FileType_t FileType, int fCheck )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Read the network from a file.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
Abc_Ntk_t
*
Io_ReadHie
(
char
*
pFileName
,
Io_FileType_t
FileType
,
int
fCheck
)
{
Abc_Ntk_t
*
pNtk
,
*
pTemp
;
// detect the file type
if
(
Io_ReadFileType
(
pFileName
)
==
IO_FILE_BLIF
)
pNtk
=
Io_ReadBlifMv
(
pFileName
,
0
,
fCheck
);
// else if ( Io_ReadFileType(pFileName) == IO_FILE_BLIFMV )
// pNtk = Io_ReadBlifMv( pFileName, 1, fCheck );
else
{
printf
(
"Wrong file type.
\n
"
);
return
NULL
;
}
if
(
pNtk
==
NULL
)
return
NULL
;
// printf( "\n" );
// flatten logic hierarchy
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
if
(
Abc_NtkWhiteboxNum
(
pNtk
)
>
0
)
{
pNtk
=
Abc_NtkFlattenLogicHierarchy
(
pTemp
=
pNtk
);
Abc_NtkDelete
(
pTemp
);
if
(
pNtk
==
NULL
)
{
fprintf
(
stdout
,
"Flattening logic hierarchy has failed.
\n
"
);
return
NULL
;
}
}
// convert blackboxes
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
printf
(
"Hierarchical parser is converting %d blackboxes.
\n
"
,
Abc_NtkBlackboxNum
(
pNtk
)
);
pNtk
=
Abc_NtkConvertBlackboxes
(
pTemp
=
pNtk
);
Abc_NtkDelete
(
pTemp
);
if
(
pNtk
==
NULL
)
{
fprintf
(
stdout
,
"Converting blackboxes has failed.
\n
"
);
return
NULL
;
}
}
// convert the netlist into the logic network
pNtk
=
Abc_NtkNetlistToLogic
(
pTemp
=
pNtk
);
Abc_NtkDelete
(
pTemp
);
if
(
pNtk
==
NULL
)
{
fprintf
(
stdout
,
"Converting netlist to logic network after reading has failed.
\n
"
);
return
NULL
;
}
return
pNtk
;
}
/**Function*************************************************************
Synopsis [Write the network into file.]
Synopsis [Write the network into file.]
Description []
Description []
...
@@ -269,7 +332,7 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
...
@@ -269,7 +332,7 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
return
;
return
;
}
}
if
(
FileType
==
IO_FILE_BLIF
)
if
(
FileType
==
IO_FILE_BLIF
)
Io_WriteBlif
Netlist
(
pNtkTemp
,
pFileName
,
1
);
Io_WriteBlif
(
pNtkTemp
,
pFileName
,
1
);
else
if
(
FileType
==
IO_FILE_BENCH
)
else
if
(
FileType
==
IO_FILE_BENCH
)
Io_WriteBench
(
pNtkTemp
,
pFileName
);
Io_WriteBench
(
pNtkTemp
,
pFileName
);
else
if
(
FileType
==
IO_FILE_PLA
)
else
if
(
FileType
==
IO_FILE_PLA
)
...
@@ -293,6 +356,63 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
...
@@ -293,6 +356,63 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Write the network into file.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Io_WriteHie
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
,
Io_FileType_t
FileType
,
char
*
pBaseName
)
{
Abc_Ntk_t
*
pNtkTemp
,
*
pNtkBase
,
*
pNtkResult
;
// check if the current network is available
if
(
pNtk
==
NULL
)
{
fprintf
(
stdout
,
"Empty network.
\n
"
);
return
;
}
// check if the file extension if given
if
(
FileType
==
IO_FILE_NONE
||
FileType
==
IO_FILE_UNKNOWN
)
{
fprintf
(
stdout
,
"The generic file writer requires a known file extension.
\n
"
);
return
;
}
// write the AIG formats
if
(
FileType
==
IO_FILE_BLIF
)
{
pNtkBase
=
Io_ReadBlifMv
(
pBaseName
,
0
,
1
);
if
(
Abc_NtkWhiteboxNum
(
pNtk
)
>
0
)
{
pNtkBase
=
Abc_NtkFlattenLogicHierarchy
(
pNtkTemp
=
pNtkBase
);
Abc_NtkDelete
(
pNtkTemp
);
}
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
pNtkResult
=
Abc_NtkLogicToNetlist
(
pNtk
,
0
);
pNtkResult
=
Abc_NtkInsertNewLogic
(
pNtkBase
,
pNtkTemp
=
pNtkResult
);
Abc_NtkDelete
(
pNtkTemp
);
printf
(
"Hierarchy writer reintroduced %d blackboxes.
\n
"
,
Abc_NtkBlackboxNum
(
pNtk
)
);
}
else
{
printf
(
"Warning: The output network does not contain blackboxes.
\n
"
);
pNtkResult
=
Abc_NtkLogicToNetlist
(
pNtk
,
0
);
}
Abc_NtkDelete
(
pNtkBase
);
if
(
pNtkResult
==
NULL
)
return
;
Io_WriteBlif
(
pNtkResult
,
pFileName
,
0
);
Abc_NtkDelete
(
pNtkResult
);
}
else
fprintf
(
stderr
,
"Unknown file format.
\n
"
);
}
/**Function*************************************************************
Synopsis [Creates PI terminal and net.]
Synopsis [Creates PI terminal and net.]
Description []
Description []
...
...
src/base/io/ioWriteBlif.c
View file @
b9e0c95b
...
@@ -61,7 +61,7 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
...
@@ -61,7 +61,7 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
fprintf
(
stdout
,
"Writing BLIF has failed.
\n
"
);
fprintf
(
stdout
,
"Writing BLIF has failed.
\n
"
);
return
;
return
;
}
}
Io_WriteBlif
Netlist
(
pNtkTemp
,
FileName
,
fWriteLatches
);
Io_WriteBlif
(
pNtkTemp
,
FileName
,
fWriteLatches
);
Abc_NtkDelete
(
pNtkTemp
);
Abc_NtkDelete
(
pNtkTemp
);
}
}
...
@@ -76,28 +76,34 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
...
@@ -76,28 +76,34 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Io_WriteBlif
Netlist
(
Abc_Ntk_t
*
pNtk
,
char
*
FileName
,
int
fWriteLatches
)
void
Io_WriteBlif
(
Abc_Ntk_t
*
pNtk
,
char
*
FileName
,
int
fWriteLatches
)
{
{
stmm_generator
*
gen
;
Abc_Ntk_t
*
pNtkTemp
;
FILE
*
pFile
;
FILE
*
pFile
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// start writing the file
// start writing the file
pFile
=
fopen
(
FileName
,
"w"
);
pFile
=
fopen
(
FileName
,
"w"
);
if
(
pFile
==
NULL
)
if
(
pFile
==
NULL
)
{
{
fprintf
(
stdout
,
"Io_WriteBlif
Netlist
(): Cannot open the output file.
\n
"
);
fprintf
(
stdout
,
"Io_WriteBlif(): Cannot open the output file.
\n
"
);
return
;
return
;
}
}
fprintf
(
pFile
,
"# Benchmark
\"
%s
\"
written by ABC on %s
\n
"
,
pNtk
->
pName
,
Extra_TimeStamp
()
);
fprintf
(
pFile
,
"# Benchmark
\"
%s
\"
written by ABC on %s
\n
"
,
pNtk
->
pName
,
Extra_TimeStamp
()
);
// write the master network
// write the master network
Io_NtkWrite
(
pFile
,
pNtk
,
fWriteLatches
);
Io_NtkWrite
(
pFile
,
pNtk
,
fWriteLatches
);
// make sure there is no logic hierarchy
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
// write the hierarchy if present
// write the hierarchy if present
if
(
pNtk
->
tName2Model
)
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
{
fprintf
(
pFile
,
"
\n\n
"
);
Abc_Ntk_t
*
pNtkTemp
;
stmm_foreach_item
(
pNtk
->
tName2Model
,
gen
,
NULL
,
(
char
**
)
&
pNtkTemp
)
Abc_Obj_t
*
pObj
;
int
i
;
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
pNtkTemp
=
pObj
->
pData
;
assert
(
pNtkTemp
!=
NULL
&&
Abc_NtkHasBlackbox
(
pNtkTemp
)
);
Io_NtkWrite
(
pFile
,
pNtkTemp
,
fWriteLatches
);
Io_NtkWrite
(
pFile
,
pNtkTemp
,
fWriteLatches
);
}
}
}
fclose
(
pFile
);
fclose
(
pFile
);
}
}
...
...
src/base/io/ioWriteBlifMv.c
View file @
b9e0c95b
...
@@ -187,7 +187,8 @@ void Io_NtkWriteBlifMvOne( FILE * pFile, Abc_Ntk_t * pNtk )
...
@@ -187,7 +187,8 @@ void Io_NtkWriteBlifMvOne( FILE * pFile, Abc_Ntk_t * pNtk )
}
}
// write the subcircuits
// write the subcircuits
if
(
!
Abc_NtkBlackboxNum
(
pNtk
)
)
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
{
fprintf
(
pFile
,
"
\n
"
);
fprintf
(
pFile
,
"
\n
"
);
Abc_NtkForEachBlackbox
(
pNtk
,
pNode
,
i
)
Abc_NtkForEachBlackbox
(
pNtk
,
pNode
,
i
)
...
...
src/base/main/mainFrame.c
View file @
b9e0c95b
...
@@ -142,7 +142,7 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
...
@@ -142,7 +142,7 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
undefine_cube_size
();
undefine_cube_size
();
Rwt_ManGlobalStop
();
Rwt_ManGlobalStop
();
// Ivy_TruthManStop();
// Ivy_TruthManStop();
if
(
p
->
pLibVer
)
Abc_LibFree
(
p
->
pLibVer
);
if
(
p
->
pLibVer
)
Abc_LibFree
(
p
->
pLibVer
,
NULL
);
if
(
p
->
pManDec
)
Dec_ManStop
(
p
->
pManDec
);
if
(
p
->
pManDec
)
Dec_ManStop
(
p
->
pManDec
);
if
(
p
->
dd
)
Extra_StopManager
(
p
->
dd
);
if
(
p
->
dd
)
Extra_StopManager
(
p
->
dd
);
Abc_FrameDeleteAllNetworks
(
p
);
Abc_FrameDeleteAllNetworks
(
p
);
...
...
src/base/ver/verCore.c
View file @
b9e0c95b
...
@@ -220,7 +220,7 @@ void Ver_ParseFreeData( Ver_Man_t * p )
...
@@ -220,7 +220,7 @@ void Ver_ParseFreeData( Ver_Man_t * p )
}
}
if
(
p
->
pDesign
)
if
(
p
->
pDesign
)
{
{
Abc_LibFree
(
p
->
pDesign
);
Abc_LibFree
(
p
->
pDesign
,
NULL
);
p
->
pDesign
=
NULL
;
p
->
pDesign
=
NULL
;
}
}
}
}
...
...
src/map/mapper/mapperCanon.c
View file @
b9e0c95b
...
@@ -218,7 +218,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
...
@@ -218,7 +218,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
if
(
uCanon0
>=
uCanon1
)
// using nCanon1 as the main one
if
(
uCanon0
>=
uCanon1
)
// using nCanon1 as the main one
{
{
assert
(
p
->
pCounters
[
uTruth1
]
>
0
);
assert
(
p
->
pCounters
[
uTruth1
]
>
0
);
uCanonBest
=
0xFFFF
;
uCanonBest
=
0xFFFF
FFFF
;
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth1
];
i
++
)
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth1
];
i
++
)
{
{
uCanon0
=
Extra_TruthPolarize
(
uTruth0
,
p
->
uPhases
[
uTruth1
][
i
],
4
);
uCanon0
=
Extra_TruthPolarize
(
uTruth0
,
p
->
uPhases
[
uTruth1
][
i
],
4
);
...
@@ -226,6 +226,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
...
@@ -226,6 +226,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
{
{
uCanonBest
=
uCanon0
;
uCanonBest
=
uCanon0
;
uPhaseBest
=
p
->
uPhases
[
uTruth1
][
i
];
uPhaseBest
=
p
->
uPhases
[
uTruth1
][
i
];
assert
(
uPhaseBest
<
16
);
}
}
}
}
uTruthRes
[
0
]
=
(
uCanon1
<<
16
)
|
uCanonBest
;
uTruthRes
[
0
]
=
(
uCanon1
<<
16
)
|
uCanonBest
;
...
@@ -236,7 +237,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
...
@@ -236,7 +237,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
else
if
(
uCanon0
<
uCanon1
)
else
if
(
uCanon0
<
uCanon1
)
{
{
assert
(
p
->
pCounters
[
uTruth0
]
>
0
);
assert
(
p
->
pCounters
[
uTruth0
]
>
0
);
uCanonBest
=
0xFFFF
;
uCanonBest
=
0xFFFF
FFFF
;
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth0
];
i
++
)
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth0
];
i
++
)
{
{
uCanon1
=
Extra_TruthPolarize
(
uTruth1
,
p
->
uPhases
[
uTruth0
][
i
],
4
);
uCanon1
=
Extra_TruthPolarize
(
uTruth1
,
p
->
uPhases
[
uTruth0
][
i
],
4
);
...
@@ -244,6 +245,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
...
@@ -244,6 +245,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
{
{
uCanonBest
=
uCanon1
;
uCanonBest
=
uCanon1
;
uPhaseBest
=
p
->
uPhases
[
uTruth0
][
i
];
uPhaseBest
=
p
->
uPhases
[
uTruth0
][
i
];
assert
(
uPhaseBest
<
16
);
}
}
}
}
uTruthRes
[
0
]
=
(
uCanon0
<<
16
)
|
uCanonBest
;
uTruthRes
[
0
]
=
(
uCanon0
<<
16
)
|
uCanonBest
;
...
...
src/map/mapper/mapperRefs.c
View file @
b9e0c95b
...
@@ -237,7 +237,7 @@ float Map_CutGetAreaRefed( Map_Cut_t * pCut, int fPhase )
...
@@ -237,7 +237,7 @@ float Map_CutGetAreaRefed( Map_Cut_t * pCut, int fPhase )
float
aResult
,
aResult2
;
float
aResult
,
aResult2
;
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
assert
(
aResult
==
aResult2
);
//
assert( aResult == aResult2 );
return
aResult
;
return
aResult
;
}
}
...
@@ -257,7 +257,7 @@ float Map_CutGetAreaDerefed( Map_Cut_t * pCut, int fPhase )
...
@@ -257,7 +257,7 @@ float Map_CutGetAreaDerefed( Map_Cut_t * pCut, int fPhase )
float
aResult
,
aResult2
;
float
aResult
,
aResult2
;
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
assert
(
aResult
==
aResult2
);
//
assert( aResult == aResult2 );
return
aResult
;
return
aResult
;
}
}
...
...
src/opt/fxu/fxuCreate.c
View file @
b9e0c95b
...
@@ -179,7 +179,8 @@ Fxu_Matrix * Fxu_CreateMatrix( Fxu_Data_t * pData )
...
@@ -179,7 +179,8 @@ Fxu_Matrix * Fxu_CreateMatrix( Fxu_Data_t * pData )
// consider the case when cube pairs should be preprocessed
// consider the case when cube pairs should be preprocessed
// before adding them to the set of divisors
// before adding them to the set of divisors
if
(
nPairsTotal
>
pData
->
nPairsMax
)
if
(
nPairsTotal
>
pData
->
nPairsMax
)
Fxu_PreprocessCubePairs
(
p
,
pData
->
vSops
,
nPairsTotal
,
pData
->
nPairsMax
);
if
(
!
Fxu_PreprocessCubePairs
(
p
,
pData
->
vSops
,
nPairsTotal
,
pData
->
nPairsMax
)
)
return
NULL
;
// add the var pairs to the heap
// add the var pairs to the heap
Fxu_MatrixComputeSingles
(
p
);
Fxu_MatrixComputeSingles
(
p
);
...
...
src/opt/fxu/fxuReduce.c
View file @
b9e0c95b
...
@@ -90,6 +90,16 @@ int Fxu_PreprocessCubePairs( Fxu_Matrix * p, Vec_Ptr_t * vCovers, int nPairsTota
...
@@ -90,6 +90,16 @@ int Fxu_PreprocessCubePairs( Fxu_Matrix * p, Vec_Ptr_t * vCovers, int nPairsTota
pnPairCounters
[
pnLitsDiff
[
k
]
]
++
;
pnPairCounters
[
pnLitsDiff
[
k
]
]
++
;
// determine what pairs to take starting from the lower
// determine what pairs to take starting from the lower
// so that there would be exactly pPairsMax pairs
// so that there would be exactly pPairsMax pairs
if
(
pnPairCounters
[
0
]
!=
0
)
{
printf
(
"The SOPs of the nodes are not cube-free. Run
\"
bdd; sop
\"
before
\"
fx
\"
.
\n
"
);
return
0
;
}
if
(
pnPairCounters
[
1
]
!=
0
)
{
printf
(
"The SOPs of the nodes are not SCC-free. Run
\"
bdd; sop
\"
before
\"
fx
\"
.
\n
"
);
return
0
;
}
assert
(
pnPairCounters
[
0
]
==
0
);
// otherwise, covers are not dup-free
assert
(
pnPairCounters
[
0
]
==
0
);
// otherwise, covers are not dup-free
assert
(
pnPairCounters
[
1
]
==
0
);
// otherwise, covers are not SCC-free
assert
(
pnPairCounters
[
1
]
==
0
);
// otherwise, covers are not SCC-free
nSum
=
0
;
nSum
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment