ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
dauEnum.c File Reference
#include "dauInt.h"
Include dependency graph for dauEnum.c:

Go to the source code of this file.

Functions

ABC_NAMESPACE_IMPL_START char * Dau_EnumLift (char *pName, int Shift)
 DECLARATIONS ///.
 
char * Dau_EnumLift2 (char *pName, int Shift)
 
void Dau_EnumCombineTwo (Vec_Ptr_t *vOne, int fStar, int fXor, char *pName1, char *pName2, int Shift2, int fCompl1, int fCompl2)
 
void Dau_EnumCombineThree (Vec_Ptr_t *vOne, int fStar, char *pNameC, char *pName1, char *pName2, int Shift1, int Shift2, int fComplC, int fCompl1, int fCompl2)
 
void Dau_EnumTestDump (Vec_Ptr_t *vSets, char *pFileName)
 
void Dau_EnumTest ()
 

Function Documentation

◆ Dau_EnumCombineThree()

void Dau_EnumCombineThree ( Vec_Ptr_t * vOne,
int fStar,
char * pNameC,
char * pName1,
char * pName2,
int Shift1,
int Shift2,
int fComplC,
int fCompl1,
int fCompl2 )

Definition at line 88 of file dauEnum.c.

89{
90 static char pBuffer[256];
91 pName1 = Dau_EnumLift( pName1, Shift1 );
92 pName2 = Dau_EnumLift2( pName2, Shift2 );
93 sprintf( pBuffer, "%s%c%s%s%s%s%s%s%c",
94 fStar?"*":"",
95 '<',
96 fComplC?"!":"", pNameC[0] == '*' ? pNameC + 1 : pNameC,
97 fCompl1?"!":"", pName1[0] == '*' ? pName1 + 1 : pName1,
98 fCompl2?"!":"", pName2[0] == '*' ? pName2 + 1 : pName2,
99 '>' );
100// printf( "%s ", pBuffer );
101 Vec_PtrPush( vOne, Abc_UtilStrsav(pBuffer) );
102}
ABC_NAMESPACE_IMPL_START char * Dau_EnumLift(char *pName, int Shift)
DECLARATIONS ///.
Definition dauEnum.c:45
char * Dau_EnumLift2(char *pName, int Shift)
Definition dauEnum.c:54
char * sprintf()
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Dau_EnumCombineTwo()

void Dau_EnumCombineTwo ( Vec_Ptr_t * vOne,
int fStar,
int fXor,
char * pName1,
char * pName2,
int Shift2,
int fCompl1,
int fCompl2 )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 75 of file dauEnum.c.

76{
77 static char pBuffer[256];
78 pName2 = Dau_EnumLift( pName2, Shift2 );
79 sprintf( pBuffer, "%s%c%s%s%s%s%c",
80 fStar?"*":"",
81 fXor?'[':'(',
82 fCompl1?"!":"", pName1[0] == '*' ? pName1 + 1 : pName1,
83 fCompl2?"!":"", pName2[0] == '*' ? pName2 + 1 : pName2,
84 fXor?']':')' );
85// printf( "%s ", pBuffer );
86 Vec_PtrPush( vOne, Abc_UtilStrsav(pBuffer) );
87}
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Dau_EnumLift()

ABC_NAMESPACE_IMPL_START char * Dau_EnumLift ( char * pName,
int Shift )

DECLARATIONS ///.

CFile****************************************************************

