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
00efa680
Commit
00efa680
authored
Nov 21, 2013
by
Alan Mishchenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Several changes to allow Liberty files without delay info.
parent
962ad3b0
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
67 additions
and
19 deletions
+67
-19
src/base/abci/abcMap.c
+1
-1
src/base/abci/abcPrint.c
+1
-1
src/map/mio/mio.h
+1
-0
src/map/scl/scl.c
+16
-6
src/map/scl/sclLib.h
+3
-0
src/map/scl/sclLibUtil.c
+45
-11
No files found.
src/base/abci/abcMap.c
View file @
00efa680
...
@@ -71,7 +71,7 @@ Abc_Ntk_t * Abc_NtkMap( Abc_Ntk_t * pNtk, double DelayTarget, double AreaMulti,
...
@@ -71,7 +71,7 @@ Abc_Ntk_t * Abc_NtkMap( Abc_Ntk_t * pNtk, double DelayTarget, double AreaMulti,
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
assert
(
Abc_NtkIsStrash
(
pNtk
)
);
// derive library from SCL
// derive library from SCL
// if the library is created here, it will be deleted when pSuperLib is deleted in Map_SuperLibFree()
// if the library is created here, it will be deleted when pSuperLib is deleted in Map_SuperLibFree()
if
(
Abc_FrameReadLibScl
()
)
if
(
Abc_FrameReadLibScl
()
&&
Abc_SclHasDelayInfo
(
Abc_FrameReadLibScl
()
)
)
{
{
pLib
=
Abc_SclDeriveGenlib
(
Abc_FrameReadLibScl
(),
Slew
,
Gain
,
nGatesMin
,
fVerbose
);
pLib
=
Abc_SclDeriveGenlib
(
Abc_FrameReadLibScl
(),
Slew
,
Gain
,
nGatesMin
,
fVerbose
);
if
(
Abc_FrameReadLibGen
()
)
if
(
Abc_FrameReadLibGen
()
)
...
...
src/base/abci/abcPrint.c
View file @
00efa680
...
@@ -1034,7 +1034,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
...
@@ -1034,7 +1034,7 @@ void Abc_NtkPrintGates( Abc_Ntk_t * pNtk, int fUseLibrary )
}
}
// determine the longest gate name
// determine the longest gate name
nGateNameLen
=
0
;
nGateNameLen
=
5
;
for
(
i
=
0
;
i
<
nGates
;
i
++
)
for
(
i
=
0
;
i
<
nGates
;
i
++
)
{
{
Counter
=
Mio_GateReadValue
(
ppGates
[
i
]
);
Counter
=
Mio_GateReadValue
(
ppGates
[
i
]
);
...
...
src/map/mio/mio.h
View file @
00efa680
...
@@ -165,6 +165,7 @@ extern void Mio_LibraryTransferDelays( Mio_Library_t * pLibD, Mio_L
...
@@ -165,6 +165,7 @@ extern void Mio_LibraryTransferDelays( Mio_Library_t * pLibD, Mio_L
/*=== sclUtil.c =========================================================*/
/*=== sclUtil.c =========================================================*/
extern
Mio_Library_t
*
Abc_SclDeriveGenlibSimple
(
void
*
pScl
);
extern
Mio_Library_t
*
Abc_SclDeriveGenlibSimple
(
void
*
pScl
);
extern
Mio_Library_t
*
Abc_SclDeriveGenlib
(
void
*
pScl
,
float
Slew
,
float
Gain
,
int
nGatesMin
,
int
fVerbose
);
extern
Mio_Library_t
*
Abc_SclDeriveGenlib
(
void
*
pScl
,
float
Slew
,
float
Gain
,
int
nGatesMin
,
int
fVerbose
);
extern
int
Abc_SclHasDelayInfo
(
void
*
pScl
);
ABC_NAMESPACE_HEADER_END
ABC_NAMESPACE_HEADER_END
...
...
src/map/scl/scl.c
View file @
00efa680
...
@@ -958,6 +958,11 @@ int Scl_CommandBuffer( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -958,6 +958,11 @@ int Scl_CommandBuffer( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print
(
-
1
,
"Fanin phase information is not avaiable.
\n
"
);
Abc_Print
(
-
1
,
"Fanin phase information is not avaiable.
\n
"
);
return
1
;
return
1
;
}
}
if
(
!
pAbc
->
pLibScl
||
!
Abc_SclHasDelayInfo
(
pAbc
->
pLibScl
)
)
{
Abc_Print
(
-
1
,
"Library delay info is not available.
\n
"
);
return
1
;
}
// modify the current network
// modify the current network
pNtkRes
=
Abc_SclBufferingPerform
(
pNtk
,
(
SC_Lib
*
)
pAbc
->
pLibScl
,
pPars
);
pNtkRes
=
Abc_SclBufferingPerform
(
pNtk
,
(
SC_Lib
*
)
pAbc
->
pLibScl
,
pPars
);
if
(
pNtkRes
==
NULL
)
if
(
pNtkRes
==
NULL
)
...
@@ -1089,6 +1094,11 @@ int Scl_CommandBufferOld( Abc_Frame_t * pAbc, int argc, char ** argv )
...
@@ -1089,6 +1094,11 @@ int Scl_CommandBufferOld( Abc_Frame_t * pAbc, int argc, char ** argv )
Abc_Print
(
-
1
,
"Fanin phase information is not avaiable.
\n
"
);
Abc_Print
(
-
1
,
"Fanin phase information is not avaiable.
\n
"
);
return
1
;
return
1
;
}
}
if
(
!
pAbc
->
pLibScl
||
!
Abc_SclHasDelayInfo
(
pAbc
->
pLibScl
)
)
{
Abc_Print
(
-
1
,
"Library delay info is not available.
\n
"
);
return
1
;
}
// modify the current network
// modify the current network
if
(
fAddInvs
)
if
(
fAddInvs
)
...
@@ -1428,9 +1438,9 @@ int Scl_CommandUpsize( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1428,9 +1438,9 @@ int Scl_CommandUpsize( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
return
1
;
return
1
;
}
}
if
(
pAbc
->
pLibScl
==
NULL
)
if
(
!
pAbc
->
pLibScl
||
!
Abc_SclHasDelayInfo
(
pAbc
->
pLibScl
)
)
{
{
fprintf
(
pAbc
->
Err
,
"There is no Liberty library
available.
\n
"
);
Abc_Print
(
-
1
,
"Library delay info is not
available.
\n
"
);
return
1
;
return
1
;
}
}
...
@@ -1605,9 +1615,9 @@ int Scl_CommandDnsize( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1605,9 +1615,9 @@ int Scl_CommandDnsize( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
return
1
;
return
1
;
}
}
if
(
pAbc
->
pLibScl
==
NULL
)
if
(
!
pAbc
->
pLibScl
||
!
Abc_SclHasDelayInfo
(
pAbc
->
pLibScl
)
)
{
{
fprintf
(
pAbc
->
Err
,
"There is no Liberty library
available.
\n
"
);
Abc_Print
(
-
1
,
"Library delay info is not
available.
\n
"
);
return
1
;
return
1
;
}
}
...
@@ -1678,9 +1688,9 @@ int Scl_CommandPrintBuf( Abc_Frame_t * pAbc, int argc, char **argv )
...
@@ -1678,9 +1688,9 @@ int Scl_CommandPrintBuf( Abc_Frame_t * pAbc, int argc, char **argv )
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
fprintf
(
pAbc
->
Err
,
"The current network is not in a topo order (run
\"
topo
\"
).
\n
"
);
return
1
;
return
1
;
}
}
if
(
pAbc
->
pLibScl
==
NULL
)
if
(
!
pAbc
->
pLibScl
||
!
Abc_SclHasDelayInfo
(
pAbc
->
pLibScl
)
)
{
{
fprintf
(
pAbc
->
Err
,
"There is no Liberty library
available.
\n
"
);
Abc_Print
(
-
1
,
"Library delay info is not
available.
\n
"
);
return
1
;
return
1
;
}
}
...
...
src/map/scl/sclLib.h
View file @
00efa680
...
@@ -559,6 +559,8 @@ static inline SC_Timing * Scl_CellPinTime( SC_Cell * pCell, int iPin )
...
@@ -559,6 +559,8 @@ static inline SC_Timing * Scl_CellPinTime( SC_Cell * pCell, int iPin )
pPin
=
SC_CellPin
(
pCell
,
pCell
->
n_inputs
);
pPin
=
SC_CellPin
(
pCell
,
pCell
->
n_inputs
);
assert
(
Vec_PtrSize
(
pPin
->
vRTimings
)
==
pCell
->
n_inputs
);
assert
(
Vec_PtrSize
(
pPin
->
vRTimings
)
==
pCell
->
n_inputs
);
pRTime
=
(
SC_Timings
*
)
Vec_PtrEntry
(
pPin
->
vRTimings
,
iPin
);
pRTime
=
(
SC_Timings
*
)
Vec_PtrEntry
(
pPin
->
vRTimings
,
iPin
);
if
(
Vec_PtrSize
(
pRTime
->
vTimings
)
==
0
)
return
NULL
;
assert
(
Vec_PtrSize
(
pRTime
->
vTimings
)
==
1
);
assert
(
Vec_PtrSize
(
pRTime
->
vTimings
)
==
1
);
return
(
SC_Timing
*
)
Vec_PtrEntry
(
pRTime
->
vTimings
,
0
);
return
(
SC_Timing
*
)
Vec_PtrEntry
(
pRTime
->
vTimings
,
0
);
}
}
...
@@ -610,6 +612,7 @@ extern SC_Cell * Abc_SclFindInvertor( SC_Lib * p, int fFindBuff );
...
@@ -610,6 +612,7 @@ extern SC_Cell * Abc_SclFindInvertor( SC_Lib * p, int fFindBuff );
extern
SC_Cell
*
Abc_SclFindSmallestGate
(
SC_Cell
*
p
,
float
CinMin
);
extern
SC_Cell
*
Abc_SclFindSmallestGate
(
SC_Cell
*
p
,
float
CinMin
);
extern
SC_WireLoad
*
Abc_SclFindWireLoadModel
(
SC_Lib
*
p
,
float
Area
);
extern
SC_WireLoad
*
Abc_SclFindWireLoadModel
(
SC_Lib
*
p
,
float
Area
);
extern
SC_WireLoad
*
Abc_SclFetchWireLoadModel
(
SC_Lib
*
p
,
char
*
pName
);
extern
SC_WireLoad
*
Abc_SclFetchWireLoadModel
(
SC_Lib
*
p
,
char
*
pName
);
extern
int
Abc_SclHasDelayInfo
(
void
*
pScl
);
extern
float
Abc_SclComputeAverageSlew
(
SC_Lib
*
p
);
extern
float
Abc_SclComputeAverageSlew
(
SC_Lib
*
p
);
extern
void
Abc_SclDumpGenlib
(
char
*
pFileName
,
SC_Lib
*
p
,
float
Slew
,
float
Gain
,
int
nGatesMin
);
extern
void
Abc_SclDumpGenlib
(
char
*
pFileName
,
SC_Lib
*
p
,
float
Slew
,
float
Gain
,
int
nGatesMin
);
extern
void
Abc_SclInstallGenlib
(
void
*
pScl
,
float
Slew
,
float
Gain
,
int
nGatesMin
);
extern
void
Abc_SclInstallGenlib
(
void
*
pScl
,
float
Slew
,
float
Gain
,
int
nGatesMin
);
...
...
src/map/scl/sclLibUtil.c
View file @
00efa680
...
@@ -280,6 +280,31 @@ SC_WireLoad * Abc_SclFindWireLoadModel( SC_Lib * p, float Area )
...
@@ -280,6 +280,31 @@ SC_WireLoad * Abc_SclFindWireLoadModel( SC_Lib * p, float Area )
/**Function*************************************************************
/**Function*************************************************************
Synopsis [Returns 1 if the library has delay info.]
Description []
SideEffects []
SeeAlso []
***********************************************************************/
int
Abc_SclHasDelayInfo
(
void
*
pScl
)
{
SC_Lib
*
p
=
(
SC_Lib
*
)
pScl
;
SC_Cell
*
pCell
;
SC_Timing
*
pTime
;
pCell
=
Abc_SclFindInvertor
(
p
,
0
);
if
(
pCell
==
NULL
)
return
0
;
pTime
=
Scl_CellPinTime
(
pCell
,
0
);
if
(
pTime
==
NULL
)
return
0
;
return
1
;
}
/**Function*************************************************************
Synopsis [Returns "average" slew.]
Synopsis [Returns "average" slew.]
Description []
Description []
...
@@ -298,6 +323,8 @@ float Abc_SclComputeAverageSlew( SC_Lib * p )
...
@@ -298,6 +323,8 @@ float Abc_SclComputeAverageSlew( SC_Lib * p )
if
(
pCell
==
NULL
)
if
(
pCell
==
NULL
)
return
0
;
return
0
;
pTime
=
Scl_CellPinTime
(
pCell
,
0
);
pTime
=
Scl_CellPinTime
(
pCell
,
0
);
if
(
pTime
==
NULL
)
return
0
;
vIndex
=
pTime
->
pCellRise
->
vIndex0
;
// slew
vIndex
=
pTime
->
pCellRise
->
vIndex0
;
// slew
return
Vec_FltEntry
(
vIndex
,
Vec_FltSize
(
vIndex
)
/
3
);
return
Vec_FltEntry
(
vIndex
,
Vec_FltSize
(
vIndex
)
/
3
);
}
}
...
@@ -313,7 +340,7 @@ float Abc_SclComputeAverageSlew( SC_Lib * p )
...
@@ -313,7 +340,7 @@ float Abc_SclComputeAverageSlew( SC_Lib * p )
SeeAlso []
SeeAlso []
***********************************************************************/
***********************************************************************/
void
Abc_SclComputeParametersPin
(
SC_Lib
*
p
,
SC_Cell
*
pCell
,
int
iPin
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
int
Abc_SclComputeParametersPin
(
SC_Lib
*
p
,
SC_Cell
*
pCell
,
int
iPin
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
{
{
SC_Pair
Load0
,
Load1
,
Load2
;
SC_Pair
Load0
,
Load1
,
Load2
;
SC_Pair
ArrIn
=
{
0
.
0
,
0
.
0
};
SC_Pair
ArrIn
=
{
0
.
0
,
0
.
0
};
...
@@ -323,7 +350,9 @@ void Abc_SclComputeParametersPin( SC_Lib * p, SC_Cell * pCell, int iPin, float S
...
@@ -323,7 +350,9 @@ void Abc_SclComputeParametersPin( SC_Lib * p, SC_Cell * pCell, int iPin, float S
SC_Pair
ArrOut2
=
{
0
.
0
,
0
.
0
};
SC_Pair
ArrOut2
=
{
0
.
0
,
0
.
0
};
SC_Pair
SlewOut
=
{
0
.
0
,
0
.
0
};
SC_Pair
SlewOut
=
{
0
.
0
,
0
.
0
};
SC_Timing
*
pTime
=
Scl_CellPinTime
(
pCell
,
iPin
);
SC_Timing
*
pTime
=
Scl_CellPinTime
(
pCell
,
iPin
);
Vec_Flt_t
*
vIndex
=
pTime
->
pCellRise
->
vIndex1
;
// capacitance
Vec_Flt_t
*
vIndex
=
pTime
?
pTime
->
pCellRise
->
vIndex1
:
NULL
;
// capacitance
if
(
vIndex
==
NULL
)
return
0
;
// get load points
// get load points
Load0
.
rise
=
Load0
.
fall
=
0
.
0
;
Load0
.
rise
=
Load0
.
fall
=
0
.
0
;
Load1
.
rise
=
Load1
.
fall
=
Vec_FltEntry
(
vIndex
,
0
);
Load1
.
rise
=
Load1
.
fall
=
Vec_FltEntry
(
vIndex
,
0
);
...
@@ -339,8 +368,9 @@ void Abc_SclComputeParametersPin( SC_Lib * p, SC_Cell * pCell, int iPin, float S
...
@@ -339,8 +368,9 @@ void Abc_SclComputeParametersPin( SC_Lib * p, SC_Cell * pCell, int iPin, float S
*
pLD
=
(
ArrOut2
.
rise
-
ArrOut1
.
rise
)
/
((
Load2
.
rise
-
Load1
.
rise
)
/
SC_CellPinCap
(
pCell
,
iPin
));
*
pLD
=
(
ArrOut2
.
rise
-
ArrOut1
.
rise
)
/
((
Load2
.
rise
-
Load1
.
rise
)
/
SC_CellPinCap
(
pCell
,
iPin
));
// get constant
// get constant
*
pPD
=
ArrOut0
.
rise
;
*
pPD
=
ArrOut0
.
rise
;
return
1
;
}
}
void
Abc_SclComputeParametersCell
(
SC_Lib
*
p
,
SC_Cell
*
pCell
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
int
Abc_SclComputeParametersCell
(
SC_Lib
*
p
,
SC_Cell
*
pCell
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
{
{
SC_Pin
*
pPin
;
SC_Pin
*
pPin
;
float
LD
,
PD
,
ld
,
pd
;
float
LD
,
PD
,
ld
,
pd
;
...
@@ -348,11 +378,13 @@ void Abc_SclComputeParametersCell( SC_Lib * p, SC_Cell * pCell, float Slew, floa
...
@@ -348,11 +378,13 @@ void Abc_SclComputeParametersCell( SC_Lib * p, SC_Cell * pCell, float Slew, floa
LD
=
PD
=
ld
=
pd
=
0
;
LD
=
PD
=
ld
=
pd
=
0
;
SC_CellForEachPinIn
(
pCell
,
pPin
,
i
)
SC_CellForEachPinIn
(
pCell
,
pPin
,
i
)
{
{
Abc_SclComputeParametersPin
(
p
,
pCell
,
i
,
Slew
,
&
ld
,
&
pd
);
if
(
!
Abc_SclComputeParametersPin
(
p
,
pCell
,
i
,
Slew
,
&
ld
,
&
pd
)
)
return
0
;
LD
+=
ld
;
PD
+=
pd
;
LD
+=
ld
;
PD
+=
pd
;
}
}
*
pLD
=
LD
/
Abc_MaxInt
(
1
,
pCell
->
n_inputs
);
*
pLD
=
LD
/
Abc_MaxInt
(
1
,
pCell
->
n_inputs
);
*
pPD
=
PD
/
Abc_MaxInt
(
1
,
pCell
->
n_inputs
);
*
pPD
=
PD
/
Abc_MaxInt
(
1
,
pCell
->
n_inputs
);
return
1
;
}
}
void
Abc_SclComputeParametersClass
(
SC_Lib
*
p
,
SC_Cell
*
pRepr
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
void
Abc_SclComputeParametersClass
(
SC_Lib
*
p
,
SC_Cell
*
pRepr
,
float
Slew
,
float
*
pLD
,
float
*
pPD
)
{
{
...
@@ -513,13 +545,15 @@ void Abc_SclPrintCells( SC_Lib * p, float SlewInit, float Gain, int fInvOnly, in
...
@@ -513,13 +545,15 @@ void Abc_SclPrintCells( SC_Lib * p, float SlewInit, float Gain, int fInvOnly, in
printf
(
"A =%8.2f "
,
pCell
->
area
);
printf
(
"A =%8.2f "
,
pCell
->
area
);
if
(
pCell
->
n_outputs
==
1
)
if
(
pCell
->
n_outputs
==
1
)
{
{
Abc_SclComputeParametersCell
(
p
,
pCell
,
Slew
,
&
LD
,
&
PD
);
if
(
Abc_SclComputeParametersCell
(
p
,
pCell
,
Slew
,
&
LD
,
&
PD
)
)
printf
(
"D =%6.1f ps "
,
0
.
01
*
Gain
*
LD
+
PD
);
{
printf
(
"LD =%6.1f ps "
,
LD
);
printf
(
"D =%6.1f ps "
,
0
.
01
*
Gain
*
LD
+
PD
);
printf
(
"PD =%6.1f ps "
,
PD
);
printf
(
"LD =%6.1f ps "
,
LD
);
printf
(
"C =%5.1f ff "
,
SC_CellPinCapAve
(
pCell
)
);
printf
(
"PD =%6.1f ps "
,
PD
);
printf
(
"Cm =%5.0f ff "
,
SC_CellPin
(
pCell
,
pCell
->
n_inputs
)
->
max_out_cap
);
printf
(
"C =%5.1f ff "
,
SC_CellPinCapAve
(
pCell
)
);
printf
(
"Sm =%5.1f ps "
,
SC_CellPin
(
pCell
,
pCell
->
n_inputs
)
->
max_out_slew
);
printf
(
"Cm =%5.0f ff "
,
SC_CellPin
(
pCell
,
pCell
->
n_inputs
)
->
max_out_cap
);
printf
(
"Sm =%5.1f ps "
,
SC_CellPin
(
pCell
,
pCell
->
n_inputs
)
->
max_out_slew
);
}
}
}
printf
(
"
\n
"
);
printf
(
"
\n
"
);
}
}
...
...
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