/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
*
|
*
|
* SystemC to Verilog Translator v0.2
|
* SystemC to Verilog Translator v0.3
|
* Provided by OpenSoc Design
|
* Provided by OpenSoc Design
|
*
|
*
|
* www.opensocdesign.com
|
* www.opensocdesign.com
|
*
|
*
|
* -----------------------------------------------------------------------------
|
* -----------------------------------------------------------------------------
|
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
* (at your option) any later version.
|
* (at your option) any later version.
|
*
|
*
|
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* GNU Library General Public License for more details.
|
* GNU Library General Public License for more details.
|
*
|
*
|
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
*/
|
*/
|
|
|
|
|
%{
|
%{
|
#include
|
#include
|
#include
|
#include
|
|
|
#include "list.h"
|
#include "sc2v_step1.h"
|
|
|
/* Global var to store Regs */
|
|
RegsList *regslist;
|
|
/* Global var to store Defines */
|
|
DefinesList *defineslist;
|
|
|
|
|
|
int processfound = 0;
|
int processfound = 0;
|
int switchfound = 0;
|
int switchfound = 0;
|
int switchparenthesis[256];
|
int switchparenthesis[256];
|
int ifdeffound = 0;
|
int ifdeffound = 0;
|
char *processname, *processname2;
|
char *processname, *processname2;
|
char *fileregs;
|
char *fileregs;
|
char *filename;
|
char *filename;
|
int openedkeys = 0;
|
int openedkeys = 0;
|
int newline = 0;
|
int newline = 0;
|
int reg_found = 0;
|
int reg_found = 0;
|
int regs_end;
|
int regs_end;
|
int i = 0; //for loops counter
|
int i = 0; //for loops counter
|
FILE *file;
|
FILE *file;
|
FILE *regs_file;
|
FILE *regs_file;
|
char *regname, *regname2;
|
char *regname, *regname2;
|
char *lastword; // Stores last WORD for use it in WRITE
|
char *lastword; // Stores last WORD for use it in WRITE
|
char *file_defines;
|
char *file_defines;
|
FILE *FILE_DEFINES;
|
FILE *FILE_DEFINES;
|
char *file_writes;
|
char *file_writes;
|
FILE *FILE_WRITES; //FILE to store .write to know if it is a wire or reg
|
FILE *FILE_WRITES; //FILE to store .write to know if it is a wire or reg
|
int definefound = 0;
|
int definefound = 0;
|
int defineinvocationfound = 0;
|
int defineinvocationfound = 0;
|
int opencorchfound = 0;
|
int opencorchfound = 0;
|
int defineparenthesis = 0;
|
int defineparenthesis = 0;
|
|
|
int openedcase = 0;
|
int openedcase = 0;
|
|
|
int default_break_found = 0;
|
int default_break_found = 0;
|
int default_found;
|
int default_found;
|
|
|
//Directives variables
|
//Directives variables
|
int translate;
|
int translate;
|
int verilog;
|
int verilog;
|
int writemethod;
|
int writemethod;
|
|
|
void yyerror (const char *str)
|
void yyerror (const char *str)
|
{
|
{
|
fprintf (stderr, "error: %s\n", str);
|
fprintf (stderr, "error: %s\n", str);
|
}
|
}
|
|
|
int yywrap ()
|
int yywrap ()
|
{
|
{
|
return 1;
|
return 1;
|
}
|
}
|
|
|
main ()
|
main ()
|
{
|
{
|
int i;
|
int i;
|
|
|
regslist = (RegsList *) malloc (sizeof (RegsList));
|
defineslist=NULL;
|
InitializeRegsList (regslist);
|
regslist=NULL;
|
defineslist = (DefinesList *) malloc (sizeof (DefinesList));
|
|
InitializeDefinesList (defineslist);
|
|
|
|
processname = (char *) malloc (256 * sizeof (int));
|
|
processname2 = (char *) malloc (256 * sizeof (int));
|
|
fileregs = (char *) malloc (256 * sizeof (int));
|
|
|
|
file_defines = (char *) malloc (256 * sizeof (int));
|
fprintf(stderr,"\nSystemC to Verilog Translator v0.3");
|
|
fprintf(stderr,"\nProvided by OpenSoc http://www.opensocdesign.com\n\n");
|
|
fprintf(stderr,"Parsing implementation file.......\n\n");
|
|
|
|
processname = (char *) malloc (256 * sizeof (char));
|
|
processname2 = (char *) malloc (256 * sizeof (char));
|
|
fileregs = (char *) malloc (256 * sizeof (char));
|
|
|
|
file_defines = (char *) malloc (256 * sizeof (char));
|
strcpy (file_defines, (char *) "file_defines.sc2v");
|
strcpy (file_defines, (char *) "file_defines.sc2v");
|
FILE_DEFINES = fopen (file_defines, (char *) "w");
|
FILE_DEFINES = fopen (file_defines, (char *) "w");
|
|
|
file_writes = (char *) malloc (256 * sizeof (int));
|
file_writes = (char *) malloc (256 * sizeof (char));
|
strcpy (file_writes, (char *) "file_writes.sc2v");
|
strcpy (file_writes, (char *) "file_writes.sc2v");
|
FILE_WRITES = fopen (file_writes, (char *) "w");
|
FILE_WRITES = fopen (file_writes, (char *) "w");
|
if (FILE_WRITES != NULL)
|
|
printf ("\nopening file => filename = %s\n", file_writes);
|
|
|
|
lastword = malloc (sizeof (char) * 256);
|
lastword = (char *)malloc (sizeof (char) * 256);
|
|
|
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
switchparenthesis[i] = 0;
|
switchparenthesis[i] = 0;
|
|
|
translate = 1;
|
translate = 1;
|
verilog = 0;
|
verilog = 0;
|
writemethod = 0;
|
writemethod = 0;
|
|
|
yyparse ();
|
yyparse ();
|
fclose (FILE_WRITES);
|
fclose (FILE_WRITES);
|
fclose (FILE_DEFINES);
|
fclose (FILE_DEFINES);
|
|
|
|
fprintf(stderr,"\nDone\n\n");
|
}
|
}
|
|
|
%}
|
%}
|
|
|
%token NUMBER WORD SC_INT SC_UINT BOOL BIGGER LOWER OPENKEY CLOSEKEY WRITE WORD SYMBOL NEWLINE ENUM INCLUDE
|
%token NUMBER WORD SC_INT SC_UINT BOOL BIGGER LOWER OPENKEY CLOSEKEY WRITE WORD SYMBOL NEWLINE ENUM INCLUDE
|
%token COLON SEMICOLON RANGE OPENPAR CLOSEPAR TWODOUBLEPOINTS OPENCORCH CLOSECORCH SWITCH CASE DEFAULT BREAK
|
%token COLON SEMICOLON RANGE OPENPAR CLOSEPAR TWODOUBLEPOINTS OPENCORCH CLOSECORCH SWITCH CASE DEFAULT BREAK
|
%token SC_BIGINT SC_BIGUINT HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR INTCONV
|
%token SC_BIGINT SC_BIGUINT HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR INTCONV
|
%token VOID TTRUE TFALSE
|
%token VOID TTRUE TFALSE
|
%token PIFDEF PENDDEF PELSE
|
%token PIFDEF PENDDEF PELSE
|
|
|
%% commands:/* empty */
|
%% commands:/* empty */
|
|commands command;
|
|commands command;
|
|
|
|
|
command:
|
command:
|
voidword
|
voidword
|
|
|
|
|
include
|
include
|
|
|
|
|
dollar
|
dollar
|
|
|
|
|
intconv
|
intconv
|
|
|
|
|
tab
|
tab
|
|
|
|
|
read
|
read
|
|
|
|
|
sc_int
|
sc_int
|
|
|
|
|
sc_uint
|
sc_uint
|
|
|
|
|
sc_bigint
|
sc_bigint
|
|
|
|
|
sc_biguint
|
sc_biguint
|
|
|
|
|
number
|
number
|
|
|
|
|
bool
|
bool
|
|
|
|
|
word
|
word
|
|
|
|
|
symbol
|
symbol
|
|
|
|
|
write
|
write
|
|
|
|
|
newline
|
newline
|
|
|
|
|
openkey
|
openkey
|
|
|
|
|
closekey
|
closekey
|
|
|
|
|
colon
|
colon
|
|
|
|
|
semicolon
|
semicolon
|
|
|
|
|
range
|
range
|
|
|
|
|
openpar
|
openpar
|
|
|
|
|
closepar
|
closepar
|
|
|
|
|
void
|
void
|
|
|
|
|
opencorch
|
opencorch
|
|
|
|
|
closecorch
|
closecorch
|
|
|
|
|
bigger
|
bigger
|
|
|
|
|
lower
|
lower
|
|
|
|
|
switch
|
switch
|
|
|
|
|
case_only
|
case_only
|
|
|
|
|
case_number
|
case_number
|
|
|
|
|
case_word
|
case_word
|
|
|
|
|
case_default
|
case_default
|
|
|
|
|
break
|
break
|
|
|
|
|
hexa
|
hexa
|
|
|
|
|
definemacro
|
definemacro
|
|
|
|
|
defineword
|
defineword
|
|
|
|
|
definenumber
|
definenumber
|
|
|
|
|
translateoff
|
translateoff
|
|
|
|
|
translateon
|
translateon
|
|
|
|
|
verilogbegin
|
verilogbegin
|
|
|
|
|
verilogend
|
verilogend
|
|
|
|
|
ifdef
|
ifdef
|
|
|
|
|
endif
|
endif
|
|
|
|
|
pelse
|
pelse
|
|
|
|
|
ttrue
|
ttrue
|
|
|
|
|
tfalse;
|
tfalse;
|
|
|
|
|
|
|
voidword:
|
voidword:
|
VOID
|
VOID
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, " void");
|
fprintf (file, " void");
|
};
|
};
|
|
|
|
|
include:
|
include:
|
INCLUDE
|
INCLUDE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, " #include");
|
fprintf (file, " #include");
|
};
|
};
|
|
|
|
|
dollar:
|
dollar:
|
DOLLAR
|
DOLLAR
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, " $");
|
fprintf (file, " $");
|
};
|
};
|
|
|
intconv:
|
intconv:
|
INTCONV
|
INTCONV
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, " (int)");
|
fprintf (file, " (int)");
|
};
|
};
|
|
|
tab:
|
tab:
|
TAB
|
TAB
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, " \t");
|
fprintf (file, " \t");
|
};
|
};
|
|
|
read:
|
read:
|
READ OPENPAR CLOSEPAR
|
READ OPENPAR CLOSEPAR
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, ".read()");
|
fprintf (file, ".read()");
|
|
|
}
|
}
|
|
|
defineword:
|
defineword:
|
DEFINE WORD WORD
|
DEFINE WORD WORD
|
{
|
{
|
|
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "`define %s %s\n", (char *) $2, (char *) $3);
|
fprintf (file, "`define %s %s\n", (char *) $2, (char *) $3);
|
InsertDefine (defineslist, (char *) $2);
|
defineslist=InsertDefine(defineslist,(char *)$2);
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (FILE_DEFINES, "`define %s %s\n", (char *) $2, (char *) $3);
|
fprintf (FILE_DEFINES, "`define %s %s\n", (char *) $2, (char *) $3);
|
InsertDefine (defineslist, (char *) $2);
|
defineslist=InsertDefine(defineslist,(char *)$2);
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#define %s %s\n", (char *) $2, (char *) $3);
|
fprintf (file, "#define %s %s\n", (char *) $2, (char *) $3);
|
|
|
};
|
};
|
|
|
definenumber:
|
definenumber:
|
DEFINE WORD NUMBER
|
DEFINE WORD NUMBER
|
{
|
{
|
|
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "`define %s %d\n", (char *) $2, (int) $3);
|
fprintf (file, "`define %s %d\n", (char *) $2, (int) $3);
|
InsertDefine (defineslist, (char *) $2);
|
defineslist=InsertDefine(defineslist,(char *)$2);
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (FILE_DEFINES, "`define %s %d\n", (char *) $2, (int) $3);
|
fprintf (FILE_DEFINES, "`define %s %d\n", (char *) $2, (int) $3);
|
InsertDefine (defineslist, (char *) $2);
|
defineslist=InsertDefine(defineslist,(char *)$2);
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#define %s %d\n", (char *) $2, (int) $3);
|
fprintf (file, "#define %s %d\n", (char *) $2, (int) $3);
|
|
|
};
|
};
|
|
|
|
|
definemacro:
|
definemacro:
|
DEFINE WORD OPENPAR CLOSEPAR
|
DEFINE WORD OPENPAR CLOSEPAR
|
{
|
{
|
|
|
|
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
//Macro found
|
//Macro found
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
InsertDefine (defineslist, (char *) $2);
|
defineslist=InsertDefine(defineslist,(char *)$2);
|
|
|
definefound = 1;
|
definefound = 1;
|
if (processfound)
|
if (processfound)
|
fprintf (file, "`define %s ", (char *) $2);
|
fprintf (file, "`define %s ", (char *) $2);
|
else
|
else
|
fprintf (FILE_DEFINES, "`define %s ", (char *) $2);
|
fprintf (FILE_DEFINES, "`define %s ", (char *) $2);
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#define %s ()", (char *) $2);
|
fprintf (file, "#define %s ()", (char *) $2);
|
}
|
}
|
|
|
void:
|
void:
|
WORD TWODOUBLEPOINTS WORD OPENPAR CLOSEPAR
|
WORD TWODOUBLEPOINTS WORD OPENPAR CLOSEPAR
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
strcpy (processname, (char *) $4);
|
strcpy (processname, (char *) $4);
|
strcpy (processname2, (char *) $4);
|
strcpy (processname2, (char *) $4);
|
strcat (processname2, (char *) ".sc2v");
|
strcat (processname2, (char *) ".sc2v");
|
strcpy (fileregs, (char *) $4);
|
strcpy (fileregs, (char *) $4);
|
strcat (fileregs, (char *) "_regs.sc2v");
|
strcat (fileregs, (char *) "_regs.sc2v");
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, " %s::%s()", (char *) $1, (char *) $3);
|
fprintf (file, " %s::%s()", (char *) $1, (char *) $3);
|
|
|
}
|
}
|
|
|
sc_int:
|
sc_int:
|
SC_INT LOWER NUMBER BIGGER
|
SC_INT LOWER NUMBER BIGGER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
reg_found = 1;
|
reg_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "sc_int<%d>", $3);
|
fprintf (file, "sc_int<%d>", $3);
|
|
|
}
|
}
|
|
|
;
|
;
|
|
|
sc_uint:
|
sc_uint:
|
SC_UINT LOWER NUMBER BIGGER
|
SC_UINT LOWER NUMBER BIGGER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
reg_found = 1;
|
reg_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "sc_uint<%d>", $3);
|
fprintf (file, "sc_uint<%d>", $3);
|
}
|
}
|
|
|
;
|
;
|
|
|
sc_bigint:
|
sc_bigint:
|
SC_BIGINT LOWER NUMBER BIGGER
|
SC_BIGINT LOWER NUMBER BIGGER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
reg_found = 1;
|
reg_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "sc_bigint<%d> ", $3);
|
fprintf (file, "sc_bigint<%d> ", $3);
|
}
|
}
|
|
|
;
|
;
|
|
|
sc_biguint:
|
sc_biguint:
|
SC_BIGUINT LOWER NUMBER BIGGER
|
SC_BIGUINT LOWER NUMBER BIGGER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
fprintf (regs_file, "reg[%d:0] ", (-1 + $3));
|
reg_found = 1;
|
reg_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "sc_biguint<%d> ", $3);
|
fprintf (file, "sc_biguint<%d> ", $3);
|
}
|
}
|
|
|
;
|
;
|
|
|
bool:
|
bool:
|
BOOL
|
BOOL
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (regs_file, "reg ");
|
fprintf (regs_file, "reg ");
|
reg_found = 1;
|
reg_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "bool");
|
fprintf (file, "bool");
|
}
|
}
|
|
|
;
|
;
|
|
|
range:
|
range:
|
RANGE OPENPAR NUMBER COLON NUMBER CLOSEPAR
|
RANGE OPENPAR NUMBER COLON NUMBER CLOSEPAR
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
fprintf (file, "[%d:%d]", $3, $5);
|
fprintf (file, "[%d:%d]", $3, $5);
|
else if (definefound)
|
else if (definefound)
|
fprintf (FILE_DEFINES, "[%d:%d]", $3, $5);
|
fprintf (FILE_DEFINES, "[%d:%d]", $3, $5);
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, ".range(%d,%d)", $3, $5);
|
fprintf (file, ".range(%d,%d)", $3, $5);
|
}
|
}
|
|
|
;
|
;
|
|
|
number:
|
number:
|
NUMBER
|
NUMBER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
if (opencorchfound)
|
if (opencorchfound)
|
fprintf (regs_file, "%d:0", -1 + $1);
|
fprintf (regs_file, "%d:0", -1 + $1);
|
else
|
else
|
fprintf (regs_file, "%d", $1);
|
fprintf (regs_file, "%d", $1);
|
}
|
}
|
else
|
else
|
fprintf (file, "%d", $1);
|
fprintf (file, "%d", $1);
|
else if (definefound)
|
else if (definefound)
|
fprintf (FILE_DEFINES, "%d", $1);
|
fprintf (FILE_DEFINES, "%d", $1);
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "%d", $1);
|
fprintf (file, "%d", $1);
|
}
|
}
|
|
|
;
|
;
|
word:
|
word:
|
WORD
|
WORD
|
{
|
{
|
|
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (openedcase)
|
if (openedcase)
|
{
|
{
|
fprintf (file, " :\n");
|
fprintf (file, " :\n");
|
|
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
|
|
fprintf (file, "begin\n");
|
fprintf (file, "begin\n");
|
openedcase = 0;
|
openedcase = 0;
|
}
|
}
|
|
|
strcpy (lastword, (char *) $1);
|
strcpy (lastword, (char *) $1);
|
|
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
|
|
regname = malloc (sizeof (char) * (strlen ((char *) $1) + 1));
|
regname = (char *)malloc (sizeof (char) * (strlen ((char *) $1) + 1));
|
regname2 =
|
regname2 =(char *)malloc (sizeof (char) *(strlen ((char *) $1) + strlen (processname)) + 1);
|
malloc (sizeof (char) *
|
|
(strlen ((char *) $1) + strlen (processname)) + 1);
|
|
|
|
strcpy (regname, (char *) $1);
|
strcpy (regname, (char *) $1);
|
strcpy (regname2, (char *) $1);
|
strcpy (regname2, (char *) $1);
|
strcat (regname2, processname);
|
strcat (regname2, processname);
|
fprintf (regs_file, "%s", regname2);
|
fprintf (regs_file, "%s", regname2);
|
InsertReg (regslist, regname, regname2);
|
|
|
regslist=InsertReg(regslist,regname,regname2);
|
|
|
free (regname);
|
free (regname);
|
free (regname2);
|
free (regname2);
|
}
|
}
|
else
|
else
|
{
|
{
|
if (newline)
|
if (newline)
|
{
|
{
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
}
|
}
|
regname2 = IsReg (regslist, (char *) $1);
|
regname2 = IsReg (regslist,(char *) $1);
|
if (regname2 == NULL)
|
if (regname2 == NULL)
|
{
|
{
|
|
|
if (IsDefine (defineslist, (char *) $1))
|
if (IsDefine (defineslist, (char *) $1))
|
{
|
{
|
if (ifdeffound == 0)
|
if (ifdeffound == 0)
|
{
|
{
|
fprintf (file, "`%s", (char *) $1);
|
fprintf (file, "`%s", (char *) $1);
|
defineinvocationfound = 1;
|
defineinvocationfound = 1;
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (file, "%s", (char *) $1);
|
fprintf (file, "%s", (char *) $1);
|
ifdeffound = 0;
|
ifdeffound = 0;
|
}
|
}
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (file, "%s ", (char *) $1);
|
fprintf (file, "%s ", (char *) $1);
|
}
|
}
|
}
|
}
|
else
|
else
|
fprintf (file, "%s", regname2);
|
fprintf (file, "%s", regname2);
|
|
|
newline = 0;
|
newline = 0;
|
}
|
}
|
|
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
|
|
if (IsDefine (defineslist, (char *) $1))
|
if (IsDefine (defineslist, (char *) $1))
|
{
|
{
|
|
|
fprintf (FILE_DEFINES, "`%s", (char *) $1);
|
fprintf (FILE_DEFINES, "`%s", (char *) $1);
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (FILE_DEFINES, "%s ", (char *) $1);
|
fprintf (FILE_DEFINES, "%s ", (char *) $1);
|
}
|
}
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, " %s", (char *) $1);
|
fprintf (file, " %s", (char *) $1);
|
};
|
};
|
|
|
symbol:
|
symbol:
|
SYMBOL
|
SYMBOL
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (reg_found)
|
if (reg_found)
|
fprintf (regs_file, "%s", (char *) $1);
|
fprintf (regs_file, "%s", (char *) $1);
|
else
|
else
|
fprintf (file, "%s", (char *) $1);
|
fprintf (file, "%s", (char *) $1);
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "%s", (char *) $1);
|
fprintf (FILE_DEFINES, "%s", (char *) $1);
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "%s", (char *) $1);
|
fprintf (file, "%s", (char *) $1);
|
};
|
};
|
|
|
|
|
write:
|
write:
|
WRITE
|
WRITE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
writemethod = 1;
|
writemethod = 1;
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, " <= ");
|
fprintf (file, " <= ");
|
fprintf (FILE_WRITES, "%s\n", lastword);
|
fprintf (FILE_WRITES, "%s\n", lastword);
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, " <= ");
|
fprintf (FILE_DEFINES, " <= ");
|
}
|
}
|
|
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
{
|
{
|
fprintf (file, ".write");
|
fprintf (file, ".write");
|
}
|
}
|
};
|
};
|
|
|
newline:
|
newline:
|
NEWLINE
|
NEWLINE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound & !reg_found & !openedcase)
|
if (processfound & !reg_found & !openedcase)
|
{
|
{
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
newline = 1;
|
newline = 1;
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "\n");
|
fprintf (FILE_DEFINES, "\n");
|
}
|
}
|
|
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
};
|
};
|
|
|
colon:
|
colon:
|
COLON
|
COLON
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
fprintf (regs_file, ",");
|
fprintf (regs_file, ",");
|
}
|
}
|
else
|
else
|
fprintf (file, ",");
|
fprintf (file, ",");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, ",");
|
fprintf (FILE_DEFINES, ",");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, ",");
|
fprintf (file, ",");
|
};
|
};
|
|
|
semicolon:
|
semicolon:
|
SEMICOLON
|
SEMICOLON
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
fprintf (regs_file, ";\n");
|
fprintf (regs_file, ";\n");
|
reg_found = 0;
|
reg_found = 0;
|
}
|
}
|
else
|
else
|
{
|
{
|
if (defineinvocationfound == 0)
|
if (defineinvocationfound == 0)
|
fprintf (file, ";");
|
fprintf (file, ";");
|
}
|
}
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, ";");
|
fprintf (FILE_DEFINES, ";");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, ";");
|
fprintf (file, ";");
|
|
|
defineinvocationfound = 0;
|
defineinvocationfound = 0;
|
};
|
};
|
|
|
|
|
openpar:
|
openpar:
|
OPENPAR
|
OPENPAR
|
{
|
{
|
defineparenthesis = 1;
|
defineparenthesis = 1;
|
if (translate == 1 && verilog == 0 && defineinvocationfound == 0)
|
if (translate == 1 && verilog == 0 && defineinvocationfound == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "(");
|
fprintf (file, "(");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "(");
|
fprintf (FILE_DEFINES, "(");
|
}
|
}
|
|
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
{
|
{
|
fprintf (file, "(");
|
fprintf (file, "(");
|
}
|
}
|
}
|
}
|
|
|
closepar:
|
closepar:
|
CLOSEPAR
|
CLOSEPAR
|
{
|
{
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
|
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (defineparenthesis == 0)
|
if (defineparenthesis == 0)
|
{
|
{
|
fprintf (file, ")");
|
fprintf (file, ")");
|
defineinvocationfound = 0;
|
defineinvocationfound = 0;
|
}
|
}
|
|
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, ")");
|
fprintf (FILE_DEFINES, ")");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, ")");
|
fprintf (file, ")");
|
|
|
};
|
};
|
|
|
|
|
opencorch:
|
opencorch:
|
OPENCORCH
|
OPENCORCH
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
fprintf (regs_file, "[");
|
fprintf (regs_file, "[");
|
opencorchfound = 1;
|
opencorchfound = 1;
|
}
|
}
|
else
|
else
|
fprintf (file, "[");
|
fprintf (file, "[");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "[");
|
fprintf (FILE_DEFINES, "[");
|
|
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "[");
|
fprintf (file, "[");
|
};
|
};
|
|
|
closecorch:
|
closecorch:
|
CLOSECORCH
|
CLOSECORCH
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (reg_found)
|
if (reg_found)
|
{
|
{
|
fprintf (regs_file, "]");
|
fprintf (regs_file, "]");
|
opencorchfound = 0;
|
opencorchfound = 0;
|
}
|
}
|
else
|
else
|
fprintf (file, "]");
|
fprintf (file, "]");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "]");
|
fprintf (FILE_DEFINES, "]");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "]");
|
fprintf (file, "]");
|
};
|
};
|
|
|
|
|
openkey:
|
openkey:
|
OPENKEY
|
OPENKEY
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
openedkeys++;
|
openedkeys++;
|
if (!definefound)
|
if (!definefound)
|
{
|
{
|
if (openedkeys == 1)
|
if (openedkeys == 1)
|
{
|
{
|
printf ("opening file => filename = %s\n", processname2);
|
printf ("Found process %s\n", processname);
|
file = fopen (processname2, (char *) "w");
|
file = fopen (processname2, (char *) "w");
|
printf ("opening file => filename = %s\n", fileregs);
|
|
regs_file = fopen (fileregs, (char *) "w");
|
regs_file = fopen (fileregs, (char *) "w");
|
processfound = 1;
|
processfound = 1;
|
regslist = (RegsList *) malloc (sizeof (RegsList));
|
|
InitializeRegsList (regslist);
|
|
}
|
}
|
if (processfound)
|
if (processfound)
|
if (openedkeys != switchparenthesis[switchfound])
|
if (openedkeys != switchparenthesis[switchfound])
|
{
|
{
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "begin\n");
|
fprintf (file, "begin\n");
|
newline = 1;
|
newline = 1;
|
}
|
}
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "{");
|
fprintf (file, "{");
|
};
|
};
|
|
|
closekey:
|
closekey:
|
CLOSEKEY
|
CLOSEKEY
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound && !definefound)
|
if (processfound && !definefound)
|
{
|
{
|
if (openedkeys == switchparenthesis[switchfound] && switchfound > 0)
|
if (openedkeys == switchparenthesis[switchfound] && switchfound > 0)
|
{
|
{
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
if (default_found & !default_break_found)
|
if (default_found & !default_break_found)
|
{
|
{
|
for (i = 0; i < openedkeys - 1; i++)
|
for (i = 0; i < openedkeys - 1; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "end\n");
|
fprintf (file, "end\n");
|
default_found = 0;
|
default_found = 0;
|
}
|
}
|
for (i = 0; i < openedkeys - 1; i++)
|
for (i = 0; i < openedkeys - 1; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "endcase\n");
|
fprintf (file, "endcase\n");
|
newline = 1;
|
newline = 1;
|
switchparenthesis[switchfound] = 0;
|
switchparenthesis[switchfound] = 0;
|
switchfound--;
|
switchfound--;
|
|
|
}
|
}
|
else
|
else
|
{
|
{
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "end\n");
|
fprintf (file, "end\n");
|
newline = 1;
|
newline = 1;
|
}
|
}
|
}
|
}
|
|
|
openedkeys--;
|
openedkeys--;
|
if (definefound)
|
if (definefound)
|
{
|
{
|
definefound = 0;
|
definefound = 0;
|
if (processfound)
|
if (processfound)
|
fprintf (file, "\n//Dummy Comment\n");
|
fprintf (file, "\n//Dummy Comment\n");
|
else
|
else
|
fprintf (FILE_DEFINES, "\n//Dummy Comment\n");
|
fprintf (FILE_DEFINES, "\n//Dummy Comment\n");
|
}
|
}
|
else if (openedkeys == 0)
|
else if (openedkeys == 0)
|
{
|
{
|
fclose (file);
|
fclose (file);
|
fclose (regs_file);
|
fclose (regs_file);
|
free (regslist);
|
|
processfound = 0;
|
processfound = 0;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "}");
|
fprintf (file, "}");
|
};
|
};
|
|
|
|
|
bigger:
|
bigger:
|
BIGGER
|
BIGGER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, ">");
|
fprintf (file, ">");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, ">");
|
fprintf (FILE_DEFINES, ">");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, ">");
|
fprintf (file, ">");
|
};
|
};
|
|
|
lower:
|
lower:
|
LOWER
|
LOWER
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "<");
|
fprintf (file, "<");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "<");
|
fprintf (FILE_DEFINES, "<");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "<");
|
fprintf (file, "<");
|
};
|
};
|
|
|
|
|
switch:
|
switch:
|
SWITCH
|
SWITCH
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "case");
|
fprintf (file, "case");
|
switchfound++;
|
switchfound++;
|
switchparenthesis[switchfound] = openedkeys + 1;
|
switchparenthesis[switchfound] = openedkeys + 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "switch");
|
fprintf (file, "switch");
|
};
|
};
|
|
|
case_number:
|
case_number:
|
CASE NUMBER SYMBOL
|
CASE NUMBER SYMBOL
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
if (openedcase)
|
if (openedcase)
|
fprintf (file, ", %d", $2);
|
fprintf (file, ", %d", $2);
|
else
|
else
|
fprintf (file, "%d", $2);
|
fprintf (file, "%d", $2);
|
|
|
newline = 1;
|
newline = 1;
|
openedcase = 1;
|
openedcase = 1;
|
|
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "case %d %s", $2, (char *) $3);
|
fprintf (file, "case %d %s", $2, (char *) $3);
|
};
|
};
|
|
|
case_word:
|
case_word:
|
CASE WORD SYMBOL
|
CASE WORD SYMBOL
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
if (openedcase)
|
if (openedcase)
|
fprintf (file, ", %s", (char *) $2);
|
fprintf (file, ", %s", (char *) $2);
|
else
|
else
|
fprintf (file, "%s", (char *) $2);
|
fprintf (file, "%s", (char *) $2);
|
|
|
newline = 1;
|
newline = 1;
|
openedcase = 1;
|
openedcase = 1;
|
|
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "case %s %s", (char *) $2, (char *) $3);
|
fprintf (file, "case %s %s", (char *) $2, (char *) $3);
|
};
|
};
|
|
|
case_default:
|
case_default:
|
DEFAULT SYMBOL
|
DEFAULT SYMBOL
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "default:\n");
|
fprintf (file, "default:\n");
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "begin\n");
|
fprintf (file, "begin\n");
|
newline = 1;
|
newline = 1;
|
default_found = 1;
|
default_found = 1;
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "default %s", (char *) $2);
|
fprintf (file, "default %s", (char *) $2);
|
};
|
};
|
|
|
case_only:
|
case_only:
|
CASE OPENPAR
|
CASE OPENPAR
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
//This rule occurs when in Verilog mode a case appears
|
//This rule occurs when in Verilog mode a case appears
|
if (verilog == 1)
|
if (verilog == 1)
|
fprintf (file, "case(");
|
fprintf (file, "case(");
|
};
|
};
|
|
|
break:
|
break:
|
BREAK SEMICOLON
|
BREAK SEMICOLON
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
if (newline == 0)
|
if (newline == 0)
|
fprintf (file, "\n");
|
fprintf (file, "\n");
|
for (i = 0; i < openedkeys; i++)
|
for (i = 0; i < openedkeys; i++)
|
fprintf (file, " ");
|
fprintf (file, " ");
|
fprintf (file, "end\n");
|
fprintf (file, "end\n");
|
if (default_found)
|
if (default_found)
|
{
|
{
|
default_break_found = 1;
|
default_break_found = 1;
|
}
|
}
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "break;");
|
fprintf (file, "break;");
|
};
|
};
|
|
|
hexa:
|
hexa:
|
HEXA
|
HEXA
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "'h");
|
fprintf (file, "'h");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "'h");
|
fprintf (FILE_DEFINES, "'h");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "0x");
|
fprintf (file, "0x");
|
};
|
};
|
|
|
translateoff:
|
translateoff:
|
TRANSLATEOFF
|
TRANSLATEOFF
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
translate = 0;
|
translate = 0;
|
fprintf (stderr, "Found Translate off directive \n");
|
fprintf (stderr, "Found Translate off directive \n");
|
};
|
};
|
|
|
translateon:
|
translateon:
|
TRANSLATEON
|
TRANSLATEON
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
translate = 1;
|
translate = 1;
|
fprintf (stderr, "Found Translate on directive \n");
|
fprintf (stderr, "Found Translate on directive \n");
|
};
|
};
|
|
|
verilogbegin:
|
verilogbegin:
|
VERILOGBEGIN
|
VERILOGBEGIN
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
verilog = 1;
|
verilog = 1;
|
fprintf (stderr, "Found Verilog Begin directive \n");
|
fprintf (stderr, "Found Verilog Begin directive \n");
|
};
|
};
|
|
|
verilogend:
|
verilogend:
|
VERILOGEND
|
VERILOGEND
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
verilog = 0;
|
verilog = 0;
|
fprintf (stderr, "Found Verilog End directive \n");
|
fprintf (stderr, "Found Verilog End directive \n");
|
};
|
};
|
|
|
ifdef:
|
ifdef:
|
PIFDEF
|
PIFDEF
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
ifdeffound = 1;
|
ifdeffound = 1;
|
fprintf (file, "`ifdef");
|
fprintf (file, "`ifdef");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "`ifdef");
|
fprintf (FILE_DEFINES, "`ifdef");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#ifdef");
|
fprintf (file, "#ifdef");
|
};
|
};
|
|
|
endif:
|
endif:
|
PENDDEF
|
PENDDEF
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "`endif");
|
fprintf (file, "`endif");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "`endif");
|
fprintf (FILE_DEFINES, "`endif");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#endif");
|
fprintf (file, "#endif");
|
};
|
};
|
|
|
pelse:
|
pelse:
|
PELSE
|
PELSE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "`else");
|
fprintf (file, "`else");
|
}
|
}
|
else if (definefound)
|
else if (definefound)
|
{
|
{
|
fprintf (FILE_DEFINES, "`else");
|
fprintf (FILE_DEFINES, "`else");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "#else");
|
fprintf (file, "#else");
|
};
|
};
|
|
|
ttrue:
|
ttrue:
|
TTRUE
|
TTRUE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "1");
|
fprintf (file, "1");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "1");
|
fprintf (file, "1");
|
};
|
};
|
|
|
|
|
tfalse:
|
tfalse:
|
TFALSE
|
TFALSE
|
{
|
{
|
defineparenthesis = 0;
|
defineparenthesis = 0;
|
if (translate == 1 && verilog == 0)
|
if (translate == 1 && verilog == 0)
|
{
|
{
|
if (processfound)
|
if (processfound)
|
{
|
{
|
fprintf (file, "0");
|
fprintf (file, "0");
|
}
|
}
|
}
|
}
|
else if (verilog == 1)
|
else if (verilog == 1)
|
fprintf (file, "0");
|
fprintf (file, "0");
|
};
|
};
|
|
|