summaryrefslogtreecommitdiffstats
path: root/src/base/abci/abcIfMux.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2010-11-01 01:35:04 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2010-11-01 01:35:04 -0700
commit6130e39b18b5f53902e4eab14f6d5cdde5219563 (patch)
tree0db0628479a1b750e9af1f66cb8379ebd0913d31 /src/base/abci/abcIfMux.c
parentf0e77f6797c0504b0da25a56152b707d3357f386 (diff)
downloadabc-6130e39b18b5f53902e4eab14f6d5cdde5219563.tar.gz
abc-6130e39b18b5f53902e4eab14f6d5cdde5219563.tar.bz2
abc-6130e39b18b5f53902e4eab14f6d5cdde5219563.zip
initial commit of public abc
Diffstat (limited to 'src/base/abci/abcIfMux.c')
-rw-r--r--src/base/abci/abcIfMux.c422
1 files changed, 422 insertions, 0 deletions
diff --git a/src/base/abci/abcIfMux.c b/src/base/abci/abcIfMux.c
new file mode 100644
index 00000000..bf9d6cff
--- /dev/null
+++ b/src/base/abci/abcIfMux.c
@@ -0,0 +1,422 @@
+/**CFile****************************************************************
+
+ FileName [abcIf.c]
+
+ SystemName [ABC: Logic synthesis and verification system.]
+
+ PackageName [Network and node package.]
+
+ Synopsis [Interface with the FPGA mapping package.]
+
+ Author [Alan Mishchenko]
+
+ Affiliation [UC Berkeley]
+
+ Date [Ver. 1.0. Started - November 21, 2006.]
+
+ Revision [$Id: abcIf.c,v 1.00 2006/11/21 00:00:00 alanmi Exp $]
+
+***********************************************************************/
+
+#include "abc.h"
+#include "if.h"
+
+ABC_NAMESPACE_IMPL_START
+
+
+////////////////////////////////////////////////////////////////////////
+/// DECLARATIONS ///
+////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////
+/// FUNCTION DEFINITIONS ///
+////////////////////////////////////////////////////////////////////////
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline int Abc_NtkFuncCof0( int t, int v )
+{
+ static int s_Truth[3] = { 0xAA, 0xCC, 0xF0 };
+ return 0xff & ((t & ~s_Truth[v]) | ((t & ~s_Truth[v]) << (1<<v)));
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline int Abc_NtkFuncCof1( int t, int v )
+{
+ static int s_Truth[3] = { 0xAA, 0xCC, 0xF0 };
+ return 0xff & ((t & s_Truth[v]) | ((t & s_Truth[v]) >> (1<<v)));
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline int Abc_NtkFuncHasVar( int t, int v )
+{
+ static int s_Truth[3] = { 0xAA, 0xCC, 0xF0 };
+ return ((t & s_Truth[v]) >> (1<<v)) != (t & ~s_Truth[v]);
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+static inline int Abc_NtkFuncSuppSize( int t )
+{
+ return Abc_NtkFuncHasVar(t, 0) + Abc_NtkFuncHasVar(t, 1) + Abc_NtkFuncHasVar(t, 2);
+}
+
+/**Function*************************************************************
+
+ Synopsis [Precomputes MUXes and functions of less than 3 inputs.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Abc_NtkCutCostMuxPrecompute()
+{
+ int i, Value;
+ int CounterM = 0;
+ for ( i = 0; i < 256; i++ )
+ {
+ Value = 0;
+ if ( Abc_NtkFuncSuppSize( i ) < 3 )
+ Value = 1;
+ else
+ {
+ if ( (Abc_NtkFuncSuppSize(Abc_NtkFuncCof0(i,0)) == 1 && Abc_NtkFuncSuppSize(Abc_NtkFuncCof1(i,0)) == 1) ||
+ (Abc_NtkFuncSuppSize(Abc_NtkFuncCof0(i,1)) == 1 && Abc_NtkFuncSuppSize(Abc_NtkFuncCof1(i,1)) == 1) ||
+ (Abc_NtkFuncSuppSize(Abc_NtkFuncCof0(i,2)) == 1 && Abc_NtkFuncSuppSize(Abc_NtkFuncCof1(i,2)) == 1) )
+ {
+ Value = 1;
+ CounterM++;
+ }
+ }
+ printf( "%d, // %3d 0x%02X\n", Value, i, i );
+ }
+ printf( "Total number of MUXes = %d.\n", CounterM );
+}
+
+/**Function*************************************************************
+
+ Synopsis [Procedure returning the cost of the cut.]
+
+ Description [The number of MUXes needed to implement the function.]
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+int Abc_NtkCutCostMux( If_Cut_t * pCut )
+{
+ static char uLookup[256] = {
+ 1, // 0 0x00
+ 0, // 1 0x01
+ 0, // 2 0x02
+ 1, // 3 0x03
+ 0, // 4 0x04
+ 1, // 5 0x05
+ 0, // 6 0x06
+ 0, // 7 0x07
+ 0, // 8 0x08
+ 0, // 9 0x09
+ 1, // 10 0x0A
+ 0, // 11 0x0B
+ 1, // 12 0x0C
+ 0, // 13 0x0D
+ 0, // 14 0x0E
+ 1, // 15 0x0F
+ 0, // 16 0x10
+ 1, // 17 0x11
+ 0, // 18 0x12
+ 0, // 19 0x13
+ 0, // 20 0x14
+ 0, // 21 0x15
+ 0, // 22 0x16
+ 0, // 23 0x17
+ 0, // 24 0x18
+ 0, // 25 0x19
+ 0, // 26 0x1A
+ 1, // 27 0x1B
+ 0, // 28 0x1C
+ 1, // 29 0x1D
+ 0, // 30 0x1E
+ 0, // 31 0x1F
+ 0, // 32 0x20
+ 0, // 33 0x21
+ 1, // 34 0x22
+ 0, // 35 0x23
+ 0, // 36 0x24
+ 0, // 37 0x25
+ 0, // 38 0x26
+ 1, // 39 0x27
+ 0, // 40 0x28
+ 0, // 41 0x29
+ 0, // 42 0x2A
+ 0, // 43 0x2B
+ 0, // 44 0x2C
+ 0, // 45 0x2D
+ 1, // 46 0x2E
+ 0, // 47 0x2F
+ 1, // 48 0x30
+ 0, // 49 0x31
+ 0, // 50 0x32
+ 1, // 51 0x33
+ 0, // 52 0x34
+ 1, // 53 0x35
+ 0, // 54 0x36
+ 0, // 55 0x37
+ 0, // 56 0x38
+ 0, // 57 0x39
+ 1, // 58 0x3A
+ 0, // 59 0x3B
+ 1, // 60 0x3C
+ 0, // 61 0x3D
+ 0, // 62 0x3E
+ 1, // 63 0x3F
+ 0, // 64 0x40
+ 0, // 65 0x41
+ 0, // 66 0x42
+ 0, // 67 0x43
+ 1, // 68 0x44
+ 0, // 69 0x45
+ 0, // 70 0x46
+ 1, // 71 0x47
+ 0, // 72 0x48
+ 0, // 73 0x49
+ 0, // 74 0x4A
+ 0, // 75 0x4B
+ 0, // 76 0x4C
+ 0, // 77 0x4D
+ 1, // 78 0x4E
+ 0, // 79 0x4F
+ 1, // 80 0x50
+ 0, // 81 0x51
+ 0, // 82 0x52
+ 1, // 83 0x53
+ 0, // 84 0x54
+ 1, // 85 0x55
+ 0, // 86 0x56
+ 0, // 87 0x57
+ 0, // 88 0x58
+ 0, // 89 0x59
+ 1, // 90 0x5A
+ 0, // 91 0x5B
+ 1, // 92 0x5C
+ 0, // 93 0x5D
+ 0, // 94 0x5E
+ 1, // 95 0x5F
+ 0, // 96 0x60
+ 0, // 97 0x61
+ 0, // 98 0x62
+ 0, // 99 0x63
+ 0, // 100 0x64
+ 0, // 101 0x65
+ 1, // 102 0x66
+ 0, // 103 0x67
+ 0, // 104 0x68
+ 0, // 105 0x69
+ 0, // 106 0x6A
+ 0, // 107 0x6B
+ 0, // 108 0x6C
+ 0, // 109 0x6D
+ 0, // 110 0x6E
+ 0, // 111 0x6F
+ 0, // 112 0x70
+ 0, // 113 0x71
+ 1, // 114 0x72
+ 0, // 115 0x73
+ 1, // 116 0x74
+ 0, // 117 0x75
+ 0, // 118 0x76
+ 1, // 119 0x77
+ 0, // 120 0x78
+ 0, // 121 0x79
+ 0, // 122 0x7A
+ 0, // 123 0x7B
+ 0, // 124 0x7C
+ 0, // 125 0x7D
+ 0, // 126 0x7E
+ 0, // 127 0x7F
+ 0, // 128 0x80
+ 0, // 129 0x81
+ 0, // 130 0x82
+ 0, // 131 0x83
+ 0, // 132 0x84
+ 0, // 133 0x85
+ 0, // 134 0x86
+ 0, // 135 0x87
+ 1, // 136 0x88
+ 0, // 137 0x89
+ 0, // 138 0x8A
+ 1, // 139 0x8B
+ 0, // 140 0x8C
+ 1, // 141 0x8D
+ 0, // 142 0x8E
+ 0, // 143 0x8F
+ 0, // 144 0x90
+ 0, // 145 0x91
+ 0, // 146 0x92
+ 0, // 147 0x93
+ 0, // 148 0x94
+ 0, // 149 0x95
+ 0, // 150 0x96
+ 0, // 151 0x97
+ 0, // 152 0x98
+ 1, // 153 0x99
+ 0, // 154 0x9A
+ 0, // 155 0x9B
+ 0, // 156 0x9C
+ 0, // 157 0x9D
+ 0, // 158 0x9E
+ 0, // 159 0x9F
+ 1, // 160 0xA0
+ 0, // 161 0xA1
+ 0, // 162 0xA2
+ 1, // 163 0xA3
+ 0, // 164 0xA4
+ 1, // 165 0xA5
+ 0, // 166 0xA6
+ 0, // 167 0xA7
+ 0, // 168 0xA8
+ 0, // 169 0xA9
+ 1, // 170 0xAA
+ 0, // 171 0xAB
+ 1, // 172 0xAC
+ 0, // 173 0xAD
+ 0, // 174 0xAE
+ 1, // 175 0xAF
+ 0, // 176 0xB0
+ 1, // 177 0xB1
+ 0, // 178 0xB2
+ 0, // 179 0xB3
+ 0, // 180 0xB4
+ 0, // 181 0xB5
+ 0, // 182 0xB6
+ 0, // 183 0xB7
+ 1, // 184 0xB8
+ 0, // 185 0xB9
+ 0, // 186 0xBA
+ 1, // 187 0xBB
+ 0, // 188 0xBC
+ 0, // 189 0xBD
+ 0, // 190 0xBE
+ 0, // 191 0xBF
+ 1, // 192 0xC0
+ 0, // 193 0xC1
+ 0, // 194 0xC2
+ 1, // 195 0xC3
+ 0, // 196 0xC4
+ 1, // 197 0xC5
+ 0, // 198 0xC6
+ 0, // 199 0xC7
+ 0, // 200 0xC8
+ 0, // 201 0xC9
+ 1, // 202 0xCA
+ 0, // 203 0xCB
+ 1, // 204 0xCC
+ 0, // 205 0xCD
+ 0, // 206 0xCE
+ 1, // 207 0xCF
+ 0, // 208 0xD0
+ 1, // 209 0xD1
+ 0, // 210 0xD2
+ 0, // 211 0xD3
+ 0, // 212 0xD4
+ 0, // 213 0xD5
+ 0, // 214 0xD6
+ 0, // 215 0xD7
+ 1, // 216 0xD8
+ 0, // 217 0xD9
+ 0, // 218 0xDA
+ 0, // 219 0xDB
+ 0, // 220 0xDC
+ 1, // 221 0xDD
+ 0, // 222 0xDE
+ 0, // 223 0xDF
+ 0, // 224 0xE0
+ 0, // 225 0xE1
+ 1, // 226 0xE2
+ 0, // 227 0xE3
+ 1, // 228 0xE4
+ 0, // 229 0xE5
+ 0, // 230 0xE6
+ 0, // 231 0xE7
+ 0, // 232 0xE8
+ 0, // 233 0xE9
+ 0, // 234 0xEA
+ 0, // 235 0xEB
+ 0, // 236 0xEC
+ 0, // 237 0xED
+ 1, // 238 0xEE
+ 0, // 239 0xEF
+ 1, // 240 0xF0
+ 0, // 241 0xF1
+ 0, // 242 0xF2
+ 1, // 243 0xF3
+ 0, // 244 0xF4
+ 1, // 245 0xF5
+ 0, // 246 0xF6
+ 0, // 247 0xF7
+ 0, // 248 0xF8
+ 0, // 249 0xF9
+ 1, // 250 0xFA
+ 0, // 251 0xFB
+ 1, // 252 0xFC
+ 0, // 253 0xFD
+ 0, // 254 0xFE
+ 1 // 255 0xFF
+ };
+ if ( pCut->nLeaves < 3 )
+ return 1;
+ if ( pCut->nLeaves == 3 && uLookup[0xff & *If_CutTruth(pCut)] )
+ return 1;
+ return (1 << pCut->nLeaves) - 1;
+}
+
+
+////////////////////////////////////////////////////////////////////////
+/// END OF FILE ///
+////////////////////////////////////////////////////////////////////////
+
+
+ABC_NAMESPACE_IMPL_END
+