ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
timDump.c File Reference
#include "timInt.h"
Include dependency graph for timDump.c:

Go to the source code of this file.

Macros

#define TIM_DUMP_VER_NUM   1
 DECLARATIONS ///.
 

Functions

Vec_Str_tTim_ManSave (Tim_Man_t *p, int fHieOnly)
 FUNCTION DEFINITIONS ///.
 
Tim_Man_tTim_ManLoad (Vec_Str_t *p, int fHieOnly)
 

Macro Definition Documentation

◆ TIM_DUMP_VER_NUM

#define TIM_DUMP_VER_NUM   1

DECLARATIONS ///.

CFile****************************************************************

FileName [timDump.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Hierarchy/timing manager.]

Synopsis [Saving and loading the hierarchy timing manager.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - April 28, 2007.]

Revision [

Id
timDump.c,v 1.00 2007/04/28 00:00:00 alanmi Exp

]

Definition at line 29 of file timDump.c.

Function Documentation

◆ Tim_ManLoad()

Tim_Man_t * Tim_ManLoad ( Vec_Str_t * p,
int fHieOnly )

Function*************************************************************

Synopsis [Restores the timing manager from the char stream.]

Description []

SideEffects []

SeeAlso []

Definition at line 113 of file timDump.c.

114{
115 Tim_Man_t * pMan;
116 Tim_Obj_t * pObj;
117 int VerNum, nCis, nCos, nPis, nPos;
118 int nBoxes, nBoxIns, nBoxOuts, CopyBox, fBlack;
119 int TableId, nTables, TableSize, TableX, TableY;
120 int i, k, curPi, curPo, iStr = 0;
121 float * pDelayTable;
122 // get version number
123 VerNum = Vec_StrGetI_ne( p, &iStr );
124 assert( VerNum == TIM_DUMP_VER_NUM );
125 // get the number of CIs/COs
126 nCis = Vec_StrGetI_ne( p, &iStr );
127 nCos = Vec_StrGetI_ne( p, &iStr );
128 // get the number of PIs/POs
129 nPis = Vec_StrGetI_ne( p, &iStr );
130 nPos = Vec_StrGetI_ne( p, &iStr );
131 // start the timing manager
132 pMan = Tim_ManStart( nCis, nCos );
133 // start boxes
134 nBoxes = Vec_StrGetI_ne( p, &iStr );
135 assert( pMan->vBoxes == NULL );
136 if ( nBoxes > 0 )
137 pMan->vBoxes = Vec_PtrAlloc( nBoxes );
138 // create boxes
139 curPi = nPis;
140 curPo = 0;
141 for ( i = 0; i < nBoxes; i++ )
142 {
143 nBoxIns = Vec_StrGetI_ne( p, &iStr );
144 nBoxOuts = Vec_StrGetI_ne( p, &iStr );
145 TableId = Vec_StrGetI_ne( p, &iStr );
146 CopyBox = Vec_StrGetI_ne( p, &iStr );
147 fBlack = 0;//Vec_StrGetI_ne( p, &iStr );
148 Tim_ManCreateBox( pMan, curPo, nBoxIns, curPi, nBoxOuts, TableId, fBlack );
149 Tim_ManBoxSetCopy( pMan, i, CopyBox );
150 curPi += nBoxOuts;
151 curPo += nBoxIns;
152 }
153 curPo += nPos;
154 assert( curPi == nCis );
155 assert( curPo == nCos );
156 if ( fHieOnly )
157 return pMan;
158 // create delay tables
159 nTables = Vec_StrGetI_ne( p, &iStr );
160 assert( pMan->vDelayTables == NULL );
161 if ( nTables > 0 )
162 pMan->vDelayTables = Vec_PtrAlloc( nTables );
163 // read delay tables
164 for ( i = 0; i < nTables; i++ )
165 {
166 // read table ID and dimensions
167 TableId = Vec_StrGetI_ne( p, &iStr );
168 TableX = Vec_StrGetI_ne( p, &iStr );
169 TableY = Vec_StrGetI_ne( p, &iStr );
170 assert( TableId == i );
171 // create new table
172 TableSize = TableX * TableY;
173 pDelayTable = ABC_ALLOC( float, TableSize + 3 );
174 pDelayTable[0] = TableId;
175 pDelayTable[1] = TableX;
176 pDelayTable[2] = TableY;
177 // read table contents
178 for ( k = 0; k < TableSize; k++ )
179 pDelayTable[k+3] = Vec_StrGetF( p, &iStr );
180 assert( Vec_PtrSize(pMan->vDelayTables) == TableId );
181 Vec_PtrPush( pMan->vDelayTables, pDelayTable );
182 }
183 assert( Tim_ManDelayTableNum(pMan) == nTables );
184 // read PI arrival times
185 Tim_ManForEachPi( pMan, pObj, i )
186 Tim_ManInitPiArrival( pMan, i, Vec_StrGetF(p, &iStr) );
187 // read PO required times
188 Tim_ManForEachPo( pMan, pObj, i )
189 Tim_ManInitPoRequired( pMan, i, Vec_StrGetF(p, &iStr) );
190 assert( Vec_StrSize(p) == iStr );
191// Tim_ManPrint( pMan );
192 return pMan;
193}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
Cube * p
Definition exorList.c:222
#define TIM_DUMP_VER_NUM
DECLARATIONS ///.
Definition timDump.c:29
#define Tim_ManForEachPo(p, pObj, i)
Definition timInt.h:114
struct Tim_Obj_t_ Tim_Obj_t
Definition timInt.h:49
#define Tim_ManForEachPi(p, pObj, i)
Definition timInt.h:112
typedefABC_NAMESPACE_HEADER_START struct Tim_Man_t_ Tim_Man_t
INCLUDES ///.
Definition tim.h:92
void Tim_ManCreateBox(Tim_Man_t *p, int firstIn, int nIns, int firstOut, int nOuts, int iDelayTable, int fBlack)
ITERATORS ///.
Definition timBox.c:44
void Tim_ManBoxSetCopy(Tim_Man_t *p, int iBox, int iCopy)
Definition timBox.c:291
Tim_Man_t * Tim_ManStart(int nCis, int nCos)
DECLARATIONS ///.
Definition timMan.c:45
void Tim_ManInitPiArrival(Tim_Man_t *p, int iPi, float Delay)
DECLARATIONS ///.
Definition timTime.c:44
int Tim_ManDelayTableNum(Tim_Man_t *p)
Definition timMan.c:749
void Tim_ManInitPoRequired(Tim_Man_t *p, int iPo, float Delay)
Definition timTime.c:61
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Tim_ManSave()

