ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
bacPtr.c File Reference
#include "base/abc/abc.h"
#include "base/main/mainInt.h"
#include "map/mio/mio.h"
#include "bac.h"
Include dependency graph for bacPtr.c:

Go to the source code of this file.

Enumerations

enum  Ptr_ObjType_t {
  PTR_GATE_NONE = 0 , PTR_GATE_C0 , PTR_GATE_C1 , PTR_GATE_BUF ,
  PTR_GATE_INV , PTR_GATE_AND , PTR_GATE_NAND , PTR_GATE_OR ,
  PTR_GATE_NOR , PTR_GATE_XOR , PTR_GATE_XNOR , PTR_GATE_UNKNOWN
}
 DECLARATIONS ///. More...
 

Functions

void Bac_PtrFreeNtk (Vec_Ptr_t *vNtk)
 FUNCTION DEFINITIONS ///.
 
void Bac_PtrFree (Vec_Ptr_t *vDes)
 
int Bac_PtrMemoryArray (Vec_Ptr_t *vArray)
 
int Bac_PtrMemoryArrayArray (Vec_Ptr_t *vArrayArray)
 
int Bac_PtrMemoryNtk (Vec_Ptr_t *vNtk)
 
int Bac_PtrMemory (Vec_Ptr_t *vDes)
 
void Bac_PtrDumpSignalsBlif (FILE *pFile, Vec_Ptr_t *vSigs, int fSkipLastComma)
 
void Bac_PtrDumpBoxBlif (FILE *pFile, Vec_Ptr_t *vBox)
 
void Bac_PtrDumpBoxesBlif (FILE *pFile, Vec_Ptr_t *vBoxes)
 
void Bac_PtrDumpModuleBlif (FILE *pFile, Vec_Ptr_t *vNtk)
 
void Bac_PtrDumpBlif (char *pFileName, Vec_Ptr_t *vDes)
 
void Bac_PtrDumpSignalsVerilog (FILE *pFile, Vec_Ptr_t *vSigs, int fAlwaysComma)
 
void Bac_PtrDumpBoxVerilog (FILE *pFile, Vec_Ptr_t *vBox)
 
void Bac_PtrDumpBoxesVerilog (FILE *pFile, Vec_Ptr_t *vBoxes)
 
void Bac_PtrDumpModuleVerilog (FILE *pFile, Vec_Ptr_t *vNtk)
 
void Bac_PtrDumpVerilog (char *pFileName, Vec_Ptr_t *vDes)
 
void Bac_ManCollectGateNameOne (Mio_Library_t *pLib, Ptr_ObjType_t Type, word Truth, Vec_Ptr_t *vGateNames)
 
Vec_Ptr_tBac_ManCollectGateNamesByTruth (Mio_Library_t *pLib)
 
void Bac_PtrUpdateBox (Vec_Ptr_t *vBox, Vec_Ptr_t *vGatesNames)
 
Vec_Ptr_tBac_PtrTransformSigs (Vec_Ptr_t *vSig)
 
Vec_Ptr_tBac_PtrTransformBox (Vec_Ptr_t *vBox, Vec_Ptr_t *vGatesNames)
 
Vec_Ptr_tBac_PtrTransformBoxes (Vec_Ptr_t *vBoxes, Vec_Ptr_t *vGatesNames)
 
Vec_Ptr_tBac_PtrTransformNtk (Vec_Ptr_t *vNtk, Vec_Ptr_t *vGatesNames)
 
Vec_Ptr_tBac_PtrTransformTest (Vec_Ptr_t *vDes)
 
void Bac_PtrTransformTestTest ()
 

Enumeration Type Documentation

◆ Ptr_ObjType_t

DECLARATIONS ///.

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

FileName [bacPtr.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Hierarchical word-level netlist.]

Synopsis [Simple interface with external tools.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

Date [Ver. 1.0. Started - November 29, 2014.]

Revision [

Id
bacPtr.c,v 1.00 2014/11/29 00:00:00 alanmi Exp

]

Enumerator
PTR_GATE_NONE 
PTR_GATE_C0 
PTR_GATE_C1 
PTR_GATE_BUF 
PTR_GATE_INV 
PTR_GATE_AND 
PTR_GATE_NAND 
PTR_GATE_OR 
PTR_GATE_NOR 
PTR_GATE_XOR 
PTR_GATE_XNOR 
PTR_GATE_UNKNOWN 

Definition at line 56 of file bacPtr.c.

56 {
57 PTR_GATE_NONE = 0,
58 PTR_GATE_C0, // Const0T
59 PTR_GATE_C1, // Const1T
60 PTR_GATE_BUF, // BufT
61 PTR_GATE_INV, // InvT
62 PTR_GATE_AND, // AndT
63 PTR_GATE_NAND, // NandT
64 PTR_GATE_OR, // OrT
65 PTR_GATE_NOR, // NorT
66 PTR_GATE_XOR, // XorT
67 PTR_GATE_XNOR, // XnorT
Ptr_ObjType_t
DECLARATIONS ///.
Definition bacPtr.c:56
@ PTR_GATE_OR
Definition bacPtr.c:64
@ PTR_GATE_UNKNOWN
Definition bacPtr.c:68
@ PTR_GATE_C1
Definition bacPtr.c:59
@ PTR_GATE_XNOR
Definition bacPtr.c:67
@ PTR_GATE_AND
Definition bacPtr.c:62
@ PTR_GATE_BUF
Definition bacPtr.c:60
@ PTR_GATE_NONE
Definition bacPtr.c:57
@ PTR_GATE_XOR
Definition bacPtr.c:66
@ PTR_GATE_NOR
Definition bacPtr.c:65
@ PTR_GATE_C0
Definition bacPtr.c:58
@ PTR_GATE_NAND
Definition bacPtr.c:63
@ PTR_GATE_INV
Definition bacPtr.c:61

Function Documentation

◆ Bac_ManCollectGateNameOne()

void Bac_ManCollectGateNameOne ( Mio_Library_t * pLib,
Ptr_ObjType_t Type,
word Truth,
Vec_Ptr_t * vGateNames )

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

Synopsis [Collect elementary gates from the library.]

Description []

SideEffects []

SeeAlso []

Definition at line 284 of file bacPtr.c.

285{
286 Mio_Gate_t * pGate = Mio_LibraryReadGateByTruth( pLib, Truth );
287 if ( pGate != NULL )
288 Vec_PtrWriteEntry( vGateNames, Type, Mio_GateReadName(pGate) );
289}
Mio_Gate_t * Mio_LibraryReadGateByTruth(Mio_Library_t *pLib, word t)
Definition mioApi.c:130
char * Mio_GateReadName(Mio_Gate_t *pGate)
Definition mioApi.c:169
struct Mio_GateStruct_t_ Mio_Gate_t
Definition mio.h:43
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_ManCollectGateNamesByTruth()

Vec_Ptr_t * Bac_ManCollectGateNamesByTruth ( Mio_Library_t * pLib)

Definition at line 290 of file bacPtr.c.

291{
292 static word uTruths6[3] = {
293 ABC_CONST(0xAAAAAAAAAAAAAAAA),
294 ABC_CONST(0xCCCCCCCCCCCCCCCC),
295 ABC_CONST(0xF0F0F0F0F0F0F0F0),
296 };
297 Vec_Ptr_t * vGateNames = Vec_PtrStart( PTR_GATE_UNKNOWN );
298 Bac_ManCollectGateNameOne( pLib, PTR_GATE_C0, 0, vGateNames );
299 Bac_ManCollectGateNameOne( pLib, PTR_GATE_C1, ~(word)0, vGateNames );
300 Bac_ManCollectGateNameOne( pLib, PTR_GATE_BUF, uTruths6[0], vGateNames );
301 Bac_ManCollectGateNameOne( pLib, PTR_GATE_INV, ~uTruths6[0], vGateNames );
302 Bac_ManCollectGateNameOne( pLib, PTR_GATE_AND, (uTruths6[0] & uTruths6[1]), vGateNames );
303 Bac_ManCollectGateNameOne( pLib, PTR_GATE_NAND, ~(uTruths6[0] & uTruths6[1]), vGateNames );
304 Bac_ManCollectGateNameOne( pLib, PTR_GATE_OR, (uTruths6[0] | uTruths6[1]), vGateNames );
305 Bac_ManCollectGateNameOne( pLib, PTR_GATE_NOR, ~(uTruths6[0] | uTruths6[1]), vGateNames );
306 Bac_ManCollectGateNameOne( pLib, PTR_GATE_XOR, (uTruths6[0] ^ uTruths6[1]), vGateNames );
307 Bac_ManCollectGateNameOne( pLib, PTR_GATE_XNOR, ~(uTruths6[0] ^ uTruths6[1]), vGateNames );
308 return vGateNames;
309}
#define ABC_CONST(number)
PARAMETERS ///.
Definition abc_global.h:240
void Bac_ManCollectGateNameOne(Mio_Library_t *pLib, Ptr_ObjType_t Type, word Truth, Vec_Ptr_t *vGateNames)
Definition bacPtr.c:284
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpBlif()

void Bac_PtrDumpBlif ( char * pFileName,
Vec_Ptr_t * vDes )

Definition at line 192 of file bacPtr.c.

193{
194 FILE * pFile;
195 Vec_Ptr_t * vNtk; int i;
196 pFile = fopen( pFileName, "wb" );
197 if ( pFile == NULL )
198 {
199 printf( "Cannot open output file \"%s\".\n", pFileName );
200 return;
201 }
202 fprintf( pFile, "// Design \"%s\" written via Ptr in ABC on %s\n\n", (char *)Vec_PtrEntry(vDes, 0), Extra_TimeStamp() );
203 Vec_PtrForEachEntryStart( Vec_Ptr_t *, vDes, vNtk, i, 1 )
204 Bac_PtrDumpModuleBlif( pFile, vNtk );
205 fclose( pFile );
206}
void Bac_PtrDumpModuleBlif(FILE *pFile, Vec_Ptr_t *vNtk)
Definition bacPtr.c:179
char * Extra_TimeStamp()
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
Definition vecPtr.h:57
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpBoxBlif()

void Bac_PtrDumpBoxBlif ( FILE * pFile,
Vec_Ptr_t * vBox )

Definition at line 163 of file bacPtr.c.

164{
165 char * pName; int i;
166 fprintf( pFile, ".subckt" );
167 fprintf( pFile, " %s", (char *)Vec_PtrEntry(vBox, 0) );
168 //fprintf( pFile, " %s", (char *)Vec_PtrEntry(vBox, 1) ); // do not write intance name in BLIF
169 Vec_PtrForEachEntryStart( char *, vBox, pName, i, 2 )
170 fprintf( pFile, " %s=%s", pName, (char *)Vec_PtrEntry(vBox, i+1) ), i++;
171 fprintf( pFile, "\n" );
172}
Here is the caller graph for this function:

◆ Bac_PtrDumpBoxesBlif()

void Bac_PtrDumpBoxesBlif ( FILE * pFile,
Vec_Ptr_t * vBoxes )

Definition at line 173 of file bacPtr.c.

174{
175 Vec_Ptr_t * vBox; int i;
176 Vec_PtrForEachEntry( Vec_Ptr_t *, vBoxes, vBox, i )
177 Bac_PtrDumpBoxBlif( pFile, vBox );
178}
void Bac_PtrDumpBoxBlif(FILE *pFile, Vec_Ptr_t *vBox)
Definition bacPtr.c:163
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
Definition vecPtr.h:55
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpBoxesVerilog()

void Bac_PtrDumpBoxesVerilog ( FILE * pFile,
Vec_Ptr_t * vBoxes )

Definition at line 234 of file bacPtr.c.

235{
236 Vec_Ptr_t * vBox; int i;
237 Vec_PtrForEachEntry( Vec_Ptr_t *, vBoxes, vBox, i )
238 Bac_PtrDumpBoxVerilog( pFile, vBox );
239}
void Bac_PtrDumpBoxVerilog(FILE *pFile, Vec_Ptr_t *vBox)
Definition bacPtr.c:225
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpBoxVerilog()

void Bac_PtrDumpBoxVerilog ( FILE * pFile,
Vec_Ptr_t * vBox )

Definition at line 225 of file bacPtr.c.

226{
227 char * pName; int i;
228 fprintf( pFile, " %s", (char *)Vec_PtrEntry(vBox, 0) );
229 fprintf( pFile, " %s (", (char *)Vec_PtrEntry(vBox, 1) ); // write intance name in Verilog
230 Vec_PtrForEachEntryStart( char *, vBox, pName, i, 2 )
231 fprintf( pFile, ".%s(%s)%s", pName, (char *)Vec_PtrEntry(vBox, i+1), i < Vec_PtrSize(vBox) - 2 ? ", ":"" ), i++;
232 fprintf( pFile, ");\n" );
233}
Here is the caller graph for this function:

◆ Bac_PtrDumpModuleBlif()

void Bac_PtrDumpModuleBlif ( FILE * pFile,
Vec_Ptr_t * vNtk )

Definition at line 179 of file bacPtr.c.

180{
181 fprintf( pFile, ".model %s\n", (char *)Vec_PtrEntry(vNtk, 0) );
182 fprintf( pFile, ".inputs" );
183 Bac_PtrDumpSignalsBlif( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1), 0 );
184 fprintf( pFile, "\n" );
185 fprintf( pFile, ".outputs" );
186 Bac_PtrDumpSignalsBlif( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2), 1 );
187 fprintf( pFile, "\n" );
188 assert( Vec_PtrSize((Vec_Ptr_t *)Vec_PtrEntry(vNtk, 3)) == 0 ); // no nodes; only boxes
189 Bac_PtrDumpBoxesBlif( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 4) );
190 fprintf( pFile, ".end\n\n" );
191}
void Bac_PtrDumpBoxesBlif(FILE *pFile, Vec_Ptr_t *vBoxes)
Definition bacPtr.c:173
void Bac_PtrDumpSignalsBlif(FILE *pFile, Vec_Ptr_t *vSigs, int fSkipLastComma)
Definition bacPtr.c:157
#define assert(ex)
Definition util_old.h:213
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpModuleVerilog()

void Bac_PtrDumpModuleVerilog ( FILE * pFile,
Vec_Ptr_t * vNtk )

Definition at line 240 of file bacPtr.c.

241{
242 fprintf( pFile, "module %s (\n ", (char *)Vec_PtrEntry(vNtk, 0) );
243 Bac_PtrDumpSignalsVerilog( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1), 1 );
244 Bac_PtrDumpSignalsVerilog( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2), 0 );
245 fprintf( pFile, "\n );\n" );
246 fprintf( pFile, " input" );
247 Bac_PtrDumpSignalsVerilog( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1), 0 );
248 fprintf( pFile, ";\n" );
249 fprintf( pFile, " output" );
250 Bac_PtrDumpSignalsVerilog( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2), 0 );
251 fprintf( pFile, ";\n" );
252 assert( Vec_PtrSize((Vec_Ptr_t *)Vec_PtrEntry(vNtk, 3)) == 0 ); // no nodes; only boxes
253 Bac_PtrDumpBoxesVerilog( pFile, (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 4) );
254 fprintf( pFile, "endmodule\n\n" );
255}
void Bac_PtrDumpBoxesVerilog(FILE *pFile, Vec_Ptr_t *vBoxes)
Definition bacPtr.c:234
void Bac_PtrDumpSignalsVerilog(FILE *pFile, Vec_Ptr_t *vSigs, int fAlwaysComma)
Definition bacPtr.c:219
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrDumpSignalsBlif()

