OpenCores
URL https://opencores.org/ocsvn/sc2v/sc2v/trunk

Subversion Repositories sc2v

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 27 to Rev 28
    Reverse comparison

Rev 27 → Rev 28

/trunk/ChangeLog
1,23 → 1,31
20-05-2005 Version 0.4.4
 
Fix bug using comments with -- and ++ operators
Fix bug inferring regs with arrays
Fix bug when using defines inside case statements
Fix bug using comments
Fix bug when assigning defines to variables
 
18-05-2005 Version 0.4.3
 
Corrected bug using ? and _ in header file
Corrected bug using multiple pointer declarations in header file
Fix bug using ? and _ in header file
Fix bug using multiple pointer declarations in header file
Added #ifndef to implementation file
 
18-03-2005 Version 0.4.2
 
Corrected bug in hexadecimal numbers in case statatements
Corrected bug in type conversions
Corrected bug in array length
Corrected bug in process without variables declaration
Fix bug in hexadecimal numbers in case statatements
Fix bug in type conversions
Fix bug in array length
Fix bug in process without variables declaration
15-03-2005 Version 0.4.1
 
Corrected bug with <= comparation
Fix bug with <= comparation
for loops with int type as index supported
Support hex numbers in switchs
Support sc_signals arrays
Corrected bug when connecting a output port to another
Fix bug when connecting a output port to another
Solved problem in type conversions
Solved problem with enumeration list
Solved bug in nested switch statements
30,7 → 38,7
 
Contribution of Harald Devos:
Line number in syntax error
ShowSignalsList arguments corrected
ShowSignalsList arguments Fix
 
03-02-2005 Version 0.3
 
47,24 → 55,24
23-01-2005 Version 0.2.4
 
Contribution of Harald Devos:
Corrected Memory allocation problems
Corrected return -1 in list.c
Fix Memory allocation problems
Fix return -1 in list.c
 
20-01-2005 Version 0.2.3
 
Corrected Memory allocation problems
Fix Memory allocation problems
Ignore SystemC type conversions
 
18-01-2005 Version 0.2.2
 
Contribution of Harald Devos:
Corrected bug when using keywords in comments
Fix bug when using keywords in comments
Adding multilines with \
 
17-01-2005 Version 0.2.1
Corrected bug in else if
Fix bug in else if
Translate true and false into 1 and 0
 
 
/trunk/src/sc2v_step1.y
58,8 → 58,8
int defineinvocationfound = 0;
int opencorchfound = 0;
int defineparenthesis = 0;
 
int openedcase = 0;
int writingvar=0;
 
int default_break_found = 0;
int default_found;
127,7 → 127,7
%token COLON SEMICOLON RANGE OPENPAR CLOSEPAR TWODOUBLEPOINTS OPENCORCH CLOSECORCH SWITCH CASE DEFAULT BREAK
%token HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR MINEQ
%token VOID TTRUE TFALSE ENDFUNC INC DEC INTEGER EQUALS
%token PIFDEF PIFNDEF PENDDEF PELSE
%token PIFDEF PIFNDEF PENDDEF PELSE COMMENT
 
%% commands: /* empty */
|commands command;
238,7 → 238,9
|
equal
|
minorequal;
minorequal
|
comment;
 
minorequal:
MINEQ
524,6 → 526,10
defineparenthesis = 0;
if (translate == 1 && verilog == 0)
{
if(opencorchfound==0){
strcpy (lastword, (char *) $1);
}
if (processfound)
{
if(lastswitch){
539,9 → 545,7
openedcase=0;
}
 
strcpy (lastword, (char *) $1);
 
if (reg_found)
if (reg_found)
{
if(writelenght){
writelenght=0;
662,8 → 666,9
reg_found=0;
if (translate == 1 && verilog == 0)
{
if (processfound)
if (processfound)
fprintf (file, "=");
writingvar=1;
}
else if (definefound)
fprintf (FILE_DEFINES, "=");
700,6 → 705,7
NEWLINE
{
defineparenthesis = 0;
writingvar=0;
if (translate == 1 && verilog == 0)
{
if (processfound & !reg_found & !openedcase)
756,8 → 762,8
}
else
{
if (defineinvocationfound == 0)
fprintf (file, ";");
if (defineinvocationfound == 0 || writingvar)
fprintf (file, ";");
}
}
else if (definefound)
767,7 → 773,8
}
else if (verilog == 1)
fprintf (file, ";");
 
writingvar=0;
defineinvocationfound = 0;
};
 
829,10 → 836,10
{
if (processfound)
{
opencorchfound = 1;
if (reg_found)
{
fprintf (regs_file, "[");
opencorchfound = 1;
}
else
fprintf (file, "[");
854,11 → 861,11
if (translate == 1 && verilog == 0)
{
if (processfound)
{
{
opencorchfound = 0;
if (reg_found)
{
fprintf (regs_file, "]");
opencorchfound = 0;
}
else
fprintf (file, "]");
1146,11 → 1153,17
if (!openedcase)
for (i = 0; i < openedkeys; i++)
fprintf (file, " ");
if (openedcase)
fprintf (file, ", %s", (char *) $2);
else
fprintf (file, "%s", (char *) $2);
 
if (openedcase){
if (IsDefine (defineslist, (char *) $2))
fprintf (file, ", `%s", (char *) $2);
else
fprintf (file, ", %s", (char *) $2);
}else{
if (IsDefine (defineslist, (char *) $2))
fprintf (file, "`%s", (char *) $2);
else
fprintf (file, "%s", (char *) $2);
}
newline = 1;
openedcase = 1;
 
1374,3 → 1387,27
else if (verilog == 1)
fprintf (file, "0");
};
comment:
COMMENT
{
if(processfound){
//To manage comments inside switch statements
if(lastswitch){
openedcase=0;
}else if (openedcase){
fprintf (file, " :\n");
for (i = 0; i < openedkeys; i++)
fprintf (file, " ");
fprintf(file,"begin\n");
openedcase=0;
}
//indent
if(newline){
for (i = 0; i < openedkeys; i++)
fprintf (file, " ");
newline=0;
}
fprintf (file, " %s", (char *)$1);
}
}
/trunk/src/sc2v_step1.l
38,59 → 38,59
%}
 
%%
"void" if(!includefound & !linecomment & !multilinecomment) return VOID; else {yylval=(int)strdup(yytext);} return WORD;
"true" if(!includefound & !linecomment & !multilinecomment) return TTRUE; else {yylval=(int)strdup(yytext);} return WORD;
"false" if(!includefound & !linecomment & !multilinecomment) return TFALSE; else {yylval=(int)strdup(yytext);} return WORD;
"void" if(!includefound & !linecomment & !multilinecomment) return VOID; else {yylval=(int)strdup(yytext);} return COMMENT;
"true" if(!includefound & !linecomment & !multilinecomment) return TTRUE; else {yylval=(int)strdup(yytext);} return COMMENT;
"false" if(!includefound & !linecomment & !multilinecomment) return TFALSE; else {yylval=(int)strdup(yytext);} return COMMENT;
[0-9]+ yylval=atoi(yytext); return NUMBER;
"::" if(!includefound & !linecomment & !multilinecomment) return TWODOUBLEPOINTS; else {yylval=(int)strdup(yytext);} return WORD;
"int" if(!includefound & !linecomment & !multilinecomment) return INTEGER; else {yylval=(int)strdup(yytext);} return WORD;
sc_int if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return WORD;
sc_uint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return WORD;
sc_bigint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return WORD;
sc_biguint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return WORD;
bool if(!includefound & !linecomment & !multilinecomment) return BOOL; else {yylval=(int)strdup(yytext);} return WORD;
">" if(!includefound & !linecomment & !multilinecomment) return BIGGER; else {yylval=(int)strdup(yytext);} return WORD;
"<" if(!includefound & !linecomment & !multilinecomment) return LOWER; else {yylval=(int)strdup(yytext);} return WORD;
"{" if(!includefound & !linecomment & !multilinecomment) return OPENKEY; else {yylval=(int)strdup(yytext);} return WORD;
"}" if(!includefound & !linecomment & !multilinecomment) return CLOSEKEY; else {yylval=(int)strdup(yytext);} return WORD;
"(" if(!includefound & !linecomment & !multilinecomment) return OPENPAR; else {yylval=(int)strdup(yytext);} return WORD;
")" if(!includefound & !linecomment & !multilinecomment) return CLOSEPAR; else {yylval=(int)strdup(yytext);} return WORD;
"[" if(!includefound & !linecomment & !multilinecomment) return OPENCORCH; else {yylval=(int)strdup(yytext);} return WORD;
"]" if(!includefound & !linecomment & !multilinecomment) return CLOSECORCH; else {yylval=(int)strdup(yytext);} return WORD;
"return" if(!includefound & !linecomment & !multilinecomment) return ENDFUNC; else {yylval=(int)strdup(yytext);} return WORD;
".write" if(!includefound & !linecomment & !multilinecomment) return WRITE; else {yylval=(int)strdup(yytext);} return WORD;
"switch" if(!includefound & !linecomment & !multilinecomment) return SWITCH; else {yylval=(int)strdup(yytext);} return WORD;
"case" if(!includefound & !linecomment & !multilinecomment) return CASE; else {yylval=(int)strdup(yytext);} return WORD;
"default" if(!includefound & !linecomment & !multilinecomment) return DEFAULT; else {yylval=(int)strdup(yytext);} return WORD;
"break" if(!includefound & !linecomment & !multilinecomment) return BREAK; else {yylval=(int)strdup(yytext);} return WORD;
".read" if(!includefound & !linecomment & !multilinecomment) return READ; else {yylval=(int)strdup(yytext);} return WORD;
".range" if(!includefound & !linecomment & !multilinecomment) return RANGE; else {yylval=(int)strdup(yytext);} return WORD;
[a-zA-Z][_a-zA-Z0-9]* yylval=(int)strdup(yytext); return WORD;
[.:"^"!%()/+*_"&""?""|""\\"] yylval=(int)strdup(yytext); return SYMBOL;
"<=" yylval=(int)strdup(yytext); return MINEQ;
"=" yylval=(int)strdup(yytext); return EQUALS;
"++" yylval=(int)strdup(yytext); return INC;
"--" yylval=(int)strdup(yytext); return DEC;
"-" yylval=(int)strdup(yytext); return SYMBOL;
"~" yylval=(int)strdup(yytext); return SYMBOL;
"@" yylval=(int)strdup(yytext); return SYMBOL;
"," if(!includefound & !linecomment & !multilinecomment) return COLON; else {yylval=(int)strdup(yytext);} return WORD;
";" if(!includefound & !linecomment & !multilinecomment) return SEMICOLON; else {yylval=(int)strdup(yytext);} return WORD;
"::" if(!includefound & !linecomment & !multilinecomment) return TWODOUBLEPOINTS; else {yylval=(int)strdup(yytext);} return COMMENT;
"int" if(!includefound & !linecomment & !multilinecomment) return INTEGER; else {yylval=(int)strdup(yytext);} return COMMENT;
sc_int if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return COMMENT;
sc_uint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return COMMENT;
sc_bigint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return COMMENT;
sc_biguint if(!includefound & !linecomment & !multilinecomment) return SC_REG; else {yylval=(int)strdup(yytext);} return COMMENT;
bool if(!includefound & !linecomment & !multilinecomment) return BOOL; else {yylval=(int)strdup(yytext);} return COMMENT;
">" if(!includefound & !linecomment & !multilinecomment) return BIGGER; else {yylval=(int)strdup(yytext);} return COMMENT;
"<" if(!includefound & !linecomment & !multilinecomment) return LOWER; else {yylval=(int)strdup(yytext);} return COMMENT;
"{" if(!includefound & !linecomment & !multilinecomment) return OPENKEY; else {yylval=(int)strdup(yytext);} return COMMENT;
"}" if(!includefound & !linecomment & !multilinecomment) return CLOSEKEY; else {yylval=(int)strdup(yytext);} return COMMENT;
"(" if(!includefound & !linecomment & !multilinecomment) return OPENPAR; else {yylval=(int)strdup(yytext);} return COMMENT;
")" if(!includefound & !linecomment & !multilinecomment) return CLOSEPAR; else {yylval=(int)strdup(yytext);} return COMMENT;
"[" if(!includefound & !linecomment & !multilinecomment) return OPENCORCH; else {yylval=(int)strdup(yytext);} return COMMENT;
"]" if(!includefound & !linecomment & !multilinecomment) return CLOSECORCH; else {yylval=(int)strdup(yytext);} return COMMENT;
"return" if(!includefound & !linecomment & !multilinecomment) return ENDFUNC; else {yylval=(int)strdup(yytext);} return COMMENT;
".write" if(!includefound & !linecomment & !multilinecomment) return WRITE; else {yylval=(int)strdup(yytext);} return COMMENT;
"switch" if(!includefound & !linecomment & !multilinecomment) return SWITCH; else {yylval=(int)strdup(yytext);} return COMMENT;
"case" if(!includefound & !linecomment & !multilinecomment) return CASE; else {yylval=(int)strdup(yytext);} return COMMENT;
"default" if(!includefound & !linecomment & !multilinecomment) return DEFAULT; else {yylval=(int)strdup(yytext);} return COMMENT;
"break" if(!includefound & !linecomment & !multilinecomment) return BREAK; else {yylval=(int)strdup(yytext);} return COMMENT;
".read" if(!includefound & !linecomment & !multilinecomment) return READ; else {yylval=(int)strdup(yytext);} return COMMENT;
".range" if(!includefound & !linecomment & !multilinecomment) return RANGE; else {yylval=(int)strdup(yytext);} return COMMENT;
[a-zA-Z][_a-zA-Z0-9]* yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return WORD; else return COMMENT;
[.:^!%/+*_"&""?""|""\\"] yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return SYMBOL; else return COMMENT;
"<=" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return MINEQ; else return COMMENT;
"=" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return EQUALS; else return COMMENT;
"++" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return INC; else return COMMENT;
"--" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return DEC; else return COMMENT;
"-" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return SYMBOL; else return COMMENT;
"~" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return SYMBOL; else return COMMENT;
"@" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return SYMBOL; else return COMMENT;
"," yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return COLON; else return COMMENT;
";" yylval=(int)strdup(yytext); if(!includefound & !linecomment & !multilinecomment) return SEMICOLON; else return COMMENT;
[" "]+ /*Ignore white spaces*/
"\t" return TAB; /*Ignore Tab*/
"\n" lineno++; if (linecomment) linecomment=0; else if(includefound) includefound=0; return NEWLINE;
"\\\n" lineno++; /* no new line */
"0x" if(!includefound & !linecomment & !multilinecomment) return HEXA; else {yylval=(int)strdup(yytext);} return WORD;
"$" if(!includefound & !linecomment & !multilinecomment) return DOLLAR; else {yylval=(int)strdup(yytext);} return WORD;/* Ignore if(!includefound & !linecomment & !multilinecomment) $ */
"#define" if(!includefound & !linecomment & !multilinecomment) return DEFINE; else {yylval=(int)strdup(yytext);} return WORD;
"0x" if(!includefound & !linecomment & !multilinecomment) return HEXA; else {yylval=(int)strdup(yytext);} return COMMENT;
"$" if(!includefound & !linecomment & !multilinecomment) return DOLLAR; else {yylval=(int)strdup(yytext);} return COMMENT;/* Ignore if(!includefound & !linecomment & !multilinecomment) $ */
"#define" if(!includefound & !linecomment & !multilinecomment) return DEFINE; else {yylval=(int)strdup(yytext);} return COMMENT;
"#include" includefound = 1;
"#ifdef" if(!includefound & !linecomment & !multilinecomment) return PIFDEF; else {yylval=(int)strdup(yytext);} return WORD;
"#ifndef" if(!includefound & !linecomment & !multilinecomment) return PIFNDEF; else {yylval=(int)strdup(yytext);} return WORD;
"#else" if(!includefound & !linecomment & !multilinecomment) return PELSE; else {yylval=(int)strdup(yytext);} return WORD;
"#endif" if(!includefound & !linecomment & !multilinecomment) return PENDDEF; else {yylval=(int)strdup(yytext);} return WORD;
"//" if (!multilinecomment) linecomment = 1; yylval=(int)strdup(yytext); return WORD;
"/*" if (!linecomment) multilinecomment = 1; yylval=(int)strdup(yytext); return WORD;
"*/" if (multilinecomment) multilinecomment = 0; yylval=(int)strdup(yytext); return WORD;
"#ifdef" if(!includefound & !linecomment & !multilinecomment) return PIFDEF; else {yylval=(int)strdup(yytext);} return COMMENT;
"#ifndef" if(!includefound & !linecomment & !multilinecomment) return PIFNDEF; else {yylval=(int)strdup(yytext);} return COMMENT;
"#else" if(!includefound & !linecomment & !multilinecomment) return PELSE; else {yylval=(int)strdup(yytext);} return COMMENT;
"#endif" if(!includefound & !linecomment & !multilinecomment) return PENDDEF; else {yylval=(int)strdup(yytext);} return COMMENT;
"//" if (!multilinecomment) linecomment = 1; yylval=(int)strdup(yytext); return COMMENT;
"/*" if (!linecomment) multilinecomment = 1; yylval=(int)strdup(yytext); return COMMENT;
"*/" if (multilinecomment) multilinecomment = 0; yylval=(int)strdup(yytext); return COMMENT;
 
"("[ ]*"sc_uint"[ ]*"<"[ ]*[0-9]+[ ]*">"[ ]*")"
"("[ ]*"sc_biguint"[ ]*"<"[ ]*[0-9]+[ ]*">"[ ]*")"
/trunk/src/sc2v_step2.l
95,15 → 95,8
"//" if (!multilinecomment) linecomment = 1;
"/*" if (!linecomment) multilinecomment = 1;
"*/" if (multilinecomment) multilinecomment = 0;
"/" /* ignore */
"-"
"#"
"@"
"|"
"~"
"_"
"?"
 
[.:~@#^!%/+*_"&""?""|""\\"]
 
"("[ ]*"sc_uint"[ ]*"<"[ ]*[0-9]+[ ]*">"[ ]*")"
"("[ ]*"sc_biguint"[ ]*"<"[ ]*[0-9]+[ ]*">"[ ]*")"
/trunk/Makefile
18,7 → 18,7
 
test:
cd src; make all
cd examples; ../bin/sc2v.sh dummy1; ../bin/sc2v.sh dummy2 ;../bin/sc2v.sh delay_line; ../bin/sc2v.sh stmach_k;../bin/sc2v.sh rng; ../bin/sc2v.sh md5; ../bin/sc2v.sh half_adder; ../bin/sc2v.sh full_adder; echo ""; echo "sc2v translated the following files successfully"; echo ""; ls -l *.v
cd examples; ../bin/sc2v.sh subbytes;../bin/sc2v.sh sc_ex1; ../bin/sc2v.sh sp_512x32; ../bin/sc2v.sh dummy1; ../bin/sc2v.sh dummy2 ;../bin/sc2v.sh delay_line; ../bin/sc2v.sh stmach_k;../bin/sc2v.sh rng; ../bin/sc2v.sh md5; ../bin/sc2v.sh half_adder; ../bin/sc2v.sh full_adder; echo ""; echo "sc2v translated the following files successfully"; echo ""; ls -l *.v
 
docs:
cd src; doxygen doxygen.cfg
/trunk/examples/subbytes.cpp
43,6 → 43,13
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.3 2005/03/16 18:12:25 jcastillo
//
// Style modifications
//
// Revision 1.1 2005/01/26 16:51:06 jcastillo
// New examples for 0.2.5 version
//
// Revision 1.2 2004/08/30 14:44:44 jcastillo
// Code Formater used to give better appearance to SystemC code
//
/trunk/examples/subbytes.h
43,6 → 43,13
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.2 2005/03/16 18:12:25 jcastillo
//
// Style modifications
//
// Revision 1.1 2005/01/26 16:51:05 jcastillo
// New examples for 0.2.5 version
//
// Revision 1.2 2004/08/30 14:44:44 jcastillo
// Code Formater used to give better appearance to SystemC code
//
/trunk/examples/sc_ex1.cpp
0,0 → 1,36
#include "sc_ex1.h" // the header for this
 
#define ROT 0 // NB sc2v 4.2 macros buggy
#define POPX 1
 
 
void icu::decoder_io() // runs once per clock - because .h
{
sc_uint<8> tmp;
tmp = POPX;
if( reset.read() == 1 )
{
control_out.write( 0 );
}
else
{
if (alu_ready == 1)
{
switch (instr_in)
{
// this sort of works! case (ROT):
case ROT : // this does not work
control_out.write (0x1); // neither does this
break;
case 1 :
control_out.write (0x2);
break;
default:
}
}
else // needed?
{
}
}
}
trunk/examples/sc_ex1.cpp Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/examples/sc_ex1.h =================================================================== --- trunk/examples/sc_ex1.h (nonexistent) +++ trunk/examples/sc_ex1.h (revision 28) @@ -0,0 +1,27 @@ +#include "systemc.h" + + +SC_MODULE( icu ) { // module name + + sc_in clk; + sc_in reset; + sc_in alu_ready; + sc_in > instr_in; + sc_out alu_start; + sc_out< sc_uint<8> > control_out; + + /* + sc_signal > pipe_0; // internal "globals" + sc_signal > pipe_1; + sc_signal > pipe_2; + sc_signal > pipe_3; + */ + + void decoder_io(); // tasks in cpp (fns?) + + SC_CTOR(icu) { // constructors for module + SC_METHOD( decoder_io ); // list of methods + sensitive_pos( clk ); // event (this pos edge) + // if others here forms OR to make event + } +};
trunk/examples/sc_ex1.h Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.