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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_52/] [or1ksim/] [support/] [dumpverilog.c] - Blame information for rev 237

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 55 lampret
/* dumpverilog.c -- Dumps memory region as Verilog representation
2 85 lampret
   or as hex code
3 55 lampret
   Copyright (C) 2000 Damjan Lampret, lampret@opencores.org
4
 
5
This file is part of OpenRISC 1000 Architectural Simulator.
6
 
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
(at your option) any later version.
11
 
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20 237 erez
 
21 55 lampret
/* Verilog dump can be used for stimulating OpenRISC Verilog RTL models. */
22
 
23
#include <stdio.h>
24
#include <ctype.h>
25
#include <string.h>
26
 
27
#include "config.h"
28
#include "sim-config.h"
29
 
30
#include "parse.h"
31
#include "abstract.h"
32
#include "arch.h"
33
#include "trace.h"
34
#include "execute.h"
35
#include "sprs.h"
36
#include "stats.h"
37
#include "except.h"
38
#include "dumpverilog.h"
39 138 markom
#include "opcode/or32.h"
40 55 lampret
 
41
extern char rcsrev[];
42 138 markom
extern char *disassembled;
43 55 lampret
 
44
void dumpverilog(char *verilog_modname, unsigned int from, unsigned int to)
45
{
46 138 markom
  unsigned int i, done = 0;
47
  struct label_entry *tmp;
48 221 markom
  char dis[DISWIDTH + 100];
49
  struct mem_entry *entry;
50 237 erez
  printf("// This file was generated by or1ksim %s\n", rcsrev);
51 138 markom
  printf(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8)));
52
 
53 221 markom
  for(i = from; i < to; i++)
54
    {
55
      unsigned int _insn = evalsim_mem32 (i);
56 138 markom
      int index = insn_decode(_insn);
57
      if (index >= 0)
58 237 erez
        {
59
          if (verify_memoryarea(i) && cur_area->getentry && (entry = cur_area->getentry(i)))
60
            tmp = entry->label;
61
          for(; tmp; tmp = tmp->next)
62
            printf("\n//\t%s%s", tmp->name, LABELEND_CHAR);
63 138 markom
 
64 237 erez
          printf("\n\tmem['h%x] = %d'h%.2x%.2x", i/DWQ, DW, evalsim_mem8(i), evalsim_mem8(i + 1));
65
          printf("%.2x%.2x;", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
66 138 markom
 
67 237 erez
          disassemble_insn (_insn);
68
          strcpy (dis, disassembled);
69 138 markom
 
70 237 erez
          if (strlen(dis) < DISWIDTH)
71
            memset(dis + strlen(dis), ' ', DISWIDTH);
72
          dis[DISWIDTH] = '\0';
73
          printf("\n\tdis['h%x] = {\"%s\"};", i/DWQ, dis);
74
          dis[0] = '\0';
75
          i += insn_len(index) - 1;
76
        } else {
77
          if (i % 64 == 0)
78
            printf("\n");
79 138 markom
 
80 237 erez
          printf("\n\tmem['h%x] = 'h%.2x;", i/DWQ, evalsim_mem8(i));
81
        }
82 138 markom
      done = 1;
83
    }
84
 
85
  if (done)
86
    {
87
      printf(OR1K_MEM_VERILOG_FOOTER);
88
      return;
89
    }
90
 
91
  /* this needs to be fixed */
92
 
93
  for(i = from; i < to; i++)
94
    {
95
      if (i % 8 == 0)
96 237 erez
        printf("\n%.8x:  ", i);
97 138 markom
 
98
      /* don't print ascii chars below 0x20. */
99 221 markom
      if (evalsim_mem32(i) < 0x20)
100 237 erez
        printf("0x%.2x     ", (unsigned char)evalsim_mem32(i));
101 138 markom
      else
102 237 erez
        printf("0x%.2x'%c'  ", (unsigned char)evalsim_mem32(i), (unsigned char)evalsim_mem32(i));
103 138 markom
    }
104
  printf(OR1K_MEM_VERILOG_FOOTER);
105 55 lampret
}
106 85 lampret
 
107
void dumphex(unsigned int from, unsigned int to)
108
{
109 138 markom
  unsigned int i, done = 0;
110
 
111 221 markom
  for(i = from; i < to; i++) {
112
    unsigned int _insn = evalsim_mem32 (i);
113 138 markom
    int index = insn_decode(_insn);
114
    if (index >= 0)
115 221 markom
      {
116
              printf("%.2x%.2x", evalsim_mem8(i), evalsim_mem8(i + 1));
117
              printf("%.2x%.2x\n", evalsim_mem8(i + 2), evalsim_mem8(i + 3));
118
 
119
              i += insn_len(index) - 1;
120 138 markom
      }
121
    else
122 221 markom
      printf("%.2x\n", evalsim_mem8(i));
123 138 markom
  }
124 85 lampret
}

powered by: WebSVN 2.1.0

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