summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-08-24 18:07:10 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-08-24 18:07:10 -0700
commit1fffe8f6f3274e03289a67a0abf9c7aa4028f823 (patch)
tree8afe2676595e5664779db48f8c280d144dbabd1e
parent5bf0f864505d97ea7d6a349f100dd1849f74b7a6 (diff)
downloadabc-1fffe8f6f3274e03289a67a0abf9c7aa4028f823.tar.gz
abc-1fffe8f6f3274e03289a67a0abf9c7aa4028f823.tar.bz2
abc-1fffe8f6f3274e03289a67a0abf9c7aa4028f823.zip
New switch in 'read_lib' to replace gate/pin names by short strings.
-rw-r--r--src/map/scl/sclLibUtil.c49
1 files changed, 44 insertions, 5 deletions
diff --git a/src/map/scl/sclLibUtil.c b/src/map/scl/sclLibUtil.c
index b5ccacdf..986ea434 100644
--- a/src/map/scl/sclLibUtil.c
+++ b/src/map/scl/sclLibUtil.c
@@ -152,6 +152,44 @@ void Abc_SclShortFormula( SC_Cell * pCell, char * pForm, char * pBuffer )
}
*pBuffer++ = 0;
}
+static inline void Abc_SclTimingUpdate( SC_Cell * pCell, SC_Timing * p, char * Buffer )
+{
+ SC_Pin * pPin; int i;
+ SC_CellForEachPinIn( pCell, pPin, i )
+ if ( p->related_pin && !strcmp(p->related_pin, pPin->pName) )
+ {
+ ABC_FREE( p->related_pin );
+ sprintf( Buffer, "%c", 'a'+i );
+ p->related_pin = Abc_UtilStrsav( Buffer );
+ }
+}
+static inline void Abc_SclTimingsUpdate( SC_Cell * pCell, SC_Timings * p, char * Buffer )
+{
+ SC_Timing * pTemp; int i;
+ Vec_PtrForEachEntry( SC_Timing *, p->vTimings, pTemp, i )
+ Abc_SclTimingUpdate( pCell, pTemp, Buffer );
+}
+static inline void Abc_SclPinUpdate( SC_Cell * pCell, SC_Pin * p, char * Buffer )
+{
+ // update pin names in the timing
+ SC_Timings * pTemp; int i;
+ SC_PinForEachRTiming( p, pTemp, i )
+ {
+ SC_Pin * pPin; int k;
+ Abc_SclTimingsUpdate( pCell, pTemp, Buffer );
+ SC_CellForEachPinIn( pCell, pPin, k )
+ if ( pTemp->pName && !strcmp(pTemp->pName, pPin->pName) )
+ {
+ ABC_FREE( pTemp->pName );
+ sprintf( Buffer, "%c", 'a'+k );
+ pTemp->pName = Abc_UtilStrsav( Buffer );
+ }
+ }
+ // update formula
+ Abc_SclShortFormula( pCell, p->func_text, Buffer );
+ ABC_FREE( p->func_text );
+ p->func_text = Abc_UtilStrsav( Buffer );
+}
void Abc_SclShortNames( SC_Lib * p )
{
char Buffer[10000];
@@ -169,11 +207,7 @@ void Abc_SclShortNames( SC_Lib * p )
pCell->pName = Abc_UtilStrsav( Buffer );
// formula
SC_CellForEachPinOut( pCell, pPin, n )
- {
- Abc_SclShortFormula( pCell, pPin->func_text, Buffer );
- ABC_FREE( pPin->func_text );
- pPin->func_text = Abc_UtilStrsav( Buffer );
- }
+ Abc_SclPinUpdate( pCell, pPin, Buffer );
// pin names
SC_CellForEachPinIn( pCell, pPin, n )
{
@@ -192,6 +226,11 @@ void Abc_SclShortNames( SC_Lib * p )
p->nBins = 0;
ABC_FREE( p->pBins );
Abc_SclHashCells( p );
+ // update library name
+ printf( "Renaming library \"%s\" into \"%s%d\".\n", p->pName, "lib", SC_LibCellNum(p) );
+ ABC_FREE( p->pName );
+ sprintf( Buffer, "lib%d", SC_LibCellNum(p) );
+ p->pName = Abc_UtilStrsav( Buffer );
}
/**Function*************************************************************