void Bac_PtrDumpSignalsBlif ( FILE * pFile,
Vec_Ptr_t * vSigs,
int fSkipLastComma )

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

Synopsis [Dumping Ptr into a BLIF file.]

Description []

SideEffects []

SeeAlso []

Definition at line 157 of file bacPtr.c.

158{
159 char * pSig; int i;
160 Vec_PtrForEachEntry( char *, vSigs, pSig, i )
161 fprintf( pFile, " %s", pSig );
162}
Here is the caller graph for this function:

◆ Bac_PtrDumpSignalsVerilog()

void Bac_PtrDumpSignalsVerilog ( FILE * pFile,
Vec_Ptr_t * vSigs,
int fAlwaysComma )

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

Synopsis [Dumping Ptr into a Verilog file.]

Description []

SideEffects []

SeeAlso []

Definition at line 219 of file bacPtr.c.

220{
221 char * pSig; int i;
222 Vec_PtrForEachEntry( char *, vSigs, pSig, i )
223 fprintf( pFile, " %s%s", pSig, (fAlwaysComma || i < Vec_PtrSize(vSigs) - 1) ? ",":"" );
224}
Here is the caller graph for this function:

◆ Bac_PtrDumpVerilog()

void Bac_PtrDumpVerilog ( char * pFileName,
Vec_Ptr_t * vDes )

Definition at line 256 of file bacPtr.c.

257{
258 FILE * pFile;
259 Vec_Ptr_t * vNtk; int i;
260 pFile = fopen( pFileName, "wb" );
261 if ( pFile == NULL )
262 {
263 printf( "Cannot open output file \"%s\".\n", pFileName );
264 return;
265 }
266 fprintf( pFile, "// Design \"%s\" written via Ptr in ABC on %s\n\n", (char *)Vec_PtrEntry(vDes, 0), Extra_TimeStamp() );
267 Vec_PtrForEachEntryStart( Vec_Ptr_t *, vDes, vNtk, i, 1 )
268 Bac_PtrDumpModuleVerilog( pFile, vNtk );
269 fclose( pFile );
270}
void Bac_PtrDumpModuleVerilog(FILE *pFile, Vec_Ptr_t *vNtk)
Definition bacPtr.c:240
Here is the call graph for this function:

◆ Bac_PtrFree()

void Bac_PtrFree ( Vec_Ptr_t * vDes)

Definition at line 98 of file bacPtr.c.

99{
100 Vec_Ptr_t * vNtk; int i;
101 if ( !vDes ) return;
102 Vec_PtrForEachEntryStart( Vec_Ptr_t *, vDes, vNtk, i, 1 )
103 Bac_PtrFreeNtk( vNtk );
104 Vec_PtrFree( vDes );
105}
void Bac_PtrFreeNtk(Vec_Ptr_t *vNtk)
FUNCTION DEFINITIONS ///.
Definition bacPtr.c:86
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrFreeNtk()

void Bac_PtrFreeNtk ( Vec_Ptr_t * vNtk)

FUNCTION DEFINITIONS ///.

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

Synopsis [Free Ptr.]

Description []

SideEffects []

SeeAlso []

Definition at line 86 of file bacPtr.c.

87{
88 Vec_PtrFree( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1) );
89 Vec_PtrFree( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2) );
90 Vec_VecFree( (Vec_Vec_t *)Vec_PtrEntry(vNtk, 3) );
91 Vec_VecFree( (Vec_Vec_t *)Vec_PtrEntry(vNtk, 4) );
92 if ( Vec_PtrSize(vNtk) > 5 )
93 Vec_FltFree( (Vec_Flt_t *)Vec_PtrEntry(vNtk, 5) );
94 if ( Vec_PtrSize(vNtk) > 6 )
95 Vec_FltFree( (Vec_Flt_t *)Vec_PtrEntry(vNtk, 6) );
96 Vec_PtrFree( vNtk );
97}
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
Definition vecFlt.h:42
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.
Definition vecVec.h:42
Here is the caller graph for this function:

◆ Bac_PtrMemory()

int Bac_PtrMemory ( Vec_Ptr_t * vDes)

Definition at line 138 of file bacPtr.c.

139{
140 Vec_Ptr_t * vNtk; int i, nBytes = (int)Vec_PtrMemory(vDes);
141 Vec_PtrForEachEntryStart( Vec_Ptr_t *, vDes, vNtk, i, 1 )
142 nBytes += Bac_PtrMemoryNtk(vNtk);
143 return nBytes;
144}
int Bac_PtrMemoryNtk(Vec_Ptr_t *vNtk)
Definition bacPtr.c:129
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrMemoryArray()

int Bac_PtrMemoryArray ( Vec_Ptr_t * vArray)

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

Synopsis [Count memory used by Ptr.]

Description []

SideEffects []

SeeAlso []

