abc-master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
mvcDivisor.c
Go to the documentation of this file.
1 /**CFile****************************************************************
2 
3  FileName [mvcDivisor.c]
4 
5  PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]
6 
7  Synopsis [Procedures for compute the quick divisor.]
8 
9  Author [MVSIS Group]
10 
11  Affiliation [UC Berkeley]
12 
13  Date [Ver. 1.0. Started - February 1, 2003.]
14 
15  Revision [$Id: mvcDivisor.c,v 1.1 2003/04/03 15:34:08 alanmi Exp $]
16 
17 ***********************************************************************/
18 
19 #include "mvc.h"
20 
22 
23 
24 ////////////////////////////////////////////////////////////////////////
25 /// DECLARATIONS ///
26 ////////////////////////////////////////////////////////////////////////
27 
28 static void Mvc_CoverDivisorZeroKernel( Mvc_Cover_t * pCover );
29 
30 ////////////////////////////////////////////////////////////////////////
31 /// FUNCTION DEFINITIONS ///
32 ////////////////////////////////////////////////////////////////////////
33 
34 /**Function*************************************************************
35 
36  Synopsis [Returns the quick divisor of the cover.]
37 
38  Description [Returns NULL, if there is not divisor other than
39  trivial.]
40 
41  SideEffects []
42 
43  SeeAlso []
44 
45 ***********************************************************************/
47 {
48  Mvc_Cover_t * pKernel;
49  if ( Mvc_CoverReadCubeNum(pCover) <= 1 )
50  return NULL;
51  // allocate the literal array and count literals
52  if ( Mvc_CoverAnyLiteral( pCover, NULL ) == -1 )
53  return NULL;
54  // duplicate the cover
55  pKernel = Mvc_CoverDup(pCover);
56  // perform the kerneling
57  Mvc_CoverDivisorZeroKernel( pKernel );
58  assert( Mvc_CoverReadCubeNum(pKernel) );
59  return pKernel;
60 }
61 
62 /**Function*************************************************************
63 
64  Synopsis [Computes a level-zero kernel.]
65 
66  Description [Modifies the cover to contain one level-zero kernel.]
67 
68  SideEffects []
69 
70  SeeAlso []
71 
72 ***********************************************************************/
74 {
75  int iLit;
76  // find any literal that occurs at least two times
77 // iLit = Mvc_CoverAnyLiteral( pCover, NULL );
78  iLit = Mvc_CoverWorstLiteral( pCover, NULL );
79 // iLit = Mvc_CoverBestLiteral( pCover, NULL );
80  if ( iLit == -1 )
81  return;
82  // derive the cube-free quotient
83  Mvc_CoverDivideByLiteralQuo( pCover, iLit ); // the same cover
84  Mvc_CoverMakeCubeFree( pCover ); // the same cover
85  // call recursively
86  Mvc_CoverDivisorZeroKernel( pCover ); // the same cover
87 }
88 
89 ////////////////////////////////////////////////////////////////////////
90 /// END OF FILE ///
91 ////////////////////////////////////////////////////////////////////////
92 
93 
95 
static ABC_NAMESPACE_IMPL_START void Mvc_CoverDivisorZeroKernel(Mvc_Cover_t *pCover)
DECLARATIONS ///.
Definition: mvcDivisor.c:73
int Mvc_CoverWorstLiteral(Mvc_Cover_t *pCover, Mvc_Cube_t *pMask)
Definition: mvcLits.c:162
void Mvc_CoverMakeCubeFree(Mvc_Cover_t *pCover)
Definition: mvcUtils.c:198
int Mvc_CoverReadCubeNum(Mvc_Cover_t *pCover)
Definition: mvcApi.c:45
Mvc_Cover_t * Mvc_CoverDivisor(Mvc_Cover_t *pCover)
FUNCTION DEFINITIONS ///.
Definition: mvcDivisor.c:46
#define ABC_NAMESPACE_IMPL_END
Definition: abc_global.h:108
#define ABC_NAMESPACE_IMPL_START
Definition: abc_global.h:107
void Mvc_CoverDivideByLiteralQuo(Mvc_Cover_t *pCover, int iLit)
Definition: mvcDivide.c:374
#define assert(ex)
Definition: util_old.h:213
int Mvc_CoverAnyLiteral(Mvc_Cover_t *pCover, Mvc_Cube_t *pMask)
DECLARATIONS ///.
Definition: mvcLits.c:43
Mvc_Cover_t * Mvc_CoverDup(Mvc_Cover_t *pCover)
Definition: mvcCover.c:112