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

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step2.y] - Diff between revs 2 and 4

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 4
Line 1... Line 1...
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
 *
 *
 *  SystemC to Verilog Translator v0.1
 *  SystemC to Verilog Translator v0.2
 *  Provided by OpenSoc Design
 *  Provided by OpenSoc Design
 *
 *
 *  www.opensocdesign.com
 *  www.opensocdesign.com
 *
 *
 * -----------------------------------------------------------------------------
 * -----------------------------------------------------------------------------
Line 22... Line 22...
 */
 */
 
 
%{
%{
#include 
#include 
#include 
#include 
 
#include 
 
 
#include "list.h"
#include "list.h"
 
 
 
 
/*Global var to read from file_writes.sc2v*/
/*Global var to read from file_writes.sc2v*/
Line 44... Line 45...
InstancesList *instanceslist;
InstancesList *instanceslist;
 
 
/* Global var to store process list*/
/* Global var to store process list*/
ProcessList *processlist;
ProcessList *processlist;
 
 
 
/*List of enumerates*/
 
EnumeratesList *enumerateslist;
 
EnumListList   *enumlistlist;
 
char           *enumname;
 
int            reading_enumerates=0;
 
 
 
/*Multiple Declarations*/
 
int            multipledec;
 
char           *storedtype;
 
 
/* Global var to store process module name*/
/* Global var to store process module name*/
char *module_name;
char *module_name;
int module_name_found = 0;
int module_name_found = 0;
 
 
Line 68... Line 78...
/* Global var to store last sensitivity found*/
/* Global var to store last sensitivity found*/
char *last_sensibility;
char *last_sensibility;
int sensibility_active = 0;
int sensibility_active = 0;
 
 
 
 
 
int translate;
 
 
 
 
void yyerror(const char *str)
void yyerror(const char *str)
{
{
        fprintf(stderr,"error: %s\n",str);
        fprintf(stderr,"error: %s\n",str);
}
}
Line 83... Line 92...
        return 1;
        return 1;
}
}
 
 
main()
main()
{
{
 
    /*Initialize lists*/
 
 
        writeslist = (WritesList *)malloc(sizeof(WritesList));
        writeslist = (WritesList *)malloc(sizeof(WritesList));
        InitializeWritesList(writeslist);
        InitializeWritesList(writeslist);
 
 
        portlist = (PortList *)malloc(sizeof(PortList));
        portlist = (PortList *)malloc(sizeof(PortList));
        InitializePortList(portlist);
        InitializePortList(portlist);
 
 
        signalslist = (SignalsList *)malloc(sizeof(SignalsList));
        signalslist = (SignalsList *)malloc(sizeof(SignalsList));
        InitializeSignalsList(signalslist);
        InitializeSignalsList(signalslist);
 
 
        sensibilitylist = (SensibilityList *)malloc(sizeof(SensibilityList));
        sensibilitylist = (SensibilityList *)malloc(sizeof(SensibilityList));
        InitializeSensibilityList(sensibilitylist);
        InitializeSensibilityList(sensibilitylist);
 
 
        instanceslist = (InstancesList *)malloc(sizeof(InstancesList));
        instanceslist = (InstancesList *)malloc(sizeof(InstancesList));
        InitializeInstancesList(instanceslist);
        InitializeInstancesList(instanceslist);
 
 
        processlist = (ProcessList *)malloc(sizeof(ProcessList));
        processlist = (ProcessList *)malloc(sizeof(ProcessList));
        InitializeProcessList(processlist);
        InitializeProcessList(processlist);
 
 
 
        enumlistlist = (EnumListList *)malloc(sizeof(EnumListList));
 
        InitializeEnumListList(enumlistlist);
 
 
 
        translate=1;
 
 
        yyparse();
        yyparse();
 
 
        printf("module %s(",module_name);
        printf("module %s(",module_name);
        EnumeratePorts(portlist);
        EnumeratePorts(portlist);
        printf(");\n");
        printf(");\n");
 
 
        ShowPortList(portlist);
        ShowPortList(portlist);
        printf("\n");
        printf("\n");
        RegOutputs(portlist);
        RegOutputs(portlist);
        printf("\n");
        printf("\n");
 
 
 
    ShowEnumListList(enumlistlist);
 
 
        ReadWritesFile(writeslist, (char *)"file_writes.sc2v");
        ReadWritesFile(writeslist, (char *)"file_writes.sc2v");
 
 
        ShowSignalsList(signalslist, writeslist);
        ShowSignalsList(signalslist, writeslist);
        printf("\n");
        printf("\n");
 
 
Line 125... Line 148...
        printf("endmodule\n");
        printf("endmodule\n");
}
}
 
 
%}
%}
 
 
%token NUMBER SC_MODULE WORD OPENPAR CLOSEPAR SC_IN SC_OUT SEMICOLON BOOL
%token NUMBER SC_MODULE WORD OPENPAR CLOSEPAR SC_IN SC_OUT SEMICOLON BOOL ENUM
%token MENOR MAYOR SC_INT SC_UINT SC_METHOD SENSITIVE_POS SENSITIVE_NEG SENSITIVE
%token MENOR MAYOR SC_INT SC_UINT SC_METHOD SENSITIVE_POS SENSITIVE_NEG SENSITIVE
%token SENSIBLE CLOSEKEY OPENKEY SEMICOLON COLON SC_SIGNAL ARROW EQUALS NEW QUOTE
%token SENSIBLE CLOSEKEY OPENKEY SEMICOLON COLON SC_SIGNAL ARROW EQUALS NEW QUOTE
%token SC_CTOR VOID ASTERISCO
%token SC_CTOR VOID ASTERISCO TRANSLATEON TRANSLATEOFF
 
 
%%
%%
 
 
commands: /* empty */
commands: /* empty */
        | commands command
        | commands command
Line 164... Line 187...
        |
        |
        sensible_word_colon
        sensible_word_colon
        |
        |
        sensible_word_semicolon
        sensible_word_semicolon
        |
        |
 
        sensible_par_colon
 
        |
 
        sensible_par_pos
 
        |
 
        sensible_par_neg
 
        |
        closekey
        closekey
        |
        |
        word_semicolon
        word_semicolon
        |
        |
        word_colon
        word_colon
        |
        |
 
        word_closekey
 
        |
 
        word_closekey_word
 
        |
        signal_bool
        signal_bool
        |
        |
        signal_uint
        signal_uint
        |
        |
        signal_int
        signal_int
Line 187... Line 220...
        void
        void
        |
        |
        inst_decl
        inst_decl
        |
        |
        closekey_semicolon
        closekey_semicolon
 
        |
 
        enumerates
 
        |
 
        enumerates_type
 
        |
 
        declaration
 
        |
 
        declaration_sc_signal
 
        |
 
        multiple_declaration
 
        |
 
        multiple_sc_signal_declaration
 
        |
 
        translateoff
 
        |
 
        translateon
        ;
        ;
 
 
module:
module:
        SC_MODULE OPENPAR WORD CLOSEPAR OPENKEY
        SC_MODULE OPENPAR WORD CLOSEPAR OPENKEY
        {
        {
 
        if(translate==1){
                if(module_name_found)
                if(module_name_found)
                        {
                        {
                        fprintf(stderr,"error: two or more modules found in the file\n");
                        fprintf(stderr,"error: two or more modules found in the file\n");
                        exit(1);
                        exit(1);
                        }
                        }
Line 204... Line 254...
                        module_name = (char *)malloc(256*sizeof(char));
                        module_name = (char *)malloc(256*sizeof(char));
                        strcpy(module_name, (char *)$3);
                        strcpy(module_name, (char *)$3);
                        module_name_found = 1;
                        module_name_found = 1;
                        }
                        }
        }
        }
 
        }
        ;
        ;
 
 
in_sc_uint:
in_sc_uint:
        SC_IN MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
        SC_IN MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = $5;
                lastportsize = $5;
                lastportkind = (char *)"input";
                lastportkind = (char *)"input";
        }
        }
        ;
        };
 
 
in_sc_int:
in_sc_int:
        SC_IN MENOR SC_INT MENOR NUMBER MAYOR MAYOR
        SC_IN MENOR SC_INT MENOR NUMBER MAYOR MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = $5;
                lastportsize = $5;
                lastportkind = (char *)"input";
                lastportkind = (char *)"input";
        }
        }
        ;
        };
 
 
 
 
in_bool:
in_bool:
        SC_IN MENOR BOOL MAYOR
        SC_IN MENOR BOOL MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = 0;
                lastportsize = 0;
                lastportkind = (char *)"input";
                lastportkind = (char *)"input";
        }
        }
        ;
        };
 
 
signal_bool:
signal_bool:
                SC_SIGNAL MENOR BOOL MAYOR
                SC_SIGNAL MENOR BOOL MAYOR
                {
                {
 
                if(translate==1){
                        signalactive = 1;
                        signalactive = 1;
                        lastsignalsize = 0;
                        lastsignalsize = 0;
                }
                }
                ;
                };
 
 
signal_uint:
signal_uint:
                SC_SIGNAL MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
                SC_SIGNAL MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
                {
                {
 
                if(translate==1){
                        signalactive = 1;
                        signalactive = 1;
                        lastsignalsize = $5;
                        lastsignalsize = $5;
                }
                }
                ;
                };
 
 
signal_int:
signal_int:
                SC_SIGNAL MENOR SC_INT MENOR NUMBER MAYOR MAYOR
                SC_SIGNAL MENOR SC_INT MENOR NUMBER MAYOR MAYOR
                {
                {
 
                if(translate==1){
                        signalactive = 1;
                        signalactive = 1;
                        lastsignalsize = $5;
                        lastsignalsize = $5;
                }
                }
                ;
                };
 
 
out_bool:
out_bool:
        SC_OUT MENOR BOOL MAYOR
        SC_OUT MENOR BOOL MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = 0;
                lastportsize = 0;
                lastportkind = (char *)"output";
                lastportkind = (char *)"output";
        }
        }
        ;
        };
 
 
out_sc_uint:
out_sc_uint:
        SC_OUT MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
        SC_OUT MENOR SC_UINT MENOR NUMBER MAYOR MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = $5;
                lastportsize = $5;
                lastportkind = (char *)"output";
                lastportkind = (char *)"output";
        }
        }
        ;
        };
 
 
out_sc_int:
out_sc_int:
        SC_OUT MENOR SC_INT MENOR NUMBER MAYOR MAYOR
        SC_OUT MENOR SC_INT MENOR NUMBER MAYOR MAYOR
        {
        {
 
        if(translate==1){
                activeport = 1;
                activeport = 1;
                lastportsize = $5;
                lastportsize = $5;
                lastportkind = (char *)"output";
                lastportkind = (char *)"output";
        }
        }
        ;
        };
 
 
sc_method:
sc_method:
        SC_METHOD OPENPAR WORD CLOSEPAR SEMICOLON
        SC_METHOD OPENPAR WORD CLOSEPAR SEMICOLON
        {
        {
 
        if(translate==1){
                if(method_found)
                if(method_found)
                        {
                        {
                        InsertProcess(processlist, active_method, sensibilitylist, active_method_type);
                        InsertProcess(processlist, active_method, sensibilitylist, active_method_type);
                        }
                        }
                active_method = (char *)$3;
                active_method = (char *)$3;
                method_found = 1;
                method_found = 1;
                /* New sensitivity list */
                /* New sensitivity list */
                sensibilitylist = (SensibilityList *)malloc(sizeof(SensibilityList));
                sensibilitylist = (SensibilityList *)malloc(sizeof(SensibilityList));
                InitializeSensibilityList(sensibilitylist);
                InitializeSensibilityList(sensibilitylist);
        }
        }
        ;
        };
 
 
 
sensible_par_neg:
 
        SENSITIVE_NEG OPENPAR WORD CLOSEPAR SEMICOLON
 
        {
 
        if(translate==1){
 
            active_method_type = (char *)"seq"; //comb
 
                InsertSensibility(sensibilitylist, (char *)$3, "negedge");
 
        }
 
        };
 
 
 
sensible_par_pos:
 
        SENSITIVE_POS OPENPAR WORD CLOSEPAR SEMICOLON
 
        {
 
        if(translate==1){
 
            active_method_type = (char *)"seq"; //comb
 
                InsertSensibility(sensibilitylist, (char *)$3, "posedge");
 
        }
 
        };
 
 
sensitive_pos:
sensitive_pos:
        SENSITIVE_POS
        SENSITIVE_POS
        {
        {
 
        if(translate==1){
                last_sensibility = (char *)"posedge";
                last_sensibility = (char *)"posedge";
                active_method_type = (char *)"seq"; //seq
                active_method_type = (char *)"seq"; //seq
                sensibility_active = 1;
                sensibility_active = 1;
        }
        }
        ;
        };
 
 
sensitive_neg:
sensitive_neg:
        SENSITIVE_NEG
        SENSITIVE_NEG
        {
        {
 
        if(translate==1){
                last_sensibility = (char *)"negedge";
                last_sensibility = (char *)"negedge";
                active_method_type = (char *)"seq"; //seq
                active_method_type = (char *)"seq"; //seq
                sensibility_active = 1;
                sensibility_active = 1;
        }
        }
        ;
        };
 
 
sensitive:
sensitive:
        SENSITIVE
        SENSITIVE
        {
        {
 
        if(translate==1){
                last_sensibility = (char *)" ";
                last_sensibility = (char *)" ";
                active_method_type = (char *)"comb"; //comb
                active_method_type = (char *)"comb"; //comb
                sensibility_active = 1;
                sensibility_active = 1;
        }
        }
        ;
        };
 
 
 
sensible_par_colon:
 
        SENSITIVE OPENPAR WORD CLOSEPAR SEMICOLON
 
        {
 
        if(translate==1){
 
            active_method_type = (char *)"comb"; //comb
 
                InsertSensibility(sensibilitylist, (char *)$3, " ");
 
        }
 
        };
 
 
 
 
sensible_word_colon:
sensible_word_colon:
        SENSIBLE WORD
        SENSIBLE WORD
        {
        {
 
        if(translate==1){
                InsertSensibility(sensibilitylist, (char *)$2, (char *)last_sensibility);
                InsertSensibility(sensibilitylist, (char *)$2, (char *)last_sensibility);
        }
        }
        ;
        };
 
 
sensible_word_semicolon:
sensible_word_semicolon:
        SENSIBLE WORD SEMICOLON
        SENSIBLE WORD SEMICOLON
        {
        {
 
        if(translate==1){
                InsertSensibility(sensibilitylist, (char *)$2, (char *)last_sensibility);
                InsertSensibility(sensibilitylist, (char *)$2, (char *)last_sensibility);
                if(sensibility_active)
                if(sensibility_active)
                        {
                        {
                        sensibility_active = 0;
                        sensibility_active = 0;
                        }
                        }
        }
        }
        ;
        };
 
 
closekey:
closekey:
        CLOSEKEY
        CLOSEKEY
        {
        {
 
        if(translate==1){
                if(method_found)
                if(method_found)
                        {
                        {
                        method_found = 0;
                        method_found = 0;
                        InsertProcess(processlist, active_method, sensibilitylist, active_method_type);
                        InsertProcess(processlist, active_method, sensibilitylist, active_method_type);
                        }
                        }
        }
        }
        ;
        };
 
 
word_semicolon:
word_semicolon:
        WORD SEMICOLON
        WORD SEMICOLON
        {
        {
 
        if(translate==1){
                        if(activeport)
                        if(activeport)
                        {
                        {
                                InsertPort(portlist, (char *)$1, lastportkind, lastportsize);
                                InsertPort(portlist, (char *)$1, lastportkind, lastportsize);
                                activeport = 0;
                                activeport = 0;
                        }
                        }
                        else if(signalactive)
                        else if(signalactive)
                        {
                        {
                                InsertSignal(signalslist, (char *)$1, lastsignalsize);
                                InsertSignal(signalslist, (char *)$1, lastsignalsize);
                                signalactive = 0;
                                signalactive = 0;
 
                        }else if(multipledec){
 
                          int length,list_pos;
 
                      length=0;
 
                      list_pos=0;
 
                      //Look in the enumerated list if it was declared e.j state_t state;
 
                      list_pos=findEnumList(enumlistlist, storedtype);
 
                      if(list_pos>-1){
 
                        //Calculate the number of bits needed to represent the enumerate
 
                length=findEnumerateLength(enumlistlist,list_pos);
 
 
 
                        InsertSignal(signalslist, (char *)$1,length);
 
                            InsertWrite(writeslist,(char *)$1);
 
                                free(storedtype);
 
                            multipledec=0;
 
              }else{
 
                fprintf(stderr,"\nType %s unknow\n",(char *)$1);
 
                return(1);
                        }
                        }
        }
        }
        ;
        }
 
        };
 
 
word_colon:
word_colon:
                WORD COLON
                WORD COLON
                {
                {
 
                if(translate==1){
                        if(activeport)
                        if(activeport)
                        {
                        {
                                InsertPort(portlist, (char *)$1, lastportkind, lastportsize);
                                InsertPort(portlist, (char *)$1, lastportkind, lastportsize);
                        }
                        }
                        else if(signalactive)
                        else if(signalactive)
                        {
                        {
                                InsertSignal(signalslist, (char *)$1, lastsignalsize);
                                InsertSignal(signalslist, (char *)$1, lastsignalsize);
                        }
                        }
 
                        else if(reading_enumerates)
 
                        {
 
                            InsertEnumerates(enumerateslist, (char *)$1);
 
 
 
                        }else if(multipledec){
 
                          int length,list_pos;
 
                      length=0;
 
                      list_pos=0;
 
                      //Look in the enumerated list if it was declared e.j state_t state;
 
                      list_pos=findEnumList(enumlistlist, storedtype);
 
                      if(list_pos>-1){
 
                        //Calculate the number of bits needed to represent the enumerate
 
                length=findEnumerateLength(enumlistlist,list_pos);
 
 
 
                        InsertSignal(signalslist, (char *)$1,length);
 
                            InsertWrite(writeslist,(char *)$1);
 
                            multipledec=1;
 
              }else{
 
                fprintf(stderr,"\nType %s unknow\n",(char *)$1);
 
                return(1);
                }
                }
                ;
                   }
 
                }
 
                };
 
 
 
word_closekey_word:
 
        WORD CLOSEKEY WORD SEMICOLON
 
                {
 
                if(translate==1){
 
                  //Finish enumerate var declaration
 
                  if(reading_enumerates)
 
                  {
 
                    InsertEnumerates(enumerateslist, (char *)$1);
 
                        InsertEnumList(enumlistlist,enumerateslist,(char *)$4,0); //Insert also the variable name
 
                    reading_enumerates=0;
 
                  }
 
                }
 
                };
 
 
 
word_closekey:
 
        WORD CLOSEKEY SEMICOLON
 
                {
 
                if(translate==1){
 
                  //Finish enumerate type declaration
 
                  if(reading_enumerates)
 
                  {
 
                    InsertEnumerates(enumerateslist, (char *)$1);
 
                        InsertEnumList(enumlistlist,enumerateslist,enumname,1); //Insert also the variable name
 
                        free(enumname);
 
                    reading_enumerates=0;
 
                  }
 
                }
 
                };
 
 
 
 
instantation:
instantation:
                WORD EQUALS NEW WORD OPENPAR QUOTE WORD QUOTE CLOSEPAR SEMICOLON
                WORD EQUALS NEW WORD OPENPAR QUOTE WORD QUOTE CLOSEPAR SEMICOLON
                {
                {
 
                if(translate==1){
                        InsertInstance(instanceslist, (char *)$1, (char *)$4);
                        InsertInstance(instanceslist, (char *)$1, (char *)$4);
                }
                }
                ;
                };
 
 
port_binding:
port_binding:
                WORD ARROW WORD OPENPAR WORD CLOSEPAR SEMICOLON
                WORD ARROW WORD OPENPAR WORD CLOSEPAR SEMICOLON
                {
                {
 
        if(translate==1){
                        if(instanceslist->last == NULL)
                        if(instanceslist->last == NULL)
                        {
                        {
                                fprintf(stderr,"error: no instances found\n");
                                fprintf(stderr,"error: no instances found\n");
                        }
                        }
                        else
                        else
Line 422... Line 595...
                                        }
                                        }
                                }
                                }
                                InsertBind(aux->bindslist, (char *)$3, (char *)$5);
                                InsertBind(aux->bindslist, (char *)$3, (char *)$5);
                        }
                        }
                }
                }
                ;
                };
 
 
sc_ctor:
sc_ctor:
                SC_CTOR OPENPAR WORD CLOSEPAR OPENKEY
                SC_CTOR OPENPAR WORD CLOSEPAR OPENKEY
                {
                {
 
 
                }
                };
                ;
 
 
 
void:
void:
                VOID WORD OPENPAR CLOSEPAR SEMICOLON
                VOID WORD OPENPAR CLOSEPAR SEMICOLON
                {
                {
 
 
                }
                };
                ;
 
 
 
inst_decl:
inst_decl:
                WORD ASTERISCO WORD SEMICOLON
                WORD ASTERISCO WORD SEMICOLON
                {
                {
 
 
                }
                };
                ;
 
 
 
closekey_semicolon:     CLOSEKEY SEMICOLON
closekey_semicolon:     CLOSEKEY SEMICOLON
                {
                {
 
 
                }
                };
                ;
 
 
enumerates:
 
         ENUM OPENKEY
 
                 {
 
                 if(translate==1){
 
                   //New enumerate list
 
                   enumerateslist = (EnumeratesList *)malloc(sizeof(EnumeratesList));
 
                   InitializeEnumeratesList(enumerateslist);
 
           reading_enumerates=1;
 
                 }
 
                 };
 
 
 
