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
da683846
Commit
da683846
authored
Aug 27, 2012
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added features 'map -M <float>' to control the use of large gates.
parent
9abe8b66
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
76 additions
and
23 deletions
+76
-23
src/base/abci/abc.c
+19
-5
src/base/abci/abcMap.c
+13
-4
src/map/amap/amapLiberty.c
+12
-7
src/map/amap/amapParse.c
+3
-2
src/map/mio/mio.c
+3
-3
src/map/mio/mio.h
+2
-1
src/map/mio/mioUtils.c
+24
-1
No files found.
src/base/abci/abc.c
View file @
da683846
...
@@ -13256,25 +13256,27 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -13256,25 +13256,27 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Ntk_t
*
pNtk
,
*
pNtkRes
;
Abc_Ntk_t
*
pNtk
,
*
pNtkRes
;
char
Buffer
[
100
];
char
Buffer
[
100
];
double
DelayTarget
;
double
DelayTarget
;
double
AreaMulti
;
int
fAreaOnly
;
int
fAreaOnly
;
int
fRecovery
;
int
fRecovery
;
int
fSweep
;
int
fSweep
;
int
fSwitching
;
int
fSwitching
;
int
fVerbose
;
int
fVerbose
;
int
c
;
int
c
;
extern
Abc_Ntk_t
*
Abc_NtkMap
(
Abc_Ntk_t
*
pNtk
,
double
DelayTarget
,
int
fRecovery
,
int
fSwitching
,
int
fVerbose
);
extern
Abc_Ntk_t
*
Abc_NtkMap
(
Abc_Ntk_t
*
pNtk
,
double
DelayTarget
,
double
AreaMulti
,
int
fRecovery
,
int
fSwitching
,
int
fVerbose
);
extern
int
Abc_NtkFraigSweep
(
Abc_Ntk_t
*
pNtk
,
int
fUseInv
,
int
fExdc
,
int
fVerbose
,
int
fVeryVerbose
);
extern
int
Abc_NtkFraigSweep
(
Abc_Ntk_t
*
pNtk
,
int
fUseInv
,
int
fExdc
,
int
fVerbose
,
int
fVeryVerbose
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
pNtk
=
Abc_FrameReadNtk
(
pAbc
);
// set defaults
// set defaults
DelayTarget
=-
1
;
DelayTarget
=-
1
;
AreaMulti
=
0
;
fAreaOnly
=
0
;
fAreaOnly
=
0
;
fRecovery
=
1
;
fRecovery
=
1
;
fSweep
=
1
;
fSweep
=
1
;
fSwitching
=
0
;
fSwitching
=
0
;
fVerbose
=
0
;
fVerbose
=
0
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"Darspvh"
)
)
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"D
M
arspvh"
)
)
!=
EOF
)
{
{
switch
(
c
)
switch
(
c
)
{
{
...
@@ -13289,6 +13291,17 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -13289,6 +13291,17 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
if
(
DelayTarget
<=
0
.
0
)
if
(
DelayTarget
<=
0
.
0
)
goto
usage
;
goto
usage
;
break
;
break
;
case
'M'
:
if
(
globalUtilOptind
>=
argc
)
{
Abc_Print
(
-
1
,
"Command line switch
\"
-M
\"
should be followed by a floating point number.
\n
"
);
goto
usage
;
}
AreaMulti
=
(
float
)
atof
(
argv
[
globalUtilOptind
]);
globalUtilOptind
++
;
if
(
AreaMulti
<
0
.
0
)
goto
usage
;
break
;
case
'a'
:
case
'a'
:
fAreaOnly
^=
1
;
fAreaOnly
^=
1
;
break
;
break
;
...
@@ -13337,7 +13350,7 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -13337,7 +13350,7 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
}
}
Abc_Print
(
0
,
"The network was strashed and balanced before mapping.
\n
"
);
Abc_Print
(
0
,
"The network was strashed and balanced before mapping.
\n
"
);
// get the new network
// get the new network
pNtkRes
=
Abc_NtkMap
(
pNtk
,
DelayTarget
,
fRecovery
,
fSwitching
,
fVerbose
);
pNtkRes
=
Abc_NtkMap
(
pNtk
,
DelayTarget
,
AreaMulti
,
fRecovery
,
fSwitching
,
fVerbose
);
if
(
pNtkRes
==
NULL
)
if
(
pNtkRes
==
NULL
)
{
{
Abc_NtkDelete
(
pNtk
);
Abc_NtkDelete
(
pNtk
);
...
@@ -13349,7 +13362,7 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -13349,7 +13362,7 @@ int Abc_CommandMap( Abc_Frame_t * pAbc, int argc, char ** argv )
else
else
{
{
// get the new network
// get the new network
pNtkRes
=
Abc_NtkMap
(
pNtk
,
DelayTarget
,
fRecovery
,
fSwitching
,
fVerbose
);
pNtkRes
=
Abc_NtkMap
(
pNtk
,
DelayTarget
,
AreaMulti
,
fRecovery
,
fSwitching
,
fVerbose
);
if
(
pNtkRes
==
NULL
)
if
(
pNtkRes
==
NULL
)
{
{
Abc_Print
(
-
1
,
"Mapping has failed.
\n
"
);
Abc_Print
(
-
1
,
"Mapping has failed.
\n
"
);
...
@@ -13369,9 +13382,10 @@ usage:
...
@@ -13369,9 +13382,10 @@ usage:
sprintf
(
Buffer
,
"not used"
);
sprintf
(
Buffer
,
"not used"
);
else
else
sprintf
(
Buffer
,
"%.3f"
,
DelayTarget
);
sprintf
(
Buffer
,
"%.3f"
,
DelayTarget
);
Abc_Print
(
-
2
,
"usage: map [-D float] [-arspvh]
\n
"
);
Abc_Print
(
-
2
,
"usage: map [-D
M
float] [-arspvh]
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs standard cell mapping of the current network
\n
"
);
Abc_Print
(
-
2
,
"
\t
performs standard cell mapping of the current network
\n
"
);
Abc_Print
(
-
2
,
"
\t
-D float : sets the global required times [default = %s]
\n
"
,
Buffer
);
Abc_Print
(
-
2
,
"
\t
-D float : sets the global required times [default = %s]
\n
"
,
Buffer
);
Abc_Print
(
-
2
,
"
\t
-M float :
\"
area multiplier
\"
to discourage large gates [default = %.2f]
\n
"
,
AreaMulti
);
Abc_Print
(
-
2
,
"
\t
-a : toggles area-only mapping [default = %s]
\n
"
,
fAreaOnly
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-a : toggles area-only mapping [default = %s]
\n
"
,
fAreaOnly
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-r : toggles area recovery [default = %s]
\n
"
,
fRecovery
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-r : toggles area recovery [default = %s]
\n
"
,
fRecovery
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-s : toggles sweep after mapping [default = %s]
\n
"
,
fSweep
?
"yes"
:
"no"
);
Abc_Print
(
-
2
,
"
\t
-s : toggles sweep after mapping [default = %s]
\n
"
,
fSweep
?
"yes"
:
"no"
);
...
...
src/base/abci/abcMap.c
View file @
da683846
...
@@ -57,7 +57,7 @@ static Abc_Obj_t * Abc_NodeFromMapSuperChoice_rec( Abc_Ntk_t * pNtkNew, Map_Sup
...
@@ -57,7 +57,7 @@ static Abc_Obj_t * Abc_NodeFromMapSuperChoice_rec( Abc_Ntk_t * pNtkNew, Map_Sup
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
Abc_Ntk_t
*
Abc_NtkMap
(
Abc_Ntk_t
*
pNtk
,
double
DelayTarget
,
int
fRecovery
,
int
fSwitching
,
int
fVerbose
)
Abc_Ntk_t
*
Abc_NtkMap
(
Abc_Ntk_t
*
pNtk
,
double
DelayTarget
,
double
AreaMulti
,
int
fRecovery
,
int
fSwitching
,
int
fVerbose
)
{
{
int
fShowSwitching
=
1
;
int
fShowSwitching
=
1
;
Abc_Ntk_t
*
pNtkNew
;
Abc_Ntk_t
*
pNtkNew
;
...
@@ -65,22 +65,31 @@ Abc_Ntk_t * Abc_NtkMap( Abc_Ntk_t * pNtk, double DelayTarget, int fRecovery, int
...
@@ -65,22 +65,31 @@ Abc_Ntk_t * Abc_NtkMap( Abc_Ntk_t * pNtk, double DelayTarget, int fRecovery, int
Vec_Int_t
*
vSwitching
=
NULL
;
Vec_Int_t
*
vSwitching
=
NULL
;
float
*
pSwitching
=
NULL
;
float
*
pSwitching
=
NULL
;
clock_t
clk
,
clkTotal
=
clock
();
clock_t
clk
,
clkTotal
=
clock
();
Mio_Library_t
*
pLib
=
Abc_FrameReadLibGen
();
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
// check that the library is available
// check that the library is available
if
(
Abc_FrameReadLibGen
()
==
NULL
)
if
(
pLib
==
NULL
)
{
{
printf
(
"The current library is not available.
\n
"
);
printf
(
"The current library is not available.
\n
"
);
return
0
;
return
0
;
}
}
// derive the supergate library
// derive the supergate library
if
(
Abc_FrameReadLibSuper
()
==
NULL
&&
Abc_FrameReadLibGen
()
)
if
(
Abc_FrameReadLibSuper
()
==
NULL
&&
pLib
)
{
{
// printf( "A simple supergate library is derived from gate library \"%s\".\n",
// printf( "A simple supergate library is derived from gate library \"%s\".\n",
// Mio_LibraryReadName((Mio_Library_t *)Abc_FrameReadLibGen()) );
// Mio_LibraryReadName((Mio_Library_t *)Abc_FrameReadLibGen()) );
Map_SuperLibDeriveFromGenlib
(
(
Mio_Library_t
*
)
Abc_FrameReadLibGen
()
);
// penalize large gates by increasing their area
Mio_LibraryShiftArea
(
pLib
,
AreaMulti
);
// compute supergate library to be used for mapping
Map_SuperLibDeriveFromGenlib
(
pLib
);
// return the library to normal
Mio_LibraryShiftArea
(
Abc_FrameReadLibGen
(),
-
AreaMulti
);
if
(
AreaMulti
!=
0
.
0
)
printf
(
"The cell areas are multiplied by the factor: <num_fanins> ^ (%.2f).
\n
"
,
AreaMulti
);
}
}
// print a warning about choice nodes
// print a warning about choice nodes
...
...
src/map/amap/amapLiberty.c
View file @
da683846
...
@@ -345,7 +345,7 @@ char * Amap_LibertyGetStringFormula( Amap_Tree_t * p, Amap_Pair_t Pair )
...
@@ -345,7 +345,7 @@ char * Amap_LibertyGetStringFormula( Amap_Tree_t * p, Amap_Pair_t Pair )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
int
Amap_LibertyPrintGenlib
(
Amap_Tree_t
*
p
,
char
*
pFileName
)
int
Amap_LibertyPrintGenlib
(
Amap_Tree_t
*
p
,
char
*
pFileName
,
int
fVerbose
)
{
{
FILE
*
pFile
;
FILE
*
pFile
;
Amap_Item_t
*
pCell
,
*
pArea
,
*
pFunc
,
*
pPin
,
*
pOutput
;
Amap_Item_t
*
pCell
,
*
pArea
,
*
pFunc
,
*
pPin
,
*
pOutput
;
...
@@ -390,24 +390,28 @@ int Amap_LibertyPrintGenlib( Amap_Tree_t * p, char * pFileName )
...
@@ -390,24 +390,28 @@ int Amap_LibertyPrintGenlib( Amap_Tree_t * p, char * pFileName )
continue
;
continue
;
if
(
Amap_LibertyCellIsFlop
(
p
,
pCell
)
)
if
(
Amap_LibertyCellIsFlop
(
p
,
pCell
)
)
{
{
printf
(
"Amap_LibertyPrintGenlib() skipped sequential cell
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
if
(
fVerbose
)
printf
(
"Amap_LibertyPrintGenlib() skipped sequential cell
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
continue
;
continue
;
}
}
Counter
=
Amap_LibertyCellCountOutputs
(
p
,
pCell
);
Counter
=
Amap_LibertyCellCountOutputs
(
p
,
pCell
);
if
(
Counter
==
0
)
if
(
Counter
==
0
)
{
{
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
without logic function.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
if
(
fVerbose
)
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
without logic function.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
continue
;
continue
;
}
}
if
(
Counter
>
1
)
if
(
Counter
>
1
)
{
{
printf
(
"Amap_LibertyPrintGenlib() skipped multi-output cell
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
if
(
fVerbose
)
printf
(
"Amap_LibertyPrintGenlib() skipped multi-output cell
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
continue
;
continue
;
}
}
pArea
=
Amap_LibertyCellArea
(
p
,
pCell
);
pArea
=
Amap_LibertyCellArea
(
p
,
pCell
);
if
(
pArea
==
NULL
)
if
(
pArea
==
NULL
)
{
{
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
with unspecified area.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
if
(
fVerbose
)
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
with unspecified area.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
)
);
continue
;
continue
;
}
}
pOutput
=
Amap_LibertyCellOutput
(
p
,
pCell
);
pOutput
=
Amap_LibertyCellOutput
(
p
,
pCell
);
...
@@ -415,7 +419,8 @@ int Amap_LibertyPrintGenlib( Amap_Tree_t * p, char * pFileName )
...
@@ -415,7 +419,8 @@ int Amap_LibertyPrintGenlib( Amap_Tree_t * p, char * pFileName )
pForm
=
Amap_LibertyGetStringFormula
(
p
,
pFunc
->
Head
);
pForm
=
Amap_LibertyGetStringFormula
(
p
,
pFunc
->
Head
);
if
(
!
strcmp
(
pForm
,
"0"
)
||
!
strcmp
(
pForm
,
"1"
)
)
if
(
!
strcmp
(
pForm
,
"0"
)
||
!
strcmp
(
pForm
,
"1"
)
)
{
{
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
with constant formula
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
),
pForm
);
if
(
fVerbose
)
printf
(
"Amap_LibertyPrintGenlib() skipped cell
\"
%s
\"
with constant formula
\"
%s
\"
.
\n
"
,
Amap_LibertyGetString
(
p
,
pCell
->
Head
),
pForm
);
continue
;
continue
;
}
}
...
@@ -900,7 +905,7 @@ int Amap_LibertyParse( char * pFileName, char * pFileGenlib, int fVerbose )
...
@@ -900,7 +905,7 @@ int Amap_LibertyParse( char * pFileName, char * pFileGenlib, int fVerbose )
if
(
fVerbose
)
if
(
fVerbose
)
printf
(
"Parsing finished successfully.
\n
"
);
printf
(
"Parsing finished successfully.
\n
"
);
// Amap_LibertyPrintLiberty( p, "temp_.lib" );
// Amap_LibertyPrintLiberty( p, "temp_.lib" );
Amap_LibertyPrintGenlib
(
p
,
"temp.genlib"
);
Amap_LibertyPrintGenlib
(
p
,
"temp.genlib"
,
fVerbose
);
RetValue
=
1
;
RetValue
=
1
;
}
}
else
else
...
...
src/map/amap/amapParse.c
View file @
da683846
...
@@ -434,7 +434,8 @@ int Amap_LibParseEquations( Amap_Lib_t * p, int fVerbose )
...
@@ -434,7 +434,8 @@ int Amap_LibParseEquations( Amap_Lib_t * p, int fVerbose )
pTruth
=
Hop_ManConvertAigToTruth
(
pMan
,
pObj
,
pGate
->
nPins
,
vTruth
,
0
);
pTruth
=
Hop_ManConvertAigToTruth
(
pMan
,
pObj
,
pGate
->
nPins
,
vTruth
,
0
);
if
(
Kit_TruthSupportSize
(
pTruth
,
pGate
->
nPins
)
<
(
int
)
pGate
->
nPins
)
if
(
Kit_TruthSupportSize
(
pTruth
,
pGate
->
nPins
)
<
(
int
)
pGate
->
nPins
)
{
{
printf
(
"Skipping gate
\"
%s
\"
because its output
\"
%s
\"
does not depend on all input variables.
\n
"
,
pGate
->
pName
,
pGate
->
pForm
);
if
(
fVerbose
)
printf
(
"Skipping gate
\"
%s
\"
because its output
\"
%s
\"
does not depend on all input variables.
\n
"
,
pGate
->
pName
,
pGate
->
pForm
);
continue
;
continue
;
}
}
pGate
->
pFunc
=
(
unsigned
*
)
Aig_MmFlexEntryFetch
(
p
->
pMemGates
,
sizeof
(
unsigned
)
*
Abc_TruthWordNum
(
pGate
->
nPins
)
);
pGate
->
pFunc
=
(
unsigned
*
)
Aig_MmFlexEntryFetch
(
p
->
pMemGates
,
sizeof
(
unsigned
)
*
Abc_TruthWordNum
(
pGate
->
nPins
)
);
...
@@ -459,7 +460,7 @@ int Amap_LibParseEquations( Amap_Lib_t * p, int fVerbose )
...
@@ -459,7 +460,7 @@ int Amap_LibParseEquations( Amap_Lib_t * p, int fVerbose )
***********************************************************************/
***********************************************************************/
void
Amap_LibParseTest
(
char
*
pFileName
)
void
Amap_LibParseTest
(
char
*
pFileName
)
{
{
int
fVerbose
=
1
;
int
fVerbose
=
0
;
Amap_Lib_t
*
p
;
Amap_Lib_t
*
p
;
clock_t
clk
=
clock
();
clock_t
clk
=
clock
();
p
=
Amap_LibReadFile
(
pFileName
,
fVerbose
);
p
=
Amap_LibReadFile
(
pFileName
,
fVerbose
);
...
...
src/map/mio/mio.c
View file @
da683846
...
@@ -161,7 +161,7 @@ int Mio_CommandReadLiberty( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -161,7 +161,7 @@ int Mio_CommandReadLiberty( Abc_Frame_t * pAbc, int argc, char **argv )
pErr
=
Abc_FrameReadErr
(
pAbc
);
pErr
=
Abc_FrameReadErr
(
pAbc
);
// set the defaults
// set the defaults
fVerbose
=
1
;
fVerbose
=
0
;
Extra_UtilGetoptReset
();
Extra_UtilGetoptReset
();
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
))
!=
EOF
)
while
(
(
c
=
Extra_UtilGetopt
(
argc
,
argv
,
"vh"
))
!=
EOF
)
{
{
...
@@ -295,7 +295,7 @@ int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -295,7 +295,7 @@ int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
}
}
// add the fixed number (wire delay) to all delays in the library
// add the fixed number (wire delay) to all delays in the library
if
(
WireDelay
!=
0
.
0
)
if
(
WireDelay
!=
0
.
0
)
Mio_LibraryShift
(
pLib
,
WireDelay
);
Mio_LibraryShift
Delay
(
pLib
,
WireDelay
);
// free the current superlib because it depends on the old Mio library
// free the current superlib because it depends on the old Mio library
if
(
Abc_FrameReadLibSuper
()
)
if
(
Abc_FrameReadLibSuper
()
)
...
@@ -309,7 +309,7 @@ int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -309,7 +309,7 @@ int Mio_CommandReadLibrary( Abc_Frame_t * pAbc, int argc, char **argv )
Abc_FrameSetLibGen
(
pLib
);
Abc_FrameSetLibGen
(
pLib
);
// set the new network
// set the new network
pLib
=
(
Mio_Library_t
*
)
Amap_LibReadAndPrepare
(
FileName
,
1
,
0
);
pLib
=
(
Mio_Library_t
*
)
Amap_LibReadAndPrepare
(
FileName
,
0
,
0
);
if
(
pLib
==
NULL
)
if
(
pLib
==
NULL
)
{
{
fprintf
(
pErr
,
"Reading GENLIB library has failed.
\n
"
);
fprintf
(
pErr
,
"Reading GENLIB library has failed.
\n
"
);
...
...
src/map/mio/mio.h
View file @
da683846
...
@@ -149,7 +149,8 @@ extern void Mio_DeriveGateDelays( Mio_Gate_t * pGate,
...
@@ -149,7 +149,8 @@ extern void Mio_DeriveGateDelays( Mio_Gate_t * pGate,
float
**
ptPinDelays
,
int
nPins
,
int
nInputs
,
float
tDelayZero
,
float
**
ptPinDelays
,
int
nPins
,
int
nInputs
,
float
tDelayZero
,
float
*
ptDelaysRes
,
float
*
ptPinDelayMax
);
float
*
ptDelaysRes
,
float
*
ptPinDelayMax
);
extern
Mio_Gate_t
*
Mio_GateCreatePseudo
(
int
nInputs
);
extern
Mio_Gate_t
*
Mio_GateCreatePseudo
(
int
nInputs
);
extern
void
Mio_LibraryShift
(
Mio_Library_t
*
pLib
,
double
Shift
);
extern
void
Mio_LibraryShiftDelay
(
Mio_Library_t
*
pLib
,
double
Shift
);
extern
void
Mio_LibraryShiftArea
(
Mio_Library_t
*
pLib
,
double
Shift
);
ABC_NAMESPACE_HEADER_END
ABC_NAMESPACE_HEADER_END
...
...
src/map/mio/mioUtils.c
View file @
da683846
...
@@ -16,6 +16,7 @@
...
@@ -16,6 +16,7 @@
***********************************************************************/
***********************************************************************/
#include <math.h>
#include "mioInt.h"
#include "mioInt.h"
#include "base/main/main.h"
#include "base/main/main.h"
#include "exp.h"
#include "exp.h"
...
@@ -591,7 +592,7 @@ Mio_Gate_t * Mio_GateCreatePseudo( int nInputs )
...
@@ -591,7 +592,7 @@ Mio_Gate_t * Mio_GateCreatePseudo( int nInputs )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Mio_LibraryShift
(
Mio_Library_t
*
pLib
,
double
Shift
)
void
Mio_LibraryShift
Delay
(
Mio_Library_t
*
pLib
,
double
Shift
)
{
{
Mio_Gate_t
*
pGate
;
Mio_Gate_t
*
pGate
;
Mio_Pin_t
*
pPin
;
Mio_Pin_t
*
pPin
;
...
@@ -607,6 +608,28 @@ void Mio_LibraryShift( Mio_Library_t * pLib, double Shift )
...
@@ -607,6 +608,28 @@ void Mio_LibraryShift( Mio_Library_t * pLib, double Shift )
}
}
}
}
/**Function*************************************************************
Synopsis [Multiply areas of all gates by values proportional to fanin count.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
void
Mio_LibraryShiftArea
(
Mio_Library_t
*
pLib
,
double
Shift
)
{
Mio_Gate_t
*
pGate
;
Mio_LibraryForEachGate
(
pLib
,
pGate
)
{
// printf( "Before %8.3f ", pGate->dArea );
pGate
->
dArea
*=
pow
(
pGate
->
nInputs
,
Shift
);
// printf( "After %8.3f Inputs = %d. Factor = %8.3f\n", pGate->dArea, pGate->nInputs, pow( pGate->nInputs, Shift ) );
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
/// END OF FILE ///
...
...
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