summaryrefslogtreecommitdiffstats
path: root/src/base/wln
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/wln')
-rw-r--r--src/base/wln/wln.h2
-rw-r--r--src/base/wln/wlnNdr.c10
-rw-r--r--src/base/wln/wlnRetime.c57
3 files changed, 62 insertions, 7 deletions
diff --git a/src/base/wln/wln.h b/src/base/wln/wln.h
index 510d74c1..93a1a92a 100644
--- a/src/base/wln/wln.h
+++ b/src/base/wln/wln.h
@@ -246,7 +246,7 @@ extern int Wln_ObjClone( Wln_Ntk_t * pNew, Wln_Ntk_t * p, int iObj );
extern int Wln_ObjCreateCo( Wln_Ntk_t * p, int iFanin );
extern void Wln_ObjPrint( Wln_Ntk_t * p, int iObj );
/*=== wlcRetime.c ========================================================*/
-extern Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * p, int fSkipSimple, int fVerbose );
+extern Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * p, int fIgnoreIO, int fSkipSimple, int fVerbose );
extern void Wln_NtkRetimeCreateDelayInfo( Wln_Ntk_t * pNtk );
/*=== wlcWriteVer.c ========================================================*/
extern void Wln_WriteVer( Wln_Ntk_t * p, char * pFileName );
diff --git a/src/base/wln/wlnNdr.c b/src/base/wln/wlnNdr.c
index eb685463..9eaf71ed 100644
--- a/src/base/wln/wlnNdr.c
+++ b/src/base/wln/wlnNdr.c
@@ -96,7 +96,7 @@ void Wln_NtkToNdrTest( Wln_Ntk_t * p )
ppNames[i] = Abc_UtilStrsav(Wln_ObjName(p, i));
// verify by writing Verilog
- Ndr_WriteVerilog( NULL, pDesign, ppNames );
+ Ndr_WriteVerilog( NULL, pDesign, ppNames, 0 );
Ndr_Write( "test.ndr", pDesign );
// cleanup
@@ -256,7 +256,7 @@ Wln_Ntk_t * Wln_NtkFromNdr( void * pData, int fDump )
pNtk->pManName = Abc_NamStart( NameIdMax+1, 10 );
for ( i = 1; i <= NameIdMax; i++ )
{
- char pName[20]; sprintf( pName, "s%0*d", nDigits, i );
+ char pName[100]; sprintf( pName, "s%0*d", nDigits, i );
NameId = Abc_NamStrFindOrAdd( pNtk->pManName, pName, &fFound );
assert( !fFound && i == NameId );
}
@@ -301,7 +301,7 @@ Wln_Ntk_t * Wln_ReadNdr( char * pFileName )
Wln_Ntk_t * pNtk = pData ? Wln_NtkFromNdr( pData, 0 ) : NULL;
if ( pNtk ) return NULL;
//char * ppNames[10] = { NULL, "a", "b", "c", "d", "e", "f", "g", "h", "i" };
- //Ndr_WriteVerilog( NULL, pData, ppNames );
+ //Ndr_WriteVerilog( NULL, pData, ppNames, 0 );
Ndr_Delete( pData );
return pNtk;
}
@@ -314,7 +314,7 @@ void Wln_ReadNdrTest()
Wln_NtkStaticFanoutTest( pNtk );
Wln_NtkFree( pNtk );
}
-void Wln_NtkRetimeTest( char * pFileName, int fSkipSimple, int fDump, int fVerbose )
+void Wln_NtkRetimeTest( char * pFileName, int fIgnoreIO, int fSkipSimple, int fDump, int fVerbose )
{
Vec_Int_t * vMoves;
void * pData = Ndr_Read( pFileName );
@@ -326,7 +326,7 @@ void Wln_NtkRetimeTest( char * pFileName, int fSkipSimple, int fDump, int fVerbo
return;
}
Wln_NtkRetimeCreateDelayInfo( pNtk );
- vMoves = Wln_NtkRetime( pNtk, fSkipSimple, fVerbose );
+ vMoves = Wln_NtkRetime( pNtk, fIgnoreIO, fSkipSimple, fVerbose );
//Vec_IntPrint( vMoves );
Vec_IntFree( vMoves );
Wln_NtkFree( pNtk );
diff --git a/src/base/wln/wlnRetime.c b/src/base/wln/wlnRetime.c
index 734ac194..5ccc1dd0 100644
--- a/src/base/wln/wlnRetime.c
+++ b/src/base/wln/wlnRetime.c
@@ -335,6 +335,55 @@ void Wln_RetFindSources( Wln_Ret_t * p )
/**Function*************************************************************
+ Synopsis [Mark paths from PIs to POs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Wln_RetMarkPaths_rec( Wln_Ntk_t * p, int iObj, int fVerbose )
+{
+ int k, iFanin, fPrev = 1;
+ if ( Wln_ObjIsTravIdPrevious(p, iObj) )
+ return 1;
+ if ( Wln_ObjIsTravIdCurrent(p, iObj) )
+ return 0;
+ if ( Wln_ObjIsCio(p, iObj) || Wln_ObjIsFf(p, iObj) )
+ return 0;
+ Wln_ObjForEachFanin( p, iObj, iFanin, k )
+ fPrev &= Wln_RetMarkPaths_rec( p, iFanin, fVerbose );
+ if ( fPrev )
+ {
+ Wln_ObjSetTravIdPrevious( p, iObj );
+ if ( Vec_IntEntry(&p->vInstIds, iObj) > 0 )
+ {
+ if ( fVerbose )
+ printf( "Updating delay %5d -> %5d : ", Vec_IntEntry(&p->vInstIds, iObj), 1 );
+ if ( fVerbose )
+ Wln_ObjPrint( p, iObj );
+ Vec_IntWriteEntry( &p->vInstIds, iObj, 1 );
+ }
+ return 1;
+ }
+ Wln_ObjSetTravIdCurrent( p, iObj );
+ return 0;
+}
+void Wln_RetMarkPaths( Wln_Ntk_t * p, int fVerbose )
+{
+ int i, iObj;
+ Wln_NtkIncrementTravId( p );
+ Wln_NtkIncrementTravId( p );
+ Wln_NtkForEachPi( p, iObj, i )
+ Wln_ObjSetTravIdPrevious( p, iObj );
+ Wln_NtkForEachPo( p, iObj, i )
+ Wln_RetMarkPaths_rec( p, Wln_ObjFanin0(p, iObj), fVerbose );
+}
+
+/**Function*************************************************************
+
Synopsis [Retimability check.]
Description []
@@ -571,7 +620,7 @@ void Wln_NtkRetimeCreateDelayInfo( Wln_Ntk_t * pNtk )
printf( "Assuming default delays: 10 units for most nodes and 1 unit for bit-slice, concat, and buffers driving COs.\n" );
}
}
-Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk, int fSkipSimple, int fVerbose )
+Vec_Int_t * Wln_NtkRetime_int( Wln_Ntk_t * pNtk, int fSkipSimple, int fVerbose )
{
Wln_Ret_t * p = Wln_RetAlloc( pNtk );
Vec_Int_t * vSources = &p->vSources;
@@ -666,6 +715,12 @@ Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk, int fSkipSimple, int fVerbose )
}
return vMoves;
}
+Vec_Int_t * Wln_NtkRetime( Wln_Ntk_t * pNtk, int fIgnoreIO, int fSkipSimple, int fVerbose )
+{
+ if ( fIgnoreIO )
+ Wln_RetMarkPaths( pNtk, fVerbose );
+ return Wln_NtkRetime_int( pNtk, fSkipSimple, fVerbose );
+}
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///