summaryrefslogtreecommitdiffstats
path: root/src/base/wlc/wlcWriteVer.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-09-26 16:11:36 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2014-09-26 16:11:36 -0700
commit69bd355467df6347b6f071c58346c61f44be05e5 (patch)
tree6b1b1bbed18b3f98066dc1f0357e3a8389f0710c /src/base/wlc/wlcWriteVer.c
parent6aa1c94ea50b9357205c033c4e6240ba277890b6 (diff)
downloadabc-69bd355467df6347b6f071c58346c61f44be05e5.tar.gz
abc-69bd355467df6347b6f071c58346c61f44be05e5.tar.bz2
abc-69bd355467df6347b6f071c58346c61f44be05e5.zip
Support for sequential designs in word-level Verilog.
Diffstat (limited to 'src/base/wlc/wlcWriteVer.c')
-rw-r--r--src/base/wlc/wlcWriteVer.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/src/base/wlc/wlcWriteVer.c b/src/base/wlc/wlcWriteVer.c
index 6a615887..afc1f9ba 100644
--- a/src/base/wlc/wlcWriteVer.c
+++ b/src/base/wlc/wlcWriteVer.c
@@ -151,17 +151,21 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
sprintf( Range, "%s[%d:%d]%*s", pObj->Signed ? "signed ":" ", pObj->End, pObj->Beg, 8-nDigits, "" );
fprintf( pFile, " " );
if ( pObj->Type == WLC_OBJ_PI )
- fprintf( pFile, "input wire %s %s", Range, pName );
- else if ( pObj->Type == WLC_OBJ_PO )
- fprintf( pFile, "output wire %s %-16s = %s", Range, pName, pName0 );
+ fprintf( pFile, "input " );
+ else if ( pObj->fIsPo )
+ fprintf( pFile, "output " );
+ else
+ fprintf( pFile, " " );
+ if ( Wlc_ObjIsCi(pObj) )
+ fprintf( pFile, "wire %s %s", Range, pName );
else if ( pObj->Type == WLC_OBJ_TABLE )
{
// wire [3:0] s4972; table0 s4972_Index(s4971, s4972);
- fprintf( pFile, " wire %s %s ; table%d s%d_Index(%s, %s)", Range, pName, Wlc_ObjTableId(pObj), i, pName0, pName );
+ fprintf( pFile, "wire %s %s ; table%d s%d_Index(%s, %s)", Range, pName, Wlc_ObjTableId(pObj), i, pName0, pName );
}
else if ( pObj->Type == WLC_OBJ_CONST )
{
- fprintf( pFile, " wire %s %-16s = %d\'%sh", Range, pName, Wlc_ObjRange(pObj), pObj->Signed ? "s":"" );
+ fprintf( pFile, "wire %s %-16s = %d\'%sh", Range, pName, Wlc_ObjRange(pObj), pObj->Signed ? "s":"" );
Abc_TtPrintHexArrayRev( pFile, (word *)Wlc_ObjConstValue(pObj), (Wlc_ObjRange(pObj) + 3) / 4 );
}
else if ( pObj->Type == WLC_OBJ_ROTATE_R || pObj->Type == WLC_OBJ_ROTATE_L )
@@ -172,7 +176,7 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
int Num1 = Wlc_ObjRange(pObj) - Num0;
assert( pShift->Type == WLC_OBJ_CONST );
assert( Num0 > 0 && Num0 < Wlc_ObjRange(pObj) );
- fprintf( pFile, " wire %s %-16s = ", Range, Wlc_ObjName(p, i) );
+ fprintf( pFile, "wire %s %-16s = ", Range, Wlc_ObjName(p, i) );
if ( pObj->Type == WLC_OBJ_ROTATE_R )
fprintf( pFile, "(%s >> %d) | (%s << %d)", pName0, Num0, pName0, Num1 );
else
@@ -180,7 +184,7 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
}
else if ( pObj->Type == WLC_OBJ_MUX && Wlc_ObjFaninNum(pObj) > 3 )
{
- fprintf( pFile, " reg %s ;\n", pName );
+ fprintf( pFile, "reg %s ;\n", pName );
fprintf( pFile, " " );
fprintf( pFile, "always @( " );
Wlc_ObjForEachFanin( pObj, iFanin, k )
@@ -204,11 +208,11 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
}
else
{
- fprintf( pFile, " wire %s %-16s = ", Range, Wlc_ObjName(p, i) );
+ fprintf( pFile, "wire %s %-16s = ", Range, Wlc_ObjName(p, i) );
if ( pObj->Type == WLC_OBJ_BUF )
fprintf( pFile, "%s", pName0 );
else if ( pObj->Type == WLC_OBJ_MUX )
- fprintf( pFile, "%s ? %s : %s", pName0, Wlc_ObjName(p, Wlc_ObjFaninId1(pObj)), Wlc_ObjName(p, Wlc_ObjFaninId2(pObj)) );
+ fprintf( pFile, "%s ? %s : %s", pName0, Wlc_ObjName(p, Wlc_ObjFaninId2(pObj)), Wlc_ObjName(p, Wlc_ObjFaninId1(pObj)) );
else if ( pObj->Type == WLC_OBJ_BIT_NOT )
fprintf( pFile, "~%s", pName0 );
else if ( pObj->Type == WLC_OBJ_LOGIC_NOT )
@@ -283,6 +287,27 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
}
fprintf( pFile, " ;\n" );
}
+ Wlc_NtkForEachCi( p, pObj, i )
+ {
+ char * pName = Wlc_ObjName(p, Wlc_ObjId(p, pObj));
+ assert( i == Wlc_ObjCiId(pObj) );
+ if ( pObj->Type == WLC_OBJ_PI )
+ continue;
+// CPL_FF#9 I_32890_reg ( .q ( E_42304 ) , .qbar ( ) , .d ( E_42305 ) , .clk ( E_65040 ) ,
+// .arst ( E_65037 ) , .arstval ( E_62126 ) );
+ fprintf( pFile, " " );
+ fprintf( pFile, "CPL_FF" );
+ if ( Wlc_ObjRange(pObj) > 1 )
+ fprintf( pFile, "#%d", Wlc_ObjRange(pObj) );
+ fprintf( pFile, " %reg%d (", i );
+ fprintf( pFile, " .q( %s ),", pName );
+ fprintf( pFile, " .qbar()," );
+ fprintf( pFile, " .d( %s ),", Wlc_ObjName(p, Wlc_ObjId(p, Wlc_ObjFoToFi(p, pObj))) );
+ fprintf( pFile, " .clk( %s ),", "1\'b0" );
+ fprintf( pFile, " .arst( %s ),", "1\'b0" );
+ fprintf( pFile, " .arstval( %s )", "1\'b0" );
+ fprintf( pFile, " ) ;\n" );
+ }
fprintf( pFile, "endmodule\n\n" );
}
void Wlc_WriteVer( Wlc_Ntk_t * p, char * pFileName )