54 for ( i = 1; s_VerTypes[i]; i++ )
61static inline int Prs_CharIsSpace(
char c ) {
return (c ==
' ' || c ==
'\t' || c ==
'\r' || c ==
'\n'); }
62static inline int Prs_CharIsDigit(
char c ) {
return (c >=
'0' && c <=
'9'); }
63static inline int Prs_CharIsDigitB(
char c ) {
return (c ==
'0' || c ==
'1' || c ==
'x' || c ==
'z'); }
64static inline int Prs_CharIsDigitH(
char c ) {
return (c >=
'0' && c <=
'9') || (c >=
'A' && c <=
'F') || (c >=
'a' && c <=
'f'); }
65static inline int Prs_CharIsChar(
char c ) {
return (c >=
'a' && c <=
'z') || (c >=
'A' && c <=
'Z'); }
66static inline int Prs_CharIsSymb1(
char c ) {
return Prs_CharIsChar(c) || c ==
'_'; }
67static inline int Prs_CharIsSymb2(
char c ) {
return Prs_CharIsSymb1(c) || Prs_CharIsDigit(c) || c ==
'$'; }
69static inline int Prs_ManIsChar(
Prs_Man_t *
p,
char c ) {
return p->pCur[0] == c; }
70static inline int Prs_ManIsChar1(
Prs_Man_t *
p,
char c ) {
return p->pCur[1] == c; }
71static inline int Prs_ManIsDigit(
Prs_Man_t *
p ) {
return Prs_CharIsDigit(*
p->pCur); }
111static const char * s_VerNames[100] =
181 {-1, 0, NULL, {NULL}},
190 {
CBA_BOX_OR, 2,
"VERIFIC_OR", {
"a0",
"a1",
"o"}},
194 {
CBA_BOX_MUX, 3,
"VERIFIC_MUX", {
"c",
"a1",
"a0",
"o"}},
195 {-1, 0,
"VERIFIC_PULLUP", {
"o"}},
196 {-1, 0,
"VERIFIC_PULLDOWN", {
"o"}},
199 {
CBA_BOX_LATCH, 4,
"VERIFIC_DLATCH", {
"d",
"async_val",
"async_cond",
"gate",
"q"}},
200 {
CBA_BOX_DFFRS, 4,
"VERIFIC_DFFRS", {
"d",
"s",
"r",
"clk",
"q"}},
201 {
CBA_BOX_DFF, 4,
"VERIFIC_DFF", {
"d",
"async_val",
"async_cond",
"clk",
"q"}},
202 {-1, 2,
"VERIFIC_NMOS", {
"c",
"d",
"o"}},
203 {-1, 2,
"VERIFIC_PMOS", {
"c",
"d",
"o"}},
204 {-1, 3,
"VERIFIC_CMOS", {
"d",
"nc",
"pc",
"o"}},
205 {-1, 2,
"VERIFIC_TRAN", {
"inout1",
"inout2",
"control"}},
206 {
CBA_BOX_ADD, 3,
"VERIFIC_FADD", {
"cin",
"a",
"b",
"o",
"cout"}},
207 {-1, 3,
"VERIFIC_RCMOS", {
"d",
"nc",
"pc",
"o"}},
208 {-1, 2,
"VERIFIC_RNMOS", {
"c",
"d",
"o"}},
209 {-1, 2,
"VERIFIC_RPMOS", {
"c",
"d",
"o"}},
210 {-1, 2,
"VERIFIC_RTRAN", {
"inout1",
"inout2",
"control"}},
211 {-1, 0,
"VERIFIC_HDL_ASSERTION", {
"condition"}},
212 {
CBA_BOX_ADD, 3,
"add_", {
"cin",
"a",
"b",
"o",
"cout"}},
217 {
CBA_BOX_SHIL, 3,
"shift_left_", {
"cin",
"a",
"amount",
"o"}},
218 {
CBA_BOX_SHIR, 3,
"shift_right_", {
"cin",
"a",
"amount",
"o"}},
232 {
CBA_BOX_PSEL, 3,
"PrioSelect_", {
"cin",
"sel",
"data",
"o"}},
233 {
CBA_BOX_RAM, 4,
"DualPortRam_", {
"write_enable",
"write_address",
"write_data",
"read_address",
"read_data"}},
234 {
CBA_BOX_RAMR, 3,
"ReadPort_", {
"read_enable",
"read_address",
"Ram",
"read_data" }},
235 {
CBA_BOX_RAMW, 3,
"WritePort_", {
"write_enable",
"write_address",
"write_data",
"Ram"}},
236 {
CBA_BOX_RAMWC, 4,
"ClockedWritePort_", {
"clk",
"write_enable",
"write_address",
"write_data",
"Ram"}},
253 {
CBA_BOX_SEL, 2,
"wide_select_", {
"sel",
"data",
"o"}},
254 {
CBA_BOX_DFF, 4,
"wide_dff_", {
"d",
"async_val",
"async_cond",
"clock",
"q"}},
255 {
CBA_BOX_DFFRS, 4,
"wide_dffrs_", {
"d",
"set",
"reset",
"clock",
"q"}},
256 {
CBA_BOX_LATCHRS, 4,
"wide_dlatchrs_", {
"d",
"set",
"reset",
"clock",
"q"}},
257 {
CBA_BOX_LATCH, 4,
"wide_dlatch_", {
"d",
"async_val",
"async_cond",
"clock",
"q"}},
258 {
CBA_BOX_PSEL, 3,
"wide_prio_select_", {
"sel",
"data",
"carry_in",
"o"}},
262 {
CBA_BOX_DFFCPL, 4,
"CPL_FF", {
"d",
"arstval",
"arst",
"clk",
"q",
"qbar"}},
263 {-1, 0, NULL, {NULL}}
268static inline int Prs_ManIsVerilogPrim(
char * pName )
271 for ( i = 0; s_VerilogPrims[i].pName; i++ )
272 if ( !
strcmp(pName, s_VerilogPrims[i].pName) )
273 return s_VerilogPrims[i].Type;
277static inline int Prs_ManIsKnownModule(
char * pName )
280 for ( i = 1; s_VerNames[i]; i++ )
282 Length =
strlen(s_VerNames[i]);
284 if ( !
strncmp(pName, s_VerNames[i], Length) )
290static inline int Prs_ManFindType(
char * pName,
int * pInputs,
int fOut,
char *** ppNames )
294 for ( i = 1; s_VerInfo[i].pTypeName; i++ )
296 Length =
strlen(s_VerInfo[i].pTypeName);
297 if ( !
strncmp(pName, s_VerInfo[i].pTypeName, Length) )
299 *pInputs = s_VerInfo[i].nInputs;
300 *ppNames = (
char **)s_VerInfo[i].pSigNames + (fOut ? s_VerInfo[i].nInputs : 0);
301 return s_VerInfo[i].Type;
320static inline int Prs_ManUtilSkipComments(
Prs_Man_t *
p )
322 if ( !Prs_ManIsChar(
p,
'/') )
324 if ( Prs_ManIsChar1(
p,
'/') )
326 for (
p->pCur += 2;
p->pCur <
p->pLimit;
p->pCur++ )
327 if ( Prs_ManIsChar(
p,
'\n') )
328 {
p->pCur++;
return 1; }
330 else if ( Prs_ManIsChar1(
p,
'*') )
332 for (
p->pCur += 2;
p->pCur <
p->pLimit;
p->pCur++ )
333 if ( Prs_ManIsChar(
p,
'*') && Prs_ManIsChar1(
p,
'/') )
334 {
p->pCur++;
p->pCur++;
return 1; }
338static inline int Prs_ManUtilSkipName(
Prs_Man_t *
p )
340 if ( !Prs_ManIsChar(
p,
'\\') )
342 for (
p->pCur++;
p->pCur <
p->pLimit;
p->pCur++ )
343 if ( Prs_ManIsChar(
p,
' ') )
344 {
p->pCur++;
return 1; }
349static inline int Prs_ManUtilSkipSpaces(
Prs_Man_t *
p )
351 while (
p->pCur <
p->pLimit )
353 while ( Prs_CharIsSpace(*
p->pCur) )
356 return Prs_ManErrorSet(
p,
"Unexpectedly reached end-of-file.", 1);
357 if ( !Prs_ManUtilSkipComments(
p) )
360 return Prs_ManErrorSet(
p,
"Unexpectedly reached end-of-file.", 1);
363static inline int Prs_ManUtilSkipUntil(
Prs_Man_t *
p,
char c )
365 while (
p->pCur <
p->pLimit )
367 if ( Prs_ManIsChar(
p, c) )
369 if ( Prs_ManUtilSkipComments(
p) )
371 if ( Prs_ManUtilSkipName(
p) )
378static inline int Prs_ManUtilSkipUntilWord(
Prs_Man_t *
p,
char * pWord )
380 char * pPlace =
strstr(
p->pCur, pWord );
381 if ( pPlace == NULL )
return 1;
382 p->pCur = pPlace +
strlen(pWord);
386static inline int Prs_ManUtilDetectTwo(
Prs_Man_t *
p,
char Sym1,
char Sym2 )
389 for ( pTemp =
p->pCur; *pTemp !=
';'; pTemp++ )
390 if ( *pTemp == Sym1 && *pTemp == Sym2 )
395static inline char * Prs_ManFindClosingParenthesis(
Prs_Man_t *
p,
char Open,
char Close )
400 assert( Prs_ManIsChar(
p, Open) );
401 for ( pTemp =
p->pCur; *pTemp; pTemp++ )
405 if ( *pTemp == Open )
407 if ( *pTemp == Close )
412 if ( *pTemp ==
'\\' )
414 else if ( !fNotName && *pTemp ==
' ' )
431static inline int Prs_ManReadName(
Prs_Man_t *
p )
433 char * pStart =
p->pCur;
434 if ( Prs_ManIsChar(
p,
'\\') )
437 while ( !Prs_ManIsChar(
p,
' ') )
440 else if ( Prs_CharIsSymb1(*
p->pCur) )
443 while ( Prs_CharIsSymb2(*
p->pCur) )
452 Vec_IntClear( vTemp );
455 int Item = Prs_ManReadName(
p);
456 if ( Item == 0 )
return Prs_ManErrorSet(
p,
"Cannot read name in the list.", 0);
457 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 1.", 0);
460 Vec_IntPush( vTemp, Item );
461 if ( Prs_ManIsChar(
p, LastSymb) )
break;
462 if ( !Prs_ManIsChar(
p,
',') )
return Prs_ManErrorSet(
p,
"Expecting comma in the list.", 0);
464 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 2.", 0);
468static inline int Prs_ManReadConstant(
Prs_Man_t *
p )
470 char * pStart =
p->pCur;
472 while ( Prs_ManIsDigit(
p) )
474 if ( !Prs_ManIsChar(
p,
'\'') )
477 if ( Prs_ManIsChar(
p,
's') )
479 if ( Prs_ManIsChar(
p,
'b') )
482 while ( Prs_CharIsDigitB(*
p->pCur) )
484 if ( *
p->pCur ==
'0' )
485 p->pNtk->fHasC0s = 1;
486 else if ( *
p->pCur ==
'1' )
487 p->pNtk->fHasC1s = 1;
488 else if ( *
p->pCur ==
'x' )
489 p->pNtk->fHasCXs = 1;
490 else if ( *
p->pCur ==
'z' )
491 p->pNtk->fHasCZs = 1;
495 else if ( Prs_ManIsChar(
p,
'h') )
498 p->pNtk->fHasC0s = 1;
499 while ( Prs_CharIsDigitH(*
p->pCur) )
501 if ( *
p->pCur !=
'0' )
502 p->pNtk->fHasC1s = 1;
506 else if ( Prs_ManIsChar(
p,
'd') )
509 p->pNtk->fHasC0s = 1;
510 while ( Prs_ManIsDigit(
p) )
512 if ( *
p->pCur !=
'0' )
513 p->pNtk->fHasC1s = 1;
517 else return Prs_ManErrorSet(
p,
"Cannot read radix of constant.", 0);
520static inline int Prs_ManReadRange(
Prs_Man_t *
p )
523 assert( Prs_ManIsChar(
p,
'[') );
525 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 3.", 0);
526 if ( !Prs_ManIsDigit(
p) )
return Prs_ManErrorSet(
p,
"Cannot read digit in range specification.", 0);
527 Left = Right = atoi(
p->pCur);
528 while ( Prs_ManIsDigit(
p) )
530 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 4.", 0);
531 if ( Prs_ManIsChar(
p,
':') )
534 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 5.", 0);
535 if ( !Prs_ManIsDigit(
p) )
return Prs_ManErrorSet(
p,
"Cannot read digit in range specification.", 0);
536 Right = atoi(
p->pCur);
537 while ( Prs_ManIsDigit(
p) )
539 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 6.", 0);
541 if ( !Prs_ManIsChar(
p,
']') )
return Prs_ManErrorSet(
p,
"Cannot read closing brace in range specification.", 0);
543 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 6a.", 0);
544 return Hash_Int2ManInsert(
p->vHash, Left, Right, 0 );
549 assert( Prs_ManIsChar(
p,
'{') );
553 assert( Prs_ManIsChar(
p,
'}') );
556 assert( Vec_IntSize(vTemp2) > 0 );
557 if ( Vec_IntSize(vTemp2) == 1 )
558 return Vec_IntEntry(vTemp2, 0);
559 return Abc_Var2Lit2( Prs_NtkAddConcat(
p->pNtk, vTemp2),
CBA_PRS_CONCAT );
561static inline int Prs_ManReadSignal(
Prs_Man_t *
p )
564 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 8.", 0);
565 if ( Prs_ManIsDigit(
p) )
567 Item = Prs_ManReadConstant(
p);
568 if ( Item == 0 )
return 0;
569 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
572 if ( Prs_ManIsChar(
p,
'{') )
574 if ( Prs_CharIsDigit(
p->pCur[1]) )
577 if ( Prs_ManIsDigit(
p) )
579 int i, Num = atoi(
p->pCur);
580 while ( Prs_ManIsDigit(
p) )
582 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
583 assert( Prs_ManIsChar(
p,
'{') );
585 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
586 Item = Prs_ManReadSignal(
p );
587 assert( Prs_ManIsChar(
p,
'}') );
589 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
592 for ( i = 0; i < Num-1; i++ )
593 Vec_IntPush( &
p->vTemp2, Item );
594 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
595 assert( Prs_ManIsChar(
p,
'}') );
597 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 10.", 0);
601 if (
p->fUsingTemp2 )
return Prs_ManErrorSet(
p,
"Cannot read nested concatenations.", 0);
603 Item = Prs_ManReadConcat(
p, &
p->vTemp2);
605 if ( Item == 0 )
return 0;
606 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 12.", 0);
611 Item = Prs_ManReadName(
p );
612 if ( Item == 0 )
return 1;
613 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 14.", 0);
614 if ( Prs_ManIsChar(
p,
'[') )
616 int Range = Prs_ManReadRange(
p);
617 if ( Range == 0 )
return Prs_ManErrorSet(
p,
"Error number 15.", 0);
618 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 16.", 0);
619 return Abc_Var2Lit2( Prs_NtkAddSlice(
p->pNtk, Item, Range),
CBA_PRS_SLICE );
626 Vec_IntClear( vTemp );
629 int Item = Prs_ManReadSignal(
p);
630 if ( Item == 0 )
return Prs_ManErrorSet(
p,
"Cannot read signal in the list.", 0);
632 Vec_IntPush( vTemp, 0 );
633 Vec_IntPush( vTemp, Item );
634 if ( Prs_ManIsChar(
p, LastSymb) )
break;
635 if ( !Prs_ManIsChar(
p,
',') )
return Prs_ManErrorSet(
p,
"Expecting comma in the list.", 0);
643 Vec_IntClear( vTemp );
644 assert( Prs_ManIsChar(
p,
'.') );
645 while ( Prs_ManIsChar(
p,
'.') )
648 FormId = Prs_ManReadName(
p );
649 if ( FormId == 0 )
return Prs_ManErrorSet(
p,
"Cannot read formal name of the instance.", 0);
650 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 17.", 0);
651 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Cannot read \"(\" in the instance.", 0);
653 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 17.", 0);
654 ActItem = Prs_ManReadSignal(
p );
655 if ( ActItem == 0 )
return Prs_ManErrorSet(
p,
"Cannot read actual name of an instance.", 0);
656 if ( !Prs_ManIsChar(
p,
')') )
return Prs_ManErrorSet(
p,
"Cannot read \")\" in the instance.", 0);
659 Vec_IntPushTwo( vTemp, FormId, ActItem );
660 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 18.", 0);
661 if ( Prs_ManIsChar(
p,
')') )
break;
662 if ( !Prs_ManIsChar(
p,
',') )
return Prs_ManErrorSet(
p,
"Expecting comma in the instance.", 0);
664 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 19.", 0);
666 assert( Vec_IntSize(vTemp) > 0 );
667 assert( Vec_IntSize(vTemp) % 2 == 0 );
682static inline int Prs_ManReadFunction(
Prs_Man_t *
p )
685 p->FuncNameId =
p->FuncRangeId = 0;
686 if ( Prs_ManUtilSkipUntilWord(
p,
"_func_" ) )
return Prs_ManErrorSet(
p,
"Cannot find \"_func_\" keyword.", 0);
688 p->FuncNameId = Prs_ManReadName(
p );
689 if (
p->FuncNameId == 0 )
return Prs_ManErrorSet(
p,
"Error number 30a.", 0);
690 if ( Prs_ManUtilSkipUntilWord(
p,
"input" ) )
return Prs_ManErrorSet(
p,
"Cannot find \"input\" keyword.", 0);
691 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 30b.", 0);
692 if ( Prs_ManIsChar(
p,
'[') )
693 p->FuncRangeId = Prs_ManReadRange(
p);
696 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 30c.", 0);
697 if ( Prs_ManIsChar(
p,
'[') )
698 p->FuncRangeId = Prs_ManReadRange(
p);
700 if ( Prs_ManUtilSkipUntilWord(
p,
"endfunction" ) )
return Prs_ManErrorSet(
p,
"Cannot find \"endfunction\" keyword.", 0);
703static inline int Prs_ManReadAlways(
Prs_Man_t *
p )
708 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23.", 0);
709 if ( !Prs_ManIsChar(
p,
'@') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
711 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
712 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
713 pClose = Prs_ManFindClosingParenthesis(
p,
'(',
')' );
714 if ( pClose == NULL )
715 return Prs_ManErrorSet(
p,
"Expecting closing parenthesis 1.", 0);
717 if ( !Prs_ManIsChar(
p,
')') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
720 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
721 iToken = Prs_ManReadName(
p );
722 if ( iToken !=
PRS_VER_BEGIN )
return Prs_ManErrorSet(
p,
"Cannot read \"begin\" keyword.", 0);
724 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
725 iToken = Prs_ManReadName(
p );
726 if ( iToken !=
PRS_VER_CASE )
return Prs_ManErrorSet(
p,
"Cannot read \"case\" keyword.", 0);
728 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
729 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
731 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
732 iToken = Prs_ManReadSignal(
p );
733 if ( iToken == 0 )
return Prs_ManErrorSet(
p,
"Cannot read output in assign-statement.", 0);
734 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
735 if ( !Prs_ManIsChar(
p,
')') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
738 Vec_IntClear( &
p->vTemp3 );
739 Vec_IntPushTwo( &
p->vTemp3, 0, 0 );
740 Vec_IntPushTwo( &
p->vTemp3, 0, iToken );
742 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
743 if ( !Prs_ManIsDigit(
p) )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
744 while ( Prs_ManIsDigit(
p) )
746 while ( Prs_ManIsDigit(
p) )
748 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
749 if ( !Prs_ManIsChar(
p,
':') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
751 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
753 iToken = Prs_ManReadSignal(
p );
754 if ( iToken == 0 )
return Prs_ManErrorSet(
p,
"Cannot read output in assign-statement.", 0);
755 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
756 if ( !Prs_ManIsChar(
p,
'=') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
759 Vec_IntWriteEntry( &
p->vTemp3, 1, iToken );
761 iToken = Prs_ManReadSignal(
p );
762 if ( iToken == 0 )
return Prs_ManErrorSet(
p,
"Cannot read output in assign-statement.", 0);
763 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
764 if ( !Prs_ManIsChar(
p,
';') )
return Prs_ManErrorSet(
p,
"Cannot parse always statement.", 0);
766 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
768 Vec_IntPushTwo( &
p->vTemp3, 0, iToken );
771 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
772 iToken = Prs_ManReadName(
p );
773 if ( iToken !=
PRS_VER_ENDCASE )
return Prs_ManErrorSet(
p,
"Cannot read \"endcase\" keyword.", 0);
775 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
776 iToken = Prs_ManReadName(
p );
777 if ( iToken !=
PRS_VER_END )
return Prs_ManErrorSet(
p,
"Cannot read \"end\" keyword.", 0);
872static inline int Prs_ManReadExpression(
Prs_Man_t *
p,
int OutItem )
879 Vec_IntClear( &
p->vTemp );
880 Vec_IntPush( &
p->vTemp, 0 );
881 Vec_IntPush( &
p->vTemp, OutItem );
882 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
883 if ( Prs_ManIsChar(
p,
'(') )
886 if ( Prs_ManUtilDetectTwo(
p,
'>',
'>') && Prs_ManUtilDetectTwo(
p,
'<',
'<') )
888 pClose = Prs_ManFindClosingParenthesis(
p,
'(',
')' );
889 if ( pClose == NULL )
890 return Prs_ManErrorSet(
p,
"Expecting closing parenthesis 1.", 0);
891 *
p->pCur = *pClose =
' ';
893 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
895 if ( Prs_ManIsDigit(
p) || Prs_ManIsChar(
p,
'{') )
897 Item = Prs_ManReadSignal(
p );
899 Vec_IntPush( &
p->vTemp, 0 );
900 Vec_IntPush( &
p->vTemp, Item );
903 else if ( Prs_ManIsChar(
p,
'!') || Prs_ManIsChar(
p,
'~') || Prs_ManIsChar(
p,
'@') ||
904 Prs_ManIsChar(
p,
'&') || Prs_ManIsChar(
p,
'|') || Prs_ManIsChar(
p,
'^') || Prs_ManIsChar(
p,
'-') )
906 if ( Prs_ManIsChar(
p,
'!') )
908 else if ( Prs_ManIsChar(
p,
'~') )
910 else if ( Prs_ManIsChar(
p,
'@') )
912 else if ( Prs_ManIsChar(
p,
'&') )
914 else if ( Prs_ManIsChar(
p,
'|') )
916 else if ( Prs_ManIsChar(
p,
'^') )
918 else if ( Prs_ManIsChar(
p,
'-') )
922 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
924 if ( Prs_ManIsChar(
p,
'(') )
926 pClose = Prs_ManFindClosingParenthesis(
p,
'(',
')' );
927 if ( pClose == NULL )
928 return Prs_ManErrorSet(
p,
"Expecting closing parenthesis 2.", 0);
929 *
p->pCur = *pClose =
' ';
931 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
933 Item = Prs_ManReadSignal(
p );
934 if ( Item == 0 )
return Prs_ManErrorSet(
p,
"Cannot read name after a unary operator.", 0);
935 Vec_IntPush( &
p->vTemp, 0 );
936 Vec_IntPush( &
p->vTemp, Item );
941 Item = Prs_ManReadSignal(
p );
942 if ( Item == 0 )
return Prs_ManErrorSet(
p,
"Cannot read name after a binary operator.", 0);
944 if ( Abc_Lit2Var2(Item) ==
p->FuncNameId )
946 int Status, nInputs, RangeSize;
947 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
948 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
951 nInputs = Vec_IntSize(&
p->vTemp)/2;
952 RangeSize =
p->FuncRangeId ? Ptr_NtkRangeSize(
p->pNtk,
p->FuncRangeId) : 1;
953 p->FuncNameId =
p->FuncRangeId = 0;
954 if ( Status == 0 )
return 0;
957 else if ( nInputs == RangeSize + 1 )
959 else if ( nInputs == (1 << RangeSize) + 1 )
961 else return Prs_ManErrorSet(
p,
"Cannot determine word-level operator.", 0);
963 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
965 Vec_IntInsert( &
p->vTemp, 0, 0 );
966 Vec_IntInsert( &
p->vTemp, 1, OutItem );
967 Prs_NtkAddBox(
p->pNtk, Type, 0, &
p->vTemp );
970 Vec_IntPush( &
p->vTemp, 0 );
971 Vec_IntPush( &
p->vTemp, Item );
972 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
973 assert( !Prs_ManIsChar(
p,
'[') );
976 if ( Prs_ManIsChar(
p,
',') || Prs_ManIsChar(
p,
';') )
978 else if ( Prs_ManIsChar(
p,
'?') )
981 Item = Prs_ManReadSignal(
p );
982 if ( Item == 0 )
return 0;
983 Vec_IntPush( &
p->vTemp, 0 );
984 Vec_IntPush( &
p->vTemp, Item );
985 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
986 if ( !Prs_ManIsChar(
p,
':') )
return Prs_ManErrorSet(
p,
"MUX lacks the colon symbol (:).", 0);
989 Item = Prs_ManReadSignal(
p );
990 if ( Item == 0 )
return 0;
991 Vec_IntPush( &
p->vTemp, 0 );
992 Vec_IntPush( &
p->vTemp, Item );
993 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
994 assert( Vec_IntSize(&
p->vTemp) == 8 );
1001 else if (
p->pCur[0] ==
'>' &&
p->pCur[1] ==
'>' &&
p->pCur[2] ==
'>' )
p->pCur += 3, Type =
CBA_BOX_SHIRA;
1003 else if (
p->pCur[0] ==
'<' &&
p->pCur[1] ==
'<' &&
p->pCur[2] ==
'<' )
p->pCur += 3, Type =
CBA_BOX_SHILA;
1004 else if (
p->pCur[0] ==
'&' &&
p->pCur[1] !=
'&' )
p->pCur += 1, Type =
CBA_BOX_AND;
1005 else if (
p->pCur[0] ==
'|' &&
p->pCur[1] !=
'|' )
p->pCur += 1, Type =
CBA_BOX_OR;
1006 else if (
p->pCur[0] ==
'^' &&
p->pCur[1] !=
'^' )
p->pCur += 1, Type =
CBA_BOX_XOR;
1007 else if (
p->pCur[0] ==
'&' &&
p->pCur[1] ==
'&' )
p->pCur += 2, Type =
CBA_BOX_LAND;
1008 else if (
p->pCur[0] ==
'|' &&
p->pCur[1] ==
'|' )
p->pCur += 2, Type =
CBA_BOX_LOR;
1009 else if (
p->pCur[0] ==
'=' &&
p->pCur[1] ==
'=' )
p->pCur += 2, Type =
CBA_BOX_EQU;
1010 else if (
p->pCur[0] ==
'!' &&
p->pCur[1] ==
'=' )
p->pCur += 2, Type =
CBA_BOX_NEQU;
1011 else if (
p->pCur[0] ==
'<' &&
p->pCur[1] !=
'=' )
p->pCur += 1, Type =
CBA_BOX_LTHAN;
1012 else if (
p->pCur[0] ==
'>' &&
p->pCur[1] !=
'=' )
p->pCur += 1, Type =
CBA_BOX_MTHAN;
1013 else if (
p->pCur[0] ==
'<' &&
p->pCur[1] ==
'=' )
p->pCur += 2, Type =
CBA_BOX_LETHAN;
1014 else if (
p->pCur[0] ==
'>' &&
p->pCur[1] ==
'=' )
p->pCur += 2, Type =
CBA_BOX_METHAN;
1015 else if (
p->pCur[0] ==
'+' )
p->pCur += 1, Type =
CBA_BOX_ADD;
1016 else if (
p->pCur[0] ==
'-' )
p->pCur += 1, Type =
CBA_BOX_SUB;
1017 else if (
p->pCur[0] ==
'*' &&
p->pCur[1] !=
'*' )
p->pCur += 1, Type =
CBA_BOX_MUL;
1018 else if (
p->pCur[0] ==
'/' )
p->pCur += 1, Type =
CBA_BOX_DIV;
1019 else if (
p->pCur[0] ==
'%' )
p->pCur += 1, Type =
CBA_BOX_MOD;
1020 else if (
p->pCur[0] ==
'*' &&
p->pCur[1] ==
'*' )
p->pCur += 2, Type =
CBA_BOX_POW;
1021 else return Prs_ManErrorSet(
p,
"Unsupported operation.", 0);
1023 Item = Prs_ManReadSignal(
p );
1024 if ( Item == 0 )
return 0;
1025 Vec_IntPush( &
p->vTemp, 0 );
1026 Vec_IntPush( &
p->vTemp, Item );
1029 Vec_IntInsert( &
p->vTemp, 2, 0 );
1031 Vec_IntInsert( &
p->vTemp, 3, 0 );
1034 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 24.", 0);
1038 Prs_ManUtilSkipUntilWord(
p,
";");
1041 else if ( !Prs_ManIsChar(
p,
',') && !Prs_ManIsChar(
p,
';') )
return Prs_ManErrorSet(
p,
"Trailing symbols on this line.", 0);
1043 Prs_NtkAddBox(
p->pNtk, Type, 0, &
p->vTemp );
1046static inline int Prs_ManReadDeclaration(
Prs_Man_t *
p,
int Type )
1048 int i, Item = 0, NameId, RangeId = 0, fSigned = 0;
1049 Vec_Int_t * vNames[4] = { &
p->pNtk->vInputs, &
p->pNtk->vOutputs, &
p->pNtk->vInouts, &
p->pNtk->vWires };
1050 Vec_Int_t * vNamesR[4] = { &
p->pNtk->vInputsR, &
p->pNtk->vOutputsR, &
p->pNtk->vInoutsR, &
p->pNtk->vWiresR };
1053 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 20.", 0);
1054 if ( Prs_ManIsChar(
p,
'[') && !(RangeId = Prs_ManReadRange(
p)) )
return Prs_ManErrorSet(
p,
"Error number 21.", 0);
1055 Item = Prs_ManReadName(
p);
1059 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 20.", 0);
1060 if ( Prs_ManIsChar(
p,
'[') && !(RangeId = Prs_ManReadRange(
p)) )
return Prs_ManErrorSet(
p,
"Error number 21.", 0);
1061 Item = Prs_ManReadName(
p);
1065 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 20.", 0);
1066 if ( Prs_ManIsChar(
p,
'[') && !(RangeId = Prs_ManReadRange(
p)) )
return Prs_ManErrorSet(
p,
"Error number 21.", 0);
1067 Item = Prs_ManReadName(
p);
1070 Vec_IntClear( &
p->vTemp3 );
1073 if ( Item == 0 )
return Prs_ManErrorSet(
p,
"Cannot read name in the list.", 0);
1074 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 22a", 0);
1077 Vec_IntPush( &
p->vTemp3, Item );
1078 if ( Prs_ManIsChar(
p,
'=') )
1080 if ( Type ==
PRS_VER_INPUT )
return Prs_ManErrorSet(
p,
"Input cannot be defined", 0);
1082 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23.", 0);
1083 if ( !Prs_ManReadExpression(
p, Abc_Var2Lit2(Item,
CBA_PRS_NAME)) )
1086 if ( Prs_ManIsChar(
p,
';') )
1088 if ( !Prs_ManIsChar(
p,
',') )
return Prs_ManErrorSet(
p,
"Expecting comma in the list.", 0);
1090 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 22b.", 0);
1091 Item = Prs_ManReadName(
p);
1096 Vec_IntPush( vNamesR[Type -
PRS_VER_INPUT], Abc_Var2Lit(RangeId, fSigned) );
1098 Vec_IntPush( &
p->pNtk->vOrder, Abc_Var2Lit2(NameId, Type) );
1102static inline int Prs_ManReadInstance(
Prs_Man_t *
p,
int Func )
1105 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 25.", 0);
1106 if ( Prs_ManIsChar(
p,
'#') )
1109 while ( Prs_ManIsDigit(
p) )
1111 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 25.", 0);
1113 if ( (InstId = Prs_ManReadName(
p)) )
1114 if (Prs_ManUtilSkipSpaces(
p))
return Prs_ManErrorSet(
p,
"Error number 26.", 0);
1115 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Expecting \"(\" in module instantiation.", 0);
1117 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 27.", 0);
1118 if ( Prs_ManIsChar(
p,
'.') )
1119 Status = Prs_ManReadSignalList2(
p, &
p->vTemp);
1124 int iFuncNew = Prs_ManIsVerilogPrim(
Abc_NamStr(
p->pStrs, Func));
1125 if ( iFuncNew == 0 )
return Prs_ManErrorSet(
p,
"Cannot find elementary gate.", 0);
1129 if ( Status == 0 )
return Prs_ManErrorSet(
p,
"Error number 28.", 0);
1130 assert( Prs_ManIsChar(
p,
')') );
1132 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 29.", 0);
1133 if ( !Prs_ManIsChar(
p,
';') )
return Prs_ManErrorSet(
p,
"Expecting semicolon in the instance.", 0);
1135 Prs_NtkAddBox(
p->pNtk, Func, InstId, &
p->vTemp );
1138static inline int Prs_ManReadArguments(
Prs_Man_t *
p )
1140 int iRange = 0, iType = -1;
1141 Vec_Int_t * vSigs[3] = { &
p->pNtk->vInputs, &
p->pNtk->vOutputs, &
p->pNtk->vInouts };
1142 Vec_Int_t * vSigsR[3] = { &
p->pNtk->vInputsR, &
p->pNtk->vOutputsR, &
p->pNtk->vInoutsR };
1143 assert( Prs_ManIsChar(
p,
'(') );
1145 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 30.", 0);
1146 if ( Prs_ManIsChar(
p,
')') )
1150 int fEscape = Prs_ManIsChar(
p,
'\\');
1151 int iName = Prs_ManReadName(
p );
1153 if ( iName == 0 )
return Prs_ManErrorSet(
p,
"Error number 31.", 0);
1154 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 32.", 0);
1158 if ( Prs_ManIsChar(
p,
'[') )
1160 iRange = Prs_ManReadRange(
p);
1161 if ( iRange == 0 )
return Prs_ManErrorSet(
p,
"Error number 33.", 0);
1162 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 34.", 0);
1164 iName = Prs_ManReadName(
p );
1165 if ( iName == 0 )
return Prs_ManErrorSet(
p,
"Error number 35.", 0);
1169 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 32.", 0);
1170 if ( Prs_ManIsChar(
p,
'[') )
1172 iRange = Prs_ManReadRange(
p);
1173 if ( iRange == 0 )
return Prs_ManErrorSet(
p,
"Error number 33.", 0);
1174 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 34.", 0);
1176 iName = Prs_ManReadName(
p );
1177 if ( iName == 0 )
return Prs_ManErrorSet(
p,
"Error number 35.", 0);
1183 Vec_IntPush( vSigsR[iType -
PRS_VER_INPUT], Abc_Var2Lit(iRange, fSigned) );
1184 Vec_IntPush( &
p->pNtk->vOrder, Abc_Var2Lit2(iName, iType) );
1186 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 36.", 0);
1187 if ( Prs_ManIsChar(
p,
')') )
1189 if ( !Prs_ManIsChar(
p,
',') )
return Prs_ManErrorSet(
p,
"Expecting comma in the instance.", 0);
1191 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 36.", 0);
1194 assert( Prs_ManIsChar(
p,
')') );
1199static inline int Prs_ManReadModule(
Prs_Man_t *
p )
1201 int iToken,
Status = -1, fAlways = 0;
1202 if (
p->pNtk != NULL )
return Prs_ManErrorSet(
p,
"Parsing previous module is unfinished.", 4);
1203 if ( Prs_ManUtilSkipSpaces(
p) )
1205 Prs_ManErrorClear(
p );
1209 while ( Prs_ManIsChar(
p,
'`') )
1211 Prs_ManUtilSkipUntilWord(
p,
"\n");
1212 if ( Prs_ManUtilSkipSpaces(
p) )
1214 Prs_ManErrorClear(
p );
1218 iToken = Prs_ManReadName(
p );
1219 if ( iToken !=
PRS_VER_MODULE )
return Prs_ManErrorSet(
p,
"Cannot read \"module\" keyword.", 4);
1220 if ( Prs_ManUtilSkipSpaces(
p) )
return 4;
1222 iToken = Prs_ManReadName(
p );
1223 if ( iToken == 0 )
return Prs_ManErrorSet(
p,
"Cannot read module name.", 4);
1224 if ( Prs_ManIsKnownModule(
Abc_NamStr(
p->pStrs, iToken)) )
1226 if ( Prs_ManUtilSkipUntilWord(
p,
"endmodule" ) )
return Prs_ManErrorSet(
p,
"Cannot find \"endmodule\" keyword.", 4);
1228 Vec_IntPush( &
p->vKnown, iToken );
1231 Prs_ManInitializeNtk(
p, iToken, 1 );
1233 if ( Prs_ManUtilSkipSpaces(
p) )
return 4;
1234 if ( !Prs_ManIsChar(
p,
'(') )
return Prs_ManErrorSet(
p,
"Cannot find \"(\" in the argument declaration.", 4);
1235 if ( !Prs_ManReadArguments(
p) )
return 4;
1238 if ( Prs_ManUtilSkipSpaces(
p) )
return 4;
1240 while ( Prs_ManIsChar(
p,
';') || fAlways )
1242 if ( !fAlways )
p->pCur++;
1244 if ( Prs_ManUtilSkipSpaces(
p) )
return 4;
1245 iToken = Prs_ManReadName(
p );
1248 Vec_IntPush( &
p->vSucceeded,
p->pNtk->iModuleName );
1249 Prs_ManFinalizeNtk(
p );
1255 Status = Prs_ManUtilSkipUntil(
p,
';' );
1261 int OutItem = Prs_ManReadSignal(
p );
1262 if ( OutItem == 0 )
return Prs_ManErrorSet(
p,
"Cannot read output in assign-statement.", 0);
1263 if ( !Prs_ManIsChar(
p,
'=') )
return Prs_ManErrorSet(
p,
"Expecting \"=\" in assign-statement.", 0);
1265 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23.", 0);
1269 if ( !Prs_ManReadExpression(
p, OutItem) )
return 0;
1270 if ( Prs_ManIsChar(
p,
';') )
1272 assert( Prs_ManIsChar(
p,
',') );
1274 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23a.", 0);
1276 OutItem = Prs_ManReadSignal(
p );
1277 if ( OutItem == 0 )
return Prs_ManErrorSet(
p,
"Cannot read output in assign-statement.", 0);
1278 if ( !Prs_ManIsChar(
p,
'=') )
return Prs_ManErrorSet(
p,
"Expecting \"=\" in assign-statement.", 0);
1280 if ( Prs_ManUtilSkipSpaces(
p) )
return Prs_ManErrorSet(
p,
"Error number 23.", 0);
1284 Status = Prs_ManReadAlways(
p), fAlways = 1;
1286 Status = Prs_ManReadFunction(
p), fAlways = 1;
1288 Status = Prs_ManReadInstance(
p, iToken );
1293 if ( Prs_ManUtilSkipUntilWord(
p,
"endmodule" ) )
return Prs_ManErrorSet(
p,
"Cannot find \"endmodule\" keyword.", 4);
1296 Vec_IntPush( &
p->vFailed,
p->pNtk->iModuleName );
1298 Vec_IntErase( &
p->pNtk->vWires );
1299 Vec_IntErase( &
p->pNtk->vWiresR );
1300 Vec_IntErase( &
p->pNtk->vSlices );
1301 Vec_IntErase( &
p->pNtk->vConcats );
1302 Vec_IntErase( &
p->pNtk->vBoxes );
1303 Vec_IntErase( &
p->pNtk->vObjs );
1306 Prs_ManFinalizeNtk(
p );
1307 Prs_ManErrorClear(
p );
1311 if ( !Status )
return 4;
1312 if ( Prs_ManUtilSkipSpaces(
p) )
return 4;
1314 return Prs_ManErrorSet(
p,
"Cannot find \";\" in the module definition.", 4);
1316static inline int Prs_ManReadDesign(
Prs_Man_t *
p )
1320 int RetValue = Prs_ManReadModule(
p );
1321 if ( RetValue == 0 )
1323 if ( RetValue == 1 )
1325 if ( RetValue == 2 )
1327 if ( RetValue == 3 )
1329 if ( RetValue == 4 )
1349 char * pName;
int i;
1350 printf(
"Succeeded parsing %d models:\n", Vec_IntSize(&
p->vSucceeded) );
1352 printf(
" %s", pName );
1354 printf(
"Skipped %d known models:\n", Vec_IntSize(&
p->vKnown) );
1356 printf(
" %s", pName );
1358 printf(
"Skipped %d failed models:\n", Vec_IntSize(&
p->vFailed) );
1360 printf(
" %s", pName );
1386 Prs_ManReadDesign(
p );
1388 if ( Prs_ManErrorPrint(
p) )
1398 if ( !vPrs )
return;
1399 printf(
"Finished reading %d networks. ", Vec_PtrSize(vPrs) );
1401 printf(
"Memory = %.2f MB. ", 1.0*Prs_ManMemory(vPrs)/(1<<20) );
1402 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
1405 Prs_ManVecFree( vPrs );
1421 int iFon = Cba_NtkGetMap(
p, NameId );
1424 printf(
"Network \"%s\": Signal \"%s\" is not driven.\n", Cba_NtkName(
p), Cba_NtkStr(
p, NameId) );
1429 int iObj, iFonNew, NameId;
1430 assert( Cba_FonIsReal(iFon) );
1433 iFonNew = Cba_NtkGetMap(
p, NameId );
1438 Cba_ObjSetName(
p, iObj, NameId );
1439 Cba_ObjSetFinFon(
p, iObj, 0, iFon );
1440 iFonNew = Cba_ObjFon0(
p, iObj);
1441 Cba_FonSetRange(
p, iFonNew, Range );
1442 Cba_FonSetName(
p, iFonNew, NameId );
1443 Cba_NtkSetMap(
p, NameId, iFonNew );
1449 int i, Sig, iObj, iFon, NameId, nBits = 0;
1450 Vec_Int_t * vSigs = Prs_CatSignals(pNtk, Con);
1453 iFon = Cba_ObjFon0(
p, iObj);
1456 NameId = Cba_NtkNewStrId(
p,
"_icc%d_", iObj );
1457 Cba_FonSetName(
p, iFon, NameId );
1458 Cba_NtkSetMap(
p, NameId, iFon );
1464 Cba_ObjSetFinFon(
p, iObj, i, iFon );
1466 nBits += Cba_FonRangeSize(
p, iFon );
1468 iFon = Cba_ObjFon0(
p, iObj);
1469 Cba_FonSetRange(
p, iFon, Cba_NtkHashRange(
p, nBits-1, 0) );
1470 return Cba_ObjFon0(
p, iObj);
1474 int iFon, Value = Abc_Lit2Var2( Sig );
1476 if ( !Sig )
return 0;
1480 return Cba_FonFromConst( Value );
1493 int RangeId = -Cba_NtkGetMap(
p, NameId);
1495 return Cba_FonRangeSize(
p, -RangeId );
1496 Cba_NtkUnsetMap(
p, NameId );
1497 Cba_NtkSetMap(
p, NameId, iFon );
1501 Cba_FonSetRangeSign(
p, iFon, RangeId );
1502 return Cba_FonRangeSize(
p, iFon );
1506 int i, iFonNew, NameOut, RangeOut, NameId, RangeId, RangeSize, nBits = 0;
1508 int SigValue = Abc_Lit2Var2( Sig );
1513 if ( !
strncmp(Cba_NtkStr(
p, NameId),
"Open_", 5) )
1515 Cba_FonSetName(
p, iFon, NameId );
1520 NameOut = Cba_NtkNewStrId(
p,
"_occ%d_", iFon );
1521 Cba_FonSetName(
p, iFon, NameOut );
1522 Cba_NtkSetMap(
p, NameOut, iFon );
1526 NameId = Prs_SliceName(pNtk, SigValue);
1527 RangeId = Prs_SliceRange(pNtk, SigValue);
1528 nBits = Cba_NtkRangeSize(
p, RangeId);
1530 Vec_IntPushThree( &
p->vArray0, NameId, RangeId, iFon );
1534 Vec_Int_t * vSigs = Prs_CatSignals(pNtk, SigValue);
1535 Vec_IntReverseOrder( vSigs );
1539 SigValue = Abc_Lit2Var2( Sig );
1542 int iObjBuf, iFonBuf;
1545 if ( !
strncmp(Cba_NtkStr(
p, NameId),
"Open_", 5) )
1551 iFonBuf = Cba_ObjFon0(
p, iObjBuf);
1552 Cba_FonSetName(
p, iFonBuf, NameId );
1554 RangeOut = Cba_NtkHashRange(
p, nBits+RangeSize-1, nBits);
1557 Cba_ObjSetFinFon(
p, iObjBuf, 0, iFonNew );
1561 NameId = Prs_SliceName(pNtk, SigValue);
1562 RangeId = Prs_SliceRange(pNtk, SigValue);
1563 RangeSize = Cba_NtkRangeSize(
p, RangeId);
1564 RangeOut = Cba_NtkHashRange(
p, nBits+RangeSize-1, nBits);
1568 Vec_IntPushThree( &
p->vArray0, NameId, RangeId, iFonNew );
1574 Vec_IntReverseOrder( vSigs );
1578 Cba_FonHashRange(
p, iFon, nBits-1, 0 );
1584 int NameId = pSlices[0];
1585 int RangeId = -Cba_NtkGetMap(
p, NameId);
1586 int LeftId = Cba_NtkRangeLeft(
p, RangeId );
1587 int RightId = Cba_NtkRangeRight(
p, RangeId );
1588 int BotId = Abc_MinInt( LeftId, RightId );
1589 int TopId = Abc_MaxInt( LeftId, RightId );
1590 int i, k, iObj, iFon, nParts, Prev, nBits;
1592 Vec_IntFill( vBits, Abc_MaxInt(LeftId, RightId) + 1, 0 );
1594 for ( i = 0; i < nSlices; i++ )
1596 int Range = pSlices[3*i+1];
1597 int iFon = pSlices[3*i+2];
1598 int Left = Cba_NtkRangeLeft(
p, Range );
1599 int Right = Cba_NtkRangeRight(
p, Range );
1600 int Bot = Abc_MinInt( Left, Right );
1601 int Top = Abc_MaxInt( Left, Right );
1602 assert( NameId == pSlices[3*i+0] && iFon > 0 );
1603 assert( BotId <= Bot && Top <= TopId );
1604 for ( k = Bot; k <= Top; k++ )
1606 assert( Vec_IntEntry(vBits, k) == 0 );
1607 Vec_IntWriteEntry( vBits, k, iFon );
1611 Prev = -1; nParts = 0;
1620 iFon = Cba_ObjFon0(
p, iObj);
1621 Cba_FonSetName(
p, iFon, NameId );
1624 k = 0; Prev = -1; nBits = 0;
1627 if ( Prev == -1 || Prev == iFon )
1632 Prev = Cba_ManNewConstZero(
p, nBits );
1633 assert( nBits == Cba_FonRangeSize(
p, Prev) );
1634 Cba_ObjSetFinFon(
p, iObj, nParts-1-k++, Prev );
1639 assert( nBits == Cba_FonRangeSize(
p, Prev) );
1640 Cba_ObjSetFinFon(
p, iObj, nParts-1-k++, Prev );
1648 int i, SigTemp, SigOne = -1, Value = Abc_Lit2Var2( Sig );
1654 int fOnly0 = 1, fOnly1 = 1;
1655 char * pConst = Prs_NtkConst(pNtk, Value);
1656 pConst =
strchr( pConst,
'\'' ) + 1;
1657 assert( *pConst ==
'b' );
1659 if ( *pConst ==
'0' )
1661 else if ( *pConst ==
'1' )
1670 vSigs = Prs_CatSignals( pNtk, Value );
1673 Value = Abc_Lit2Var2( SigTemp );
1679 else if ( SigOne != Value )
1688 int iSigSet = -1, iSigRst = -1;
1689 int IndexSet = -1, IndexRst = -1;
1690 int FormId, ActId, k;
1692 Cba_NtkCleanMap2(
p );
1693 Cba_NtkSetMap2(
p, Cba_NtkStrId(
p,
"set"), 1 );
1694 Cba_NtkSetMap2(
p, Cba_NtkStrId(
p,
"reset"), 2 );
1697 if ( Cba_NtkGetMap2(
p, FormId) == 1 )
1698 iSigSet = ActId, IndexSet = k+1;
1699 else if ( Cba_NtkGetMap2(
p, FormId) == 2 )
1700 iSigRst = ActId, IndexRst = k+1;
1701 assert( iSigSet >= 0 && iSigRst >= 0 );
1702 if ( pIndexSet ) *pBitSet = 0;
1703 if ( pIndexRst ) *pBitRst = 0;
1704 if ( pBitSet ) *pBitSet = 0;
1705 if ( pBitRst ) *pBitRst = 0;
1706 if ( iSigSet == -1 || iSigRst == -1 )
1710 if ( iSigSet == -1 || iSigRst == -1 )
1712 if ( pIndexSet ) *pIndexSet = IndexSet;
1713 if ( pIndexRst ) *pIndexRst = IndexRst;
1714 if ( pBitSet ) *pBitSet = iSigSet;
1715 if ( pBitRst ) *pBitRst = iSigRst;
1720 int i, FormId, ActId;
1722 if ( FormId == NameRamId )
1728 char * pPtr1 =
strchr( pName,
'_' );
1729 char * pPtr2 =
strchr( pPtr1+1,
'_' );
1730 int Num1 = atoi( pPtr1 + 1 );
1731 int Num2 = atoi( pPtr2 + 1 );
1732 assert( Num1 + Abc_Base2Log(Num2) < 32 );
1733 return (1 << Num1) * Num2;
1739 char * pNtkName, * pRamName;
1744 if ( Prs_BoxIsNode(pNtk, i) )
1746 pNtkName = Prs_NtkStr(pNtk, Prs_BoxNtk(pNtk, i));
1747 fWrite = !
strncmp(pNtkName,
"ClockedWritePort_",
strlen(
"ClockedWritePort_"));
1748 if ( fWrite || !
strncmp(pNtkName,
"ReadPort_",
strlen(
"ReadPort_")) )
1751 if ( vAllRams == NULL )
1752 vAllRams = Vec_PtrAlloc( 4 );
1754 if ( pRamName == (
char *)Vec_PtrEntry(vRam, 0) )
1758 vBoxCopy = Vec_IntDup(vBox);
1759 Vec_IntPush( vBoxCopy, i );
1760 Vec_PtrPush( vRam, vBoxCopy );
1764 if ( k < Vec_PtrSize(vAllRams) )
1766 vRam = Vec_PtrAlloc( 4 );
1767 Vec_PtrPush( vRam, pRamName );
1771 vBoxCopy = Vec_IntDup(vBox);
1772 Vec_IntPush( vBoxCopy, i );
1773 Vec_PtrPush( vRam, vBoxCopy );
1775 Vec_PtrPush( vAllRams, vRam );
1782 int i, NameId, RangeId, iObj, iFon;
1783 Cba_NtkCleanObjFuncs(
p );
1784 Cba_NtkCleanObjNames(
p );
1785 Cba_NtkCleanFonNames(
p );
1786 Cba_NtkCleanFonRanges(
p );
1788 Cba_NtkCleanMap(
p );
1793 Cba_ObjSetName(
p, iObj, NameId );
1794 iFon = Cba_ObjFon0(
p, iObj);
1795 Cba_FonSetRangeSign(
p, iFon, RangeId );
1796 Cba_FonSetName(
p, iFon, NameId );
1797 Cba_NtkSetMap(
p, NameId, iObj );
1803 Cba_ObjSetName(
p, iObj, NameId );
1804 Cba_NtkSetMap(
p, NameId, iObj );
1811 Vec_IntPush( &
p->vOrder, iObj );
1816 Vec_Int_t * vBox2Obj = Vec_IntStart( Prs_NtkBoxNum(pNtk) );
1818 int i, k, iObj, iTerm, iFon, FormId, ActId, RangeId, NameId, Type;
1820 Cba_NtkCleanMap(
p );
1822 Cba_NtkSetMap(
p, Cba_ObjName(
p, iObj), Cba_ObjFon0(
p, iObj) );
1826 Cba_NtkSetMap(
p, NameId, -RangeId );
1828 Cba_NtkSetMap(
p, NameId, -RangeId );
1835 char * pRamName = (
char *)Vec_PtrEntry( vRam, 0 );
1836 int MemSize = Abc_Ptr2Int( (
char *)Vec_PtrEntry( vRam, 1 ) );
1839 NameId = Cba_NtkNewStrId(
p,
"%s_box", pRamName );
1842 Cba_ObjSetName(
p, iObj, NameId );
1843 iFon = Cba_ObjFon0(
p, iObj);
1844 NameId = Cba_NtkNewStrId(
p, pRamName );
1845 Cba_FonSetName(
p, iFon, NameId );
1847 assert( Cba_FonLeft(
p, iFon) <= MemSize-1 );
1848 assert( Cba_FonRight(
p, iFon) == 0 );
1854 int Line = Vec_IntPop( vBox );
1855 Vec_IntWriteEntry( vBox2Obj, Line, iObjNew );
1856 if ( Prs_BoxName(pNtk, Line) )
1857 Cba_ObjSetName(
p, iObjNew, Prs_BoxName(pNtk, Line) );
1860 iFon = Cba_ObjFon0(
p, iObjNew);
1861 Cba_FonSetRange(
p, iFon, Cba_NtkHashRange(
p, MemSize-1, 0) );
1864 NameId = Cba_NtkNewStrId(
p,
"%s_wp%d", pRamName, k-2 );
1865 Cba_FonSetName(
p, iFon, NameId );
1866 Cba_NtkSetMap(
p, NameId, iFon );
1868 Cba_ObjSetFinFon(
p, iObj, (k++)-2, iFon );
1869 Vec_IntFree( vBox );
1871 Vec_PtrFree( vRam );
1873 Vec_PtrFreeP( &vAllRams );
1876 Vec_IntClear( &
p->vArray0 );
1879 if ( Prs_BoxIsNode(pNtk, i) )
1881 Type = Prs_BoxNtk(pNtk, i);
1887 Cba_Ntk_t * pBox = NULL;
int nInputs, nOutputs = 1;
1888 char ** pOutNames = NULL, * pNtkName = Prs_NtkStr(pNtk, Prs_BoxNtk(pNtk, i));
1889 Type = Prs_ManFindType( pNtkName, &nInputs, 1, &pOutNames );
1894 pBox = Cba_ManNtkFind(
p->pDesign, pNtkName );
1897 printf(
"Fatal error: Cannot find module \"%s\".\n", pNtkName );
1900 nInputs = Cba_NtkPiNum(pBox);
1901 nOutputs = Cba_NtkPoNum(pBox);
1908 nInputs = 1 + (1 << atoi(pNtkName+
strlen(
"wide_mux_")));
1910 nInputs = 1 + (1 << atoi(pNtkName+
strlen(
"Mux_")));
1915 if ( !
strncmp(pNtkName,
"wide_select_",
strlen(
"wide_select_")) )
1916 nInputs = 1 + atoi(pNtkName+
strlen(
"wide_select_"));
1917 else if ( !
strncmp(pNtkName,
"Select_",
strlen(
"Select_")) )
1918 nInputs = 1 + atoi(pNtkName+
strlen(
"Select_"));
1924 iObj = Cba_ObjAlloc(
p, (
Cba_ObjType_t)Type, nInputs, nOutputs );
1925 if ( pBox ) Cba_ObjSetFunc(
p, iObj, Cba_NtkId(pBox) );
1927 Cba_NtkCleanMap2(
p );
1930 Cba_NtkSetMap2(
p, Cba_ObjName(pBox, iTerm), k+1 );
1932 for ( k = 0; k < nOutputs; k++ )
1933 Cba_NtkSetMap2(
p, Cba_NtkStrId(
p, pOutNames[k]), k+1 );
1936 if ( Cba_NtkGetMap2(
p, FormId) )
1938 iFon = Cba_ObjFon(
p, iObj, Cba_NtkGetMap2(
p, FormId)-1);
1942 Vec_IntWriteEntry( vBox2Obj, i, iObj );
1943 if ( Prs_BoxName(pNtk, i) )
1944 Cba_ObjSetName(
p, iObj, Prs_BoxName(pNtk, i) );
1949 if ( Vec_IntSize(&
p->vArray0) )
1951 int Prev = -1, Index = 0;
1952 Vec_IntSortMulti( &
p->vArray0, 3, 0 );
1955 if ( Prev != -1 && Prev != NameId )
1966 iObj = Vec_IntEntry( vBox2Obj, i );
1967 if ( Prs_BoxIsNode(pNtk, i) )
1969 Type = Prs_BoxNtk(pNtk, i);
1974 Cba_ObjSetFinFon(
p, iObj, k/2-1, iFon );
1980 char ** pInNames = NULL, * pNtkName = Prs_NtkStr(pNtk, Prs_BoxNtk(pNtk, i));
1981 Type = Prs_ManFindType( pNtkName, &nInputs, 0, &pInNames );
1984 int IndexSet = -1, IndexRst = -1, iBitSet = -1, iBitRst = -1;
1988 Vec_IntWriteEntry( vBox, IndexSet, iBitSet );
1989 Vec_IntWriteEntry( vBox, IndexRst, iBitRst );
1994 int w, Width = atoi( pNtkName +
strlen(Type ==
CBA_BOX_DFFRS ?
"wide_dffrs_" :
"wide_latchrs_") );
1998 Cba_NtkCleanMap2(
p );
1999 for ( k = 0; k < nInputs; k++ )
2000 Cba_NtkSetMap2(
p, Cba_NtkStrId(
p, pInNames[k]), k+1 );
2002 for ( w = 0; w < Width; w++ )
2006 if ( Prs_BoxName(pNtk, i) )
2008 NameId = Cba_NtkNewStrId(
p,
"%s[%d]", Prs_NtkStr(pNtk, Prs_BoxName(pNtk, i)), w );
2009 Cba_ObjSetName(
p, iObjNew, NameId );
2013 iFon = Cba_ObjFon0(
p, iObjNew);
2015 NameId = Cba_NtkNewStrId(
p,
"%s[%d]", Cba_FonNameStr(
p, Cba_ObjFon0(
p, iObj)), w );
2016 Cba_FonSetName(
p, iFon, NameId );
2021 Cba_ObjSetFinFon(
p, iObj, Width-1-w, iFon );
2024 if ( Cba_NtkGetMap2(
p, FormId) )
2026 int Index = Cba_NtkGetMap2(
p, FormId)-1;
2031 Cba_ObjSetFinFon(
p, iObjNew, Index, iFon );
2037 assert( Type == Cba_ObjType(
p, iObj) );
2040 Cba_NtkCleanMap2(
p );
2044 assert( Cba_NtkPiNum(pBox) == Cba_ObjFinNum(
p, iObj) );
2045 assert( Cba_NtkPoNum(pBox) == Cba_ObjFonNum(
p, iObj) );
2047 Cba_NtkSetMap2(
p, Cba_ObjName(pBox, iTerm), k+1 );
2052 for ( k = 0; k < nInputs; k++ )
2053 Cba_NtkSetMap2(
p, Cba_NtkStrId(
p, pInNames[k]), k+1 );
2057 if ( Cba_NtkGetMap2(
p, FormId) )
2059 int Index = Cba_NtkGetMap2(
p, FormId)-1;
2060 int nBits = Cba_ObjFinNum(
p, iObj);
2064 Cba_ObjSetFinFon(
p, iObj, Index, iFon );
2069 int FonCat = Cba_ObjFinFon(
p, iObj, 1 );
2070 int nBits = Cba_FonRangeSize(
p, FonCat );
2071 int nParts = Cba_ObjFinNum(
p, iObj) - 1;
2072 int Slice = nBits / nParts;
2073 int nFins = Cba_ObjFinNum(
p, iObj);
2074 assert( Cba_ObjFinNum(
p, iObj) >= 2 );
2075 assert( Slice * nParts == nBits );
2076 assert( nFins == 1 + nParts );
2077 Cba_ObjCleanFinFon(
p, iObj, 1 );
2082 Cba_ObjSetFinFon(
p, iObjNew, 0, FonCat );
2083 FonCat = Cba_ObjFon0(
p, iObjNew );
2084 NameId = Cba_NtkNewStrId(
p,
"_buf_const_%d", iObjNew );
2085 Cba_FonSetName(
p, FonCat, NameId );
2086 Cba_FonSetRange(
p, FonCat, Cba_NtkHashRange(
p, nBits-1, 0) );
2088 for ( k = 0; k < nParts; k++ )
2091 iFon =
Prs_CreateSlice(
p, FonCat, pNtk, Cba_NtkHashRange(
p, k*Slice+Slice-1, k*Slice) );
2092 Cba_ObjSetFinFon(
p, iObj, k+1, iFon );
2097 if ( Type ==
CBA_BOX_ADD && Cba_ObjFinFon(
p, iObj, 0) == 0 )
2098 Cba_ObjSetFinFon(
p, iObj, 0, Cba_FonFromConst(1) );
2101 Cba_ObjSetFinFon(
p, iObj, 1, Cba_FonFromConst(1) );
2103 Cba_ObjSetFinFon(
p, iObj, 2, Cba_FonFromConst(1) );
2105 Vec_IntFree( vBox2Obj );
2109 iObj = Cba_NtkPo(
p, i );
2110 assert( NameId == Cba_ObjName(
p, iObj) );
2114 Cba_ObjSetFinFon(
p, iObj, 0, iFon );
2117 assert( Cba_NtkRangeLeft(
p, Abc_Lit2Var(RangeId)) == Cba_FonLeft(
p, iFon) );
2118 assert( Cba_NtkRangeRight(
p, Abc_Lit2Var(RangeId)) == Cba_FonRight(
p, iFon) );
2126 Prs_Ntk_t * pPrsRoot = Prs_ManRoot(vDes);
2131 Cba_Man_t *
p = Cba_ManAlloc( pFileName, Vec_PtrSize(vDes), pStrs, pFuns, pMods, Hash_IntManRef(pPrsRoot->
vHash) );
2135 Cba_Ntk_t * pNtk = Cba_NtkAlloc(
p, Prs_NtkId(pPrsNtk), Prs_NtkPiNum(pPrsNtk), Prs_NtkPoNum(pPrsNtk), Prs_NtkObjNum(pPrsNtk), 100, 100 );
2137 Cba_NtkAdd(
p, pNtk );
2142 printf(
"Building module \"%s\"...\n", Prs_NtkName(pPrsNtk) );
2148 printf(
"Quitting because of errors.\n" );
2150 Cba_ManPrepareSeq(
p );
2169 if ( vDes && Vec_PtrSize(vDes) )
2172 Prs_ManVecFree( vDes );
#define ABC_SWAP(Type, a, b)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
#define Prs_ManForEachNameVec(vVec, p, pName, i)
struct Prs_Man_t_ Prs_Man_t
struct Prs_Ntk_t_ Prs_Ntk_t
BASIC TYPES ///.
#define Prs_NtkForEachBox(p, vVec, i)
void Prs_ManReadVerilogTest(char *pFileName)
struct Prs_VerInfo_t_ Prs_VerInfo_t
char * Prs_CreateDetectRamPort(Prs_Ntk_t *pNtk, Vec_Int_t *vBox, int NameRamId)
int Prs_CreateRange(Cba_Ntk_t *p, int iFon, int NameId)
int Prs_CreateSignalIn(Cba_Ntk_t *p, Prs_Ntk_t *pNtk, int Sig)
int Prs_CreateFlopSetReset(Cba_Ntk_t *p, Prs_Ntk_t *pNtk, Vec_Int_t *vBox, int *pIndexSet, int *pIndexRst, int *pBitSet, int *pBitRst)
int Prs_ManReadSignalList(Prs_Man_t *p, Vec_Int_t *vTemp, char LastSymb, int fAddForm)
struct Prs_VerPrim_t_ Prs_VerPrim_t
FUNCTION DEFINITIONS ///.
int Prs_CreateSlice(Cba_Ntk_t *p, int iFon, Prs_Ntk_t *pNtk, int Range)
Vec_Ptr_t * Prs_CreateDetectRams(Prs_Ntk_t *pNtk)
int Prs_CreateGetMemSize(char *pName)
void Prs_ManPrintModules(Prs_Man_t *p)
int Prs_CreateBitSignal(Prs_Ntk_t *pNtk, int Sig)
int Prs_CreateCatIn(Cba_Ntk_t *p, Prs_Ntk_t *pNtk, int Con)
Cba_Man_t * Cba_ManReadVerilog(char *pFileName)
int Prs_CreateVerilogFindFon(Cba_Ntk_t *p, int NameId)
void Prs_CreateOutConcat(Cba_Ntk_t *p, int *pSlices, int nSlices)
Vec_Ptr_t * Prs_ManReadVerilog(char *pFileName)
void Prs_CreateSignalOut(Cba_Ntk_t *p, int iFon, Prs_Ntk_t *pNtk, int Sig)
void Prs_CreateVerilogPio(Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
int Prs_CreateVerilogNtk(Cba_Ntk_t *p, Prs_Ntk_t *pNtk)
void Prs_NtkAddVerilogDirectives(Prs_Man_t *p)
ITERATORS ///.
Cba_Man_t * Prs_ManBuildCbaVerilog(char *pFileName, Vec_Ptr_t *vDes)
Cba_ObjType_t
INCLUDES ///.
void Prs_ManWriteVerilog(char *pFileName, Vec_Ptr_t *p)
#define Cba_NtkForEachPo(p, iObj, i)
typedefABC_NAMESPACE_HEADER_START struct Cba_Ntk_t_ Cba_Ntk_t
INCLUDES ///.
char * Cba_ManGetSliceName(Cba_Ntk_t *p, int iFon, int RangeId)
struct Cba_Man_t_ Cba_Man_t
#define Cba_NtkForEachPi(p, iObj, i)
int Abc_NamStrFind(Abc_Nam_t *p, char *pStr)
int Abc_NamStrFindOrAddLim(Abc_Nam_t *p, char *pStr, char *pLim, int *pfFound)
int Abc_NamStrFindOrAdd(Abc_Nam_t *p, char *pStr, int *pfFound)
int Abc_NamObjNumMax(Abc_Nam_t *p)
Abc_Nam_t * Abc_NamStart(int nObjs, int nAveSize)
FUNCTION DEFINITIONS ///.
Abc_Nam_t * Abc_NamRef(Abc_Nam_t *p)
char * Abc_NamStr(Abc_Nam_t *p, int NameId)
typedefABC_NAMESPACE_HEADER_START struct Abc_Nam_t_ Abc_Nam_t
INCLUDES ///.
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
#define Vec_IntForEachEntryStartStop(vVec, Entry, i, Start, Stop)
#define Vec_IntForEachEntryTriple(vVec, Entry1, Entry2, Entry3, i)
#define Vec_IntForEachEntryDoubleStart(vVec, Entry1, Entry2, i, Start)
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.