mirror of https://github.com/YosysHQ/abc.git
Code for profiling arithmetic circuits.
This commit is contained in:
parent
f5069d6675
commit
9c7741efd9
|
|
@ -0,0 +1,420 @@
|
|||
/**CFile****************************************************************
|
||||
|
||||
FileName [acecSt.c]
|
||||
|
||||
SystemName [ABC: Logic synthesis and verification system.]
|
||||
|
||||
PackageName [CEC for arithmetic circuits.]
|
||||
|
||||
Synopsis [Core procedures.]
|
||||
|
||||
Author [Alan Mishchenko]
|
||||
|
||||
Affiliation [UC Berkeley]
|
||||
|
||||
Date [Ver. 1.0. Started - June 20, 2005.]
|
||||
|
||||
Revision [$Id: acecSt.c,v 1.00 2005/06/20 00:00:00 alanmi Exp $]
|
||||
|
||||
***********************************************************************/
|
||||
|
||||
#include "acecInt.h"
|
||||
#include "misc/vec/vecWec.h"
|
||||
#include "misc/extra/extra.h"
|
||||
|
||||
ABC_NAMESPACE_IMPL_START
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// DECLARATIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
int Npn3Table[256][2] = {
|
||||
{0x00, 0}, // 0x00 = 0
|
||||
{0x01, 1}, // 0x01 = 1
|
||||
{0x01, 1}, // 0x02 = 2
|
||||
{0x03, 2}, // 0x03 = 3
|
||||
{0x01, 1}, // 0x04 = 4
|
||||
{0x03, 2}, // 0x05 = 5
|
||||
{0x06, 3}, // 0x06 = 6
|
||||
{0x07, 4}, // 0x07 = 7
|
||||
{0x01, 1}, // 0x08 = 8
|
||||
{0x06, 3}, // 0x09 = 9
|
||||
{0x03, 2}, // 0x0A = 10
|
||||
{0x07, 4}, // 0x0B = 11
|
||||
{0x03, 2}, // 0x0C = 12
|
||||
{0x07, 4}, // 0x0D = 13
|
||||
{0x07, 4}, // 0x0E = 14
|
||||
{0x0F, 5}, // 0x0F = 15
|
||||
{0x01, 1}, // 0x10 = 16
|
||||
{0x03, 2}, // 0x11 = 17
|
||||
{0x06, 3}, // 0x12 = 18
|
||||
{0x07, 4}, // 0x13 = 19
|
||||
{0x06, 3}, // 0x14 = 20
|
||||
{0x07, 4}, // 0x15 = 21
|
||||
{0x16, 6}, // 0x16 = 22
|
||||
{0x17, 7}, // 0x17 = 23
|
||||
{0x18, 8}, // 0x18 = 24
|
||||
{0x19, 9}, // 0x19 = 25
|
||||
{0x19, 9}, // 0x1A = 26
|
||||
{0x1B, 10}, // 0x1B = 27
|
||||
{0x19, 9}, // 0x1C = 28
|
||||
{0x1B, 10}, // 0x1D = 29
|
||||
{0x1E, 11}, // 0x1E = 30
|
||||
{0x07, 4}, // 0x1F = 31
|
||||
{0x01, 1}, // 0x20 = 32
|
||||
{0x06, 3}, // 0x21 = 33
|
||||
{0x03, 2}, // 0x22 = 34
|
||||
{0x07, 4}, // 0x23 = 35
|
||||
{0x18, 8}, // 0x24 = 36
|
||||
{0x19, 9}, // 0x25 = 37
|
||||
{0x19, 9}, // 0x26 = 38
|
||||
{0x1B, 10}, // 0x27 = 39
|
||||
{0x06, 3}, // 0x28 = 40
|
||||
{0x16, 6}, // 0x29 = 41
|
||||
{0x07, 4}, // 0x2A = 42
|
||||
{0x17, 7}, // 0x2B = 43
|
||||
{0x19, 9}, // 0x2C = 44
|
||||
{0x1E, 11}, // 0x2D = 45
|
||||
{0x1B, 10}, // 0x2E = 46
|
||||
{0x07, 4}, // 0x2F = 47
|
||||
{0x03, 2}, // 0x30 = 48
|
||||
{0x07, 4}, // 0x31 = 49
|
||||
{0x07, 4}, // 0x32 = 50
|
||||
{0x0F, 5}, // 0x33 = 51
|
||||
{0x19, 9}, // 0x34 = 52
|
||||
{0x1B, 10}, // 0x35 = 53
|
||||
{0x1E, 11}, // 0x36 = 54
|
||||
{0x07, 4}, // 0x37 = 55
|
||||
{0x19, 9}, // 0x38 = 56
|
||||
{0x1E, 11}, // 0x39 = 57
|
||||
{0x1B, 10}, // 0x3A = 58
|
||||
{0x07, 4}, // 0x3B = 59
|
||||
{0x3C, 12}, // 0x3C = 60
|
||||
{0x19, 9}, // 0x3D = 61
|
||||
{0x19, 9}, // 0x3E = 62
|
||||
{0x03, 2}, // 0x3F = 63
|
||||
{0x01, 1}, // 0x40 = 64
|
||||
{0x06, 3}, // 0x41 = 65
|
||||
{0x18, 8}, // 0x42 = 66
|
||||
{0x19, 9}, // 0x43 = 67
|
||||
{0x03, 2}, // 0x44 = 68
|
||||
{0x07, 4}, // 0x45 = 69
|
||||
{0x19, 9}, // 0x46 = 70
|
||||
{0x1B, 10}, // 0x47 = 71
|
||||
{0x06, 3}, // 0x48 = 72
|
||||
{0x16, 6}, // 0x49 = 73
|
||||
{0x19, 9}, // 0x4A = 74
|
||||
{0x1E, 11}, // 0x4B = 75
|
||||
{0x07, 4}, // 0x4C = 76
|
||||
{0x17, 7}, // 0x4D = 77
|
||||
{0x1B, 10}, // 0x4E = 78
|
||||
{0x07, 4}, // 0x4F = 79
|
||||
{0x03, 2}, // 0x50 = 80
|
||||
{0x07, 4}, // 0x51 = 81
|
||||
{0x19, 9}, // 0x52 = 82
|
||||
{0x1B, 10}, // 0x53 = 83
|
||||
{0x07, 4}, // 0x54 = 84
|
||||
{0x0F, 5}, // 0x55 = 85
|
||||
{0x1E, 11}, // 0x56 = 86
|
||||
{0x07, 4}, // 0x57 = 87
|
||||
{0x19, 9}, // 0x58 = 88
|
||||
{0x1E, 11}, // 0x59 = 89
|
||||
{0x3C, 12}, // 0x5A = 90
|
||||
{0x19, 9}, // 0x5B = 91
|
||||
{0x1B, 10}, // 0x5C = 92
|
||||
{0x07, 4}, // 0x5D = 93
|
||||
{0x19, 9}, // 0x5E = 94
|
||||
{0x03, 2}, // 0x5F = 95
|
||||
{0x06, 3}, // 0x60 = 96
|
||||
{0x16, 6}, // 0x61 = 97
|
||||
{0x19, 9}, // 0x62 = 98
|
||||
{0x1E, 11}, // 0x63 = 99
|
||||
{0x19, 9}, // 0x64 = 100
|
||||
{0x1E, 11}, // 0x65 = 101
|
||||
{0x3C, 12}, // 0x66 = 102
|
||||
{0x19, 9}, // 0x67 = 103
|
||||
{0x16, 6}, // 0x68 = 104
|
||||
{0x69, 13}, // 0x69 = 105
|
||||
{0x1E, 11}, // 0x6A = 106
|
||||
{0x16, 6}, // 0x6B = 107
|
||||
{0x1E, 11}, // 0x6C = 108
|
||||
{0x16, 6}, // 0x6D = 109
|
||||
{0x19, 9}, // 0x6E = 110
|
||||
{0x06, 3}, // 0x6F = 111
|
||||
{0x07, 4}, // 0x70 = 112
|
||||
{0x17, 7}, // 0x71 = 113
|
||||
{0x1B, 10}, // 0x72 = 114
|
||||
{0x07, 4}, // 0x73 = 115
|
||||
{0x1B, 10}, // 0x74 = 116
|
||||
{0x07, 4}, // 0x75 = 117
|
||||
{0x19, 9}, // 0x76 = 118
|
||||
{0x03, 2}, // 0x77 = 119
|
||||
{0x1E, 11}, // 0x78 = 120
|
||||
{0x16, 6}, // 0x79 = 121
|
||||
{0x19, 9}, // 0x7A = 122
|
||||
{0x06, 3}, // 0x7B = 123
|
||||
{0x19, 9}, // 0x7C = 124
|
||||
{0x06, 3}, // 0x7D = 125
|
||||
{0x18, 8}, // 0x7E = 126
|
||||
{0x01, 1}, // 0x7F = 127
|
||||
{0x01, 1}, // 0x80 = 128
|
||||
{0x18, 8}, // 0x81 = 129
|
||||
{0x06, 3}, // 0x82 = 130
|
||||
{0x19, 9}, // 0x83 = 131
|
||||
{0x06, 3}, // 0x84 = 132
|
||||
{0x19, 9}, // 0x85 = 133
|
||||
{0x16, 6}, // 0x86 = 134
|
||||
{0x1E, 11}, // 0x87 = 135
|
||||
{0x03, 2}, // 0x88 = 136
|
||||
{0x19, 9}, // 0x89 = 137
|
||||
{0x07, 4}, // 0x8A = 138
|
||||
{0x1B, 10}, // 0x8B = 139
|
||||
{0x07, 4}, // 0x8C = 140
|
||||
{0x1B, 10}, // 0x8D = 141
|
||||
{0x17, 7}, // 0x8E = 142
|
||||
{0x07, 4}, // 0x8F = 143
|
||||
{0x06, 3}, // 0x90 = 144
|
||||
{0x19, 9}, // 0x91 = 145
|
||||
{0x16, 6}, // 0x92 = 146
|
||||
{0x1E, 11}, // 0x93 = 147
|
||||
{0x16, 6}, // 0x94 = 148
|
||||
{0x1E, 11}, // 0x95 = 149
|
||||
{0x69, 13}, // 0x96 = 150
|
||||
{0x16, 6}, // 0x97 = 151
|
||||
{0x19, 9}, // 0x98 = 152
|
||||
{0x3C, 12}, // 0x99 = 153
|
||||
{0x1E, 11}, // 0x9A = 154
|
||||
{0x19, 9}, // 0x9B = 155
|
||||
{0x1E, 11}, // 0x9C = 156
|
||||
{0x19, 9}, // 0x9D = 157
|
||||
{0x16, 6}, // 0x9E = 158
|
||||
{0x06, 3}, // 0x9F = 159
|
||||
{0x03, 2}, // 0xA0 = 160
|
||||
{0x19, 9}, // 0xA1 = 161
|
||||
{0x07, 4}, // 0xA2 = 162
|
||||
{0x1B, 10}, // 0xA3 = 163
|
||||
{0x19, 9}, // 0xA4 = 164
|
||||
{0x3C, 12}, // 0xA5 = 165
|
||||
{0x1E, 11}, // 0xA6 = 166
|
||||
{0x19, 9}, // 0xA7 = 167
|
||||
{0x07, 4}, // 0xA8 = 168
|
||||
{0x1E, 11}, // 0xA9 = 169
|
||||
{0x0F, 5}, // 0xAA = 170
|
||||
{0x07, 4}, // 0xAB = 171
|
||||
{0x1B, 10}, // 0xAC = 172
|
||||
{0x19, 9}, // 0xAD = 173
|
||||
{0x07, 4}, // 0xAE = 174
|
||||
{0x03, 2}, // 0xAF = 175
|
||||
{0x07, 4}, // 0xB0 = 176
|
||||
{0x1B, 10}, // 0xB1 = 177
|
||||
{0x17, 7}, // 0xB2 = 178
|
||||
{0x07, 4}, // 0xB3 = 179
|
||||
{0x1E, 11}, // 0xB4 = 180
|
||||
{0x19, 9}, // 0xB5 = 181
|
||||
{0x16, 6}, // 0xB6 = 182
|
||||
{0x06, 3}, // 0xB7 = 183
|
||||
{0x1B, 10}, // 0xB8 = 184
|
||||
{0x19, 9}, // 0xB9 = 185
|
||||
{0x07, 4}, // 0xBA = 186
|
||||
{0x03, 2}, // 0xBB = 187
|
||||
{0x19, 9}, // 0xBC = 188
|
||||
{0x18, 8}, // 0xBD = 189
|
||||
{0x06, 3}, // 0xBE = 190
|
||||
{0x01, 1}, // 0xBF = 191
|
||||
{0x03, 2}, // 0xC0 = 192
|
||||
{0x19, 9}, // 0xC1 = 193
|
||||
{0x19, 9}, // 0xC2 = 194
|
||||
{0x3C, 12}, // 0xC3 = 195
|
||||
{0x07, 4}, // 0xC4 = 196
|
||||
{0x1B, 10}, // 0xC5 = 197
|
||||
{0x1E, 11}, // 0xC6 = 198
|
||||
{0x19, 9}, // 0xC7 = 199
|
||||
{0x07, 4}, // 0xC8 = 200
|
||||
{0x1E, 11}, // 0xC9 = 201
|
||||
{0x1B, 10}, // 0xCA = 202
|
||||
{0x19, 9}, // 0xCB = 203
|
||||
{0x0F, 5}, // 0xCC = 204
|
||||
{0x07, 4}, // 0xCD = 205
|
||||
{0x07, 4}, // 0xCE = 206
|
||||
{0x03, 2}, // 0xCF = 207
|
||||
{0x07, 4}, // 0xD0 = 208
|
||||
{0x1B, 10}, // 0xD1 = 209
|
||||
{0x1E, 11}, // 0xD2 = 210
|
||||
{0x19, 9}, // 0xD3 = 211
|
||||
{0x17, 7}, // 0xD4 = 212
|
||||
{0x07, 4}, // 0xD5 = 213
|
||||
{0x16, 6}, // 0xD6 = 214
|
||||
{0x06, 3}, // 0xD7 = 215
|
||||
{0x1B, 10}, // 0xD8 = 216
|
||||
{0x19, 9}, // 0xD9 = 217
|
||||
{0x19, 9}, // 0xDA = 218
|
||||
{0x18, 8}, // 0xDB = 219
|
||||
{0x07, 4}, // 0xDC = 220
|
||||
{0x03, 2}, // 0xDD = 221
|
||||
{0x06, 3}, // 0xDE = 222
|
||||
{0x01, 1}, // 0xDF = 223
|
||||
{0x07, 4}, // 0xE0 = 224
|
||||
{0x1E, 11}, // 0xE1 = 225
|
||||
{0x1B, 10}, // 0xE2 = 226
|
||||
{0x19, 9}, // 0xE3 = 227
|
||||
{0x1B, 10}, // 0xE4 = 228
|
||||
{0x19, 9}, // 0xE5 = 229
|
||||
{0x19, 9}, // 0xE6 = 230
|
||||
{0x18, 8}, // 0xE7 = 231
|
||||
{0x17, 7}, // 0xE8 = 232
|
||||
{0x16, 6}, // 0xE9 = 233
|
||||
{0x07, 4}, // 0xEA = 234
|
||||
{0x06, 3}, // 0xEB = 235
|
||||
{0x07, 4}, // 0xEC = 236
|
||||
{0x06, 3}, // 0xED = 237
|
||||
{0x03, 2}, // 0xEE = 238
|
||||
{0x01, 1}, // 0xEF = 239
|
||||
{0x0F, 5}, // 0xF0 = 240
|
||||
{0x07, 4}, // 0xF1 = 241
|
||||
{0x07, 4}, // 0xF2 = 242
|
||||
{0x03, 2}, // 0xF3 = 243
|
||||
{0x07, 4}, // 0xF4 = 244
|
||||
{0x03, 2}, // 0xF5 = 245
|
||||
{0x06, 3}, // 0xF6 = 246
|
||||
{0x01, 1}, // 0xF7 = 247
|
||||
{0x07, 4}, // 0xF8 = 248
|
||||
{0x06, 3}, // 0xF9 = 249
|
||||
{0x03, 2}, // 0xFA = 250
|
||||
{0x01, 1}, // 0xFB = 251
|
||||
{0x03, 2}, // 0xFC = 252
|
||||
{0x01, 1}, // 0xFD = 253
|
||||
{0x01, 1}, // 0xFE = 254
|
||||
{0x00, 0} // 0xFF = 255
|
||||
};
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// FUNCTION DEFINITIONS ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis [Collect non-XOR inputs.]
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
void Acec_GenerateNpnTable()
|
||||
{
|
||||
int Table[256], Classes[16], Map[256];
|
||||
int i, k, nClasses = 0;
|
||||
for ( i = 0; i < 256; i++ )
|
||||
Table[i] = Extra_TruthCanonNPN( i, 3 );
|
||||
for ( i = 0; i < 256; i++ )
|
||||
{
|
||||
printf( "{" );
|
||||
Extra_PrintHex( stdout, &Table[i], 3 );
|
||||
printf( ", " );
|
||||
// find the class
|
||||
for ( k = 0; k < nClasses; k++ )
|
||||
if ( Table[i] == Classes[k] )
|
||||
break;
|
||||
if ( k == nClasses )
|
||||
Classes[nClasses++] = Table[i];
|
||||
Map[i] = k;
|
||||
// print
|
||||
printf( "%2d}, // ", k );
|
||||
Extra_PrintHex( stdout, &i, 3 );
|
||||
printf( " = %3d\n", i );
|
||||
}
|
||||
}
|
||||
|
||||
/**Function*************************************************************
|
||||
|
||||
Synopsis []
|
||||
|
||||
Description []
|
||||
|
||||
SideEffects []
|
||||
|
||||
SeeAlso []
|
||||
|
||||
***********************************************************************/
|
||||
void Acec_StatsCollect( Gia_Man_t * p, int fVerbose )
|
||||
{
|
||||
extern int Dar_LibReturnClass( unsigned uTruth );
|
||||
extern char ** Kit_DsdNpn4ClassNames();
|
||||
char ** pNames = Kit_DsdNpn4ClassNames();
|
||||
|
||||
int Map[256] = {0};
|
||||
Vec_Wrd_t * vTruths = Vec_WrdStart( Gia_ManObjNum(p) );
|
||||
Vec_Wrd_t * vTemp = Vec_WrdStart( Gia_ManObjNum(p) );
|
||||
word Truth, TruthF;
|
||||
int iTruth, iTruthF;
|
||||
int iFan, iLut, i, k, Class;
|
||||
assert( Gia_ManHasMapping(p) );
|
||||
assert( Gia_ManLutSizeMax(p) < 4 );
|
||||
// collect truth tables
|
||||
Gia_ManForEachLut( p, iLut )
|
||||
{
|
||||
Truth = Gia_ObjComputeTruthTable6Lut( p, iLut, vTemp );
|
||||
Vec_WrdWriteEntry( vTruths, iLut, Truth );
|
||||
}
|
||||
Vec_WrdFree( vTemp );
|
||||
// collect pairs
|
||||
Gia_ManForEachLut( p, iLut )
|
||||
{
|
||||
Truth = Vec_WrdEntry( vTruths, iLut ) & 0xFF;
|
||||
iTruth = Npn3Table[Truth][1];
|
||||
assert( iTruth < 15 );
|
||||
Gia_LutForEachFanin( p, iLut, iFan, k )
|
||||
{
|
||||
TruthF = Vec_WrdEntry( vTruths, iFan ) & 0xFF;
|
||||
iTruthF = Npn3Table[TruthF][1];
|
||||
assert( iTruthF < 15 );
|
||||
Map[(iTruthF << 4) + iTruth]++;
|
||||
}
|
||||
}
|
||||
Gia_ManForEachCoDriverId( p, iFan, k )
|
||||
{
|
||||
TruthF = Vec_WrdEntry( vTruths, iFan );
|
||||
iTruthF = Npn3Table[TruthF & 0xFF][1];
|
||||
assert( iTruthF < 15 );
|
||||
Map[(iTruthF << 4)]++;
|
||||
}
|
||||
Vec_WrdFree( vTruths );
|
||||
// print statistics
|
||||
printf( "fi / fo" );
|
||||
for ( i = 0; i < 14; i++ )
|
||||
printf( "%6d ", i );
|
||||
printf( "\n" );
|
||||
for ( i = 0; i < 14; i++ )
|
||||
{
|
||||
printf( "%6d ", i );
|
||||
for ( k = 0; k < 14; k++ )
|
||||
if ( Map[(i << 4) | k] )
|
||||
printf( "%6d ", Map[(i << 4) | k] );
|
||||
else
|
||||
printf( "%6s ", "." );
|
||||
printf( "\n" );
|
||||
}
|
||||
// print class formulas
|
||||
printf( "\nClasses:\n" );
|
||||
for ( i = 0; i < 14; i++ )
|
||||
{
|
||||
for ( k = 0; k < 256; k++ )
|
||||
if ( Npn3Table[k][1] == i )
|
||||
break;
|
||||
assert( k < 256 );
|
||||
Class = Dar_LibReturnClass( (Npn3Table[k][0] << 8) | Npn3Table[k][0] );
|
||||
printf( "%2d : %s\n", i, pNames[Class] );
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
/// END OF FILE ///
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
ABC_NAMESPACE_IMPL_END
|
||||
|
||||
Loading…
Reference in New Issue