diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2014-09-24 00:22:18 -0400 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2014-09-24 00:22:18 -0400 |
commit | a4d5a9b5bc6a8547324aa283ed777ee95009dd15 (patch) | |
tree | 4bfb9db8a4f9139ca10d5d2fa9231c685edf4b1f /src/base/wlc/wlcWriteVer.c | |
parent | d9b5aa49f7e77505938d14affbb7f2fe287df33d (diff) | |
download | abc-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.c | 24 |
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) ); |