513 Wlc_Obj_t * pObj, * pObjRange = NULL;
int nCountRange = 0;
518 if ( Wlc_NtkPoNum(
p) != 2 )
526 Vec_PtrWriteEntry( vTypes, i, Vec_WrdAlloc(16) );
528 Vec_PtrWriteEntry( vOccurs, i, Vec_WrdAlloc(16) );
533 if ( Wlc_ObjSign(pObj) > 0x1FFFFF )
534 printf(
"Object %6d has range %d, which is reduced to %d in the statistics.\n",
535 i, Wlc_ObjRange(pObj), Wlc_ObjRange(pObj) & 0xFFFFF );
538 if ( pObjRange == NULL )
544 Sign = Wlc_NtkPrintDistribMakeSign( Wlc_ObjSign(pObj), 0, 0 );
549 Sign = Wlc_NtkPrintDistribMakeSign( Wlc_ObjSign(pObj), Wlc_ObjSign(Wlc_ObjFanin0(
p, pObj)), 0 );
551 else if ( Wlc_ObjFaninNum(pObj) == 0 )
552 printf(
"Object %d with name \"%s\" has type 0. Looks like it was declared by not defined...\n", i,
Wlc_ObjName(
p, i) );
553 else if ( Wlc_ObjFaninNum(pObj) == 1 )
554 Sign = Wlc_NtkPrintDistribMakeSign( Wlc_ObjSign(pObj), Wlc_ObjSign(Wlc_ObjFanin0(
p, pObj)), 0 );
557 assert( Wlc_ObjFaninNum(pObj) >= 2 );
558 Sign = Wlc_NtkPrintDistribMakeSign( Wlc_ObjSign(pObj), Wlc_ObjFaninId(pObj, 0) ? Wlc_ObjSign(Wlc_ObjFanin0(
p, pObj)) : 0, Wlc_ObjFaninId(pObj, 1) ? Wlc_ObjSign(Wlc_ObjFanin1(
p, pObj)) : 0 );
561 Wlc_NtkPrintDistribAddOne( vTypes, vOccurs, pObj->
Type, Sign );
564 Vec_IntAddToEntry( vAnds,
WLC_OBJ_MUX, 3 * Wlc_ObjRange(pObj) * (Wlc_ObjFaninNum(pObj) - 2) );
566 Vec_IntAddToEntry( vAnds,
WLC_OBJ_SHIFT_R, Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
568 Vec_IntAddToEntry( vAnds,
WLC_OBJ_SHIFT_RA, Wlc_ObjRange(pObj) * Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
570 Vec_IntAddToEntry( vAnds,
WLC_OBJ_SHIFT_L, Wlc_ObjRange(pObj) * Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
572 Vec_IntAddToEntry( vAnds,
WLC_OBJ_SHIFT_LA, Wlc_ObjRange(pObj) * Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
574 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ROTATE_R, Wlc_ObjRange(pObj) * Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
576 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ROTATE_L, Wlc_ObjRange(pObj) * Abc_MinInt(Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)), Abc_Base2Log(Wlc_ObjRange(pObj))) * 3 );
580 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_AND, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
582 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_OR, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
584 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_XOR, 3 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
586 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_NAND, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
588 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_NOR, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
590 Vec_IntAddToEntry( vAnds,
WLC_OBJ_BIT_NXOR, 3 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
600 Vec_IntAddToEntry( vAnds,
WLC_OBJ_LOGIC_NOT, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 1 );
602 Vec_IntAddToEntry( vAnds,
WLC_OBJ_LOGIC_IMPL, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) + Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) - 1 );
604 Vec_IntAddToEntry( vAnds,
WLC_OBJ_LOGIC_AND, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) + Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) - 1 );
606 Vec_IntAddToEntry( vAnds,
WLC_OBJ_LOGIC_OR, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) + Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) - 1 );
608 Vec_IntAddToEntry( vAnds,
WLC_OBJ_LOGIC_XOR, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) + Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) + 1 );
610 Vec_IntAddToEntry( vAnds,
WLC_OBJ_COMP_EQU, 4 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 1 );
614 Vec_IntAddToEntry( vAnds,
WLC_OBJ_COMP_LESS, 6 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 6 );
616 Vec_IntAddToEntry( vAnds,
WLC_OBJ_COMP_MORE, 6 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 6 );
624 Vec_IntAddToEntry( vAnds,
WLC_OBJ_REDUCT_OR, Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 1 );
626 Vec_IntAddToEntry( vAnds,
WLC_OBJ_REDUCT_XOR, 3 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 3 );
634 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_ADD, 9 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
636 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_SUB, 9 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
638 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_MULTI, 9 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) );
640 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_DIVIDE, 13 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 19 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) + 10 );
642 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_REM, 13 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 7 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 2 );
644 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_MODULUS, 13 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 7 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) - 2 );
646 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_POWER, 10 * (
int)pow((
double)Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)),(
double)Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj))) );
648 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_MINUS, 4 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) );
650 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_SQRT, 11 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) / 8 + 5 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) / 2 - 5 );
652 Vec_IntAddToEntry( vAnds,
WLC_OBJ_ARI_SQUARE, 5 * Wlc_ObjRange(Wlc_ObjFanin0(
p, pObj)) * Wlc_ObjRange(Wlc_ObjFanin1(
p, pObj)) );
654 if ( nCountRange && Vec_IntSize(&
p->vNameIds) > 0 )
656 printf(
"Warning: %d objects of the design have non-zero-based ranges.\n", nCountRange );
657 printf(
"In particular, object %6d with name \"%s\" has range %d=[%d:%d]\n", Wlc_ObjId(
p, pObjRange),
658 Abc_NamStr(
p->pManName, Wlc_ObjNameId(
p, Wlc_ObjId(
p, pObjRange))), Wlc_ObjRange(pObjRange), pObjRange->
End, pObjRange->
Beg );
661 printf(
"ID : name occurrence%s and2 (occurrence)<output_range>=<input_range>.<input_range> ...\n", fTwoSides ?
" Left Share Right":
"" );
666 if (
p->nObjs[i] == 0 )
668 printf(
"%2d : %-8s %6d", i, Wlc_Names[i],
p->nObjs[i] );
673 printf(
"%6d", nObjs[0][i] );
674 printf(
"%6d", nObjs[0][i]+nObjs[1][i]-
nTotal );
675 printf(
"%6d", nObjs[1][i] );
677 printf(
"%8d ", Vec_IntEntry(vAnds, i) );
682 Wlc_NtkPrintDistribFromSign( Sign, &s, &s0, &s1 );
683 if ( ((k % 6) == 5 && s1) || ((k % 8) == 7 && !s1) )
689 printf(
"(%d)", (
int)Vec_WrdEntry( vOccur, k ) );
690 printf(
"%s%d", Abc_LitIsCompl(s)?
"-":
"", Abc_Lit2Var(s) );
692 printf(
"=%s%d", Abc_LitIsCompl(s0)?
"-":
"", Abc_Lit2Var(s0) );
694 printf(
".%s%d", Abc_LitIsCompl(s1)?
"-":
"", Abc_Lit2Var(s1) );
701 Vec_IntFree( vAnds );