summaryrefslogtreecommitdiffstats
path: root/src/base/wlc/wlcWriteVer.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2014-09-24 00:22:18 -0400
committerAlan Mishchenko <alanmi@berkeley.edu>2014-09-24 00:22:18 -0400
commita4d5a9b5bc6a8547324aa283ed777ee95009dd15 (patch)
tree4bfb9db8a4f9139ca10d5d2fa9231c685edf4b1f /src/base/wlc/wlcWriteVer.c
parentd9b5aa49f7e77505938d14affbb7f2fe287df33d (diff)
downloadabc-a4d5a9b5bc6a8547324aa283ed777ee95009dd15.tar.gz
abc-a4d5a9b5bc6a8547324aa283ed777ee95009dd15.tar.bz2
abc-a4d5a9b5bc6a8547324aa283ed777ee95009dd15.zip
Added support of word-level MUXes represented as 'always'-statements.
Diffstat (limited to 'src/base/wlc/wlcWriteVer.c')
-rw-r--r--src/base/wlc/wlcWriteVer.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/base/wlc/wlcWriteVer.c b/src/base/wlc/wlcWriteVer.c
index 262d5e52..6a615887 100644
--- a/src/base/wlc/wlcWriteVer.c
+++ b/src/base/wlc/wlcWriteVer.c
@@ -178,6 +178,30 @@ void Wlc_WriteVerInt( FILE * pFile, Wlc_Ntk_t * p )
else
fprintf( pFile, "(%s << %d) | (%s >> %d)", pName0, Num0, pName0, Num1 );
}
+ else if ( pObj->Type == WLC_OBJ_MUX && Wlc_ObjFaninNum(pObj) > 3 )
+ {
+ fprintf( pFile, " reg %s ;\n", pName );
+ fprintf( pFile, " " );
+ fprintf( pFile, "always @( " );
+ Wlc_ObjForEachFanin( pObj, iFanin, k )
+ fprintf( pFile, "%s%s", k ? " or ":"", Wlc_ObjName(p, Wlc_ObjFaninId(pObj, k)) );
+ fprintf( pFile, " )\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "begin\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "case ( %s )\n", Wlc_ObjName(p, Wlc_ObjFaninId(pObj, 0)) );
+ Wlc_ObjForEachFanin( pObj, iFanin, k )
+ {
+ if ( !k ) continue;
+ fprintf( pFile, " " );
+ fprintf( pFile, "%d : %s = %s ;\n", k-1, pName, Wlc_ObjName(p, Wlc_ObjFaninId(pObj, k)) );
+ }
+ fprintf( pFile, " " );
+ fprintf( pFile, "endcase\n" );
+ fprintf( pFile, " " );
+ fprintf( pFile, "end\n" );
+ continue;
+ }
else
{
fprintf( pFile, " wire %s %-16s = ", Range, Wlc_ObjName(p, i) );