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

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step2.y] - Diff between revs 22 and 24

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 22 Rev 24
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
 *
 *
 *  SystemC to Verilog Translator v0.4
 *  SystemC to Verilog Translator v0.4
 *  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 
#include 
#include "sc2v_step2.h"
#include "sc2v_step2.h"
  char *enumname;
  char *enumname;
  int reading_enumerates = 0;
  int reading_enumerates = 0;
  int lineno = 1;
  int lineno = 1;
/*Multiple Declarations*/
/*Multiple Declarations*/
  int multipledec;
  int multipledec;
  char *storedtype;
  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;
/* Global var to store last port type*/
/* Global var to store last port type*/
  char *lastportkind;
  char *lastportkind;
  int lastportsize;
  int lastportsize;
  int activeport = 0;           // 1 -> reading port list
  int activeport = 0;           // 1 -> reading port list
/* Global var to store last signal type*/
/* Global var to store last signal type*/
  int lastsignalsize;
  int lastsignalsize;
  int signalactive = 0;
  int signalactive = 0;
/* Global var to store last SC_METHOD found*/
/* Global var to store last SC_METHOD found*/
  char *active_method;
  char *active_method;
  char *active_method_type;
  char *active_method_type;
  int method_found;
  int method_found;
/* 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;
/* Global var to store last function found*/
/* Global var to store last function found*/
  char *functionname;
  char *functionname;
  int outputlenght = 0;
  int outputlenght = 0;
  int translate;
  int translate;
  void yyerror (const char *str)
  void yyerror (const char *str)
  {
  {
    fprintf (stderr, "line: %d error: %s\n", lineno, str);
    fprintf (stderr, "line: %d error: %s\n", lineno, str);
  }
  }
  int yywrap ()
  int yywrap ()
  {
  {
    return 1;
    return 1;
  }
  }
  main ()
  main ()
  {
  {
    /*Initialize lists */
    /*Initialize lists */
    writeslist = NULL;
    writeslist = NULL;
    portlist = NULL;;
    portlist = NULL;;
    signalslist = NULL;
    signalslist = NULL;
    sensibilitylist = NULL;
    sensibilitylist = NULL;
    processlist = NULL;
    processlist = NULL;
    instanceslist = NULL;
    instanceslist = NULL;
    enumlistlist = NULL;
    enumlistlist = NULL;
    funcinputslist = NULL;
    funcinputslist = NULL;
    functionslist = NULL;
    functionslist = NULL;
    translate = 1;
    translate = 1;
    fprintf (stderr, "\nSystemC to Verilog Translator v0.4\n\n");
    fprintf (stderr, "\nSystemC to Verilog Translator v0.4\n\n");
    fprintf (stderr, "Parsing header file.......\n\n");
    fprintf (stderr, "Parsing header file.......\n\n");
    FILE *yyin = stdin;
    FILE *yyin = stdin;
    FILE *yyout = stdout;
    FILE *yyout = stdout;
    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,instanceslist);
    RegOutputs (portlist,instanceslist);
    printf ("\n");
    printf ("\n");
    ShowEnumListList (enumlistlist);
    ShowEnumListList (enumlistlist);
    writeslist = ReadWritesFile (writeslist, (char *) "file_writes.sc2v");
    writeslist = ReadWritesFile (writeslist, (char *) "file_writes.sc2v");
    ShowSignalsList (signalslist, writeslist);
    ShowSignalsList (signalslist, writeslist);
    printf ("\n");
    printf ("\n");
    ShowInstancedModules (instanceslist);
    ShowInstancedModules (instanceslist);
    printf ("\n");
    printf ("\n");
    ShowDefines ((char *) "file_defines.sc2v");
    ShowDefines ((char *) "file_defines.sc2v");
    ShowFunctionCode (functionslist);
    ShowFunctionCode (functionslist);
    ShowProcessCode (processlist);
    ShowProcessCode (processlist);
    printf ("\n");
    printf ("\n");
    printf ("endmodule\n");
    printf ("endmodule\n");
    fprintf (stderr, "\nDone\n");
    fprintf (stderr, "\nDone\n");
  }
  }
%}
%}
%token NUMBER SC_MODULE WORD OPENPAR CLOSEPAR SC_IN SC_OUT SEMICOLON BOOL ENUM
%token NUMBER SC_MODULE WORD OPENPAR CLOSEPAR SC_IN SC_OUT SEMICOLON BOOL ENUM
%token MENOR MAYOR SC_REG SC_METHOD SENSITIVE_POS SENSITIVE_NEG SENSITIVE
%token MENOR MAYOR SC_REG 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 TRANSLATEON TRANSLATEOFF OPENCORCH CLOSECORCH
%token SC_CTOR VOID ASTERISCO TRANSLATEON TRANSLATEOFF OPENCORCH CLOSECORCH
%% commands:    /* empty */
%% commands:    /* empty */
|commands command;
|commands command;
command:
command:
module
module
  |
  |
  in_bool
  in_bool
  |
  |
  in_sc_reg
  in_sc_reg
  |
  |
  out_bool
  out_bool
  |
  |
  out_sc_reg
  out_sc_reg
  |
  |
  sc_method
  sc_method
  |
  |
  sensitive_pos
  sensitive_pos
  |
  |
  sensitive_neg
  sensitive_neg
  |
  |
  sensitive
  sensitive
  |
  |
  sensible_word_colon
  sensible_word_colon
  |
  |
  sensible_word_semicolon
  sensible_word_semicolon
  |
  |
  sensible_par_colon
  sensible_par_colon
  |
  |
  sensible_par_pos
  sensible_par_pos
  |
  |
  sensible_par_neg
  sensible_par_neg
  |
  |
  closekey
  closekey
  |
  |
  word_semicolon
  word_semicolon
  |
  |
  word_colon
  word_colon
  |
  |
  word_closekey
  word_closekey
  |
  |
  word_closekey_word
  word_closekey_word
  |
  |
  signal_bool
  signal_bool
  |
  |
  signal_reg
  signal_reg
  |
  |
  instantation
  instantation
  |
  |
  port_binding
  port_binding
  |
  |
  sc_ctor
  sc_ctor
  |
  |
  void
  void
  |inst_decl
  |
 
  inst_decl
  |
  |
  closekey_semicolon
  closekey_semicolon
  |
  |
  enumerates
  enumerates
  |
  |
  enumerates_type
  enumerates_type
  |
  |
  declaration
  declaration
  |
  |
  declaration_sc_signal
  declaration_sc_signal
  |
  |
  multiple_declaration
  multiple_declaration
  |
  |
  multiple_sc_signal_declaration
  multiple_sc_signal_declaration
  |
  |
  translateoff
  translateoff
  |
  |
  translateon
  translateon
  |
  |
  function
  function
  |
  |
  functioninputs
  functioninputs
  |
  |
  finishfunctioninputs
  finishfunctioninputs
  |
  |
  boolfunction
  boolfunction
  |
  |
  boolfunctioninputs
  boolfunctioninputs
  |
  |
  arraycolon
  arraycolon
  |
  |
  arraysemicolon
  arraysemicolon
  |
  |
  boolfinishfunctioninputs;
  boolfinishfunctioninputs;
module:
module:
SC_MODULE OPENPAR WORD CLOSEPAR OPENKEY
SC_MODULE OPENPAR WORD CLOSEPAR OPENKEY
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      if (module_name_found)
      if (module_name_found)
        {
        {
          fprintf (stderr,
          fprintf (stderr,
                   "line: %d error: two or more modules found in the file\n",
                   "line: %d error: two or more modules found in the file\n",
                   lineno);
                   lineno);
          exit (1);
          exit (1);
        }
        }
      else
      else
        {
        {
          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_reg:
in_sc_reg:
SC_IN MENOR SC_REG MENOR NUMBER MAYOR MAYOR
SC_IN MENOR SC_REG MENOR NUMBER MAYOR MAYOR
{
{
  if (translate == 1)
  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)
  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)
  if (translate == 1)
    {
    {
      signalactive = 1;
      signalactive = 1;
      lastsignalsize = 0;
      lastsignalsize = 0;
    }
    }
};
};
signal_reg:
signal_reg:
SC_SIGNAL MENOR SC_REG MENOR NUMBER MAYOR MAYOR
SC_SIGNAL MENOR SC_REG MENOR NUMBER MAYOR MAYOR
{
{
  if (translate == 1)
  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)
  if (translate == 1)
    {
    {
      activeport = 1;
      activeport = 1;
      lastportsize = 0;
      lastportsize = 0;
      lastportkind = (char *) "output";
      lastportkind = (char *) "output";
    }
    }
};
};
out_sc_reg:
out_sc_reg:
SC_OUT MENOR SC_REG MENOR NUMBER MAYOR MAYOR
SC_OUT MENOR SC_REG MENOR NUMBER MAYOR MAYOR
{
{
  if (translate == 1)
  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 (translate == 1)
    {
    {
      if (method_found)
      if (method_found)
        {
        {
          processlist =
          processlist =
            InsertProcess (processlist, active_method, sensibilitylist,
            InsertProcess (processlist, active_method, sensibilitylist,
                           active_method_type);
                           active_method_type);
        }
        }
      active_method = (char *) $3;
      active_method = (char *) $3;
      method_found = 1;
      method_found = 1;
      /* New sensitivity list */
      /* New sensitivity list */
      sensibilitylist = NULL;
      sensibilitylist = NULL;
    }
    }
};
};
sensible_par_neg:
sensible_par_neg:
SENSITIVE_NEG OPENPAR WORD CLOSEPAR SEMICOLON
SENSITIVE_NEG OPENPAR WORD CLOSEPAR SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      active_method_type = (char *) "seq";      //comb
      active_method_type = (char *) "seq";      //comb
      sensibilitylist =
      sensibilitylist =
        InsertSensibility (sensibilitylist, (char *) $3, "negedge");
        InsertSensibility (sensibilitylist, (char *) $3, "negedge");
    }
    }
};
};
sensible_par_pos:
sensible_par_pos:
SENSITIVE_POS OPENPAR WORD CLOSEPAR SEMICOLON
SENSITIVE_POS OPENPAR WORD CLOSEPAR SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      active_method_type = (char *) "seq";      //comb
      active_method_type = (char *) "seq";      //comb
      sensibilitylist =
      sensibilitylist =
        InsertSensibility (sensibilitylist, (char *) $3, "posedge");
        InsertSensibility (sensibilitylist, (char *) $3, "posedge");
    }
    }
};
};
sensitive_pos:
sensitive_pos:
SENSITIVE_POS
SENSITIVE_POS
{
{
  if (translate == 1)
  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)
  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)
  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:
sensible_par_colon:
SENSITIVE OPENPAR WORD CLOSEPAR SEMICOLON
SENSITIVE OPENPAR WORD CLOSEPAR SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      active_method_type = (char *) "comb";     //comb
      active_method_type = (char *) "comb";     //comb
      sensibilitylist = InsertSensibility (sensibilitylist, (char *) $3, " ");
      sensibilitylist = InsertSensibility (sensibilitylist, (char *) $3, " ");
    }
    }
};
};
sensible_word_colon:
sensible_word_colon:
SENSIBLE WORD
SENSIBLE WORD
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      sensibilitylist =
      sensibilitylist =
        InsertSensibility (sensibilitylist, (char *) $2,
        InsertSensibility (sensibilitylist, (char *) $2,
                           (char *) last_sensibility);
                           (char *) last_sensibility);
    }
    }
};
};
sensible_word_semicolon:
sensible_word_semicolon:
SENSIBLE WORD SEMICOLON
SENSIBLE WORD SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      sensibilitylist =
      sensibilitylist =
        InsertSensibility (sensibilitylist, (char *) $2,
        InsertSensibility (sensibilitylist, (char *) $2,
                           (char *) last_sensibility);
                           (char *) last_sensibility);
      if (sensibility_active)
      if (sensibility_active)
        {
        {
          sensibility_active = 0;
          sensibility_active = 0;
        }
        }
    }
    }
};
};
closekey:
closekey:
CLOSEKEY
CLOSEKEY
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      if (method_found)
      if (method_found)
        {
        {
          method_found = 0;
          method_found = 0;
          processlist =
          processlist =
            InsertProcess (processlist, active_method, sensibilitylist,
            InsertProcess (processlist, active_method, sensibilitylist,
                           active_method_type);
                           active_method_type);
        }
        }
    }
    }
};
};
arraysemicolon:
arraysemicolon:
WORD OPENCORCH NUMBER CLOSECORCH SEMICOLON
WORD OPENCORCH NUMBER CLOSECORCH SEMICOLON
{
{
if (signalactive)
if (signalactive)
        {
        {
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,$3);
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,$3);
          signalactive = 0;
          signalactive = 0;
        }
        }
}
}
arraycolon:
arraycolon:
WORD OPENCORCH NUMBER CLOSECORCH COLON
WORD OPENCORCH NUMBER CLOSECORCH COLON
{
{
if (signalactive)
if (signalactive)
        {
        {
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,$3);
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,$3);
          signalactive = 0;
          signalactive = 0;
        }
        }
}
}
word_semicolon:
word_semicolon:
WORD SEMICOLON
WORD SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      if (activeport)
      if (activeport)
        {
        {
          portlist =
          portlist =
            InsertPort (portlist, (char *) $1, lastportkind, lastportsize);
            InsertPort (portlist, (char *) $1, lastportkind, lastportsize);
          activeport = 0;
          activeport = 0;
        }
        }
      else if (signalactive)
      else if (signalactive)
        {
        {
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,0);
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize,0);
          signalactive = 0;
          signalactive = 0;
        }
        }
      else if (multipledec)
      else if (multipledec)
        {
        {
          int length, list_pos;
          int length, list_pos;
          length = 0;
          length = 0;
          list_pos = 0;
          list_pos = 0;
          //Look in the enumerated list if it was declared e.j state_t state;
          //Look in the enumerated list if it was declared e.j state_t state;
          list_pos = findEnumList (enumlistlist, storedtype);
          list_pos = findEnumList (enumlistlist, storedtype);
          if (list_pos > -1)
          if (list_pos > -1)
            {
            {
              //Calculate the number of bits needed to represent the enumerate
              //Calculate the number of bits needed to represent the enumerate
              length = findEnumerateLength (enumlistlist, list_pos);
              length = findEnumerateLength (enumlistlist, list_pos);
              signalslist = InsertSignal (signalslist, (char *) $1, length, 0);
              signalslist = InsertSignal (signalslist, (char *) $1, length, 0);
              writeslist = InsertWrite (writeslist, (char *) $1);
              writeslist = InsertWrite (writeslist, (char *) $1);
              free (storedtype);
              free (storedtype);
              multipledec = 0;
              multipledec = 0;
            }
            }
          else
          else
            {
            {
              fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
              fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                       (char *) $1);
                       (char *) $1);
              return (1);
              return (1);
            }
            }
        }
        }
    }
    }
};
};
word_colon:
word_colon:
WORD COLON
WORD COLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      if (activeport)
      if (activeport)
        {
        {
          portlist = InsertPort (portlist, (char *) $1, lastportkind, lastportsize);
          portlist = InsertPort (portlist, (char *) $1, lastportkind, lastportsize);
        }
        }
      else if (signalactive)
      else if (signalactive)
        {
        {
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize, 0);
          signalslist = InsertSignal (signalslist, (char *) $1, lastsignalsize, 0);
        }
        }
      else if (reading_enumerates)
      else if (reading_enumerates)
        {
        {
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
        }
        }
      else if (multipledec)
      else if (multipledec)
        {
        {
          int length, list_pos;
          int length, list_pos;
          length = 0;
          length = 0;
          list_pos = 0;
          list_pos = 0;
          //Look in the enumerated list if it was declared e.j state_t state;
          //Look in the enumerated list if it was declared e.j state_t state;
          list_pos = findEnumList (enumlistlist, storedtype);
          list_pos = findEnumList (enumlistlist, storedtype);
          if (list_pos > -1)
          if (list_pos > -1)
            {
            {
              //Calculate the number of bits needed to represent the enumerate
              //Calculate the number of bits needed to represent the enumerate
              length = findEnumerateLength (enumlistlist, list_pos);
              length = findEnumerateLength (enumlistlist, list_pos);
              signalslist = InsertSignal (signalslist, (char *) $1, length, 0);
              signalslist = InsertSignal (signalslist, (char *) $1, length, 0);
              writeslist = InsertWrite (writeslist, (char *) $1);
              writeslist = InsertWrite (writeslist, (char *) $1);
              multipledec = 1;
              multipledec = 1;
            }
            }
          else
          else
            {
            {
              fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
              fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                       (char *) $1);
                       (char *) $1);
              return (1);
              return (1);
            }
            }
        }
        }
    }
    }
};
};
word_closekey_word:
word_closekey_word:
WORD CLOSEKEY WORD SEMICOLON
WORD CLOSEKEY WORD SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      //Finish enumerate var declaration
      //Finish enumerate var declaration
      if (reading_enumerates)
      if (reading_enumerates)
        {
        {
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
          enumlistlist = InsertEnumList (enumlistlist, enumerateslist, (char *) $4, 0); //Insert also the variable name
          enumlistlist = InsertEnumList (enumlistlist, enumerateslist, (char *) $4, 0); //Insert also the variable name
          reading_enumerates = 0;
          reading_enumerates = 0;
        }
        }
    }
    }
};
};
word_closekey:
word_closekey:
WORD CLOSEKEY SEMICOLON
WORD CLOSEKEY SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      //Finish enumerate type declaration
      //Finish enumerate type declaration
      if (reading_enumerates)
      if (reading_enumerates)
        {
        {
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
          enumerateslist = InsertEnumerates (enumerateslist, (char *) $1);
          enumlistlist = InsertEnumList (enumlistlist, enumerateslist, enumname, 1);    //Insert also the variable name
          enumlistlist = InsertEnumList (enumlistlist, enumerateslist, enumname, 1);    //Insert also the variable name
          reading_enumerates = 0;
          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)
  if (translate == 1)
    {
    {
      instanceslist =
      instanceslist =
        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 (translate == 1)
    {
    {
      if (instanceslist == NULL)
      if (instanceslist == NULL)
        {
        {
          fprintf (stderr, "line: %d error: no instances found\n", lineno);
          fprintf (stderr, "line: %d error: no instances found\n", lineno);
        }
        }
      else
      else
        {
        {
          InstanceNode *ill;
          InstanceNode *ill;
          SGLIB_LIST_MAP_ON_ELEMENTS (InstanceNode, instanceslist, ill, next,
          SGLIB_LIST_MAP_ON_ELEMENTS (InstanceNode, instanceslist, ill, next,
                                      {
                                      {
                                      if (strcmp
                                      if (strcmp
                                          (ill->nameinstance,
                                          (ill->nameinstance,
                                           (char *) $1) == 0)
                                           (char *) $1) == 0)
                                      {
                                      {
                                      ill->bindslist =
                                      ill->bindslist =
                                      InsertBind (ill->bindslist, (char *) $3,
                                      InsertBind (ill->bindslist, (char *) $3,
                                                  (char *) $5); break;}
                                                  (char *) $5); break;}
                                      }
                                      }
          );
          );
        }
        }
    }
    }
};
};
sc_ctor:
sc_ctor:
SC_CTOR OPENPAR WORD CLOSEPAR OPENKEY
SC_CTOR OPENPAR WORD CLOSEPAR OPENKEY
{
{
};
};
void:VOID WORD OPENPAR CLOSEPAR SEMICOLON
void: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:
enumerates:
ENUM OPENKEY
ENUM OPENKEY
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      //New enumerate list
      //New enumerate list
      enumerateslist = NULL;
      enumerateslist = NULL;
      reading_enumerates = 1;
      reading_enumerates = 1;
    }
    }
};
};
enumerates_type:
enumerates_type:
ENUM WORD OPENKEY
ENUM WORD OPENKEY
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      //In this case we define type e.g. enum state_t {S0,S1,S2};
      //In this case we define type e.g. enum state_t {S0,S1,S2};
      enumerateslist = NULL;
      enumerateslist = NULL;
      enumname = (char *) malloc (sizeof (char) * strlen ((char *) $2));
      enumname = (char *) malloc (sizeof (char) * strlen ((char *) $2));
      strcpy (enumname, (char *) $2);
      strcpy (enumname, (char *) $2);
      reading_enumerates = 1;
      reading_enumerates = 1;
    }
    }
};
};
declaration:
declaration:
WORD WORD SEMICOLON
WORD WORD SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      int length, list_pos;
      int length, list_pos;
      length = 0;
      length = 0;
      list_pos = 0;
      list_pos = 0;
      //Look in the enumerated list if it was declared e.j state_t state;
      //Look in the enumerated list if it was declared e.j state_t state;
      list_pos = findEnumList (enumlistlist, (char *) $1);
      list_pos = findEnumList (enumlistlist, (char *) $1);
      if (list_pos > -1)
      if (list_pos > -1)
        {
        {
          //Calculate the number of bits needed to represent the enumerate
          //Calculate the number of bits needed to represent the enumerate
          length = findEnumerateLength (enumlistlist, list_pos);
          length = findEnumerateLength (enumlistlist, list_pos);
          signalslist = InsertSignal (signalslist, (char *) $2, length, 0);
          signalslist = InsertSignal (signalslist, (char *) $2, length, 0);
          writeslist = InsertWrite (writeslist, (char *) $2);
          writeslist = InsertWrite (writeslist, (char *) $2);
        }
        }
      else
      else
        {
        {
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                   (char *) $1);
                   (char *) $1);
          return (1);
          return (1);
        }
        }
    }
    }
};
};
declaration_sc_signal:
declaration_sc_signal:
SC_SIGNAL MENOR WORD MAYOR WORD SEMICOLON
SC_SIGNAL MENOR WORD MAYOR WORD SEMICOLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      int length, list_pos;
      int length, list_pos;
      length = 0;
      length = 0;
      list_pos = 0;
      list_pos = 0;
      //Look in the enumerated list if it was declared e.j state_t state;
      //Look in the enumerated list if it was declared e.j state_t state;
      list_pos = findEnumList (enumlistlist, (char *) $3);
      list_pos = findEnumList (enumlistlist, (char *) $3);
      if (list_pos > -1)
      if (list_pos > -1)
        {
        {
          //Calculate the number of bits needed to represent the enumerate
          //Calculate the number of bits needed to represent the enumerate
          length = findEnumerateLength (enumlistlist, list_pos);
          length = findEnumerateLength (enumlistlist, list_pos);
          signalslist = InsertSignal (signalslist, (char *) $5, length, 0);
          signalslist = InsertSignal (signalslist, (char *) $5, length, 0);
          writeslist = InsertWrite (writeslist, (char *) $5);
          writeslist = InsertWrite (writeslist, (char *) $5);
        }
        }
      else
      else
        {
        {
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                   (char *) $3);
                   (char *) $3);
          return (1);
          return (1);
        }
        }
    }
    }
};
};
multiple_declaration:
multiple_declaration:
WORD WORD COLON
WORD WORD COLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      int length, list_pos;
      int length, list_pos;
      length = 0;
      length = 0;
      list_pos = 0;
      list_pos = 0;
      //Look in the enumerated list if it was declared e.j state_t state;
      //Look in the enumerated list if it was declared e.j state_t state;
      list_pos = findEnumList (enumlistlist, (char *) $1);
      list_pos = findEnumList (enumlistlist, (char *) $1);
      if (list_pos > -1)
      if (list_pos > -1)
        {
        {
          //Calculate the number of bits needed to represent the enumerate
          //Calculate the number of bits needed to represent the enumerate
          length = findEnumerateLength (enumlistlist, list_pos);
          length = findEnumerateLength (enumlistlist, list_pos);
          storedtype = (char *) malloc (sizeof (char) * strlen ((char *) $1));
          storedtype = (char *) malloc (sizeof (char) * strlen ((char *) $1));
          strcpy (storedtype, (char *) $1);
          strcpy (storedtype, (char *) $1);
          signalslist = InsertSignal (signalslist, (char *) $2, length,0);
          signalslist = InsertSignal (signalslist, (char *) $2, length,0);
          writeslist = InsertWrite (writeslist, (char *) $2);
          writeslist = InsertWrite (writeslist, (char *) $2);
          multipledec = 1;
          multipledec = 1;
        }
        }
      else
      else
        {
        {
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                   (char *) $1);
                   (char *) $1);
          return (1);
          return (1);
        }
        }
    }
    }
};
};
multiple_sc_signal_declaration:
multiple_sc_signal_declaration:
SC_SIGNAL MENOR WORD MAYOR WORD COLON
SC_SIGNAL MENOR WORD MAYOR WORD COLON
{
{
  if (translate == 1)
  if (translate == 1)
    {
    {
      int length, list_pos;
      int length, list_pos;
      length = 0;
      length = 0;
      list_pos = 0;
      list_pos = 0;
      //Look in the enumerated list if it was declared e.j state_t state;
      //Look in the enumerated list if it was declared e.j state_t state;
      list_pos = findEnumList (enumlistlist, (char *) $3);
      list_pos = findEnumList (enumlistlist, (char *) $3);
      if (list_pos > -1)
      if (list_pos > -1)
        {
        {
          //Calculate the number of bits needed to represent the enumerate
          //Calculate the number of bits needed to represent the enumerate
          length = findEnumerateLength (enumlistlist, list_pos);
          length = findEnumerateLength (enumlistlist, list_pos);
          storedtype = (char *) malloc (sizeof (char) * strlen ((char *) $3));
          storedtype = (char *) malloc (sizeof (char) * strlen ((char *) $3));
          strcpy (storedtype, (char *) $3);
          strcpy (storedtype, (char *) $3);
          signalslist = InsertSignal (signalslist, (char *) $5, length, 0);
          signalslist = InsertSignal (signalslist, (char *) $5, length, 0);
          writeslist = InsertWrite (writeslist, (char *) $5);
          writeslist = InsertWrite (writeslist, (char *) $5);
          multipledec = 1;
          multipledec = 1;
        }
        }
      else
      else
        {
        {
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
          fprintf (stderr, "\nline: %d Type %s unknow\n", lineno,
                   (char *) $3);
                   (char *) $3);
          return (1);
          return (1);
        }
        }
    }
    }
};
};
translateoff:
translateoff:
TRANSLATEOFF
TRANSLATEOFF
{
{
  translate = 0;
  translate = 0;
  fprintf (stderr, "line: %d Found Translate off directive \n", lineno);
  fprintf (stderr, "line: %d Found Translate off directive \n", lineno);
};
};
translateon:
translateon:
TRANSLATEON
TRANSLATEON
{
{
  translate = 1;
  translate = 1;
  fprintf (stderr, "line: %d Found Translate on directive \n", lineno);
  fprintf (stderr, "line: %d Found Translate on directive \n", lineno);
};
};
function:
function:
SC_REG MENOR NUMBER MAYOR WORD OPENPAR
SC_REG MENOR NUMBER MAYOR WORD OPENPAR
{
{
  fprintf (stderr, "line: %d Found Function Declaration \n", lineno);
  fprintf (stderr, "line: %d Found Function Declaration \n", lineno);
  /* New inputs list */
  /* New inputs list */
  functionname = (char *) $5;
  functionname = (char *) $5;
  outputlenght = $3;
  outputlenght = $3;
  funcinputslist = NULL;
  funcinputslist = NULL;
};
};
functioninputs:
functioninputs:
SC_REG MENOR NUMBER MAYOR WORD COLON
SC_REG MENOR NUMBER MAYOR WORD COLON
{
{
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $5, $3);
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $5, $3);
};
};
finishfunctioninputs:
finishfunctioninputs:
SC_REG MENOR NUMBER MAYOR WORD CLOSEPAR SEMICOLON
SC_REG MENOR NUMBER MAYOR WORD CLOSEPAR SEMICOLON
{
{
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $5, $3);
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $5, $3);
  functionslist =
  functionslist =
    InsertFunction (functionslist, functionname, funcinputslist,
    InsertFunction (functionslist, functionname, funcinputslist,
                    outputlenght);
                    outputlenght);
};
};
boolfunction:
boolfunction:
BOOL WORD OPENPAR
BOOL WORD OPENPAR
{
{
  fprintf (stderr, "line: %d Found Function Declaration \n", lineno);
  fprintf (stderr, "line: %d Found Function Declaration \n", lineno);
  /* New inputs list */
  /* New inputs list */
  functionname = (char *) $2;
  functionname = (char *) $2;
  outputlenght = 1;
  outputlenght = 1;
  funcinputslist = NULL;
  funcinputslist = NULL;
};
};
boolfunctioninputs:
boolfunctioninputs:
BOOL WORD COLON
BOOL WORD COLON
{
{
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $2, 1);
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $2, 1);
};
};
boolfinishfunctioninputs:
boolfinishfunctioninputs:
BOOL WORD CLOSEPAR SEMICOLON
BOOL WORD CLOSEPAR SEMICOLON
{
{
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $2, 1);
  funcinputslist = InsertFunctionInput (funcinputslist, (char *) $2, 1);
  functionslist =
  functionslist =
    InsertFunction (functionslist, functionname, funcinputslist,
    InsertFunction (functionslist, functionname, funcinputslist,
                    outputlenght);
                    outputlenght);
};
};
 
 

powered by: WebSVN 2.1.0

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