Definition at line 118 of file bacPtr.c.

119{
120 return (int)Vec_PtrMemory(vArray);
121}
Here is the caller graph for this function:

◆ Bac_PtrMemoryArrayArray()

int Bac_PtrMemoryArrayArray ( Vec_Ptr_t * vArrayArray)

Definition at line 122 of file bacPtr.c.

123{
124 Vec_Ptr_t * vArray; int i, nBytes = 0;
125 Vec_PtrForEachEntry( Vec_Ptr_t *, vArrayArray, vArray, i )
126 nBytes += Bac_PtrMemoryArray(vArray);
127 return nBytes;
128}
int Bac_PtrMemoryArray(Vec_Ptr_t *vArray)
Definition bacPtr.c:118
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrMemoryNtk()

int Bac_PtrMemoryNtk ( Vec_Ptr_t * vNtk)

Definition at line 129 of file bacPtr.c.

130{
131 int nBytes = (int)Vec_PtrMemory(vNtk);
132 nBytes += Bac_PtrMemoryArray( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1) );
133 nBytes += Bac_PtrMemoryArray( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2) );
134 nBytes += Bac_PtrMemoryArrayArray( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 3) );
135 nBytes += Bac_PtrMemoryArrayArray( (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 4) );
136 return nBytes;
137}
int Bac_PtrMemoryArrayArray(Vec_Ptr_t *vArrayArray)
Definition bacPtr.c:122
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrTransformBox()

Vec_Ptr_t * Bac_PtrTransformBox ( Vec_Ptr_t * vBox,
Vec_Ptr_t * vGatesNames )

Definition at line 379 of file bacPtr.c.

380{
381 char * pName; int i;
382 Vec_Ptr_t * vNew = Vec_PtrAllocExact( Vec_PtrSize(vBox) );
383 Vec_PtrForEachEntry( char *, vBox, pName, i )
384 Vec_PtrPush( vNew, Abc_UtilStrsav(pName) );
385 if ( vGatesNames )
386 Bac_PtrUpdateBox( vNew, vGatesNames );
387 return vNew;
388}
void Bac_PtrUpdateBox(Vec_Ptr_t *vBox, Vec_Ptr_t *vGatesNames)
Definition bacPtr.c:322
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrTransformBoxes()

Vec_Ptr_t * Bac_PtrTransformBoxes ( Vec_Ptr_t * vBoxes,
Vec_Ptr_t * vGatesNames )

Definition at line 389 of file bacPtr.c.

390{
391 Vec_Ptr_t * vBox; int i;
392 Vec_Ptr_t * vNew = Vec_PtrAllocExact( Vec_PtrSize(vBoxes) );
393 Vec_PtrForEachEntry( Vec_Ptr_t *, vBoxes, vBox, i )
394 Vec_PtrPush( vNew, Bac_PtrTransformBox(vBox, vGatesNames) );
395 return vNew;
396}
Vec_Ptr_t * Bac_PtrTransformBox(Vec_Ptr_t *vBox, Vec_Ptr_t *vGatesNames)
Definition bacPtr.c:379
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrTransformNtk()

Vec_Ptr_t * Bac_PtrTransformNtk ( Vec_Ptr_t * vNtk,
Vec_Ptr_t * vGatesNames )

Definition at line 397 of file bacPtr.c.

398{
399 char * pName = (char *)Vec_PtrEntry(vNtk, 0);
400 Vec_Ptr_t * vInputs = (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 1);
401 Vec_Ptr_t * vOutputs = (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 2);
402 Vec_Ptr_t * vBoxes = (Vec_Ptr_t *)Vec_PtrEntry(vNtk, 4);
403 Vec_Ptr_t * vNew = Vec_PtrAllocExact( Vec_PtrSize(vNtk) );
404 Vec_PtrPush( vNew, Abc_UtilStrsav(pName) );
405 Vec_PtrPush( vNew, Bac_PtrTransformSigs(vInputs) );
406 Vec_PtrPush( vNew, Bac_PtrTransformSigs(vOutputs) );
407 Vec_PtrPush( vNew, Vec_PtrAllocExact(0) );
408 Vec_PtrPush( vNew, Bac_PtrTransformBoxes(vBoxes, vGatesNames) );
409 return vNew;
410}
Vec_Ptr_t * Bac_PtrTransformSigs(Vec_Ptr_t *vSig)
Definition bacPtr.c:371
Vec_Ptr_t * Bac_PtrTransformBoxes(Vec_Ptr_t *vBoxes, Vec_Ptr_t *vGatesNames)
Definition bacPtr.c:389
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrTransformSigs()

