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
6c19c1df
Commit
6c19c1df
authored
Dec 29, 2011
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Delay optimization using precomputed library.
parent
fce98abf
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
29 additions
and
11 deletions
+29
-11
src/base/abc/abc.h
+3
-2
src/base/abci/abc.c
+0
-0
src/base/abci/abcIf.c
+7
-2
src/base/abci/abcRec.c
+0
-0
src/map/if/if.h
+4
-0
src/map/if/ifMap.c
+15
-7
No files found.
src/base/abc/abc.h
View file @
6c19c1df
...
...
@@ -772,13 +772,14 @@ extern ABC_DLL void Abc_NtkShow6VarFunc( char * pF0, char * pF1 );
extern
ABC_DLL
int
Abc_NtkMiterProve
(
Abc_Ntk_t
**
ppNtk
,
void
*
pParams
);
extern
ABC_DLL
int
Abc_NtkIvyProve
(
Abc_Ntk_t
**
ppNtk
,
void
*
pPars
);
/*=== abcRec.c ==========================================================*/
extern
ABC_DLL
void
Abc_NtkRecStart
(
Abc_Ntk_t
*
pNtk
,
int
nVars
,
int
nCuts
);
extern
ABC_DLL
void
Abc_NtkRecStart
(
Abc_Ntk_t
*
pNtk
,
int
nVars
,
int
nCuts
,
int
fTrim
);
extern
ABC_DLL
void
Abc_NtkRecStop
();
extern
ABC_DLL
void
Abc_NtkRecAdd
(
Abc_Ntk_t
*
pNtk
);
extern
ABC_DLL
void
Abc_NtkRecPs
();
extern
ABC_DLL
void
Abc_NtkRecFilter
(
int
iVar
,
int
iPlus
);
extern
ABC_DLL
void
Abc_NtkRecFilter
(
int
nLimit
);
extern
ABC_DLL
Abc_Ntk_t
*
Abc_NtkRecUse
();
extern
ABC_DLL
int
Abc_NtkRecIsRunning
();
extern
ABC_DLL
int
Abc_NtkRecIsInTrimMode
();
extern
ABC_DLL
int
Abc_NtkRecVarNum
();
extern
ABC_DLL
Vec_Int_t
*
Abc_NtkRecMemory
();
extern
ABC_DLL
int
Abc_NtkRecStrashNode
(
Abc_Ntk_t
*
pNtkNew
,
Abc_Obj_t
*
pObj
,
unsigned
*
pTruth
,
int
nVars
);
...
...
src/base/abci/abc.c
View file @
6c19c1df
This diff is collapsed.
Click to expand it.
src/base/abci/abcIf.c
View file @
6c19c1df
...
...
@@ -83,7 +83,7 @@ void Abc_NtkIfComputeSwitching( Abc_Ntk_t * pNtk, If_Man_t * pIfMan )
if
(
(
pObjAig
=
(
Aig_Obj_t
*
)
pObjAbc
->
pTemp
)
)
{
pObjAbc
->
dTemp
=
pSwitching
[
pObjAig
->
Id
];
// J. Anderson and F. N. Najm, Power-Aware Technology Mapping for LUT-Based FPGAs,
// J. Anderson and F. N. Najm, Power-Aware Technology Mapping for LUT-Based FPGAs,
// IEEE Intl. Conf. on Field-Programmable Technology, 2002.
// pObjAbc->dTemp = (1.55 + 1.05 / (float) Abc_ObjFanoutNum(pObjAbc)) * pSwitching[pObjAig->Id];
}
...
...
@@ -436,7 +436,7 @@ Abc_Obj_t * Abc_NodeFromIf_rec( Abc_Ntk_t * pNtkNew, If_Man_t * pIfMan, If_Obj_t
pCutBest
=
If_ObjCutBest
(
pIfObj
);
// printf( "%d 0x%02X %d\n", pCutBest->nLeaves, 0xff & *If_CutTruth(pCutBest), pIfMan->pPars->pFuncCost(pCutBest) );
// if ( pIfMan->pPars->pLutLib && pIfMan->pPars->pLutLib->fVarPinDelays )
if
(
!
pIfMan
->
pPars
->
fDelayOpt
&&
!
pIfMan
->
pPars
->
pLutStruct
)
if
(
!
pIfMan
->
pPars
->
fDelayOpt
&&
!
pIfMan
->
pPars
->
pLutStruct
&&
!
pIfMan
->
pPars
->
fUserRecLib
)
If_CutRotatePins
(
pIfMan
,
pCutBest
);
if
(
pIfMan
->
pPars
->
fUseCnfs
||
pIfMan
->
pPars
->
fUseMv
)
{
...
...
@@ -488,6 +488,11 @@ Abc_Obj_t * Abc_NodeFromIf_rec( Abc_Ntk_t * pNtkNew, If_Man_t * pIfMan, If_Obj_t
extern
Hop_Obj_t
*
Abc_NodeTruthToHop
(
Hop_Man_t
*
pMan
,
If_Man_t
*
pIfMan
,
If_Cut_t
*
pCut
);
pNodeNew
->
pData
=
Abc_NodeTruthToHop
(
(
Hop_Man_t
*
)
pNtkNew
->
pManFunc
,
pIfMan
,
pCutBest
);
}
else
if
(
pIfMan
->
pPars
->
fUserRecLib
)
{
extern
Hop_Obj_t
*
Abc_RecToHop
(
Hop_Man_t
*
pMan
,
If_Man_t
*
pIfMan
,
If_Cut_t
*
pCut
);
pNodeNew
->
pData
=
Abc_RecToHop
(
(
Hop_Man_t
*
)
pNtkNew
->
pManFunc
,
pIfMan
,
pCutBest
);
}
else
{
extern
Hop_Obj_t
*
Kit_TruthToHop
(
Hop_Man_t
*
pMan
,
unsigned
*
pTruth
,
int
nVars
,
Vec_Int_t
*
vMemory
);
...
...
src/base/abci/abcRec.c
View file @
6c19c1df
This diff is collapsed.
Click to expand it.
src/map/if/if.h
View file @
6c19c1df
...
...
@@ -105,6 +105,7 @@ struct If_Par_t_
float
WireDelay
;
// wire delay
// internal parameters
int
fDelayOpt
;
// special delay optimization
int
fUserRecLib
;
// use recorded library
int
fAreaOnly
;
// area only mode
int
fTruth
;
// truth table computation enabled
int
fUsePerm
;
// use permutation (delay info)
...
...
@@ -497,6 +498,9 @@ extern Vec_Int_t * If_ManCollectMappingInt( If_Man_t * p );
extern
int
If_ManCountSpecialPos
(
If_Man_t
*
p
);
/*=== abcRec.c ============================================================*/
extern
int
If_CutDelayRecCost
(
If_Man_t
*
p
,
If_Cut_t
*
pCut
);
// othe packages
extern
int
Bat_ManCellFuncLookup
(
unsigned
*
pTruth
,
int
nVars
,
int
nLeaves
);
...
...
src/map/if/ifMap.c
View file @
6c19c1df
...
...
@@ -20,8 +20,8 @@
#include "if.h"
ABC_NAMESPACE_IMPL_START
ABC_NAMESPACE_IMPL_START
////////////////////////////////////////////////////////////////////////
/// DECLARATIONS ///
...
...
@@ -93,7 +93,7 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
If_Set_t
*
pCutSet
;
If_Cut_t
*
pCut0
,
*
pCut1
,
*
pCut
;
int
i
,
k
;
// assert( p->pPars->fSeqMap || !If_ObjIsAnd(pObj->pFanin0) || pObj->pFanin0->pCutSet->nCuts > 1 );
// assert( p->pPars->fSeqMap || !If_ObjIsAnd(pObj->pFanin1) || pObj->pFanin1->pCutSet->nCuts > 1 );
...
...
@@ -156,8 +156,10 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
/// if ( p->pPars->pLutStruct )
/// pCut->Delay = If_CutDelayLutStruct( p, pCut, p->pPars->pLutStruct, p->pPars->WireDelay );
// else if ( p->pPars->fDelayOpt )
if
(
p
->
pPars
->
fDelayOpt
)
pCut
->
Delay
=
If_CutDelaySopCost
(
p
,
pCut
);
if
(
p
->
pPars
->
fUserRecLib
)
pCut
->
Delay
=
If_CutDelayRecCost
(
p
,
pCut
);
else
if
(
p
->
pPars
->
fDelayOpt
)
pCut
->
Delay
=
If_CutDelaySopCost
(
p
,
pCut
);
else
pCut
->
Delay
=
If_CutDelay
(
p
,
pObj
,
pCut
);
// assert( pCut->Delay <= pObj->Required + p->fEpsilon );
...
...
@@ -224,8 +226,10 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
/// if ( p->pPars->pLutStruct )
/// pCut->Delay = If_CutDelayLutStruct( p, pCut, p->pPars->pLutStruct, p->pPars->WireDelay );
// else if ( p->pPars->fDelayOpt )
if
(
p
->
pPars
->
fDelayOpt
)
pCut
->
Delay
=
If_CutDelaySopCost
(
p
,
pCut
);
if
(
p
->
pPars
->
fUserRecLib
)
pCut
->
Delay
=
If_CutDelayRecCost
(
p
,
pCut
);
else
if
(
p
->
pPars
->
fDelayOpt
)
pCut
->
Delay
=
If_CutDelaySopCost
(
p
,
pCut
);
else
pCut
->
Delay
=
If_CutDelay
(
p
,
pObj
,
pCut
);
// Abc_Print( 1, "%.2f ", pCut->Delay );
...
...
@@ -252,9 +256,12 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
// update the best cut
if
(
!
fPreprocess
||
pCutSet
->
ppCuts
[
0
]
->
Delay
<=
pObj
->
Required
+
p
->
fEpsilon
)
{
If_CutCopy
(
p
,
If_ObjCutBest
(
pObj
),
pCutSet
->
ppCuts
[
0
]
);
if
(
p
->
pPars
->
fUserRecLib
)
assert
(
If_ObjCutBest
(
pObj
)
->
Cost
<
IF_COST_MAX
&&
If_ObjCutBest
(
pObj
)
->
Delay
<
ABC_INFINITY
);
}
assert
(
p
->
pPars
->
fSeqMap
||
If_ObjCutBest
(
pObj
)
->
nLeaves
>
1
);
// ref the selected cut
if
(
Mode
&&
pObj
->
nRefs
>
0
)
If_CutAreaRef
(
p
,
If_ObjCutBest
(
pObj
)
);
...
...
@@ -266,6 +273,7 @@ void If_ObjPerformMappingAnd( If_Man_t * p, If_Obj_t * pObj, int Mode, int fPrep
If_ObjForEachCut
(
pObj
,
pCut
,
i
)
p
->
pPars
->
pFuncUser
(
p
,
pObj
,
pCut
);
// free the cuts
If_ManDerefNodeCutSet
(
p
,
pObj
);
}
...
...
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