ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
timBox.c
Go to the documentation of this file.
1
20
21#include "timInt.h"
22
24
28
32
44void Tim_ManCreateBox( Tim_Man_t * p, int firstIn, int nIns, int firstOut, int nOuts, int iDelayTable, int fBlack )
45{
46 Tim_Box_t * pBox;
47 int i;
48 if ( p->vBoxes == NULL )
49 p->vBoxes = Vec_PtrAlloc( 100 );
50 pBox = (Tim_Box_t *)Mem_FlexEntryFetch( p->pMemObj, sizeof(Tim_Box_t) + sizeof(int) * (nIns+nOuts) );
51 memset( pBox, 0, sizeof(Tim_Box_t) );
52 pBox->iBox = Vec_PtrSize( p->vBoxes );
53 Vec_PtrPush( p->vBoxes, pBox );
54 pBox->iDelayTable = iDelayTable;
55 pBox->nInputs = nIns;
56 pBox->nOutputs = nOuts;
57 pBox->fBlack = fBlack;
58 for ( i = 0; i < nIns; i++ )
59 {
60 assert( firstIn+i < p->nCos );
61 pBox->Inouts[i] = firstIn+i;
62 p->pCos[firstIn+i].iObj2Box = pBox->iBox;
63 p->pCos[firstIn+i].iObj2Num = i;
64 }
65 for ( i = 0; i < nOuts; i++ )
66 {
67 assert( firstOut+i < p->nCis );
68 pBox->Inouts[nIns+i] = firstOut+i;
69 p->pCis[firstOut+i].iObj2Box = pBox->iBox;
70 p->pCis[firstOut+i].iObj2Num = i;
71 }
72// if ( pBox->iBox < 20 )
73// printf( "%4d %4d %4d %4d \n", firstIn, nIns, firstOut, nOuts );
74}
75
87int Tim_ManBoxForCi( Tim_Man_t * p, int iCi )
88{
89 if ( iCi >= p->nCis )
90 return -1;
91 return p->pCis[iCi].iObj2Box;
92}
93
105int Tim_ManBoxForCo( Tim_Man_t * p, int iCo )
106{
107 if ( iCo >= p->nCos )
108 return -1;
109 return p->pCos[iCo].iObj2Box;
110}
111
124{
125 return Tim_ManBox(p, iBox)->Inouts[0];
126}
127
140{
141 return Tim_ManBox(p, iBox)->Inouts[0] + Tim_ManBoxInputNum(p, iBox) - 1;
142}
143
156{
157 return Tim_ManBox(p, iBox)->Inouts[Tim_ManBox(p, iBox)->nInputs];
158}
159
172{
173 return Tim_ManBox(p, iBox)->Inouts[Tim_ManBox(p, iBox)->nInputs] + Tim_ManBoxOutputNum(p, iBox) - 1;
174}
175
188{
189 return Tim_ManBox(p, iBox)->nInputs;
190}
191
204{
205 return Tim_ManBox(p, iBox)->nOutputs;
206}
207
220{
221 return Tim_ManBox(p, iBox)->iDelayTable;
222}
223
235float * Tim_ManBoxDelayTable( Tim_Man_t * p, int iBox )
236{
237 float * pTable;
238 Tim_Box_t * pBox = Tim_ManBox(p, iBox);
239 if ( pBox->iDelayTable < 0 )
240 return NULL;
241 pTable = (float *)Vec_PtrEntry( p->vDelayTables, pBox->iDelayTable );
242 assert( (int)pTable[1] == pBox->nInputs );
243 assert( (int)pTable[2] == pBox->nOutputs );
244 return pTable;
245}
246
258int Tim_ManBoxIsBlack( Tim_Man_t * p, int iBox )
259{
260 return Tim_ManBox(p, iBox)->fBlack;
261}
262
263
275int Tim_ManBoxCopy( Tim_Man_t * p, int iBox )
276{
277 return Tim_ManBox(p, iBox)->iCopy;
278}
279
291void Tim_ManBoxSetCopy( Tim_Man_t * p, int iBox, int iCopy )
292{
293 Tim_ManBox(p, iBox)->iCopy = iCopy;
294}
295
308{
309 Tim_Box_t * pBox;
310 int i;
311 assert( iCiNum >= 0 && iCiNum < Tim_ManCiNum(p) );
312 if ( iCiNum < Tim_ManPiNum(p) )
313 return -1;
314 Tim_ManForEachBox( p, pBox, i )
315 if ( iCiNum < Tim_ManBoxOutputFirst(p, i) )
316 return i - 1;
317 return -2;
318}
319
323
324
326
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Cube * p
Definition exorList.c:222
char * Mem_FlexEntryFetch(Mem_Flex_t *p, int nBytes)
Definition mem.c:388
int Tim_ManBoxIsBlack(Tim_Man_t *p, int iBox)
Definition timBox.c:258
int Tim_ManBoxOutputNum(Tim_Man_t *p, int iBox)
Definition timBox.c:203
int Tim_ManBoxForCo(Tim_Man_t *p, int iCo)
Definition timBox.c:105
int Tim_ManBoxFindFromCiNum(Tim_Man_t *p, int iCiNum)
Definition timBox.c:307
int Tim_ManBoxOutputLast(Tim_Man_t *p, int iBox)
Definition timBox.c:171
int Tim_ManBoxInputLast(Tim_Man_t *p, int iBox)
Definition timBox.c:139
void Tim_ManBoxSetCopy(Tim_Man_t *p, int iBox, int iCopy)
Definition timBox.c:291
int Tim_ManBoxInputFirst(Tim_Man_t *p, int iBox)
Definition timBox.c:123
ABC_NAMESPACE_IMPL_START void Tim_ManCreateBox(Tim_Man_t *p, int firstIn, int nIns, int firstOut, int nOuts, int iDelayTable, int fBlack)
DECLARATIONS ///.
Definition timBox.c:44
int Tim_ManBoxInputNum(Tim_Man_t *p, int iBox)
Definition timBox.c:187
int Tim_ManBoxForCi(Tim_Man_t *p, int iCi)
Definition timBox.c:87
int Tim_ManBoxCopy(Tim_Man_t *p, int iBox)
Definition timBox.c:275
int Tim_ManBoxDelayTableId(Tim_Man_t *p, int iBox)
Definition timBox.c:219
float * Tim_ManBoxDelayTable(Tim_Man_t *p, int iBox)
Definition timBox.c:235
int Tim_ManBoxOutputFirst(Tim_Man_t *p, int iBox)
Definition timBox.c:155
#define Tim_ManForEachBox(p, pBox, i)
Definition timInt.h:117
typedefABC_NAMESPACE_HEADER_START struct Tim_Box_t_ Tim_Box_t
INCLUDES ///.
Definition timInt.h:48
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
Definition tim.h:92
int Tim_ManCiNum(Tim_Man_t *p)
Definition timMan.c:700
int Tim_ManPiNum(Tim_Man_t *p)
Definition timMan.c:708
#define assert(ex)
Definition util_old.h:213
char * memset()