Vec_Ptr_t * Bac_PtrTransformSigs ( Vec_Ptr_t * vSig)

Definition at line 371 of file bacPtr.c.

372{
373 char * pName; int i;
374 Vec_Ptr_t * vNew = Vec_PtrAllocExact( Vec_PtrSize(vSig) );
375 Vec_PtrForEachEntry( char *, vSig, pName, i )
376 Vec_PtrPush( vNew, Abc_UtilStrsav(pName) );
377 return vNew;
378}
Here is the caller graph for this function:

◆ Bac_PtrTransformTest()

Vec_Ptr_t * Bac_PtrTransformTest ( Vec_Ptr_t * vDes)

Definition at line 411 of file bacPtr.c.

412{
413 Mio_Library_t * pLib;
414 Vec_Ptr_t * vGatesNames;
415 Vec_Ptr_t * vNtk, * vNew; int i;
416 // dump BLIF before transformation
417 Bac_PtrDumpBlif( "test1.blif", vDes );
418 if ( Abc_FrameGetGlobalFrame() == NULL )
419 {
420 printf( "ABC framework is not started.\n" );
421 return NULL;
422 }
424 if ( pLib == NULL )
425 {
426 printf( "Standard cell library is not entered.\n" );
427 return NULL;
428 }
429 vGatesNames = Bac_ManCollectGateNamesByTruth( pLib );
430 // transform
431 vNew = Vec_PtrAllocExact( Vec_PtrSize(vDes) );
432 Vec_PtrPush( vNew, Abc_UtilStrsav((char *)Vec_PtrEntry(vDes, 0)) );
433 Vec_PtrForEachEntryStart( Vec_Ptr_t *, vDes, vNtk, i, 1 )
434 Vec_PtrPush( vNew, Bac_PtrTransformNtk(vNtk, vGatesNames) );
435 // dump BLIF after transformation
436 Bac_PtrDumpBlif( "test2.blif", vNew );
437 Vec_PtrFree( vGatesNames );
438 return vNew;
439}
ABC_DLL Abc_Frame_t * Abc_FrameGetGlobalFrame()
Definition mainFrame.c:643
Vec_Ptr_t * Bac_ManCollectGateNamesByTruth(Mio_Library_t *pLib)
Definition bacPtr.c:290
Vec_Ptr_t * Bac_PtrTransformNtk(Vec_Ptr_t *vNtk, Vec_Ptr_t *vGatesNames)
Definition bacPtr.c:397
void Bac_PtrDumpBlif(char *pFileName, Vec_Ptr_t *vDes)
Definition bacPtr.c:192
void Bac_PtrDumpBlif(char *pFileName, Vec_Ptr_t *vDes)
Definition bacPtr.c:192
ABC_DLL void * Abc_FrameReadLibGen()
Definition mainFrame.c:59
struct Mio_LibraryStruct_t_ Mio_Library_t
Definition mio.h:42
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Bac_PtrTransformTestTest()

void Bac_PtrTransformTestTest ( )

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

Synopsis [Test the testing procedure.]

Description []

SideEffects []

SeeAlso []

Definition at line 452 of file bacPtr.c.