Vec_Str_t * Tim_ManSave ( Tim_Man_t * p,
int fHieOnly )

FUNCTION DEFINITIONS ///.

Function*************************************************************

Synopsis [Transform the timing manager into the char stream.]

Description []

SideEffects []

SeeAlso []

Definition at line 46 of file timDump.c.

47{
48 Tim_Box_t * pBox;
49 Tim_Obj_t * pObj;
50 Vec_Str_t * vStr;
51 float * pDelayTable;
52 int i, k, TableSize;
53 // create output stream
54 vStr = Vec_StrAlloc( 10000 );
55 // dump version number
56 Vec_StrPutI_ne( vStr, TIM_DUMP_VER_NUM );
57 // save CI/CO counts
58 Vec_StrPutI_ne( vStr, Tim_ManCiNum(p) );
59 Vec_StrPutI_ne( vStr, Tim_ManCoNum(p) );
60 // save PI/PO counts
61 Vec_StrPutI_ne( vStr, Tim_ManPiNum(p) );
62 Vec_StrPutI_ne( vStr, Tim_ManPoNum(p) );
63 // save number of boxes
64 Vec_StrPutI_ne( vStr, Tim_ManBoxNum(p) );
65 // for each box, save num_inputs, num_outputs, delay table ID, and copy field
66 if ( Tim_ManBoxNum(p) > 0 )
67 Tim_ManForEachBox( p, pBox, i )
68 {
69 Vec_StrPutI_ne( vStr, Tim_ManBoxInputNum(p, pBox->iBox) );
70 Vec_StrPutI_ne( vStr, Tim_ManBoxOutputNum(p, pBox->iBox) );
71 Vec_StrPutI_ne( vStr, Tim_ManBoxDelayTableId(p, pBox->iBox) ); // can be -1 if delay table is not given
72 Vec_StrPutI_ne( vStr, Tim_ManBoxCopy(p, pBox->iBox) ); // can be -1 if the copy is node defined
73 //Vec_StrPutI_ne( vStr, Tim_ManBoxIsBlack(p, pBox->iBox) );
74 }
75 if ( fHieOnly )
76 return vStr;
77 // save the number of delay tables
78 Vec_StrPutI_ne( vStr, Tim_ManDelayTableNum(p) );
79 // save the delay tables
80 if ( Tim_ManDelayTableNum(p) > 0 )
81 Tim_ManForEachTable( p, pDelayTable, i )
82 {
83 assert( (int)pDelayTable[0] == i );
84 // save table ID and dimensions (inputs x outputs)
85 Vec_StrPutI_ne( vStr, (int)pDelayTable[0] );
86 Vec_StrPutI_ne( vStr, (int)pDelayTable[1] );
87 Vec_StrPutI_ne( vStr, (int)pDelayTable[2] );
88 // save table contents
89 TableSize = (int)pDelayTable[1] * (int)pDelayTable[2];
90 for ( k = 0; k < TableSize; k++ )
91 Vec_StrPutF( vStr, pDelayTable[k+3] );
92 }
93 // save PI arrival times
94 Tim_ManForEachPi( p, pObj, i )
95 Vec_StrPutF( vStr, Tim_ManGetCiArrival(p, pObj->Id) );
96 // save PO required times
97 Tim_ManForEachPo( p, pObj, i )
98 Vec_StrPutF( vStr, Tim_ManGetCoRequired(p, pObj->Id) );
99 return vStr;
100}
struct Vec_Str_t_ Vec_Str_t
Definition bblif.c:46
int Id
Definition timInt.h:81
#define Tim_ManForEachTable(p, pTable, i)
Definition timInt.h:125
#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
int Tim_ManBoxOutputNum(Tim_Man_t *p, int iBox)
Definition timBox.c:203
int Tim_ManBoxNum(Tim_Man_t *p)
Definition timMan.c:722
int Tim_ManCiNum(Tim_Man_t *p)
Definition timMan.c:700
int Tim_ManPoNum(Tim_Man_t *p)
Definition timMan.c:714
int Tim_ManBoxInputNum(Tim_Man_t *p, int iBox)
Definition timBox.c:187
int Tim_ManPiNum(Tim_Man_t *p)
Definition timMan.c:708
int Tim_ManCoNum(Tim_Man_t *p)
Definition timMan.c:704
float Tim_ManGetCiArrival(Tim_Man_t *p, int iCi)
Definition timTime.c:174
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_ManGetCoRequired(Tim_Man_t *p, int iCo)
Definition timTime.c:222
Here is the call graph for this function:
Here is the caller graph for this function: