blob: bf01f588a4e43c980645d6ff735dea6dc40f7655 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/**CFile****************************************************************
FileName [mioInt.h]
PackageName [MVSIS 2.0: Multi-valued logic synthesis system.]
Synopsis [File reading/writing for technology mapping.]
Author [MVSIS Group]
Affiliation [UC Berkeley]
Date [Ver. 1.0. Started - September 8, 2003.]
Revision [$Id: mioInt.h,v 1.4 2004/06/28 14:20:25 alanmi Exp $]
***********************************************************************/
#ifndef ABC__map__mio__mioInt_h
#define ABC__map__mio__mioInt_h
////////////////////////////////////////////////////////////////////////
/// INCLUDES ///
////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "misc/vec/vec.h"
#include "misc/mem/mem.h"
#include "misc/st/st.h"
#include "mio.h"
ABC_NAMESPACE_HEADER_START
////////////////////////////////////////////////////////////////////////
/// PARAMETERS ///
////////////////////////////////////////////////////////////////////////
#define MIO_STRING_GATE "GATE"
#define MIO_STRING_LATCH "LATCH"
#define MIO_STRING_PIN "PIN"
#define MIO_STRING_NONINV "NONINV"
#define MIO_STRING_INV "INV"
#define MIO_STRING_UNKNOWN "UNKNOWN"
#define MIO_STRING_CONST0 "CONST0"
#define MIO_STRING_CONST1 "CONST1"
// the bit masks
#define MIO_MASK(n) ((~((unsigned)0)) >> (32-(n)))
#define MIO_FULL (~((unsigned)0))
////////////////////////////////////////////////////////////////////////
/// STRUCTURE DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
struct Mio_LibraryStruct_t_
{
char * pName; // the name of the library
int nGates; // the number of the gates
Mio_Gate_t ** ppGates0; // the array of gates in the original order
Mio_Gate_t ** ppGatesName; // the array of gates sorted by name
Mio_Gate_t * pGates; // the linked list of all gates in no particular order
Mio_Gate_t * pGate0; // the constant zero gate
Mio_Gate_t * pGate1; // the constant one gate
Mio_Gate_t * pGateBuf; // the buffer
Mio_Gate_t * pGateInv; // the inverter
Mio_Gate_t * pGateNand2; // the NAND2 gate
Mio_Gate_t * pGateAnd2; // the AND2 gate
Mio_Gate_t * pGateNor2; // the NOR2 gate
Mio_Gate_t * pGateOr2; // the OR2 gate
st__table * tName2Gate; // the mapping of gate names into their pointer
Mem_Flex_t * pMmFlex; // the memory manaqer for SOPs
Vec_Str_t * vCube; // temporary cube
// matching
int fPinFilter; // pin filtering
int fPinPerm; // pin permutation
int fPinQuick; // pin permutation
Vec_Mem_t * vTtMem; // truth tables
Vec_Wec_t * vTt2Match; // matches for truth tables
Mio_Cell2_t * pCells; // library gates
int nCells; // library gate count
Vec_Ptr_t * vNames;
Vec_Wrd_t * vTruths;
Vec_Int_t * vTt2Match4;
Vec_Int_t * vConfigs;
Vec_Mem_t * vTtMem2[3];
Vec_Int_t * vTt2Match2[3];
};
struct Mio_GateStruct_t_
{
// information derived from the genlib file
char * pName; // the name of the gate
double dArea; // the area of the gate
char * pForm; // the formula describing functionality of the gate
Mio_Pin_t * pPins; // the linked list of all pins (one pin if info is the same)
char * pOutName; // the name of the output pin
// the library to which this gate belongs
Mio_Library_t * pLib;
// the next gate in the list
Mio_Gate_t * pNext;
Mio_Gate_t * pTwin;
// the derived information
int Cell; // cell id
int nInputs; // the number of inputs
int Profile; // the number of occurrences
int Profile2; // the number of occurrences
double dDelayMax; // the maximum delay
char * pSop; // sum-of-products
Vec_Int_t * vExpr; // boolean expression
union { word uTruth; // truth table
word * pTruth; }; // pointer to the truth table
int Value; // user's information
};
struct Mio_PinStruct_t_
{
char * pName;
Mio_PinPhase_t Phase;
double dLoadInput;
double dLoadMax;
double dDelayBlockRise;
double dDelayFanoutRise;
double dDelayBlockFall;
double dDelayFanoutFall;
double dDelayBlockMax;
Mio_Pin_t * pNext;
};
////////////////////////////////////////////////////////////////////////
/// GLOBAL VARIABLES ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// MACRO DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
/*=== mio.c =============================================================*/
/*=== mioRead.c =============================================================*/
/*=== mioUtils.c =============================================================*/
ABC_NAMESPACE_HEADER_END
#endif
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////
|