summaryrefslogtreecommitdiffstats
path: root/abc70930/src/opt/fxu/fxuPrint.c
diff options
context:
space:
mode:
Diffstat (limited to 'abc70930/src/opt/fxu/fxuPrint.c')
-rw-r--r--abc70930/src/opt/fxu/fxuPrint.c195
1 files changed, 195 insertions, 0 deletions
diff --git a/abc70930/src/opt/fxu/fxuPrint.c b/abc70930/src/opt/fxu/fxuPrint.c
new file mode 100644
index 00000000..232b109a
--- /dev/null
+++ b/abc70930/src/opt/fxu/fxuPrint.c
@@ -0,0 +1,195 @@
+/**CFile****************************************************************
+
+ FileName [fxuPrint.c]
+
+ PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]
+
+ Synopsis [Various printing procedures.]
+
+ Author [MVSIS Group]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - February 1, 2003.]
+
+ Revision [$Id: fxuPrint.c,v 1.0 2003/02/01 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "fxuInt.h"
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_MatrixPrint( FILE * pFile, Fxu_Matrix * p )
+{
+ Fxu_Var * pVar;
+ Fxu_Cube * pCube;
+ Fxu_Double * pDiv;
+ Fxu_Single * pSingle;
+ Fxu_Lit * pLit;
+ Fxu_Pair * pPair;
+ int i, LastNum;
+ int fStdout;
+
+ fStdout = 1;
+ if ( pFile == NULL )
+ {
+ pFile = fopen( "matrix.txt", "w" );
+ fStdout = 0;
+ }
+
+ fprintf( pFile, "Matrix has %d vars, %d cubes, %d literals, %d divisors.\n",
+ p->lVars.nItems, p->lCubes.nItems, p->nEntries, p->nDivs );
+ fprintf( pFile, "Divisors selected so far: single = %d, double = %d.\n",
+ p->nDivs1, p->nDivs2 );
+ fprintf( pFile, "\n" );
+
+ // print the numbers on top of the matrix
+ for ( i = 0; i < 12; i++ )
+ fprintf( pFile, " " );
+ Fxu_MatrixForEachVariable( p, pVar )
+ fprintf( pFile, "%d", pVar->iVar % 10 );
+ fprintf( pFile, "\n" );
+
+ // print the rows
+ Fxu_MatrixForEachCube( p, pCube )
+ {
+ fprintf( pFile, "%4d", pCube->iCube );
+ fprintf( pFile, " " );
+ fprintf( pFile, "%4d", pCube->pVar->iVar );
+ fprintf( pFile, " " );
+
+ // print the literals
+ LastNum = -1;
+ Fxu_CubeForEachLiteral( pCube, pLit )
+ {
+ for ( i = LastNum + 1; i < pLit->pVar->iVar; i++ )
+ fprintf( pFile, "." );
+ fprintf( pFile, "1" );
+ LastNum = i;
+ }
+ for ( i = LastNum + 1; i < p->lVars.nItems; i++ )
+ fprintf( pFile, "." );
+ fprintf( pFile, "\n" );
+ }
+ fprintf( pFile, "\n" );
+
+ // print the double-cube divisors
+ fprintf( pFile, "The double divisors are:\n" );
+ Fxu_MatrixForEachDouble( p, pDiv, i )
+ {
+ fprintf( pFile, "Divisor #%3d (lit=%d,%d) (w=%2d): ",
+ pDiv->Num, pDiv->lPairs.pHead->nLits1,
+ pDiv->lPairs.pHead->nLits2, pDiv->Weight );
+ Fxu_DoubleForEachPair( pDiv, pPair )
+ fprintf( pFile, " <%d, %d> (b=%d)",
+ pPair->pCube1->iCube, pPair->pCube2->iCube, pPair->nBase );
+ fprintf( pFile, "\n" );
+ }
+ fprintf( pFile, "\n" );
+
+ // print the divisors associated with each cube
+ fprintf( pFile, "The cubes are:\n" );
+ Fxu_MatrixForEachCube( p, pCube )
+ {
+ fprintf( pFile, "Cube #%3d: ", pCube->iCube );
+ if ( pCube->pVar->ppPairs )
+ Fxu_CubeForEachPair( pCube, pPair, i )
+ fprintf( pFile, " <%d %d> (d=%d) (b=%d)",
+ pPair->iCube1, pPair->iCube2, pPair->pDiv->Num, pPair->nBase );
+ fprintf( pFile, "\n" );
+ }
+ fprintf( pFile, "\n" );
+
+ // print the single-cube divisors
+ fprintf( pFile, "The single divisors are:\n" );
+ Fxu_MatrixForEachSingle( p, pSingle )
+ {
+ fprintf( pFile, "Single-cube divisor #%5d: Var1 = %4d. Var2 = %4d. Weight = %2d\n",
+ pSingle->Num, pSingle->pVar1->iVar, pSingle->pVar2->iVar, pSingle->Weight );
+ }
+ fprintf( pFile, "\n" );
+
+/*
+ {
+ int Index;
+ fprintf( pFile, "Distribution of divisors in the hash table:\n" );
+ for ( Index = 0; Index < p->nTableSize; Index++ )
+ fprintf( pFile, " %d", p->pTable[Index].nItems );
+ fprintf( pFile, "\n" );
+ }
+*/
+ if ( !fStdout )
+ fclose( pFile );
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Fxu_MatrixPrintDivisorProfile( FILE * pFile, Fxu_Matrix * p )
+{
+ Fxu_Double * pDiv;
+ int WeightMax;
+ int * pProfile;
+ int Counter1; // the number of -1 weight
+ int CounterL; // the number of less than -1 weight
+ int i;
+
+ WeightMax = Fxu_HeapDoubleReadMaxWeight( p->pHeapDouble );
+ pProfile = ALLOC( int, (WeightMax + 1) );
+ memset( pProfile, 0, sizeof(int) * (WeightMax + 1) );
+
+ Counter1 = 0;
+ CounterL = 0;
+ Fxu_MatrixForEachDouble( p, pDiv, i )
+ {
+ assert( pDiv->Weight <= WeightMax );
+ if ( pDiv->Weight == -1 )
+ Counter1++;
+ else if ( pDiv->Weight < 0 )
+ CounterL++;
+ else
+ pProfile[ pDiv->Weight ]++;
+ }
+
+ fprintf( pFile, "The double divisors profile:\n" );
+ fprintf( pFile, "Weight < -1 divisors = %6d\n", CounterL );
+ fprintf( pFile, "Weight -1 divisors = %6d\n", Counter1 );
+ for ( i = 0; i <= WeightMax; i++ )
+ if ( pProfile[i] )
+ fprintf( pFile, "Weight %3d divisors = %6d\n", i, pProfile[i] );
+ fprintf( pFile, "End of divisor profile printout\n" );
+ FREE( pProfile );
+}
+
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+