453{
454 char * pFileName = "c/hie/dump/1/netlist_1.v";
455 Abc_Ntk_t * pNtk = Io_ReadNetlist( pFileName, Io_ReadFileType(pFileName), 0 );
456 extern Vec_Ptr_t * Ptr_AbcDeriveDes( Abc_Ntk_t * pNtk );
457 Vec_Ptr_t * vDes = Ptr_AbcDeriveDes( pNtk );
458 Vec_Ptr_t * vNew = Bac_PtrTransformTest( vDes );
459 Bac_PtrFree( vDes );
460 Bac_PtrFree( vNew );
461}
struct Abc_Ntk_t_ Abc_Ntk_t
Definition abc.h:115
Vec_Ptr_t * Ptr_AbcDeriveDes(Abc_Ntk_t *pNtk)
Definition bacPtrAbc.c:194
void Bac_PtrFree(Vec_Ptr_t *vDes)
Definition bacPtr.c:98
Vec_Ptr_t * Bac_PtrTransformTest(Vec_Ptr_t *vDes)
Definition bacPtr.c:411
Abc_Ntk_t * Io_ReadNetlist(char *pFileName, Io_FileType_t FileType, int fCheck)
Definition ioUtil.c:99
Io_FileType_t Io_ReadFileType(char *pFileName)
DECLARATIONS ///.
Definition ioUtil.c:47
Here is the call graph for this function:

◆ Bac_PtrUpdateBox()

void Bac_PtrUpdateBox ( Vec_Ptr_t * vBox,
Vec_Ptr_t * vGatesNames )

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

Synopsis [This procedure transforms tech-ind Ptr into mapped Ptr.]

Description []

SideEffects []

SeeAlso []

Definition at line 322 of file bacPtr.c.

323{
324 Mio_Gate_t * pGate; Mio_Pin_t * pPin; int i = 1;
326 // update gate name
327 char * pNameNew, * pName = (char *)Vec_PtrEntry(vBox, 0);
328 if ( !strcmp(pName, "Const0T") )
329 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_C0);
330 else if ( !strcmp(pName, "Const1T") )
331 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_C1);
332 else if ( !strcmp(pName, "BufT") )
333 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_BUF);
334 else if ( !strcmp(pName, "InvT") )
335 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_INV);
336 else if ( !strcmp(pName, "AndT") )
337 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_AND);
338 else if ( !strcmp(pName, "NandT") )
339 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_NAND);
340 else if ( !strcmp(pName, "OrT") )
341 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_OR);
342 else if ( !strcmp(pName, "NorT") )
343 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_NOR);
344 else if ( !strcmp(pName, "XorT") )
345 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_XOR);
346 else if ( !strcmp(pName, "XnorT") )
347 pNameNew = (char *)Vec_PtrEntry(vGatesNames, PTR_GATE_XNOR);
348 else // user hierarchy
349 return;
350 ABC_FREE( pName );
351 Vec_PtrWriteEntry( vBox, 0, Abc_UtilStrsav(pNameNew) );
352 // remove instance name
353 pName = (char *)Vec_PtrEntry(vBox, 1);
354 ABC_FREE( pName );
355 Vec_PtrWriteEntry( vBox, 1, NULL );
356 // update formal input names
357 pGate = Mio_LibraryReadGateByName( pLib, pNameNew, NULL );
358 Mio_GateForEachPin( pGate, pPin )
359 {
360 pName = (char *)Vec_PtrEntry( vBox, 2 * i );
361 ABC_FREE( pName );
362 pNameNew = Mio_PinReadName(pPin);
363 Vec_PtrWriteEntry( vBox, 2 * i++, Abc_UtilStrsav(pNameNew) );
364 }
365 // update output name
366 pName = (char *)Vec_PtrEntry( vBox, 2 * i );
367 pNameNew = Mio_GateReadOutName(pGate);
368 Vec_PtrWriteEntry( vBox, 2 * i++, Abc_UtilStrsav(pNameNew) );
369 assert( 2 * i == Vec_PtrSize(vBox) );
370}
#define ABC_FREE(obj)
Definition abc_global.h:267
Mio_Gate_t * Mio_LibraryReadGateByName(Mio_Library_t *pLib, char *pName, char *pOutName)
Definition mioApi.c:105
char * Mio_PinReadName(Mio_Pin_t *pPin)
Definition mioApi.c:208
struct Mio_PinStruct_t_ Mio_Pin_t
Definition mio.h:44
char * Mio_GateReadOutName(Mio_Gate_t *pGate)
Definition mioApi.c:170
#define Mio_GateForEachPin(Gate, Pin)
Definition mio.h:92
int strcmp()
Here is the call graph for this function:
Here is the caller graph for this function: