/********************************************************************************/ /* input: A file containing threshold voltages of each inverter */ /* */ /* output: A file telling desirable sizes of inverter to be used in */ /* a comparator */ /* */ /* Date: Mar. 10, 2001 */ /* By: Daegyu Lee */ /* The Pennsylvania State University */ /* Department of Computer Science and Engineering */ /* Copyright Daegyu Lee 2001 */ /* Revision 0.3 */ /********************************************************************************/ #include #include #include main( int argc, char* argv[] ) { int i, j, numOfBit, numOfInv, numOfSizes, numOfSet; int length_P, width_P, length_N, width_N, minDiffOfVmIndex, maxErrorInvNo; int *pLength, *pWidth, *nLength, *nWidth; double *optVm, *Vm; double beginningVm, endingVm, gapVm, ThresholdV, diffOfVm, minDiffOfVm, diffOfOptSel, ratioOfDiff; double errorRate, maxError, sqrSum; FILE *fp1, *fp2, *fp3; char outFileName1[25], outFileName2[25], numString[5]; if( argc != 2 ) { printf( "Usage: findSizes Size_VmFile\n" ); exit( -1 ); } printf( "How many bit = ?" ); scanf( "%d", &numOfBit ); printf( "Beginning Vm = ?" ); scanf( "%lf", &beginningVm ); printf( "Ending Vm = ?" ); scanf( "%lf", &endingVm ); printf( "Set No. = ?" ); scanf( "%d", &numOfSet ); numOfInv = (int)pow(2, numOfBit)-1; optVm = (double *) malloc( numOfInv*sizeof(double) ); if( optVm == NULL ) { printf( "Memory allocation failed !!\n" ); exit( -1 ); } gapVm = ((endingVm-beginningVm)/((double)(numOfInv-1.0))); for( i=0; i maxError ) { maxError = errorRate; maxErrorInvNo = i+1; } fprintf( fp2, "%3d: %10.8f %10.8f %10.8f %10.7f %d %d %d %d\n", i+1, (optVm[i]+0.0001*numOfSet), Vm[minDiffOfVmIndex], diffOfOptSel, errorRate, pLength[minDiffOfVmIndex], pWidth[minDiffOfVmIndex], nLength[minDiffOfVmIndex], nWidth[minDiffOfVmIndex] ); fprintf( fp3, "%d %d %d %d\n", pLength[minDiffOfVmIndex], pWidth[minDiffOfVmIndex], nLength[minDiffOfVmIndex], nWidth[minDiffOfVmIndex] ); } fprintf( fp2, "-----------------------------------------------------------------------------------\n" ); fprintf( fp2, "Set No.%3d: Square sum = %11.9f, Max. deviation = %10.7f at Inverter No. %d\n", numOfSet, sqrSum, maxError, maxErrorInvNo ); fclose( fp2 ); fclose( fp3 ); free( pLength ); free( pWidth ); free( nLength ); free( nWidth ); free( optVm ); free( Vm ); }