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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_73/] [or1ksim/] [support/] [dumpverilog.c] - Diff between revs 138 and 221

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

Rev 138 Rev 221
Line 36... Line 36...
#include "stats.h"
#include "stats.h"
#include "except.h"
#include "except.h"
#include "dumpverilog.h"
#include "dumpverilog.h"
#include "opcode/or32.h"
#include "opcode/or32.h"
 
 
extern struct mem_entry mem[MEMORY_LEN];
 
extern char rcsrev[];
extern char rcsrev[];
extern char *disassembled;
extern char *disassembled;
 
 
void dumpverilog(char *verilog_modname, unsigned int from, unsigned int to)
void dumpverilog(char *verilog_modname, unsigned int from, unsigned int to)
{
{
  unsigned int i, done = 0;
  unsigned int i, done = 0;
  struct label_entry *tmp;
  struct label_entry *tmp;
  char dis[DISWIDTH + 100];
  char dis[DISWIDTH + 100];
  int breakpoint = 0;
  struct mem_entry *entry;
 
 
  printf("// This file was generated by or1ksim %s\n", rcsrev);
  printf("// This file was generated by or1ksim %s\n", rcsrev);
  printf(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8)));
  printf(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8)));
 
 
  for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++)
  for(i = from; i < to; i++)
    {
    {
      int bp;
      unsigned int _insn = evalsim_mem32 (i);
      unsigned int _insn = evalsim_mem32 (i, &bp);
 
      int index = insn_decode(_insn);
      int index = insn_decode(_insn);
      if (index >= 0)
      if (index >= 0)
        {
        {
          tmp = mem[i].label;
          if (verify_memoryarea(i) && cur_area->getentry && (entry = cur_area->getentry(i)))
 
          tmp = entry->label;
          for(; tmp; tmp = tmp->next)
          for(; tmp; tmp = tmp->next)
            printf("\n//\t%s%s", tmp->name, LABELEND_CHAR);
            printf("\n//\t%s%s", tmp->name, LABELEND_CHAR);
 
 
          printf("\n\tmem['h%x] = %d'h%.2x%.2x", i/DWQ, DW, mem[i].data, mem[i+1].data);
          printf("\n\tmem['h%x] = %d'h%.2x%.2x", i/DWQ, DW, evalsim_mem8(i), evalsim_mem8(i + 1));
          printf("%.2x%.2x;", mem[i+2].data, mem[i+3].data);
          printf("%.2x%.2x;", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
 
 
          disassemble_insn (_insn);
          disassemble_insn (_insn);
          strcpy (dis, disassembled);
          strcpy (dis, disassembled);
 
 
          if (strlen(dis) < DISWIDTH)
          if (strlen(dis) < DISWIDTH)
            memset(dis + strlen(dis), ' ', DISWIDTH);
            memset(dis + strlen(dis), ' ', DISWIDTH);
          dis[DISWIDTH] = '\0';
          dis[DISWIDTH] = '\0';
          printf("\n\tdis['h%x] = {\"%s\"};", i/DWQ, dis);
          printf("\n\tdis['h%x] = {\"%s\"};", i/DWQ, dis);
          dis[0] = '\0';
          dis[0] = '\0';
          i += insn_len(index) - 1;
          i += insn_len(index) - 1;
        }
        } else {
      else
 
        {
 
          if (i % 64 == 0)
          if (i % 64 == 0)
            printf("\n");
            printf("\n");
 
 
          printf("\n\tmem['h%x] = 'h%.2x;", i/DWQ, (unsigned char)mem[i].data);
          printf("\n\tmem['h%x] = 'h%.2x;", i/DWQ, evalsim_mem8(i));
        }
        }
      done = 1;
      done = 1;
    }
    }
 
 
  if (done)
  if (done)
Line 98... Line 94...
    {
    {
      if (i % 8 == 0)
      if (i % 8 == 0)
        printf("\n%.8x:  ", i);
        printf("\n%.8x:  ", i);
 
 
      /* don't print ascii chars below 0x20. */
      /* don't print ascii chars below 0x20. */
      if (evalsim_mem32(i,&breakpoint) < 0x20)
      if (evalsim_mem32(i) < 0x20)
        printf("0x%.2x     ", (unsigned char)evalsim_mem32(i,&breakpoint));
        printf("0x%.2x     ", (unsigned char)evalsim_mem32(i));
      else
      else
        printf("0x%.2x'%c'  ", (unsigned char)evalsim_mem32(i,&breakpoint), (unsigned char)evalsim_mem32(i,&breakpoint));
        printf("0x%.2x'%c'  ", (unsigned char)evalsim_mem32(i), (unsigned char)evalsim_mem32(i));
    }
    }
  printf(OR1K_MEM_VERILOG_FOOTER);
  printf(OR1K_MEM_VERILOG_FOOTER);
}
}
 
 
void dumphex(unsigned int from, unsigned int to)
void dumphex(unsigned int from, unsigned int to)
{
{
  unsigned int i, done = 0;
  unsigned int i, done = 0;
  int breakpoint = 0;
 
 
 
  for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++) {
  for(i = from; i < to; i++) {
    unsigned int _insn = evalsim_mem32 (i, &breakpoint);
    unsigned int _insn = evalsim_mem32 (i);
    int index = insn_decode(_insn);
    int index = insn_decode(_insn);
    if (index >= 0)
    if (index >= 0)
      {
      {
        printf("%.2x%.2x", mem[i].data, mem[i+1].data);
              printf("%.2x%.2x", evalsim_mem8(i), evalsim_mem8(i + 1));
        printf("%.2x%.2x\n", mem[i+2].data, mem[i+3].data);
              printf("%.2x%.2x\n", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
 
 
        i += insn_len(index) - 1;
        i += insn_len(index) - 1;
      }
      }
    else
    else
      printf("%.2x\n", (unsigned char)mem[i].data);
      printf("%.2x\n", evalsim_mem8(i));
  }
  }
}
}
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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