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
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
959 additions
and
1507 deletions
+959
-1507
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
+293
-235
src/base/abc/abcFanio.c
+2
-0
src/base/abc/abcHie.c
+286
-197
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
+8
-4
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
+1
-0
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
+27
-9
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
# End Source File
# Begin Source File
SOURCE=.\src\base\abc\abcHie.c
# End Source File
# Begin Source File
SOURCE=.\src\base\abc\abcInt.h
# End 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
alias r3f retime -M 3 -f
alias r3b retime -M 3 -b
alias ren renode
alias rh read_hie
alias rl read_blif
alias rb read_bench
alias ret retime
...
...
@@ -76,6 +77,7 @@ alias trt "r c.blif; st; tr0; b; tr1"
alias u undo
alias w write
alias wb write_blif
alias wh write_hie
alias wl write_blif
alias wp write_pla
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;
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"
# minimizing for FF literals
alias fflitmin "compress2rs; ren; sop; ps -f"
# temporaries
#alias t "rvl th/lib.v; rvv th/t2.v"
#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;
alias t0 "r res.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 {
ABC_OBJ_ASSERT
,
// 7: assertion terminal
ABC_OBJ_NET
,
// 8: net
ABC_OBJ_NODE
,
// 9: node
ABC_OBJ_GATE
,
// 10: mapped node
ABC_OBJ_LATCH
,
// 11: latch
ABC_OBJ_TRI
,
// 12: tristate element
ABC_OBJ_BLACKBOX
,
// 13: box with unknown contents
ABC_OBJ_NUMBER
// 14: unused
ABC_OBJ_LATCH
,
// 10: latch
ABC_OBJ_WHITEBOX
,
// 11: box with known contents
ABC_OBJ_BLACKBOX
,
// 12: box with unknown contents
ABC_OBJ_NUMBER
// 13: unused
}
Abc_ObjType_t
;
// latch initial values
...
...
@@ -188,8 +187,7 @@ struct Abc_Ntk_t_
Abc_Ntk_t
*
pNetBackup
;
// the pointer to the previous backup network
int
iStep
;
// the generation number for the given network
// hierarchy
stmm_table
*
tName2Model
;
// the table hashing names into network pointers (or NULL if no hierarchy)
Vec_Int_t
*
pBlackBoxes
;
// stores pairs (PI num, PO num) for each model, including the base model (or NULL if no hierarchy)
Abc_Lib_t
*
pDesign
;
short
fHieVisited
;
// flag to mark the visited network
short
fHiePath
;
// flag to mark the network on the path
// miscellaneous data members
...
...
@@ -197,7 +195,6 @@ struct Abc_Ntk_t_
Extra_MmFixed_t
*
pMmObj
;
// memory manager for objects
Extra_MmStep_t
*
pMmStep
;
// memory manager for arrays
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_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
...
...
@@ -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_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_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_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
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
);
}
...
...
@@ -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_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_NtkCreateGate
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_GATE
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateTri
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_TRI
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateWhitebox
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_WHITEBOX
);
}
static
inline
Abc_Obj_t
*
Abc_NtkCreateBlackbox
(
Abc_Ntk_t
*
pNtk
)
{
return
Abc_NtkCreateObj
(
pNtk
,
ABC_OBJ_BLACKBOX
);
}
// reading objects
...
...
@@ -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_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_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_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_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
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
#define Abc_NtkForEachLatchOutput( pNtk, pObj, 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
#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++ ) \
if ( !Abc_ObjIs
Tri
(pObj) ) {} else
if ( !Abc_ObjIs
Whitebox
(pObj) ) {} else
#define Abc_NtkForEachBlackbox( pNtk, pObj, i ) \
for ( i = 0; (i < Vec_PtrSize((pNtk)->vBoxes)) && (((pObj) = Abc_NtkBox(pNtk, i)), 1); i++ ) \
if ( !Abc_ObjIsBlackbox(pObj) ) {} else
...
...
@@ -536,6 +531,7 @@ extern bool Abc_NtkCheckRead( 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_NtkCompareSignals
(
Abc_Ntk_t
*
pNtk1
,
Abc_Ntk_t
*
pNtk2
,
int
fOnlyPis
,
int
fComb
);
extern
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
);
/*=== abcCollapse.c ==========================================================*/
extern
Abc_Ntk_t
*
Abc_NtkCollapse
(
Abc_Ntk_t
*
pNtk
,
int
fBddSizeMax
,
int
fDualRail
,
int
fReorder
,
int
fVerbose
);
/*=== abcCut.c ==========================================================*/
...
...
@@ -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_NtkDfsSeq
(
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
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
);
...
...
@@ -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_NtkLogicToBdd
(
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 ==========================================================*/
extern
bool
Abc_NtkLatchIsSelfFeed
(
Abc_Obj_t
*
pLatch
);
extern
int
Abc_NtkCountSelfFeedLatches
(
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
);
/*=== abcLib.c ==========================================================*/
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
int
Abc_LibAddModel
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtk
);
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 )
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
int
Abc_NtkIsAcyclicHierarchy
(
Abc_Ntk_t
*
pNtk
);
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
...
...
@@ -112,7 +110,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
}
}
if
(
!
Abc_NtkBlackboxNum
(
pNtk
)
)
if
(
Abc_NtkHasOnlyLatchBoxes
(
pNtk
)
)
{
// check CI/CO numbers
if
(
Abc_NtkPiNum
(
pNtk
)
+
Abc_NtkLatchNum
(
pNtk
)
!=
Abc_NtkCiNum
(
pNtk
)
)
...
...
@@ -196,7 +194,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
// check the EXDC network if present
if
(
pNtk
->
pExdc
)
Abc_NtkCheck
(
pNtk
->
pExdc
);
/*
// check the hierarchy
if ( Abc_NtkIsNetlist(pNtk) && pNtk->tName2Model )
{
...
...
@@ -217,6 +215,7 @@ bool Abc_NtkDoCheck( Abc_Ntk_t * pNtk )
return 0;
}
}
*/
return
1
;
}
...
...
@@ -746,7 +745,6 @@ bool Abc_NtkCompareSignals( Abc_Ntk_t * pNtk1, Abc_Ntk_t * pNtk2, int fOnlyPis,
return
1
;
}
/**Function*************************************************************
Synopsis [Returns 0 if the network hierachy contains a cycle.]
...
...
@@ -774,6 +772,8 @@ int Abc_NtkIsAcyclicHierarchy_rec( Abc_Ntk_t * pNtk )
// go through all the children networks
Abc_NtkForEachBox
(
pNtk
,
pObj
,
i
)
{
if
(
Abc_ObjIsLatch
(
pObj
)
)
continue
;
pNtkNext
=
pObj
->
pData
;
assert
(
pNtkNext
!=
NULL
);
if
(
pNtkNext
->
fHiePath
)
...
...
@@ -799,9 +799,20 @@ int Abc_NtkIsAcyclicHierarchy_rec( 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
;
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 @@
/// 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*************************************************************
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.]
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
return
vNodes
;
}
/**Function*************************************************************
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
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
;
assert
(
!
Abc_ObjIsNet
(
pNode
)
);
// if this node is already visited, skip
...
...
@@ -127,57 +152,57 @@ void Abc_NtkDfs_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the CI
if
(
Abc_ObjIsC
i
(
pNode
)
||
(
Abc_NtkIsStrash
(
pNode
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pNode
)
)
)
if
(
Abc_ObjIsC
o
(
pNode
)
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
||
Abc_ObjIsBox
(
pNode
)
);
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkDfs_rec
(
Abc_ObjFanin0Ntk
(
pFanin
),
vNodes
);
pNode
=
Abc_ObjFanout0Ntk
(
pNode
);
Abc_ObjForEachFanout
(
pNode
,
pFanout
,
i
)
Abc_NtkDfsReverse_rec
(
pFanout
,
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
reverse
DFS ordered array of logic nodes.]
Description [Collects only the internal nodes, leaving
CIs and CO
.
However it marks
with the current TravId both CIs and COs
.]
Description [Collects only the internal nodes, leaving
out CIs/COs
.
However it marks
both CIs and COs with the current TravId
.]
SideEffects []
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
;
Abc_Obj_t
*
pObj
;
int
i
;
Vec_Ptr_t
*
vNodes
;
Abc_Obj_t
*
pObj
,
*
pFanout
;
int
i
,
k
;
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
1000
);
vStack
=
Vec_PtrAlloc
(
1000
);
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachCi
(
pNtk
,
pObj
,
i
)
{
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
if
(
fCollectAll
)
{
// add constant nodes in the end
if
(
!
Abc_NtkIsStrash
(
pNtk
)
)
Abc_NtkForEachNode
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_NtkDfs_iter
(
vStack
,
pObj
,
vNodes
);
}
Vec_PtrFree
(
vStack
);
if
(
Abc_NodeIsConst
(
pObj
)
)
Vec_PtrPush
(
vNodes
,
pObj
);
return
vNodes
;
}
/**Function*************************************************************
Synopsis [
Iterative version of the DFS procedur
e.]
Synopsis [
Performs DFS for one nod
e.]
Description []
...
...
@@ -186,89 +211,52 @@ Vec_Ptr_t * Abc_NtkDfsIter( Abc_Ntk_t * pNtk, int fCollectAll )
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
;
int
i
Fanin
;
Abc_Obj_t
*
pFanin
;
int
i
;
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
p
Root
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pRoot
);
// skip the CI
if
(
Abc_ObjIsCi
(
pRoot
)
||
(
Abc_NtkIsStrash
(
pRoot
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pRoot
))
)
return
;
// add the CI
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
)
)
{
Abc_NodeSetTravIdCurrent
(
pNode
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkDfsSeq_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
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*************************************************************
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.
However it marks both CIs and COs with the current TravId.]
Description []
SideEffects []
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
;
Abc_Obj_t
*
pObj
,
*
pFanout
;
int
i
,
k
;
Abc_Obj_t
*
pObj
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachCi
(
pNtk
,
pObj
,
i
)
{
Abc_NodeSetTravIdCurrent
(
pObj
);
pObj
=
Abc_ObjFanout0Ntk
(
pObj
);
Abc_ObjForEachFanout
(
pObj
,
pFanout
,
k
)
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
);
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
// mark the PIs
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
return
vNodes
;
}
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
...
...
@@ -280,31 +268,25 @@ Vec_Ptr_t * Abc_NtkDfsReverse( Abc_Ntk_t * pNtk )
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
;
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_ObjIsCo
(
pNode
)
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
pNode
=
Abc_ObjFanout0Ntk
(
pNode
);
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
Vec_PtrPush
(
vNodes
,
pNode
);
}
/**Function*************************************************************
Synopsis [
Performs DFS for one node
.]
Synopsis [
Returns the array of nodes and latches reachable from POs
.]
Description []
...
...
@@ -313,51 +295,121 @@ void Abc_NtkDfsReverse_rec( Abc_Obj_t * pNode, Vec_Ptr_t * vNodes )
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
;
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
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Root
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
Abc_NtkDfsSeq_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
Abc_NodeSetTravIdCurrent
(
pRoot
);
// skip the CI
if
(
Abc_ObjIsCi
(
pRoot
)
||
(
Abc_NtkIsStrash
(
pRoot
->
pNtk
)
&&
Abc_AigNodeIsConst
(
pRoot
))
)
return
;
// add the CI
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*************************************************************
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 []
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
;
int
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
);
// set the traversal ID
Abc_NtkIncrementTravId
(
pNtk
);
// start the array of nodes
vNodes
=
Vec_PtrAlloc
(
100
);
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
// mark the PIs
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_NtkDfsSeq_rec
(
pObj
,
vNodes
);
vNodes
=
Vec_PtrAlloc
(
1000
);
vStack
=
Vec_PtrAlloc
(
1000
);
Abc_NtkForEachCo
(
pNtk
,
pObj
,
i
)
{
Abc_NodeSetTravIdCurrent
(
pObj
);
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
;
}
/**Function*************************************************************
Synopsis [Performs DFS for one node.]
...
...
@@ -369,51 +421,55 @@ Vec_Ptr_t * Abc_NtkDfsSeq( Abc_Ntk_t * pNtk )
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
;
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
p
Node
)
)
if
(
Abc_NodeIsTravIdCurrent
(
p
Obj
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
p
Node
);
Abc_NodeSetTravIdCurrent
(
p
Obj
);
// visit the transitive fanin of the node
Abc_ObjForEachFan
out
(
pNode
,
pFanout
,
i
)
Abc_NtkDfs
SeqReverse_rec
(
pFanout
,
vNodes
);
Abc_ObjForEachFan
in
(
pObj
,
pFanin
,
i
)
Abc_NtkDfs
Hie_rec
(
pFanin
,
vNodes
);
// add the node after the fanins have been added
Vec_PtrPush
(
vNodes
,
p
Node
);
Vec_PtrPush
(
vNodes
,
p
Obj
);
}
/**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 []
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
;
Abc_Obj_t
*
pObj
;
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
);
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
;
}
/**Function*************************************************************
Synopsis [Returns 1 if the ordering of nodes is DFS.]
...
...
@@ -452,6 +508,40 @@ bool Abc_NtkIsDfsOrdered( Abc_Ntk_t * pNtk )
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*************************************************************
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
return
vNodes
;
}
/**Function*************************************************************
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
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
;
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
);
// skip the PI
if
(
Abc_ObjIsCi
(
pNode
)
||
Abc_AigNodeIsConst
(
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
);
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*************************************************************
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 )
return
vNodes
;
}
/**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 []
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
;
// if this node is already visited, skip
if
(
Abc_NodeIsTravIdCurrent
(
pNode
)
)
return
;
// mark the node as visited
Abc_NodeSetTravIdCurrent
(
pNode
);
// skip the
PI
if
(
Abc_ObjIsC
i
(
pNode
)
||
Abc_AigNodeIsConst
(
pNode
)
)
// skip the
terminals
if
(
Abc_ObjIsC
o
(
pNode
)
)
return
;
assert
(
Abc_ObjIsNode
(
pNode
)
);
// visit the transitive fanin of the node
Abc_ObjForEachFanin
(
pNode
,
pFanin
,
i
)
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
);
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*************************************************************
...
...
@@ -653,37 +742,6 @@ Vec_Vec_t * Abc_DfsLevelized( Abc_Obj_t * pNode, bool fTfi )
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*************************************************************
...
...
@@ -823,51 +881,6 @@ int Abc_NtkLevelReverse( Abc_Ntk_t * pNtk )
/**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.]
Description []
...
...
@@ -919,6 +932,51 @@ bool Abc_NtkIsAcyclic_rec( Abc_Obj_t * pNode )
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*************************************************************
...
...
src/base/abc/abcFanio.c
View file @
b9e0c95b
...
...
@@ -53,6 +53,8 @@ void Abc_ObjAddFanin( Abc_Obj_t * pObj, Abc_Obj_t * pFanin )
{
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 @@
/// 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*************************************************************
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.]
Description []
...
...
@@ -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
*
pNtkNew
;
Abc_Obj_t
*
p
Obj
,
*
pNet
;
int
i
,
Counter
=
0
;
Abc_Obj_t
*
p
Term
,
*
pNet
;
int
i
,
Counter
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// start the network
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
// duplicate the name and the spec
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// clean the node copy fields
Abc_NtkCleanCopy
(
pNtk
);
// duplicate PIs/POs and their nets
Abc_NtkForEachPi
(
pNtk
,
p
Obj
,
i
)
Abc_NtkForEachPi
(
pNtk
,
p
Term
,
i
)
{
Abc_NtkDupObj
(
pNtkNew
,
p
Obj
,
0
);
pNet
=
Abc_ObjFanout0
(
p
Obj
);
Abc_NtkDupObj
(
pNtkNew
,
pNet
,
1
);
Abc_ObjAddFanin
(
pNet
->
pCopy
,
p
Obj
->
pCopy
);
Abc_NtkDupObj
(
pNtkNew
,
p
Term
,
0
);
pNet
=
Abc_ObjFanout0
(
p
Term
);
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
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
);
pNet
=
Abc_ObjFanin0
(
p
Obj
);
Abc_NtkDupObj
(
pNtkNew
,
p
Term
,
0
);
pNet
=
Abc_ObjFanin0
(
p
Term
);
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
Counter
=
-
1
;
Abc_NtkFlattenLogicHierarchy_rec
(
pNtkNew
,
pNtk
,
&
Counter
);
printf
(
"Abc_NtkFlattenLogicHierarchy(): Flattened %d logic boxes. Left %d block boxes.
\n
"
,
Counter
-
1
,
Abc_NtkBlackboxNum
(
pNtkNew
)
);
printf
(
"Abc_NtkFlattenLogicHierarchy(): Flattened %d logic instances. Preserved %d black boxes.
\n
"
,
Counter
,
Abc_NtkBlackboxNum
(
pNtkNew
)
);
// copy the timing information
// Abc_ManTimeDup( pNtk, pNtkNew );
// duplicate EXDC
if
(
pNtk
->
pExdc
)
printf
(
"EXDC is not transformed.
\n
"
);
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
)
)
{
// duplicate the node
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
);
fprintf
(
stdout
,
"Abc_NtkFlattenLogicHierarchy(): Network check has failed.
\n
"
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// connect the POs
Abc_NtkForEachPo
(
pNtkOld
,
pTerm
,
k
)
pTerm
->
pCopy
=
Abc_ObjFanin0
(
pTerm
)
->
pCopy
;
Vec_PtrFree
(
vNodes
);
return
pNtkNew
;
}
/**Function*************************************************************
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 []
...
...
@@ -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
*
pNtkNew
;
Abc_Obj_t
*
pObj
,
*
pNet
;
Abc_Obj_t
*
pObj
,
*
pNet
,
*
pFanin
,
*
pTerm
;
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkBlackboxNum
(
pNtk
)
==
Abc_NtkBoxNum
(
pNtk
)
-
Abc_NtkLatchNum
(
pNtk
)
);
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
// start the network
pNtkNew
=
Abc_NtkAlloc
(
pNtk
->
ntkType
,
pNtk
->
ntkFunc
,
1
);
// duplicate the name and the spec
pNtkNew
->
pName
=
Extra_UtilStrsav
(
pNtk
->
pName
);
pNtkNew
->
pSpec
=
Extra_UtilStrsav
(
pNtk
->
pSpec
);
// pNtkNew->pSpec = Extra_UtilStrsav( pNtk->pSpec );
// clean the node copy fields
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
)
{
pObj
->
pCopy
=
pObj
;
// placeholder
Abc_ObjForEachFanout
(
pObj
,
p
Net
,
k
)
Abc_NodeSetTravIdCurrent
(
pObj
);
Abc_ObjForEachFanout
(
pObj
,
p
Term
,
k
)
{
pNet
=
Abc_ObjFanout0
(
pTerm
);
if
(
pNet
->
pCopy
)
continue
;
pNet
->
pCopy
=
Abc_NtkCreatePi
(
pNtkNew
);
Abc_ObjAssignName
(
pNet
->
pCopy
,
Abc_ObjName
(
pNet
),
NULL
);
{
printf
(
"Error in Abc_NtkConvertBlackboxes(): Output %s of a black box has a non-unique name.
\n
"
,
Abc_ObjName
(
pNet
->
pCopy
)
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
pNet
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNet
)
);
pTerm
->
pCopy
=
Abc_NtkCreatePi
(
pNtkNew
);
Abc_NodeSetTravIdCurrent
(
pTerm
);
}
}
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
Abc_ObjForEachFanin
(
pObj
,
pTerm
,
k
)
{
pNet
=
Abc_ObjFanin0
(
pTerm
);
if
(
pNet
->
pCopy
)
{
Abc_NodeSetTravIdCurrent
(
pTerm
);
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
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
pObj
->
pCopy
==
NULL
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
&&
pObj
->
pCopy
==
NULL
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
Abc_ObjIsNet
(
pObj
)
);
// connect all objects
// duplicate all objects besides the boxes
// connect all objects
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
if
(
!
Abc_ObjIsBlackbox
(
pObj
)
)
Abc_NtkDupObj
(
pNtkNew
,
pObj
,
Abc_ObjIsNet
(
pObj
)
);
// create PIs/POs for the nets belonging to the boxes
Abc_NtkForEachBlackbox
(
pNtk
,
pObj
,
i
)
{
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
if
(
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNet
))
)
Abc_NtkCreatePi
(
pNtkNew
)
if
(
!
Abc_NodeIsTravIdCurrent
(
pObj
)
)
Abc_ObjForEachFanin
(
pObj
,
pFanin
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pFanin
->
pCopy
);
}
// connect all objects, besides blackboxes
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
// check integrity
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
{
if
(
!
Abc_ObjIsBlackbox
(
pObj
)
)
continue
;
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
Abc_ObjAddFanin
(
pObj
->
pCopy
,
pNet
->
pCopy
);
fprintf
(
stdout
,
"Abc_NtkConvertBlackboxes(): Network check has failed.
\n
"
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
if
(
!
Abc_NtkCheck
(
pNtkHie
)
)
fprintf
(
stdout
,
"Abc_NtkInsertNewLogic(): Network check has failed.
\n
"
);
return
pNtkNew
;
}
...
...
@@ -242,99 +301,129 @@ Abc_Ntk_t * Abc_NtkConvertBlackboxes( Abc_Ntk_t * pNtk )
Synopsis [Inserts blackboxes into the netlist.]
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.
This procedure
inserts the logic back into the original hierarhical netlist.
The result is updated original hierarchical netlist
.]
The second arg is a non-hierarchical netlist derived from
the above netlist
after processing.
This procedure
create a new netlist, which is comparable to the original netlist with
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 []
***********************************************************************/
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
;
assert
(
Abc_NtkIsNetlist
(
pNtkHie
)
);
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
assert
(
Abc_NtkBlackboxNum
(
pNtk
)
==
0
);
Abc_NtkCleanCopy
(
pNtk
);
// mark PIs/POs/blackboxes and their nets
// map the nets into the corresponding nets of the logic design
Abc_NtkForEachPi
(
pNtkHie
,
pObj
,
i
)
assert
(
Abc_NtkIsNetlist
(
pNtkH
)
);
assert
(
Abc_NtkWhiteboxNum
(
pNtkH
)
==
0
);
assert
(
Abc_NtkBlackboxNum
(
pNtkL
)
>
0
);
assert
(
Abc_NtkIsNetlist
(
pNtkL
)
);
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
;
pNet
=
Abc_ObjFanout0
(
pObj
);
pNet
->
fMarkA
=
1
;
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
assert
(
pNetLogic
);
pNetLogic
->
pCopy
=
pNet
;
}
Abc_NtkForEachPo
(
pNtkHie
,
pObj
,
i
)
pNetH
=
Abc_ObjFanout0
(
pObjH
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNetL
)
)
)
{
pObj
->
fMarkA
=
1
;
pNet
=
Abc_ObjFanin0
(
pObj
);
pNet
->
fMarkA
=
1
;
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
assert
(
pNetLogic
);
pNetLogic
->
pCopy
=
pNet
;
printf
(
"There is no PI corresponding to the PI %s.
\n
"
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
Abc_NtkForEachBlackbox
(
pNtkHie
,
pObj
,
i
)
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanin0
(
pNetL
),
0
);
}
Abc_NtkForEachPo
(
pNtkH
,
pObjH
,
i
)
{
pObj
->
fMarkA
=
1
;
Abc_ObjForEachFanin
(
pObj
,
pNet
,
k
)
pNetH
=
Abc_ObjFanin0
(
pObjH
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPo
(
Abc_ObjFanout0
(
pNetL
)
)
)
{
pNet
->
fMarkA
=
1
;
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
assert
(
pNetLogic
);
pNetLogic
->
pCopy
=
pNet
;
printf
(
"There is no PO corresponding to the PO %s.
\n
"
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDelete
(
pNtkNew
);
return
NULL
;
}
// duplicate
pNetL
->
pCopy
=
Abc_NtkFindOrCreateNet
(
pNtkNew
,
Abc_ObjName
(
pNetH
)
);
Abc_NtkDupObj
(
pNtkNew
,
Abc_ObjFanout0
(
pNetL
),
0
);
}
Abc_ObjForEachFanout
(
pObj
,
pNet
,
k
)
// make sure every BB has a PI/PO in the processed network
Abc_NtkForEachBlackbox
(
pNtkH
,
pObjH
,
i
)
{
// duplicate the box
Abc_NtkDupObj
(
pNtkNew
,
pObjH
,
1
);
// look and fanins/fanouts of the box
Abc_ObjForEachFanin
(
pObjH
,
pTermH
,
k
)
{
pNet
->
fMarkA
=
1
;
pNetLogic
=
Abc_NtkFindNet
(
pNtk
,
Abc_ObjName
(
pNet
)
);
assert
(
pNetLogic
);
pNetLogic
->
pCopy
=
pNet
;
pNetH
=
Abc_ObjFanin0
(
pTermH
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPo
(
Abc_ObjFanout0
(
pNetL
)
)
)
{
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
);
}
// remove all other logic fro the hierarchical netlist
Abc_NtkForEachObj
(
pNtkHie
,
pObj
,
i
)
Abc_ObjForEachFanout
(
pObjH
,
pTermH
,
k
)
{
if
(
pObj
->
fMarkA
)
pObj
->
fMarkA
=
0
;
else
Abc_NtkDeleteObj
(
pObj
);
}
// mark PI/PO nets of the network
Abc_NtkForEachPi
(
pNtk
,
pObj
,
i
)
Abc_ObjFanout0
(
pObj
)
->
fMarkA
=
1
;
Abc_NtkForEachPo
(
pNtk
,
pObj
,
i
)
Abc_ObjFanin0
(
pObj
)
->
fMarkA
=
1
;
// make sure only these nodes are assigned the copy
Abc_NtkForEachObj
(
pNtk
,
pObj
,
i
)
pNetH
=
Abc_ObjFanout0
(
pTermH
);
pNetL
=
Abc_NtkFindNet
(
pNtkL
,
Abc_ObjName
(
pNetH
)
);
if
(
pNetL
==
NULL
||
!
Abc_ObjIsPi
(
Abc_ObjFanin0
(
pNetL
)
)
)
{
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
);
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
);
}
// 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
)
)
// duplicate other objects of the logic network
Abc_NtkForEachObj
(
pNtkL
,
pObjL
,
i
)
if
(
pObjL
->
pCopy
)
Abc_NtkDupObj
(
pNtkNew
,
pObjL
,
0
);
// connect objects
Abc_NtkForEachObj
(
pNtkL
,
pObjL
,
i
)
Abc_ObjForEachFanin
(
pObjL
,
pNetL
,
k
)
Abc_ObjAddFanin
(
pObjL
->
pCopy
,
pNetL
->
pCopy
);
// check integrity
if
(
!
Abc_NtkCheck
(
pNtkNew
)
)
{
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 )
SeeAlso []
***********************************************************************/
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
)
void
Abc_LibFree
(
Abc_Lib_t
*
pLib
,
Abc_Ntk_t
*
pNtkSave
)
{
Abc_Ntk_t
*
pNtk
;
int
i
;
...
...
@@ -79,6 +79,8 @@ void Abc_LibFree( Abc_Lib_t * pLib )
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
{
// pNtk->pManFunc = NULL;
if
(
pNtk
==
pNtkSave
)
continue
;
Abc_NtkDelete
(
pNtk
);
}
Vec_PtrFree
(
pLib
->
vModules
);
...
...
@@ -108,11 +110,15 @@ void Abc_LibPrint( Abc_Lib_t * pLib )
Vec_PtrForEachEntry
(
pLib
->
vModules
,
pNtk
,
i
)
{
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
)
continue
;
Abc_NtkForEachWhitebox
(
pNtk
,
pObj
,
k
)
printf
(
" %20s (whitebox)
\n
"
,
Abc_NtkName
(
pObj
->
pData
)
);
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 )
***********************************************************************/
void
Abc_NtkAddDummyBoxNames
(
Abc_Ntk_t
*
pNtk
)
{
Abc_Obj_t
*
pObj
,
*
pTerm
;
int
nDigits
,
nDigitsF
,
i
,
k
;
char
*
pName
;
Abc_Obj_t
*
pObj
;
int
nDigits
,
i
;
assert
(
!
Abc_NtkIsNetlist
(
pNtk
)
)
;
nDigits
=
Extra_Base10Log
(
Abc_NtkLatchNum
(
pNtk
)
);
Abc_NtkForEachLatch
(
pNtk
,
pObj
,
i
)
{
...
...
@@ -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_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) );
Abc_NtkForEachBlackbox( pNtk, pObj, i )
{
...
...
@@ -443,6 +436,7 @@ void Abc_NtkAddDummyBoxNames( Abc_Ntk_t * pNtk )
Abc_ObjForEachFanout( pObj, pTerm, k )
Abc_ObjAssignName( Abc_ObjFanin0(pObj), pName, Abc_ObjNameDummy("o", k, nDigitsF) );
}
*/
}
/**Function*************************************************************
...
...
src/base/abc/abcNetlist.c
View file @
b9e0c95b
...
...
@@ -49,7 +49,8 @@ Abc_Ntk_t * Abc_NtkNetlistToLogic( Abc_Ntk_t * pNtk )
int
i
,
k
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// consider simple case when there is hierarchy
assert
(
pNtk
->
tName2Model
==
NULL
);
assert
(
pNtk
->
pDesign
==
NULL
);
// assert( pNtk->tName2Model == NULL );
// if ( pNtk->tName2Model )
// return Abc_NtkNetlistToLogicHie( pNtk );
// start the network
...
...
src/base/abc/abcNtk.c
View file @
b9e0c95b
...
...
@@ -840,17 +840,13 @@ void Abc_NtkDelete( Abc_Ntk_t * pNtk )
else
if
(
!
Abc_NtkHasBlackbox
(
pNtk
)
)
assert
(
0
);
// free the hierarchy
if
(
Abc_NtkIsNetlist
(
pNtk
)
&&
pNtk
->
tName2Model
)
if
(
pNtk
->
pDesign
)
{
stmm_generator
*
gen
;
Abc_Ntk_t
*
pNtkTemp
;
char
*
pName
;
stmm_foreach_item
(
pNtk
->
tName2Model
,
gen
,
&
pName
,
(
char
**
)
&
pNtkTemp
)
Abc_NtkDelete
(
pNtkTemp
);
stmm_free_table
(
pNtk
->
tName2Model
);
Abc_LibFree
(
pNtk
->
pDesign
,
pNtk
);
pNtk
->
pDesign
=
NULL
;
}
if
(
pNtk
->
pBlackBoxes
)
Vec_IntFree
(
pNtk
->
pBlackBoxes
);
//
if ( pNtk->pBlackBoxes )
//
Vec_IntFree( pNtk->pBlackBoxes );
// free node attributes
Vec_PtrForEachEntry
(
pNtk
->
vAttrs
,
pAttrMan
,
i
)
if
(
pAttrMan
)
...
...
@@ -879,7 +875,7 @@ void Abc_NtkFixNonDrivenNets( Abc_Ntk_t * pNtk )
if
(
Abc_NtkNodeNum
(
pNtk
)
==
0
)
{
pNtk
->
ntkFunc
=
ABC_FUNC_BLACKBOX
;
//
pNtk->ntkFunc = ABC_FUNC_BLACKBOX;
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 )
break
;
case
ABC_OBJ_NET
:
case
ABC_OBJ_NODE
:
case
ABC_OBJ_GATE
:
break
;
case
ABC_OBJ_LATCH
:
pObj
->
pData
=
(
void
*
)
ABC_INIT_NONE
;
case
ABC_OBJ_
TRI
:
case
ABC_OBJ_
WHITEBOX
:
case
ABC_OBJ_BLACKBOX
:
if
(
pNtk
->
vBoxes
)
Vec_PtrPush
(
pNtk
->
vBoxes
,
pObj
);
break
;
...
...
@@ -220,7 +219,6 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
Vec_PtrRemove
(
pNtk
->
vCos
,
pObj
);
break
;
case
ABC_OBJ_NET
:
case
ABC_OBJ_GATE
:
break
;
case
ABC_OBJ_NODE
:
if
(
Abc_NtkHasBdd
(
pNtk
)
)
...
...
@@ -228,7 +226,7 @@ void Abc_NtkDeleteObj( Abc_Obj_t * pObj )
pObj
->
pData
=
NULL
;
break
;
case
ABC_OBJ_LATCH
:
case
ABC_OBJ_
TRI
:
case
ABC_OBJ_
WHITEBOX
:
case
ABC_OBJ_BLACKBOX
:
if
(
pNtk
->
vBoxes
)
Vec_PtrRemove
(
pNtk
->
vBoxes
,
pObj
);
break
;
...
...
@@ -324,9 +322,15 @@ Abc_Obj_t * Abc_NtkDupObj( Abc_Ntk_t * pNtkNew, Abc_Obj_t * pObj, int fCopyName
if
(
fCopyName
)
{
if
(
Abc_ObjIsCi
(
pObj
)
)
{
if
(
!
Abc_NtkIsNetlist
(
pNtkNew
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanout0Ntk
(
pObj
)),
NULL
);
}
else
if
(
Abc_ObjIsCo
(
pObj
)
)
{
if
(
!
Abc_NtkIsNetlist
(
pNtkNew
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
Abc_ObjFanin0Ntk
(
pObj
)),
NULL
);
}
else
if
(
Abc_ObjIsBox
(
pObj
)
||
Abc_ObjIsNet
(
pObj
)
)
Abc_ObjAssignName
(
pObjNew
,
Abc_ObjName
(
pObj
),
NULL
);
}
...
...
src/base/abc/abcSop.c
View file @
b9e0c95b
...
...
@@ -840,6 +840,12 @@ char * Abc_SopFromTruthBin( char * pTruth )
if
(
Digit
==
1
)
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
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 )
Abc_NtkIncrementTravId
(
pNtk
);
Abc_NtkForEachCo
(
pNtk
,
pNode
,
i
)
{
/*
if ( strcmp( Abc_ObjName(pNode), "g704" ) == 0 )
{
int s = 1;
}
*/
// if the driver is complemented, this is an error
pDriver
=
Abc_ObjFanin0
(
pNode
);
if
(
Abc_ObjFaninC0
(
pNode
)
)
...
...
@@ -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 ///
////////////////////////////////////////////////////////////////////////
...
...
src/base/abc/module.make
View file @
b9e0c95b
...
...
@@ -3,6 +3,7 @@ SRC += src/base/abc/abcAig.c \
src/base/abc/abcDfs.c
\
src/base/abc/abcFanio.c
\
src/base/abc/abcFunc.c
\
src/base/abc/abcHie.c
\
src/base/abc/abcLatch.c
\
src/base/abc/abcLib.c
\
src/base/abc/abcMinBase.c
\
...
...
src/base/abci/abc.c
View file @
b9e0c95b
...
...
@@ -288,6 +288,7 @@ void Abc_Init( Abc_Frame_t * pAbc )
// Map_Var3Print();
// Map_Var4Test();
// Abc_NtkPrint256();
}
/**Function*************************************************************
...
...
src/base/abci/abcPrint.c
View file @
b9e0c95b
...
...
@@ -896,14 +896,11 @@ void Abc_ObjPrint( FILE * pFile, Abc_Obj_t * pObj )
case
ABC_OBJ_NODE
:
fprintf
(
pFile
,
"Node "
);
break
;
case
ABC_OBJ_GATE
:
fprintf
(
pFile
,
"Gate "
);
break
;
case
ABC_OBJ_LATCH
:
fprintf
(
pFile
,
"Latch "
);
break
;
case
ABC_OBJ_
TRI
:
fprintf
(
pFile
,
"
Tristate
"
);
case
ABC_OBJ_
WHITEBOX
:
fprintf
(
pFile
,
"
Whitebox
"
);
break
;
case
ABC_OBJ_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 )
***********************************************************************/
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
;
Vec_Ptr_t
*
vNodes
;
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 )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_sis_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_sis_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
// create the file for sis
...
...
@@ -1412,7 +1412,7 @@ int CmdCommandMvsis( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_mvsis_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_mvsis_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
// create the file for MVSIS
...
...
@@ -1558,7 +1558,7 @@ int CmdCommandCapo( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pErr
,
"Cannot produce the intermediate network.
\n
"
);
goto
usage
;
}
Io_WriteBlif
Netlist
(
pNetlist
,
"_capo_in.blif"
,
1
);
Io_WriteBlif
(
pNetlist
,
"_capo_in.blif"
,
1
);
Abc_NtkDelete
(
pNetlist
);
// 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 );
static
int
IoCommandReadVerLib
(
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
IoCommandWriteBaf
(
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
void
Io_Init
(
Abc_Frame_t
*
pAbc
)
{
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_baf"
,
IoCommandReadBaf
,
1
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"read_blif"
,
IoCommandReadBlif
,
1
);
...
...
@@ -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"
,
"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_baf"
,
IoCommandWriteBaf
,
0
);
Cmd_CommandAdd
(
pAbc
,
"I/O"
,
"write_blif"
,
IoCommandWriteBlif
,
0
);
...
...
@@ -169,6 +171,7 @@ usage:
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
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
-h : prints the command summary
\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 )
{
Abc_Ntk_t
*
pNtk
;
char
*
pFileName
;
int
fCheck
,
fBlifMv
;
int
fCheck
;
int
c
;
fCheck
=
1
;
...
...
@@ -213,18 +216,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
// get the input file name
pFileName
=
argv
[
globalUtilOptind
];
// read the file using the corresponding file reader
// pNtk = Io_Read( 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
;
pNtk
=
Io_ReadHie
(
pFileName
,
Io_ReadFileType
(
pFileName
),
fCheck
);
if
(
pNtk
==
NULL
)
return
0
;
// replace the current network
...
...
@@ -232,7 +224,7 @@ int IoCommandReadHie( Abc_Frame_t * pAbc, int argc, char ** argv )
return
0
;
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
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"
);
...
...
@@ -820,7 +812,7 @@ int IoCommandReadVer( Abc_Frame_t * pAbc, int argc, char ** argv )
// derive root design
pNtk
=
Abc_LibDeriveRoot
(
pDesign
);
Abc_LibFree
(
pDesign
);
Abc_LibFree
(
pDesign
,
NULL
);
if
(
pNtk
==
NULL
)
{
fprintf
(
pAbc
->
Err
,
"Deriving root module has failed.
\n
"
);
...
...
@@ -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
)
);
// free old library
if
(
Abc_FrameReadLibVer
()
)
Abc_LibFree
(
Abc_FrameReadLibVer
()
);
Abc_LibFree
(
Abc_FrameReadLibVer
()
,
NULL
);
// read new library
Abc_FrameSetLibVer
(
pLibrary
);
return
0
;
...
...
@@ -980,6 +972,53 @@ usage:
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
)
{
char
*
pFileName
;
...
...
src/base/io/io.h
View file @
b9e0c95b
...
...
@@ -75,7 +75,7 @@ extern Abc_Ntk_t * Io_ReadBaf( char * pFileName, int fCheck );
/*=== abcReadBlif.c ===========================================================*/
extern
Abc_Ntk_t
*
Io_ReadBlif
(
char
*
pFileName
,
int
fCheck
);
/*=== 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 ==========================================================*/
extern
Abc_Ntk_t
*
Io_ReadBench
(
char
*
pFileName
,
int
fCheck
);
/*=== abcReadEdif.c ===========================================================*/
...
...
@@ -92,7 +92,7 @@ extern void Io_WriteAiger( Abc_Ntk_t * pNtk, char * pFileName );
extern
void
Io_WriteBaf
(
Abc_Ntk_t
*
pNtk
,
char
*
pFileName
);
/*=== abcWriteBlif.c ==========================================================*/
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
);
/*=== abcWriteBlifMv.c ==========================================================*/
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
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_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_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_ReadCreatePo
(
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 )
p
->
pNtkMaster
=
pNtkMaster
=
pNtk
;
continue
;
}
/*
// make sure hierarchy does not have the network with this name
if ( pNtkMaster->tName2Model && stmm_is_member( pNtkMaster->tName2Model, pNtk->pName ) )
{
...
...
@@ -172,8 +173,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
if ( pNtkMaster->tName2Model == NULL )
pNtkMaster->tName2Model = stmm_init_table(strcmp, stmm_strhash);
stmm_insert( pNtkMaster->tName2Model, pNtk->pName, (char *)pNtk );
*/
}
/*
// if there is a hierarchy, connect the boxes
if ( pNtkMaster && pNtkMaster->tName2Model )
{
...
...
@@ -183,7 +185,9 @@ Abc_Ntk_t * Io_ReadBlifNetwork( Io_ReadBlif_t * p )
return NULL;
}
}
else
if
(
!
p
->
fError
)
else
*/
if
(
!
p
->
fError
)
Abc_NtkFinalizeRead
(
pNtkMaster
);
// return the master network
return
pNtkMaster
;
...
...
@@ -252,8 +256,8 @@ Abc_Ntk_t * Io_ReadBlifNetworkOne( Io_ReadBlif_t * p )
fStatus
=
Io_ReadBlifNetworkInputArrival
(
p
,
p
->
vTokens
);
else
if
(
!
strcmp
(
pDirective
,
".default_input_arrival"
)
)
fStatus
=
Io_ReadBlifNetworkDefaultInputArrival
(
p
,
p
->
vTokens
);
else
if
(
!
strcmp
(
pDirective
,
".subckt"
)
)
fStatus
=
Io_ReadBlifNetworkSubcircuit
(
p
,
p
->
vTokens
);
//
else if ( !strcmp( pDirective, ".subckt" ) )
//
fStatus = Io_ReadBlifNetworkSubcircuit( p, p->vTokens );
else
if
(
!
strcmp
(
pDirective
,
".exdc"
)
)
break
;
else
if
(
!
strcmp
(
pDirective
,
".end"
)
)
...
...
@@ -1064,6 +1068,8 @@ int Io_ReadBlifNetworkConnectBoxesOne( Io_ReadBlif_t * p, Abc_Ntk_t * pNtk, stmm
return
0
;
}
#if 0
/**Function*************************************************************
Synopsis [Connect the boxes in the hierarchy of networks.]
...
...
@@ -1090,6 +1096,8 @@ int Io_ReadBlifNetworkConnectBoxes( Io_ReadBlif_t * p, Abc_Ntk_t * pNtkMaster )
return 0;
}
#endif
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
...
...
src/base/io/ioReadBlifMv.c
View file @
b9e0c95b
...
...
@@ -119,12 +119,12 @@ extern void Abc_NtkStartMvVars( Abc_Ntk_t * pNtk );
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
;
Io_MvMan_t
*
p
;
Abc_Lib_t
*
pDesign
;
Abc_Ntk_t
*
pNtk
;
Abc_Lib_t
*
pDesign
;
char
*
pDesignName
;
int
i
;
...
...
@@ -171,18 +171,33 @@ Abc_Lib_t * Io_ReadBlifMv( char * pFileName, int fBlifMv, int fCheck )
if
(
!
Abc_NtkCheckRead
(
pNtk
)
)
{
printf
(
"Io_ReadBlifMv: The network check has failed for network %s.
\n
"
,
pNtk
->
pName
);
Abc_LibFree
(
pDesign
);
Abc_LibFree
(
pDesign
,
NULL
);
return
NULL
;
}
}
}
// pDesign should be linked to all models of the design
Io_WriteBlifMvDesign
(
pDesign
,
"_temp_.mv"
);
Abc_LibPrint
(
pDesign
);
Abc_LibFree
(
pDesign
);
return
NULL
;
// return pDesign;
// extract the master network
pNtk
=
Vec_PtrEntry
(
pDesign
->
vModules
,
0
);
pNtk
->
pDesign
=
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*************************************************************
...
...
@@ -225,7 +240,7 @@ static void Io_MvFree( Io_MvMan_t * p )
Io_MvMod_t
*
pMod
;
int
i
;
if
(
p
->
pDesign
)
Abc_LibFree
(
p
->
pDesign
);
Abc_LibFree
(
p
->
pDesign
,
NULL
);
if
(
p
->
pBuffer
)
free
(
p
->
pBuffer
);
if
(
p
->
vLines
)
...
...
@@ -899,7 +914,10 @@ static int Io_MvParseLineSubckt( Io_MvMod_t * p, char * pLine )
ppNames
=
(
char
**
)
Vec_PtrArray
(
vTokens
)
+
2
+
p
->
pMan
->
fBlifMv
;
// create the box with these terminals
if
(
Abc_NtkHasBlackbox
(
pModel
)
)
pBox
=
Abc_NtkCreateBlackbox
(
p
->
pNtk
);
else
pBox
=
Abc_NtkCreateWhitebox
(
p
->
pNtk
);
pBox
->
pData
=
pModel
;
if
(
p
->
pMan
->
fBlifMv
)
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 )
/**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.]
Description []
...
...
@@ -269,7 +332,7 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
return
;
}
if
(
FileType
==
IO_FILE_BLIF
)
Io_WriteBlif
Netlist
(
pNtkTemp
,
pFileName
,
1
);
Io_WriteBlif
(
pNtkTemp
,
pFileName
,
1
);
else
if
(
FileType
==
IO_FILE_BENCH
)
Io_WriteBench
(
pNtkTemp
,
pFileName
);
else
if
(
FileType
==
IO_FILE_PLA
)
...
...
@@ -293,6 +356,63 @@ void Io_Write( Abc_Ntk_t * pNtk, char * pFileName, Io_FileType_t FileType )
/**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.]
Description []
...
...
src/base/io/ioWriteBlif.c
View file @
b9e0c95b
...
...
@@ -61,7 +61,7 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
fprintf
(
stdout
,
"Writing BLIF has failed.
\n
"
);
return
;
}
Io_WriteBlif
Netlist
(
pNtkTemp
,
FileName
,
fWriteLatches
);
Io_WriteBlif
(
pNtkTemp
,
FileName
,
fWriteLatches
);
Abc_NtkDelete
(
pNtkTemp
);
}
...
...
@@ -76,29 +76,35 @@ void Io_WriteBlifLogic( Abc_Ntk_t * pNtk, char * FileName, int fWriteLatches )
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
;
assert
(
Abc_NtkIsNetlist
(
pNtk
)
);
// start writing the file
pFile
=
fopen
(
FileName
,
"w"
);
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
;
}
fprintf
(
pFile
,
"# Benchmark
\"
%s
\"
written by ABC on %s
\n
"
,
pNtk
->
pName
,
Extra_TimeStamp
()
);
// write the master network
Io_NtkWrite
(
pFile
,
pNtk
,
fWriteLatches
);
// make sure there is no logic hierarchy
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
// write the hierarchy if present
if
(
pNtk
->
tName2Model
)
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
fprintf
(
pFile
,
"
\n\n
"
);
stmm_foreach_item
(
pNtk
->
tName2Model
,
gen
,
NULL
,
(
char
**
)
&
pNtkTemp
)
Abc_Ntk_t
*
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
);
}
}
fclose
(
pFile
);
}
...
...
src/base/io/ioWriteBlifMv.c
View file @
b9e0c95b
...
...
@@ -187,7 +187,8 @@ void Io_NtkWriteBlifMvOne( FILE * pFile, Abc_Ntk_t * pNtk )
}
// write the subcircuits
if
(
!
Abc_NtkBlackboxNum
(
pNtk
)
)
assert
(
Abc_NtkWhiteboxNum
(
pNtk
)
==
0
);
if
(
Abc_NtkBlackboxNum
(
pNtk
)
>
0
)
{
fprintf
(
pFile
,
"
\n
"
);
Abc_NtkForEachBlackbox
(
pNtk
,
pNode
,
i
)
...
...
src/base/main/mainFrame.c
View file @
b9e0c95b
...
...
@@ -142,7 +142,7 @@ void Abc_FrameDeallocate( Abc_Frame_t * p )
undefine_cube_size
();
Rwt_ManGlobalStop
();
// 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
->
dd
)
Extra_StopManager
(
p
->
dd
);
Abc_FrameDeleteAllNetworks
(
p
);
...
...
src/base/ver/verCore.c
View file @
b9e0c95b
...
...
@@ -220,7 +220,7 @@ void Ver_ParseFreeData( Ver_Man_t * p )
}
if
(
p
->
pDesign
)
{
Abc_LibFree
(
p
->
pDesign
);
Abc_LibFree
(
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
if
(
uCanon0
>=
uCanon1
)
// using nCanon1 as the main one
{
assert
(
p
->
pCounters
[
uTruth1
]
>
0
);
uCanonBest
=
0xFFFF
;
uCanonBest
=
0xFFFF
FFFF
;
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth1
];
i
++
)
{
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
{
uCanonBest
=
uCanon0
;
uPhaseBest
=
p
->
uPhases
[
uTruth1
][
i
];
assert
(
uPhaseBest
<
16
);
}
}
uTruthRes
[
0
]
=
(
uCanon1
<<
16
)
|
uCanonBest
;
...
...
@@ -236,7 +237,7 @@ int Map_CanonComputeFast( Map_Man_t * p, int nVarsMax, int nVarsReal, unsigned u
else
if
(
uCanon0
<
uCanon1
)
{
assert
(
p
->
pCounters
[
uTruth0
]
>
0
);
uCanonBest
=
0xFFFF
;
uCanonBest
=
0xFFFF
FFFF
;
for
(
i
=
0
;
i
<
p
->
pCounters
[
uTruth0
];
i
++
)
{
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
{
uCanonBest
=
uCanon1
;
uPhaseBest
=
p
->
uPhases
[
uTruth0
][
i
];
assert
(
uPhaseBest
<
16
);
}
}
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 )
float
aResult
,
aResult2
;
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
assert
(
aResult
==
aResult2
);
//
assert( aResult == aResult2 );
return
aResult
;
}
...
...
@@ -257,7 +257,7 @@ float Map_CutGetAreaDerefed( Map_Cut_t * pCut, int fPhase )
float
aResult
,
aResult2
;
aResult2
=
Map_CutRefDeref
(
pCut
,
fPhase
,
1
);
// reference
aResult
=
Map_CutRefDeref
(
pCut
,
fPhase
,
0
);
// dereference
assert
(
aResult
==
aResult2
);
//
assert( aResult == aResult2 );
return
aResult
;
}
...
...
src/opt/fxu/fxuCreate.c
View file @
b9e0c95b
...
...
@@ -179,7 +179,8 @@ Fxu_Matrix * Fxu_CreateMatrix( Fxu_Data_t * pData )
// consider the case when cube pairs should be preprocessed
// before adding them to the set of divisors
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
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
pnPairCounters
[
pnLitsDiff
[
k
]
]
++
;
// determine what pairs to take starting from the lower
// 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
[
1
]
==
0
);
// otherwise, covers are not SCC-free
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