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

Go to the source code of this file.

Enumerations

enum  Cba_BlifType_t {
  PRS_BLIF_NONE = 0 , PRS_BLIF_MODEL , PRS_BLIF_INOUTS , PRS_BLIF_INPUTS ,
  PRS_BLIF_OUTPUTS , PRS_BLIF_NAMES , PRS_BLIF_SUBCKT , PRS_BLIF_GATE ,
  PRS_BLIF_LATCH , PRS_BLIF_SHORT , PRS_BLIF_END , PRS_BLIF_UNKNOWN
}
 DECLARATIONS ///. More...
 

Functions

Vec_Ptr_tPrs_ManReadBlif (char *pFileName)
 
void Prs_ManReadBlifTest (char *pFileName)
 
int Prs_CreateBlifFindFon (Cba_Ntk_t *p, int NameId)
 
void Prs_CreateBlifPio (Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
 
int Prs_CreateBlifNtk (Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
 
Cba_Man_tPrs_ManBuildCbaBlif (char *pFileName, Vec_Ptr_t *vDes)
 
Cba_Man_tCba_ManReadBlif (char *pFileName)
 

Enumeration Type Documentation

◆ Cba_BlifType_t

DECLARATIONS ///.

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

FileName [cbaReadBlif.c]

SystemName [ABC: Logic synthesis and verification system.]

PackageName [Hierarchical word-level netlist.]

Synopsis [BLIF parser.]

Author [Alan Mishchenko]

Affiliation [UC Berkeley]

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

Revision [

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

]

Enumerator
PRS_BLIF_NONE 
PRS_BLIF_MODEL 
PRS_BLIF_INOUTS 
PRS_BLIF_INPUTS 
PRS_BLIF_OUTPUTS 
PRS_BLIF_NAMES 
PRS_BLIF_SUBCKT 
PRS_BLIF_GATE 
PRS_BLIF_LATCH 
PRS_BLIF_SHORT 
PRS_BLIF_END 
PRS_BLIF_UNKNOWN 

Definition at line 31 of file cbaReadBlif.c.

31 {
32 PRS_BLIF_NONE = 0, // 0: unused
33 PRS_BLIF_MODEL, // 1: .model
34 PRS_BLIF_INOUTS, // 2: .inouts
35 PRS_BLIF_INPUTS, // 3: .inputs
36 PRS_BLIF_OUTPUTS, // 4: .outputs
37 PRS_BLIF_NAMES, // 5: .names
38 PRS_BLIF_SUBCKT, // 6: .subckt
39 PRS_BLIF_GATE, // 7: .gate
40 PRS_BLIF_LATCH, // 8: .latch
41 PRS_BLIF_SHORT, // 9: .short
42 PRS_BLIF_END, // 10: .end
43 PRS_BLIF_UNKNOWN // 11: unknown
@ PRS_BLIF_UNKNOWN
Definition bacReadBlif.c:43
@ PRS_BLIF_INPUTS
Definition bacReadBlif.c:35
@ PRS_BLIF_LATCH
Definition bacReadBlif.c:40
@ PRS_BLIF_MODEL
Definition bacReadBlif.c:33
@ PRS_BLIF_GATE
Definition bacReadBlif.c:39
@ PRS_BLIF_SUBCKT
Definition bacReadBlif.c:38
@ PRS_BLIF_OUTPUTS
Definition bacReadBlif.c:36
@ PRS_BLIF_NONE
Definition bacReadBlif.c:32
@ PRS_BLIF_END
Definition bacReadBlif.c:42
@ PRS_BLIF_SHORT
Definition bacReadBlif.c:41
@ PRS_BLIF_NAMES
Definition bacReadBlif.c:37
@ PRS_BLIF_INOUTS
Definition bacReadBlif.c:34
Cba_BlifType_t
DECLARATIONS ///.
Definition cbaReadBlif.c:31

Function Documentation

◆ Cba_ManReadBlif()

Cba_Man_t * Cba_ManReadBlif ( char * pFileName)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 629 of file cbaReadBlif.c.

630{
631 Cba_Man_t * p = NULL;
632 Vec_Ptr_t * vDes = Prs_ManReadBlif( pFileName );
633 if ( vDes && Vec_PtrSize(vDes) )
634 p = Prs_ManBuildCbaBlif( pFileName, vDes );
635 if ( vDes )
636 Prs_ManVecFree( vDes );
637 return p;
638}
Cba_Man_t * Prs_ManBuildCbaBlif(char *pFileName, Vec_Ptr_t *vDes)
Vec_Ptr_t * Prs_ManReadBlif(char *pFileName)
struct Cba_Man_t_ Cba_Man_t
Definition cba.h:46
Cube * p
Definition exorList.c:222
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
Here is the call graph for this function:

◆ Prs_CreateBlifFindFon()

int Prs_CreateBlifFindFon ( Cba_Ntk_t * p,
int NameId )

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 458 of file cbaReadBlif.c.

459{
460 int iFon = Cba_NtkGetMap( p, NameId );
461 if ( iFon )
462 return iFon;
463 printf( "Network \"%s\": Signal \"%s\" is not driven.\n", Cba_NtkName(p), Cba_NtkStr(p, NameId) );
464 return 0;
465}
Here is the caller graph for this function:

◆ Prs_CreateBlifNtk()

int Prs_CreateBlifNtk ( Cba_Ntk_t * p,
Prs_Ntk_t * pNtk )

Definition at line 490 of file cbaReadBlif.c.

491{
492 Vec_Int_t * vBox;
493 int i, k, iObj, iTerm, iFon, FormId, ActId;
494 // map inputs
495 Cba_NtkCleanMap( p );
496 Cba_NtkForEachPi( p, iObj, i )
497 Cba_NtkSetMap( p, Cba_ObjName(p, iObj), Cba_ObjFon0(p, iObj) );
498 // create objects
499 Prs_NtkForEachBox( pNtk, vBox, i )
500 {
501 int FuncId = Prs_BoxNtk(pNtk, i);
502 assert( Prs_BoxIONum(pNtk, i) > 0 );
503 assert( Vec_IntSize(vBox) % 2 == 0 );
504 if ( FuncId == -1 ) // latch
505 {
506 iObj = Cba_ObjAlloc( p, CBA_BOX_DFFRS, 4, 1 );
507 Cba_NtkSetMap( p, Vec_IntEntry(vBox, 3), Cba_ObjFon0(p, iObj) ); // latch output
508 Cba_ObjSetFunc( p, iObj, Prs_BoxName(pNtk, i)+1 ); // init + 1
509 }
510 else if ( Prs_BoxIsNode(pNtk, i) ) // node
511 {
512 iObj = Cba_ObjAlloc( p, CBA_BOX_NODE, Prs_BoxIONum(pNtk, i)-1, 1 );
513 Cba_FonSetName( p, Cba_ObjFon0(p, iObj), Vec_IntEntryLast(vBox) ); // node output
514 Cba_NtkSetMap( p, Vec_IntEntryLast(vBox), Cba_ObjFon0(p, iObj) );
515 Cba_ObjSetFunc( p, iObj, FuncId );
516 }
517 else // box
518 {
519 Cba_Ntk_t * pBox = Cba_ManNtkFind( p->pDesign, Prs_NtkStr(pNtk, FuncId) );
520 iObj = Cba_ObjAlloc( p, CBA_OBJ_BOX, Cba_NtkPiNum(pBox), Cba_NtkPoNum(pBox) );
521 Cba_ObjSetFunc( p, iObj, Cba_NtkId(pBox) );
522 // mark PO objects
523 Cba_NtkCleanMap2( p );
524 Cba_NtkForEachPo( pBox, iTerm, k )
525 Cba_NtkSetMap2( p, Cba_ObjName(pBox, iTerm), k+1 );
526 // map box fons
527 Vec_IntForEachEntryDouble( vBox, FormId, ActId, k )
528 if ( Cba_NtkGetMap2(p, FormId) )
529 {
530 iFon = Cba_ObjFon(p, iObj, Cba_NtkGetMap2(p, FormId)-1);
531 Cba_FonSetName( p, iFon, ActId );
532 Cba_NtkSetMap( p, ActId, iFon );
533 }
534 }
535 }
536 // connect objects
537 Prs_NtkForEachBox( pNtk, vBox, i )
538 {
539 iObj = Cba_NtkPiNum(p) + Cba_NtkPoNum(p) + i + 1;
540 if ( Prs_BoxNtk(pNtk, i) == -1 ) // latch
541 {
542 assert( Cba_ObjType(p, iObj) == CBA_BOX_DFFRS );
543 iFon = Prs_CreateBlifFindFon( p, Vec_IntEntry(vBox, 1) ); // latch input
544 if ( iFon )
545 Cba_ObjSetFinFon( p, iObj, 0, iFon );
546 }
547 else if ( Prs_BoxIsNode(pNtk, i) ) // node
548 {
549 assert( Cba_ObjType(p, iObj) == CBA_BOX_NODE );
550 Vec_IntForEachEntryDouble( vBox, FormId, ActId, k )
551 {
552 if ( k == 2 * Cba_ObjFinNum(p, iObj) ) // stop at node output
553 break;
554 iFon = Prs_CreateBlifFindFon( p, ActId );
555 if ( iFon )
556 Cba_ObjSetFinFon( p, iObj, k/2, iFon );
557 }
558 }
559 else // box
560 {
561 // mark PI objects
562 Cba_Ntk_t * pBox = Cba_ObjNtk(p, iObj);
563 assert( Cba_NtkPiNum(pBox) == Cba_ObjFinNum(p, iObj) );
564 assert( Cba_NtkPoNum(pBox) == Cba_ObjFonNum(p, iObj) );
565 Cba_NtkCleanMap2( p );
566 Cba_NtkForEachPi( pBox, iTerm, k )
567 Cba_NtkSetMap2( p, Cba_ObjName(pBox, iTerm), k+1 );
568 // connect box fins
569 Vec_IntForEachEntryDouble( vBox, FormId, ActId, k )
570 if ( Cba_NtkGetMap2(p, FormId) )
571 {
572 iFon = Prs_CreateBlifFindFon( p, ActId );
573 if ( iFon )
574 Cba_ObjSetFinFon( p, iObj, Cba_NtkGetMap2(p, FormId)-1, iFon );
575 }
576 }
577 }
578 // connect outputs
579 Cba_NtkForEachPo( p, iObj, i )
580 {
581 iFon = Prs_CreateBlifFindFon( p, Cba_ObjName(p, iObj) );
582 if ( iFon )
583 Cba_ObjSetFinFon( p, iObj, 0, iFon );
584 }
585 return 0;
586}
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
#define Prs_NtkForEachBox(p, vVec, i)
Definition cbaPrs.h:182
int Prs_CreateBlifFindFon(Cba_Ntk_t *p, int NameId)
@ CBA_OBJ_BOX
Definition cbaTypes.h:43
@ CBA_BOX_NODE
Definition cbaTypes.h:121
@ CBA_BOX_DFFRS
Definition cbaTypes.h:139
#define Cba_NtkForEachPo(p, iObj, i)
Definition cba.h:310
typedefABC_NAMESPACE_HEADER_START struct Cba_Ntk_t_ Cba_Ntk_t
INCLUDES ///.
Definition cba.h:45
#define Cba_NtkForEachPi(p, iObj, i)
Definition cba.h:308
#define assert(ex)
Definition util_old.h:213
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
Definition vecInt.h:72
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Prs_CreateBlifPio()

void Prs_CreateBlifPio ( Cba_Ntk_t * p,
Prs_Ntk_t * pNtk )

Definition at line 466 of file cbaReadBlif.c.

467{
468 int i, NameId, iObj, iFon;
469 Cba_NtkCleanObjFuncs( p );
470 Cba_NtkCleanObjNames( p );
471 Cba_NtkCleanFonNames( p );
472 // create inputs
473 Prs_NtkForEachPi( pNtk, NameId, i )
474 {
475 iObj = Cba_ObjAlloc( p, CBA_OBJ_PI, 0, 1 );
476 Cba_ObjSetName( p, iObj, NameId );
477 iFon = Cba_ObjFon0(p, iObj);
478 Cba_FonSetName( p, iFon, NameId );
479 Cba_NtkSetMap( p, NameId, iFon );
480 Vec_IntPush( &p->vOrder, iObj );
481 }
482 // create outputs
483 Prs_NtkForEachPo( pNtk, NameId, i )
484 {
485 iObj = Cba_ObjAlloc( p, CBA_OBJ_PO, 1, 0 );
486 Cba_ObjSetName( p, iObj, NameId );
487 Vec_IntPush( &p->vOrder, iObj );
488 }
489}
#define Prs_NtkForEachPo(p, NameId, i)
Definition cbaPrs.h:180
#define Prs_NtkForEachPi(p, NameId, i)
Definition cbaPrs.h:178
@ CBA_OBJ_PI
Definition cbaTypes.h:41
@ CBA_OBJ_PO
Definition cbaTypes.h:42
Here is the caller graph for this function:

◆ Prs_ManBuildCbaBlif()

Cba_Man_t * Prs_ManBuildCbaBlif ( char * pFileName,
Vec_Ptr_t * vDes )

Definition at line 587 of file cbaReadBlif.c.

588{
589 Prs_Ntk_t * pPrsNtk; int i, fError = 0;
590 Prs_Ntk_t * pPrsRoot = Prs_ManRoot(vDes);
591 // start the manager
592 Abc_Nam_t * pStrs = Abc_NamRef(pPrsRoot->pStrs);
593 Abc_Nam_t * pFuns = Abc_NamRef(pPrsRoot->pFuns);
594 Abc_Nam_t * pMods = Abc_NamStart( 100, 24 );
595 Cba_Man_t * p = Cba_ManAlloc( pFileName, Vec_PtrSize(vDes), pStrs, pFuns, pMods, NULL );
596 // initialize networks
597 Vec_PtrForEachEntry( Prs_Ntk_t *, vDes, pPrsNtk, i )
598 {
599 Cba_Ntk_t * pNtk = Cba_NtkAlloc( p, Prs_NtkId(pPrsNtk), Prs_NtkPiNum(pPrsNtk), Prs_NtkPoNum(pPrsNtk), Prs_NtkObjNum(pPrsNtk), 100, 100 );
600 Prs_CreateBlifPio( pNtk, pPrsNtk );
601 Cba_NtkAdd( p, pNtk );
602 }
603 // create networks
604 Vec_PtrForEachEntry( Prs_Ntk_t *, vDes, pPrsNtk, i )
605 {
606 printf( "Elaboration module \"%s\"...\n", Prs_NtkName(pPrsNtk) );
607 fError = Prs_CreateBlifNtk( Cba_ManNtk(p, i+1), pPrsNtk );
608 if ( fError )
609 break;
610 }
611 if ( fError )
612 printf( "Quitting because of errors.\n" );
613 else
614 Cba_ManPrepareSeq( p );
615 return p;
616}
struct Prs_Ntk_t_ Prs_Ntk_t
BASIC TYPES ///.
Definition cbaPrs.h:73
int Prs_CreateBlifNtk(Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
void Prs_CreateBlifPio(Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
Abc_Nam_t * pStrs
Definition cbaPrs.h:84
Abc_Nam_t * pFuns
Definition cbaPrs.h:85
Abc_Nam_t * Abc_NamStart(int nObjs, int nAveSize)
FUNCTION DEFINITIONS ///.
Definition utilNam.c:80
Abc_Nam_t * Abc_NamRef(Abc_Nam_t *p)
Definition utilNam.c:195
typedefABC_NAMESPACE_HEADER_START struct Abc_Nam_t_ Abc_Nam_t
INCLUDES ///.
Definition utilNam.h:39
#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:

◆ Prs_ManReadBlif()

Vec_Ptr_t * Prs_ManReadBlif ( char * pFileName)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 406 of file cbaReadBlif.c.

407{
408 Vec_Ptr_t * vPrs = NULL;
409 Prs_Man_t * p = Prs_ManAlloc( pFileName );
410 if ( p == NULL )
411 return NULL;
412 Abc_NamStrFindOrAdd( p->pFuns, " 0\n", NULL );
413 Abc_NamStrFindOrAdd( p->pFuns, " 1\n", NULL );
414 Prs_NtkAddBlifDirectives( p );
415 Prs_ManReadLines( p );
416 if ( Prs_ManErrorPrint(p) )
417 ABC_SWAP( Vec_Ptr_t *, vPrs, p->vNtks );
418 Prs_ManFree( p );
419 return vPrs;
420}
#define ABC_SWAP(Type, a, b)
Definition abc_global.h:253
struct Prs_Man_t_ Prs_Man_t
Definition cbaPrs.h:107
int Abc_NamStrFindOrAdd(Abc_Nam_t *p, char *pStr, int *pfFound)
Definition utilNam.c:453
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Prs_ManReadBlifTest()

void Prs_ManReadBlifTest ( char * pFileName)

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

Synopsis []

Description []

SideEffects []

SeeAlso []

Definition at line 433 of file cbaReadBlif.c.

434{
435 abctime clk = Abc_Clock();
436 Vec_Ptr_t * vPrs = Prs_ManReadBlif( pFileName );
437 if ( !vPrs ) return;
438 printf( "Finished reading %d networks. ", Vec_PtrSize(vPrs) );
439 printf( "NameIDs = %d. ", Abc_NamObjNumMax(Prs_ManNameMan(vPrs)) );
440 printf( "Memory = %.2f MB. ", 1.0*Prs_ManMemory(vPrs)/(1<<20) );
441 Abc_PrintTime( 1, "Time", Abc_Clock() - clk );
442// Abc_NamPrint( p->pStrs );
443 Prs_ManWriteBlif( Extra_FileNameGenericAppend(pFileName, "_out.blif"), vPrs );
444 Prs_ManVecFree( vPrs );
445}
ABC_INT64_T abctime
Definition abc_global.h:332
void Prs_ManWriteBlif(char *pFileName, Vec_Ptr_t *p)
char * Extra_FileNameGenericAppend(char *pBase, char *pSuffix)
int Abc_NamObjNumMax(Abc_Nam_t *p)
Definition utilNam.c:231
Here is the call graph for this function: