55static inline int Kit_DecOuputArrival(
int nVars,
Vec_Int_t * vLuts,
char ATimes[] ) {
return ATimes[nVars + Vec_IntSize(vLuts) - 1]; }
77 p->nVarsMax = nVarsMax;
78 p->nWordsMax = Kit_TruthWordNum(
p->nVarsMax );
79 p->vTruthVars = Vec_PtrAllocTruthTables(
p->nVarsMax );
80 p->vTruthNodes = Vec_PtrAllocSimInfo( 64,
p->nWordsMax );
81 p->vLutsIn = Vec_IntAlloc( 50 );
82 p->vSuppIn = Vec_IntAlloc( 50 );
83 p->vLutsOut = Vec_IntAlloc( 50 );
84 p->vSuppOut = Vec_IntAlloc( 50 );
105 Vec_IntFreeP( &
p->vLutsIn );
106 Vec_IntFreeP( &
p->vSuppIn );
107 Vec_IntFreeP( &
p->vLutsOut );
108 Vec_IntFreeP( &
p->vSuppOut );
109 Vec_PtrFreeP( &
p->vTruthVars );
110 Vec_PtrFreeP( &
p->vTruthNodes );
128 int i, v, iVar, nLuts, Delay;
129 nLuts = Vec_IntSize(vSupps) / LutSize;
131 assert( Vec_IntSize(vSupps) % LutSize == 0 );
132 for ( v = 0; v < nVars; v++ )
133 ATimesOut[v] = ATimesIn[v];
134 for ( v = 0; v < nLuts; v++ )
137 for ( i = 0; i < LutSize; i++ )
139 iVar = Vec_IntEntry( vSupps, v * LutSize + i );
140 assert( iVar < nVars + v );
141 Delay = Abc_MaxInt( Delay, ATimesOut[iVar] );
143 ATimesOut[nVars + v] = Delay + 1;
145 return ATimesOut[nVars + nLuts - 1];
159void Kit_DecComputeTruthOne(
int LutSize,
unsigned * pTruthLut,
int nVars,
unsigned * pTruths[],
unsigned * pTemp,
unsigned * pRes )
162 Kit_TruthClear( pRes, nVars );
163 for ( i = 0; i < (1<<LutSize); i++ )
165 if ( !Kit_TruthHasBit( pTruthLut, i ) )
167 Kit_TruthFill( pTemp, nVars );
168 for ( v = 0; v < LutSize; v++ )
170 Kit_TruthAnd( pTemp, pTemp, pTruths[v], nVars );
172 Kit_TruthSharp( pTemp, pTemp, pTruths[v], nVars );
173 Kit_TruthOr( pRes, pRes, pTemp, nVars );
190 unsigned * pResult, * pTruthLuts, * pTruths[17];
191 int nTruthLutWords, i, v, iVar, nLuts;
192 nLuts = Vec_IntSize(vSupps) / LutSize;
193 pTruthLuts = (
unsigned *)Vec_IntArray( vLuts );
194 nTruthLutWords = Kit_TruthWordNum( LutSize );
196 assert( Vec_IntSize(vSupps) % LutSize == 0 );
197 assert( nLuts * nTruthLutWords == Vec_IntSize(vLuts) );
198 for ( v = 0; v < nLuts; v++ )
200 for ( i = 0; i < LutSize; i++ )
202 iVar = Vec_IntEntry( vSupps, v * LutSize + i );
203 assert( iVar < nVars + v );
204 pTruths[i] = (iVar < nVars)? (
unsigned *)Vec_PtrEntry(
p->vTruthVars, iVar) : (
unsigned *)Vec_PtrEntry(
p->vTruthNodes, iVar-nVars);
206 pResult = (v == nLuts - 1) ? pRes : (
unsigned *)Vec_PtrEntry(
p->vTruthNodes, v);
207 Kit_DecComputeTruthOne( LutSize, pTruthLuts, nVars, pTruths, (
unsigned *)Vec_PtrEntry(
p->vTruthNodes, v+1), pResult );
208 pTruthLuts += nTruthLutWords;
225 int nCofs = (1 << LutSize);
228 assert( LutSize < nVars );
229 if ( nVars - LutSize <= 5 )
232 int nBits = (1 << (nVars - LutSize));
233 for ( i = 0; i < nCofs; i++ )
234 uCofs[i] = (pTruth[(i*nBits)/32] >> ((i*nBits)%32)) & ((1<<nBits)-1);
235 for ( i = 0; i < nCofs; i++ )
237 for ( k = 0; k < nMyu; k++ )
238 if ( uCofs[i] == uCofs[k] )
249 unsigned * puCofs[64];
250 int nWords = (1 << (nVars - LutSize - 5));
251 for ( i = 0; i < nCofs; i++ )
252 puCofs[i] = pTruth +
nWords;
253 for ( i = 0; i < nCofs; i++ )
255 for ( k = 0; k < nMyu; k++ )
256 if ( Kit_TruthIsEqual( puCofs[i], puCofs[k], nVars - LutSize - 5 ) )
281 int Pat0[32], Pat1[32], Shared0[5], Shared1[5], VarsNext[5];
282 int v, u, iVarsNext, iPat0, iPat1, m, nMints = (1 << nVars);
283 int nShared0, nShared1, nShared = 0;
284 for ( v = iVarTry; v < nVars; v++ )
287 for ( u = 0; u < nVars; u++ )
289 VarsNext[iVarsNext++] = Vars[u];
291 for ( m = 0; m < nMints; m++ )
296 assert( iPat0 == nMints / 2 );
297 assert( iPat1 == nMints / 2 );
304 Shared[nShared++] = v;
305 for ( u = 0; u < nShared0; u++ )
306 for ( m = 0; m < nShared1; m++ )
307 if ( Shared0[u] >= 0 && Shared1[m] >= 0 && Shared0[u] == Shared1[m] )
309 Shared[nShared++] = Shared0[u];
310 Shared0[u] = Shared1[m] = -1;
332 for ( i = 0; i < LutSize; i++ )
#define ABC_ALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
int Kit_DecComputeShared(int Pattern[], int LutSize, int Shared[])
int Kit_DecComputePattern(int nVars, unsigned *pTruth, int LutSize, int Pattern[])
void Kit_DecComputeTruth(Kit_ManDec_t *p, int nVars, Vec_Int_t *vSupps, int LutSize, Vec_Int_t *vLuts, unsigned *pRes)
int Kit_DecComputeOuputArrival(int nVars, Vec_Int_t *vSupps, int LutSize, char ATimesIn[], char ATimesOut[])
void Kit_ManDecStop(Kit_ManDec_t *p)
Kit_ManDec_t * Kit_ManDecStart(int nVarsMax)
FUNCTION DEFINITIONS ///.
void Kit_DecComputeTruthOne(int LutSize, unsigned *pTruthLut, int nVars, unsigned *pTruths[], unsigned *pTemp, unsigned *pRes)
int Kit_DecComputeShared_rec(int Pattern[], int Vars[], int nVars, int Shared[], int iVarTry)
typedefABC_NAMESPACE_IMPL_START struct Kit_ManDec_t_ Kit_ManDec_t
DECLARATIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.