71 Vec_Int_t * vCiVec = vCiIds ? Vec_IntDup(vCiIds) : Vec_IntStartNatural(Gia_ManCiNum(
p));
72 Vec_Int_t * vCoVec = vCoIds ? Vec_IntDup(vCoIds) : Vec_IntStartNatural(Gia_ManCoNum(
p));
73 Vec_Wec_t * vUnatesCo = Vec_WecStart( Vec_IntSize(vCoVec) );
74 Vec_Wec_t * vUnates = Vec_WecStart( Gia_ManObjNum(
p) );
79 pObj = Gia_ManCi(
p, CioId );
80 Vec_IntPush( Vec_WecEntry(vUnates, Gia_ObjId(
p, pObj)), Abc_Var2Lit(CioId, 0) );
84 vUnate0 = Vec_WecEntry(vUnates, Gia_ObjFaninId0(pObj, i));
85 vUnate1 = Vec_WecEntry(vUnates, Gia_ObjFaninId1(pObj, i));
86 vUnate0 = Gia_ObjFaninC0(pObj) ? Vec_IntFlopBit(vUnate0) : vUnate0;
87 vUnate1 = Gia_ObjFaninC1(pObj) ? Vec_IntFlopBit(vUnate1) : vUnate1;
88 Vec_IntTwoMerge2( vUnate0, vUnate1, Vec_WecEntry(vUnates, i) );
89 vUnate0 = Gia_ObjFaninC0(pObj) ? Vec_IntFlopBit(vUnate0) : vUnate0;
90 vUnate1 = Gia_ObjFaninC1(pObj) ? Vec_IntFlopBit(vUnate1) : vUnate1;
94 pObj = Gia_ManCo(
p, CioId );
95 vUnate0 = Vec_WecEntry(vUnates, Gia_ObjFaninId0p(
p, pObj));
96 vUnate0 = Gia_ObjFaninC0(pObj) ? Vec_IntFlopBit(vUnate0) : vUnate0;
97 Vec_IntAppend( Vec_WecEntry(vUnatesCo, i), vUnate0 );
98 vUnate0 = Gia_ObjFaninC0(pObj) ? Vec_IntFlopBit(vUnate0) : vUnate0;
100 Vec_WecFree( vUnates );
101 Vec_IntFree( vCiVec );
102 Vec_IntFree( vCoVec );
124 if (
p->nTravIds -
p->pTravIds[iObj] <= 3 )
125 return p->nTravIds -
p->pTravIds[iObj];
126 pObj = Gia_ManObj(
p, iObj );
127 p->pTravIds[iObj] =
p->nTravIds - 3;
128 if ( Gia_ObjIsCi(pObj) )
132 Res0 = ((Res0 == 1 || Res0 == 2) && Gia_ObjFaninC0(pObj)) ? Res0 ^ 3 : Res0;
133 Res1 = ((Res1 == 1 || Res1 == 2) && Gia_ObjFaninC1(pObj)) ? Res1 ^ 3 : Res1;
134 p->pTravIds[iObj] =
p->nTravIds - (Res0 & Res1);
135 assert( (Res0 & Res1) <= 3 );
136 return p->nTravIds -
p->pTravIds[iObj];
168 int i, o,
Var, nVars = Gia_ManCiNum(
p);
169 int nUnate = 0, nNonUnate = 0;
173 printf(
"Inputs : " );
174 for ( i = 0; i < nVars; i++ )
175 printf(
"%d", i % 10 );
178 for ( o = 0; o < Gia_ManCoNum(
p); o++ )
180 Vec_Int_t * vUnate = Vec_WecEntry( vUnates, o );
181 memset( pBuffer,
' ', (
size_t)nVars );
183 if ( i+1 < Vec_IntSize(vUnate) && Abc_Lit2Var(
Var) == Abc_Lit2Var(Vec_IntEntry(vUnate, i+1)) )
184 pBuffer[Abc_Lit2Var(
Var)] =
'.', i++, nNonUnate++;
186 pBuffer[Abc_Lit2Var(
Var)] = Abc_LitIsCompl(
Var) ?
'n' :
'p', nUnate++;
188 printf(
"Out%4d : %s\n", o, pBuffer );
192 printf(
"Ins/Outs = %4d/%4d. Total supp = %5d. Total unate = %5d.\n",
193 Gia_ManCiNum(
p), Gia_ManCoNum(
p), nUnate+nNonUnate, nUnate );
194 ABC_PRT(
"Total time", Abc_Clock() - clk );
196 Vec_WecFree( vUnates );
217 int i, o, nVars = Gia_ManCiNum(
p);
218 int nUnate = 0, nNonUnate = 0;
222 printf(
"Inputs : " );
223 for ( i = 0; i < nVars; i++ )
224 printf(
"%d", i % 10 );
227 for ( o = 0; o < Gia_ManCoNum(
p); o++ )
229 for ( i = 0; i < nVars; i++ )
232 if ( Res == 3 ) pBuffer[i] =
' ';
233 else if ( Res == 2 ) pBuffer[i] =
'p', nUnate++;
234 else if ( Res == 1 ) pBuffer[i] =
'n', nUnate++;
235 else if ( Res == 0 ) pBuffer[i] =
'.', nNonUnate++;
239 printf(
"Out%4d : %s\n", o, pBuffer );
243 printf(
"Ins/Outs = %4d/%4d. Total supp = %5d. Total unate = %5d.\n",
244 Gia_ManCiNum(
p), Gia_ManCoNum(
p), nUnate+nNonUnate, nUnate );
245 ABC_PRT(
"Total time", Abc_Clock() - clk );