FileName [dauEnum.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [DAG-aware unmapping.]

Synopsis [Enumeration of decompositions.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - June 20, 2005.]

Revision [

Id
dauEnum.c,v 1.00 2005/06/20 00:00:00 alanmi Exp

] FUNCTION DEFINITIONS /// Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 45 of file dauEnum.c.

46{
47 static char pBuffer[64];
48 char * pTemp;
49 for ( pTemp = pBuffer; *pName; pTemp++, pName++ )
50 *pTemp = (*pName >= 'a' && *pName <= 'z') ? *pName + Shift : *pName;
51 *pTemp = 0;
52 return pBuffer;
53}
Here is the caller graph for this function:

◆ Dau_EnumLift2()

char * Dau_EnumLift2 ( char * pName,
int Shift )

Definition at line 54 of file dauEnum.c.

55{
56 static char pBuffer[64];
57 char * pTemp;
58 for ( pTemp = pBuffer; *pName; pTemp++, pName++ )
59 *pTemp = (*pName >= 'a' && *pName <= 'z') ? *pName + Shift : *pName;
60 *pTemp = 0;
61 return pBuffer;
62}
Here is the caller graph for this function:

◆ Dau_EnumTest()

void Dau_EnumTest ( )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 144 of file dauEnum.c.

145{
146 int v, k, nVarMax = 10;
147 Vec_Ptr_t * vSets;
148 Vec_Ptr_t * vOne;
149 char * pName;
150 // 0 vars
151 vSets = Vec_PtrAlloc( 16 );
152 Vec_PtrPush( vSets, Vec_PtrAlloc(0) );
153 // 1 vars
154 vOne = Vec_PtrAlloc( 1 );
155 Vec_PtrPush( vOne, Abc_UtilStrsav("*a") );
156 Vec_PtrPush( vSets, vOne );
157 // 2+ vars
158 for ( v = 2; v <= nVarMax; v++ )
159 {
160 Vec_Ptr_t * vSetI, * vSetJ, * vSetK;
161 char * pNameI, * pNameJ, * pNameK;
162 int i, j, k, i1, j1, k1;
163 vOne = Vec_PtrAlloc( 100 );
164 for ( i = 1; i < v; i++ )
165 for ( j = i; j < v; j++ )
166 {
167 if ( i + j != v )
168 continue;
169 vSetI = (Vec_Ptr_t *)Vec_PtrEntry( vSets, i );
170 vSetJ = (Vec_Ptr_t *)Vec_PtrEntry( vSets, j );
171 Vec_PtrForEachEntry( char *, vSetI, pNameI, i1 )
172 Vec_PtrForEachEntry( char *, vSetJ, pNameJ, j1 )
173 {
174 // AND(a,b)
175 Dau_EnumCombineTwo( vOne, 0, 0, pNameI, pNameJ, i, 0, 0 );
176 // AND(!a,b)
177 if ( pNameI[0] != '*' )
178 Dau_EnumCombineTwo( vOne, 0, 0, pNameI, pNameJ, i, 1, 0 );
179 // AND(a,!b)
180 if ( pNameJ[0] != '*' && !(i == j && i1 == j1) )
181 Dau_EnumCombineTwo( vOne, 0, 0, pNameI, pNameJ, i, 0, 1 );
182 // AND(!a,!b)
183 if ( pNameI[0] != '*' && pNameJ[0] != '*' )
184 Dau_EnumCombineTwo( vOne, 0, 0, pNameI, pNameJ, i, 1, 1 );
185 // XOR(a,b)
186 Dau_EnumCombineTwo( vOne, pNameI[0] == '*' || pNameJ[0] == '*', 1, pNameI, pNameJ, i, 0, 0 );
187 }
188 }
189 for ( k = 1; k < v; k++ )
190 for ( i = 1; i < v; i++ )
191 for ( j = i; j < v; j++ )
192 {
193 if ( k + i + j != v )
194 continue;
195 vSetK = (Vec_Ptr_t *)Vec_PtrEntry( vSets, k );
196 vSetI = (Vec_Ptr_t *)Vec_PtrEntry( vSets, i );
197 vSetJ = (Vec_Ptr_t *)Vec_PtrEntry( vSets, j );
198 Vec_PtrForEachEntry( char *, vSetK, pNameK, k1 )
199 Vec_PtrForEachEntry( char *, vSetI, pNameI, i1 )
200 Vec_PtrForEachEntry( char *, vSetJ, pNameJ, j1 )
201 {
202 int fStar = pNameI[0] == '*' && pNameJ[0] == '*';
203
204 // MUX(c,a,b)
205 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 0, 0, 0 );
206 // MUX(c,!a,b)
207 if ( pNameI[0] != '*' )
208 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 0, 1, 0 );
209 // MUX(c,a,!b)
210 if ( pNameJ[0] != '*' && !(i == j && i1 == j1) )
211 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 0, 0, 1 );
212
213 if ( pNameK[0] != '*' && !(i == j && i1 == j1) )
214 {
215 // MUX(!c,a,b)
216 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 1, 0, 0 );
217 // MUX(!c,!a,b)
218 if ( pNameI[0] != '*' )
219 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 1, 1, 0 );
220 // MUX(!c,a,!b)
221 if ( pNameJ[0] != '*' )
222 Dau_EnumCombineThree( vOne, fStar, pNameK, pNameI, pNameJ, k, k+i, 1, 0, 1 );
223 }
224 }
225 }
226 Vec_PtrPush( vSets, vOne );
227 }
228 Dau_EnumTestDump( vSets, "_npn/npn/dsd10.txt" );
229
230 Vec_PtrForEachEntry( Vec_Ptr_t *, vSets, vOne, v )
231 {
232 printf( "VARIABLE NUMBER %d:\n", v );
233 Vec_PtrForEachEntry( char *, vOne, pName, k )
234 printf( "%s\n", pName );
235 if ( v == 4 )
236 break;
237 }
238 Vec_PtrForEachEntry( Vec_Ptr_t *, vSets, vOne, v )
239 {
240 printf( "%d=%d ", v, Vec_PtrSize(vOne) );
241 Vec_PtrFreeFree( vOne );
242 }
243 Vec_PtrFree( vSets );
244 printf( "\n" );
245}
void Dau_EnumCombineTwo(Vec_Ptr_t *vOne, int fStar, int fXor, char *pName1, char *pName2, int Shift2, int fCompl1, int fCompl2)
Definition dauEnum.c:75
void Dau_EnumTestDump(Vec_Ptr_t *vSets, char *pFileName)
Definition dauEnum.c:115
void Dau_EnumCombineThree(Vec_Ptr_t *vOne, int fStar, char *pNameC, char *pName1, char *pName2, int Shift1, int Shift2, int fComplC, int fCompl1, int fCompl2)
Definition dauEnum.c:88
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
Here is the call graph for this function:

◆ Dau_EnumTestDump()

void Dau_EnumTestDump ( Vec_Ptr_t * vSets,
char * pFileName )

Function*************************************************************

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 115 of file dauEnum.c.

116{
117 FILE * pFile;
118 Vec_Ptr_t * vOne;
119 char * pName;
120 int v, k;
121 pFile = fopen( pFileName, "wb" );
122 if ( pFile == NULL )
123 return;
124 Vec_PtrForEachEntry( Vec_Ptr_t *, vSets, vOne, v )
125 {
126 fprintf( pFile, "VARIABLE NUMBER %d:\n", v );
127 Vec_PtrForEachEntry( char *, vOne, pName, k )
128 fprintf( pFile, "%s\n", pName );
129 }
130 fclose( pFile );
131}
Here is the caller graph for this function: