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

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step1.y] - Diff between revs 12 and 14

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

Rev 12 Rev 14
Line 1... Line 1...
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
 *
 *
 *  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
 *
 *
 * -----------------------------------------------------------------------------
 * -----------------------------------------------------------------------------
Line 24... Line 24...
 
 
%{
%{
#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;
Line 81... Line 75...
 
 
  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;
Line 112... Line 106...
    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
Line 277... Line 273...
}
}
 
 
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);
 
 
Line 322... Line 320...
 
 
 
 
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);
Line 489... Line 490...
 
 
;
;
word:
word:
WORD
WORD
{
{
 
 
  defineparenthesis = 0;
  defineparenthesis = 0;
  if (translate == 1 && verilog == 0)
  if (translate == 1 && verilog == 0)
    {
    {
      if (processfound)
      if (processfound)
        {
        {
Line 510... Line 512...
          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
            {
            {
Line 533... Line 535...
                    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);
Line 560... Line 563...
            }
            }
 
 
        }
        }
      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);
            }
            }
Line 809... Line 813...
      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");
Line 881... Line 882...
        }
        }
      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, "}");

powered by: WebSVN 2.1.0

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