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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [cuc/] [cuc.c] - Diff between revs 996 and 997

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

Rev 996 Rev 997
Line 260... Line 260...
    } while (i <= MAX_UNROLL && ut->new_time > cut->new_time);
    } while (i <= MAX_UNROLL && ut->new_time > cut->new_time);
 
 
    /* Sort the timings */
    /* Sort the timings */
#if 0
#if 0
    if (cuc_debug >= 3)
    if (cuc_debug >= 3)
    for (i = 0; i < nt; i++) printf ("%i:%i,%i: %icyc\n",
    for (i = 0; i < nt; i++) PRINTF ("%i:%i,%i: %icyc\n",
                    t[i].b, t[i].preroll, t[i].unroll, t[i].new_time);
                    t[i].b, t[i].preroll, t[i].unroll, t[i].new_time);
#endif
#endif
 
 
    qsort (t, nt, sizeof (cuc_timings), (int (*)(const void *, const void *))tim_comp);
    qsort (t, nt, sizeof (cuc_timings), (int (*)(const void *, const void *))tim_comp);
 
 
Line 345... Line 345...
/*static */void print_option (int bb_no, int f_opt)
/*static */void print_option (int bb_no, int f_opt)
{
{
  char tmp1[10];
  char tmp1[10];
  char tmp2[10];
  char tmp2[10];
  sprintf (tmp2, "%s", gen_option (tmp1, bb_no, f_opt));
  sprintf (tmp2, "%s", gen_option (tmp1, bb_no, f_opt));
  printf ("%3s", tmp2);
  PRINTF ("%3s", tmp2);
}
}
 
 
static char *format_func_options (char *s, cuc_func *f)
static char *format_func_options (char *s, cuc_func *f)
{
{
  int b, first = 1;
  int b, first = 1;
Line 366... Line 366...
static void options_cmd (int func_no, cuc_func *f)
static void options_cmd (int func_no, cuc_func *f)
{
{
  int b, i;
  int b, i;
  char tmp[30];
  char tmp[30];
  char *name = prof_func[func_no].name;
  char *name = prof_func[func_no].name;
  printf ("-----------------------------------------------------------------------------\n");
  PRINTF ("-----------------------------------------------------------------------------\n");
  printf ("|%-28s|pre/unrolled|shared|  time  |  gates |old_time|\n",
  PRINTF ("|%-28s|pre/unrolled|shared|  time  |  gates |old_time|\n",
            strstrip (tmp, name, 28));
            strstrip (tmp, name, 28));
  printf ("|                    BASE    |%4i / %4i | %4i |%8i|%8.f|%8i|\n", 1, 1, 0,
  PRINTF ("|                    BASE    |%4i / %4i | %4i |%8i|%8.f|%8i|\n", 1, 1, 0,
          f->timings.new_time, f->timings.size, f->orig_time);
          f->timings.new_time, f->timings.size, f->orig_time);
  for (b = 0; b < f->num_bb; b++) {
  for (b = 0; b < f->num_bb; b++) {
    /* Print out results */
    /* Print out results */
    for (i = 1; i < f->bb[b].ntim; i++) { /* First one is base option */
    for (i = 1; i < f->bb[b].ntim; i++) { /* First one is base option */
      int time = f->bb[b].tim[i].new_time - f->timings.new_time;
      int time = f->bb[b].tim[i].new_time - f->timings.new_time;
      double size = f->bb[b].tim[i].size - f->timings.size;
      double size = f->bb[b].tim[i].size - f->timings.size;
      printf ("|                   ");
      PRINTF ("|                   ");
      print_option (b, i);
      print_option (b, i);
      printf ("      |%4i / %4i | %4i |%+8i|%+8.f|        |\n",
      PRINTF ("      |%4i / %4i | %4i |%+8i|%+8.f|        |\n",
        f->bb[b].tim[i].preroll, f->bb[b].tim[i].unroll, f->bb[b].tim[i].nshared,
        f->bb[b].tim[i].preroll, f->bb[b].tim[i].unroll, f->bb[b].tim[i].nshared,
        time, size);
        time, size);
    }
    }
  }
  }
}
}
Line 396... Line 396...
  cuc_func *f;
  cuc_func *f;
  assert (f = dup_func (rf));
  assert (f = dup_func (rf));
 
 
  if (cuc_debug >= 2) print_cuc_bb (f, "BEFORE_GENERATE");
  if (cuc_debug >= 2) print_cuc_bb (f, "BEFORE_GENERATE");
  log ("Generating function %s.\n", name);
  log ("Generating function %s.\n", name);
  printf ("Generating function %s.\n", name);
  PRINTF ("Generating function %s.\n", name);
 
 
  format_func_options (tmp, rf);
  format_func_options (tmp, rf);
  if (strlen (tmp)) printf ("Applying options: %s\n", tmp);
  if (strlen (tmp)) PRINTF ("Applying options: %s\n", tmp);
  else printf ("Using basic options.\n");
  else PRINTF ("Using basic options.\n");
 
 
  /* Generate function as specified by options */
  /* Generate function as specified by options */
  for (b = 0; b < f->num_bb; b++) {
  for (b = 0; b < f->num_bb; b++) {
    cuc_timings *st;
    cuc_timings *st;
    if (rf->bb[b].selected_tim < 0) continue;
    if (rf->bb[b].selected_tim < 0) continue;
Line 558... Line 558...
      filename_cut[i] = '\0';
      filename_cut[i] = '\0';
      break;
      break;
    }
    }
  }
  }
 
 
  printf ("Entering OpenRISC Custom Unit Compiler command prompt\n");
  PRINTF ("Entering OpenRISC Custom Unit Compiler command prompt\n");
  printf ("Using profile file \"%s\" and memory profile file \"%s\".\n", config.sim.prof_fn, config.sim.mprof_fn);
  PRINTF ("Using profile file \"%s\" and memory profile file \"%s\".\n", config.sim.prof_fn, config.sim.mprof_fn);
  sprintf (tmp1, "%s.log", filename_cut);
  sprintf (tmp1, "%s.log", filename_cut);
  printf ("Analyzing. (log file \"%s\").\n", tmp1);
  PRINTF ("Analyzing. (log file \"%s\").\n", tmp1);
  assert (flog = fopen (tmp1, "wt+"));
  assert (flog = fopen (tmp1, "wt+"));
 
 
  /* Loads in the specified timings table */
  /* Loads in the specified timings table */
  printf ("Using timings from \"%s\" at %s\n",config.cuc.timings_fn,
  PRINTF ("Using timings from \"%s\" at %s\n",config.cuc.timings_fn,
                 generate_time_pretty (tmp1, config.sim.clkcycle_ps));
                 generate_time_pretty (tmp1, config.sim.clkcycle_ps));
  load_timing_table (config.cuc.timings_fn);
  load_timing_table (config.cuc.timings_fn);
  runtime.cuc.cycle_duration = 1000. * config.sim.clkcycle_ps;
  runtime.cuc.cycle_duration = 1000. * config.sim.clkcycle_ps;
  printf ("Multicycle logic %s, bursts %s, %s memory order.\n",
  PRINTF ("Multicycle logic %s, bursts %s, %s memory order.\n",
    config.cuc.no_multicycle ? "OFF" : "ON", config.cuc.enable_bursts ? "ON" : "OFF",
    config.cuc.no_multicycle ? "OFF" : "ON", config.cuc.enable_bursts ? "ON" : "OFF",
    config.cuc.memory_order == MO_NONE ? "no" : config.cuc.memory_order == MO_WEAK ? "weak" :
    config.cuc.memory_order == MO_NONE ? "no" : config.cuc.memory_order == MO_WEAK ? "weak" :
    config.cuc.memory_order == MO_STRONG ? "strong" : "exact");
    config.cuc.memory_order == MO_STRONG ? "strong" : "exact");
 
 
  prof_set (1, 0);
  prof_set (1, 0);
  assert (prof_acquire (config.sim.prof_fn) == 0);
  assert (prof_acquire (config.sim.prof_fn) == 0);
  cuc_debug = 0;
  cuc_debug = 0;
 
 
  if (config.cuc.calling_convention)
  if (config.cuc.calling_convention)
    printf ("Assuming OpenRISC standard calling convention.\n");
    PRINTF ("Assuming OpenRISC standard calling convention.\n");
 
 
  /* Try all functions except "total" */
  /* Try all functions except "total" */
  for (i = 0; i < prof_nfuncs - 1; i++) {
  for (i = 0; i < prof_nfuncs - 1; i++) {
    long orig_time;
    long orig_time;
    unsigned long start_addr, end_addr;
    unsigned long start_addr, end_addr;
Line 593... Line 593...
    /* Extract the function from the binary */
    /* Extract the function from the binary */
    sprintf (tmp1, "%s.bin", prof_func[i].name);
    sprintf (tmp1, "%s.bin", prof_func[i].name);
    end_addr = extract_function (tmp1, start_addr);
    end_addr = extract_function (tmp1, start_addr);
 
 
    log ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
    log ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
    printf ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
    PRINTF ("Testing function %s (%08x - %08x)\n", prof_func[i].name, start_addr, end_addr);
    func[i] = analyse_function (prof_func[i].name, orig_time, start_addr,
    func[i] = analyse_function (prof_func[i].name, orig_time, start_addr,
                   end_addr, config.cuc.memory_order);
                   end_addr, config.cuc.memory_order);
    func_v[i] = 0;
    func_v[i] = 0;
  }
  }
  set_func_deps ();
  set_func_deps ();
 
 
  while (1) {
  while (1) {
    char *s;
    char *s;
wait_command:
wait_command:
    printf ("(cuc) ");
    PRINTF ("(cuc) ");
    fflush (stdout);
    fflush (stdout);
    fgets(tmp1, sizeof tmp1, stdin);
    fgets(tmp1, sizeof tmp1, stdin);
    for (s = tmp1; *s != '\0' && *s != '\n' && *s != '\r'; s++);
    for (s = tmp1; *s != '\0' && *s != '\n' && *s != '\r'; s++);
    *s = '\0';
    *s = '\0';
 
 
Line 617... Line 617...
 
 
      /* profile command */
      /* profile command */
    } else if (strcmp (tmp1, "p") == 0 || strcmp (tmp1, "profile") == 0) {
    } else if (strcmp (tmp1, "p") == 0 || strcmp (tmp1, "profile") == 0) {
      int ntime = 0;
      int ntime = 0;
      int size = 0;
      int size = 0;
      printf ("-----------------------------------------------------------------------------\n");
      PRINTF ("-----------------------------------------------------------------------------\n");
      printf ("|function name       |calls|avg cycles  |old%| max. f.  | impr. f.| options |\n");
      PRINTF ("|function name       |calls|avg cycles  |old%| max. f.  | impr. f.| options |\n");
      printf ("|--------------------+-----+------------+----+----------|---------+---------|\n");
      PRINTF ("|--------------------+-----+------------+----+----------|---------+---------|\n");
      for (j = 0; j < prof_nfuncs; j++) {
      for (j = 0; j < prof_nfuncs; j++) {
        int bestcyc = 0, besti = 0;
        int bestcyc = 0, besti = 0;
        char tmp[100];
        char tmp[100];
        for (i = 0; i < prof_nfuncs; i++)
        for (i = 0; i < prof_nfuncs; i++)
          if (prof_func[i].cum_cycles > bestcyc) {
          if (prof_func[i].cum_cycles > bestcyc) {
            bestcyc = prof_func[i].cum_cycles;
            bestcyc = prof_func[i].cum_cycles;
            besti = i;
            besti = i;
          }
          }
        i = besti;
        i = besti;
        printf ("|%-20s|%5i|%12.1f|%3.0f%%| ",
        PRINTF ("|%-20s|%5i|%12.1f|%3.0f%%| ",
                strstrip (tmp, prof_func[i].name, 20),  prof_func[i].calls,
                strstrip (tmp, prof_func[i].name, 20),  prof_func[i].calls,
                ((double)prof_func[i].cum_cycles / prof_func[i].calls),
                ((double)prof_func[i].cum_cycles / prof_func[i].calls),
                (100. * prof_func[i].cum_cycles / prof_cycles));
                (100. * prof_func[i].cum_cycles / prof_cycles));
        if (func[i]) {
        if (func[i]) {
          double f = 1.0;
          double f = 1.0;
Line 642... Line 642...
            int s = calc_size (func[i]);
            int s = calc_size (func[i]);
            f = 1. * func[i]->orig_time / nt;
            f = 1. * func[i]->orig_time / nt;
            ntime += nt * func[i]->num_runs;
            ntime += nt * func[i]->num_runs;
            size += s;
            size += s;
          } else ntime += prof_func[i].cum_cycles;
          } else ntime += prof_func[i].cum_cycles;
          printf ("%8.1f |%8.1f | %-8s|\n", 1.f * prof_func[i].cum_cycles
          PRINTF ("%8.1f |%8.1f | %-8s|\n", 1.f * prof_func[i].cum_cycles
                          / func[i]->timings.new_time, f, format_func_options (tmp, func[i]));
                          / func[i]->timings.new_time, f, format_func_options (tmp, func[i]));
        } else {
        } else {
          printf ("     N/A |     N/A |     N/A |\n");
          PRINTF ("     N/A |     N/A |     N/A |\n");
          ntime += prof_func[i].cum_cycles;
          ntime += prof_func[i].cum_cycles;
        }
        }
        prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
        prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
      }
      }
      for (i = 0; i < prof_nfuncs; i++)
      for (i = 0; i < prof_nfuncs; i++)
        prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
        prof_func[i].cum_cycles = -prof_func[i].cum_cycles;
      printf ("-----------------------------------------------------------------------------\n");
      PRINTF ("-----------------------------------------------------------------------------\n");
      printf ("Total %i cycles (was %i), total added gates = %i. Speed factor %.1f\n",
      PRINTF ("Total %i cycles (was %i), total added gates = %i. Speed factor %.1f\n",
                      ntime, prof_cycles, size, 1. * prof_cycles / ntime);
                      ntime, prof_cycles, size, 1. * prof_cycles / ntime);
 
 
      /* debug command */
      /* debug command */
    } else if (strncmp (tmp1, "d", 1) == 0 || strncmp (tmp1, "debug", 5) == 0) {
    } else if (strncmp (tmp1, "d", 1) == 0 || strncmp (tmp1, "debug", 5) == 0) {
      sscanf (tmp1, "%*s %i", &cuc_debug);
      sscanf (tmp1, "%*s %i", &cuc_debug);
Line 670... Line 670...
      for (i = 0; i < prof_nfuncs; i++)
      for (i = 0; i < prof_nfuncs; i++)
        if (func[i]) func[i]->tmp = func_v[i];
        if (func[i]) func[i]->tmp = func_v[i];
      for (i = 0; i < prof_nfuncs; i++) if (func[i])
      for (i = 0; i < prof_nfuncs; i++) if (func[i])
        for (j = 0; j < func[i]->nfdeps; j++)
        for (j = 0; j < func[i]->nfdeps; j++)
          if (!func[i]->fdeps[j] || !func[i]->fdeps[j]->tmp) {
          if (!func[i]->fdeps[j] || !func[i]->fdeps[j]->tmp) {
            printf ("Function %s must be selected for translation (required by %s)\n",
            PRINTF ("Function %s must be selected for translation (required by %s)\n",
                    prof_func[j].name, prof_func[i].name);
                    prof_func[j].name, prof_func[i].name);
            goto wait_command;
            goto wait_command;
          }
          }
      for (i = 0; i < prof_nfuncs; i++)
      for (i = 0; i < prof_nfuncs; i++)
        if (func[i] && func_v[i]) generate_function (func[i], prof_func[i].name, filename_cut);
        if (func[i] && func_v[i]) generate_function (func[i], prof_func[i].name, filename_cut);
Line 684... Line 684...
    } else if (strcmp (tmp1, "sa") == 0 || strcmp (tmp1, "selectall") == 0) {
    } else if (strcmp (tmp1, "sa") == 0 || strcmp (tmp1, "selectall") == 0) {
      char tmp[50], ch;
      char tmp[50], ch;
      int p, o, b, f;
      int p, o, b, f;
      for (f = 0; f < prof_nfuncs; f++) if (func[f]) {
      for (f = 0; f < prof_nfuncs; f++) if (func[f]) {
        func_v[f] = 1;
        func_v[f] = 1;
        printf ("Function %s selected for translation.\n", prof_func[f].name);
        PRINTF ("Function %s selected for translation.\n", prof_func[f].name);
      }
      }
 
 
      /* select command */
      /* select command */
    } else if (strncmp (tmp1, "s", 1) == 0 || strncmp (tmp1, "select", 6) == 0) {
    } else if (strncmp (tmp1, "s", 1) == 0 || strncmp (tmp1, "select", 6) == 0) {
      char tmp[50], ch;
      char tmp[50], ch;
      int p, o, b, f;
      int p, o, b, f;
      p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
      p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
      if (p < 1) printf ("Invalid parameters.\n");
      if (p < 1) PRINTF ("Invalid parameters.\n");
      else {
      else {
        /* Check if we have valid option */
        /* Check if we have valid option */
        for (f = 0; f < prof_nfuncs; f++)
        for (f = 0; f < prof_nfuncs; f++)
          if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
          if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
        if (f < prof_nfuncs) {
        if (f < prof_nfuncs) {
          if (p == 1) {
          if (p == 1) {
            if (func[f]) {
            if (func[f]) {
              func_v[f] = 1;
              func_v[f] = 1;
              printf ("Function %s selected for translation.\n", prof_func[f].name);
              PRINTF ("Function %s selected for translation.\n", prof_func[f].name);
            } else printf ("Function %s not suitable for translation.\n", prof_func[f].name);
            } else PRINTF ("Function %s not suitable for translation.\n", prof_func[f].name);
          } else {
          } else {
            if (!func_v[f])
            if (!func_v[f])
              printf ("Function %s not yet selected for translation.\n", prof_func[f].name);
              PRINTF ("Function %s not yet selected for translation.\n", prof_func[f].name);
            if (p < 3) goto invalid_option;
            if (p < 3) goto invalid_option;
            for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
            for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
            if (!option_char[o]) goto invalid_option;
            if (!option_char[o]) goto invalid_option;
            if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
            if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
            if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
            if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
 
 
            /* select an option */
            /* select an option */
            func[f]->bb[b].selected_tim = o;
            func[f]->bb[b].selected_tim = o;
            if (func[f]->bb[b].tim[o].nshared) {
            if (func[f]->bb[b].tim[o].nshared) {
              printf ("Option has shared instructions: ");
              PRINTF ("Option has shared instructions: ");
              print_shared (func[f], func[f]->bb[b].tim[o].shared, func[f]->bb[b].tim[o].nshared);
              print_shared (func[f], func[f]->bb[b].tim[o].shared, func[f]->bb[b].tim[o].nshared);
              printf ("\n");
              PRINTF ("\n");
            }
            }
            goto wait_command;
            goto wait_command;
invalid_option:
invalid_option:
            printf ("Invalid option.\n");
            PRINTF ("Invalid option.\n");
          }
          }
        } else printf ("Invalid function.\n");
        } else PRINTF ("Invalid function.\n");
      }
      }
 
 
      /* unselect command */
      /* unselect command */
    } else if (strncmp (tmp1, "u", 1) == 0 || strncmp (tmp1, "unselect", 8) == 0) {
    } else if (strncmp (tmp1, "u", 1) == 0 || strncmp (tmp1, "unselect", 8) == 0) {
      char tmp[50], ch;
      char tmp[50], ch;
      int p, o, b, f;
      int p, o, b, f;
      p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
      p = sscanf (tmp1, "%*s %s %i%c", tmp, &b, &ch);
      if (p < 1) printf ("Invalid parameters.\n");
      if (p < 1) PRINTF ("Invalid parameters.\n");
      else {
      else {
        /* Check if we have valid option */
        /* Check if we have valid option */
        for (f = 0; f < prof_nfuncs; f++)
        for (f = 0; f < prof_nfuncs; f++)
          if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
          if (strcmp (prof_func[f].name, tmp) == 0 && func[f]) break;
        if (f < prof_nfuncs) {
        if (f < prof_nfuncs) {
          if (p == 1) {
          if (p == 1) {
            if (func[f]) {
            if (func[f]) {
              func_v[f] = 0;
              func_v[f] = 0;
              printf ("Function %s unselected for translation.\n", prof_func[f].name);
              PRINTF ("Function %s unselected for translation.\n", prof_func[f].name);
            } else printf ("Function %s not suitable for translation.\n", prof_func[f].name);
            } else PRINTF ("Function %s not suitable for translation.\n", prof_func[f].name);
          } else {
          } else {
            if (p < 3) goto invalid_option;
            if (p < 3) goto invalid_option;
            for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
            for (o = 0; option_char[o] != '\0' && option_char[o] != ch; o++);
            if (!option_char[o]) goto invalid_option;
            if (!option_char[o]) goto invalid_option;
            if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
            if (b < 0 || b >= func[f]->num_bb) goto invalid_option;
            if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
            if (o < 0 || o >= func[f]->bb[b].ntim) goto invalid_option;
 
 
            /* select an option */
            /* select an option */
            func[f]->bb[b].selected_tim = -1;
            func[f]->bb[b].selected_tim = -1;
          }
          }
        } else printf ("Invalid function.\n");
        } else PRINTF ("Invalid function.\n");
      }
      }
 
 
      /* options command */
      /* options command */
    } else if (strcmp (tmp1, "o") == 0 || strcmp (tmp1, "options") == 0) {
    } else if (strcmp (tmp1, "o") == 0 || strcmp (tmp1, "options") == 0) {
      int any = 0;
      int any = 0;
      printf ("Available options:\n");
      PRINTF ("Available options:\n");
      for (i = 0; i < prof_nfuncs; i++)
      for (i = 0; i < prof_nfuncs; i++)
        if (func[i]) {
        if (func[i]) {
          options_cmd (i, func[i]);
          options_cmd (i, func[i]);
          any = 1;
          any = 1;
        }
        }
      if (any) printf ("-----------------------------------------------------------------------------\n");
      if (any) PRINTF ("-----------------------------------------------------------------------------\n");
      else printf ("Sorry. No available options.\n");
      else PRINTF ("Sorry. No available options.\n");
 
 
      /* Ignore empty string */
      /* Ignore empty string */
    } else if (strcmp (tmp1, "") == 0) {
    } else if (strcmp (tmp1, "") == 0) {
 
 
      /* help command */
      /* help command */
    } else {
    } else {
      if (strcmp (tmp1, "h") != 0 && strcmp (tmp1, "help") != 0)
      if (strcmp (tmp1, "h") != 0 && strcmp (tmp1, "help") != 0)
        printf ("Unknown command.\n");
        PRINTF ("Unknown command.\n");
      printf ("OpenRISC Custom Unit Compiler command prompt\n");
      PRINTF ("OpenRISC Custom Unit Compiler command prompt\n");
      printf ("Available commands:\n");
      PRINTF ("Available commands:\n");
      printf ("  h | help                   displays this help\n");
      PRINTF ("  h | help                   displays this help\n");
      printf ("  q | quit                   returns to or1ksim prompt\n");
      PRINTF ("  q | quit                   returns to or1ksim prompt\n");
      printf ("  p | profile                displays function profiling\n");
      PRINTF ("  p | profile                displays function profiling\n");
      printf ("  d | debug #                sets debug level (0-9)\n");
      PRINTF ("  d | debug #                sets debug level (0-9)\n");
      printf ("  o | options                displays available options\n");
      PRINTF ("  o | options                displays available options\n");
      printf ("  s | select func [option]   selects an option/function\n");
      PRINTF ("  s | select func [option]   selects an option/function\n");
      printf ("  u | unselect func [option] unselects an option/function\n");
      PRINTF ("  u | unselect func [option] unselects an option/function\n");
      printf ("  g | generate               generates verilog file\n");
      PRINTF ("  g | generate               generates verilog file\n");
    }
    }
  }
  }
 
 
  /* Dispose memory */
  /* Dispose memory */
  for (i = 0; i < prof_nfuncs -1; i++)
  for (i = 0; i < prof_nfuncs -1; i++)

powered by: WebSVN 2.1.0

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