enumerates_type:
 
         ENUM WORD OPENKEY
 
                 {
 
                 if(translate==1){
 
                   //In this case we define type e.g. enum state_t {S0,S1,S2};
 
                   enumerateslist = (EnumeratesList *)malloc(sizeof(EnumeratesList));
 
                   InitializeEnumeratesList(enumerateslist);
 
                   enumname=malloc(sizeof(char)*strlen((char *)$2));
 
                   strcpy(enumname,(char *)$2);
 
           reading_enumerates=1;
 
                 }
 
                 };
 
 
 
declaration:
 
         WORD WORD SEMICOLON
 
                 {
 
                 if(translate==1){
 
           int length,list_pos;
 
                   length=0;
 
                   list_pos=0;
 
                   //Look in the enumerated list if it was declared e.j state_t state;
 
                   list_pos=findEnumList(enumlistlist, (char *)$1);
 
                   if(list_pos>-1){
 
                      //Calculate the number of bits needed to represent the enumerate
 
              length=findEnumerateLength(enumlistlist,list_pos);
 
 
 
                      InsertSignal(signalslist, (char *)$2,length);
 
                          InsertWrite(writeslist,(char *)$2);
 
           }else{
 
              fprintf(stderr,"\nType %s unknow\n",(char *)$1);
 
              return(1);
 
           }
 
                 }
 
                 };
 
 
 
declaration_sc_signal:
 
         SC_SIGNAL MENOR WORD MAYOR WORD SEMICOLON
 
                 {
 
                 if(translate==1){
 
           int length,list_pos;
 
                   length=0;
 
                   list_pos=0;
 
                   //Look in the enumerated list if it was declared e.j state_t state;
 
                   list_pos=findEnumList(enumlistlist, (char *)$3);
 
                   if(list_pos>-1){
 
                      //Calculate the number of bits needed to represent the enumerate
 
              length=findEnumerateLength(enumlistlist,list_pos);
 
 
 
                      InsertSignal(signalslist, (char *)$5,length);
 
                          InsertWrite(writeslist,(char *)$5);
 
           }else{
 
              fprintf(stderr,"\nType %s unknow\n",(char *)$3);
 
              return(1);
 
           }
 
                 }
 
                 };
 
 
 
multiple_declaration:
 
         WORD WORD COLON
 
                 {
 
                 if(translate==1){
 
           int length,list_pos;
 
                   length=0;
 
                   list_pos=0;
 
                   //Look in the enumerated list if it was declared e.j state_t state;
 
                   list_pos=findEnumList(enumlistlist, (char *)$1);
 
                   if(list_pos>-1){
 
                      //Calculate the number of bits needed to represent the enumerate
 
              length=findEnumerateLength(enumlistlist,list_pos);
 
                          storedtype=malloc(sizeof(char)*strlen((char *)$1));
 
                          strcpy(storedtype,(char *)$1);
 
                      InsertSignal(signalslist, (char *)$2,length);
 
                          InsertWrite(writeslist,(char *)$2);
 
                          multipledec=1;
 
           }else{
 
              fprintf(stderr,"\nType %s unknow\n",(char *)$1);
 
              return(1);
 
           }
 
                 }
 
                 };
 
 
 
multiple_sc_signal_declaration:
 
         SC_SIGNAL MENOR WORD MAYOR WORD COLON
 
                 {
 
                 if(translate==1){
 
           int length,list_pos;
 
                   length=0;
 
                   list_pos=0;
 
                   //Look in the enumerated list if it was declared e.j state_t state;
 
                   list_pos=findEnumList(enumlistlist, (char *)$3);
 
                   if(list_pos>-1){
 
                      //Calculate the number of bits needed to represent the enumerate
 
              length=findEnumerateLength(enumlistlist,list_pos);
 
                          storedtype=malloc(sizeof(char)*strlen((char *)$3));
 
                          strcpy(storedtype,(char *)$3);
 
                      InsertSignal(signalslist, (char *)$5,length);
 
                          InsertWrite(writeslist,(char *)$5);
 
                          multipledec=1;
 
           }else{
 
              fprintf(stderr,"\nType %s unknow\n",(char *)$3);
 
              return(1);
 
           }
 
                 }
 
                 };
 
 
 
translateoff:
 
        TRANSLATEOFF
 
                {
 
                  translate=0;
 
                  fprintf(stderr,"Found Translate off directive \n");
 
        };
 
 
 
translateon:
 
        TRANSLATEON
 
                {
 
                  translate=1;
 
                  fprintf(stderr,"Found Translate on directive \n");
 
        };

powered by: WebSVN 2.1.0

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