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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_67/] [or1ksim/] [cpu/] [common/] [abstract.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cvs
/* abstract.c -- Abstract entities header file
2
   Copyright (C) 1999 Damjan Lampret, lampret@opencores.org
3
 
4
This file is part of OpenRISC 1000 Architectural Simulator.
5
 
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
GNU General Public License for more details.
15
 
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
 
20 426 markom
#include <stdio.h>
21
 
22 261 markom
#define DEFAULT_MEMORY_START  0
23
#define DEFAULT_MEMORY_LEN  0x800000
24
#define STACK_SIZE  20
25
#define LABELNAME_LEN 50
26
#define INSNAME_LEN 15
27 26 lampret
#define OPERANDNAME_LEN 50
28 2 cvs
 
29 1319 phoenix
#define MAX_OPERANDS    (5)
30 138 markom
 
31 134 markom
#define OP_MEM_ACCESS 0x80000000
32
 
33 429 markom
/* Cache tag types.  */
34
#define CT_NONE            0
35
#define CT_VIRTUAL         1
36
#define CT_PHYSICAL        2
37
 
38 2 cvs
/* Instruction queue */
39
struct iqueue_entry {
40 138 markom
  int insn_index;
41 1350 nogj
  uint32_t insn;
42
  oraddr_t insn_addr;
43 2 cvs
};
44
 
45 30 lampret
/* Memory regions assigned to devices */
46
struct dev_memarea {
47 221 markom
  struct dev_memarea *next;
48 261 markom
  /*unsigned long start;
49 1308 phoenix
  unsigned long end;*/         /* if start + size > end, this block is disabled; to enable it recalculate end addr. */
50 1350 nogj
  oraddr_t addr_mask;
51
  oraddr_t addr_compare;
52
  uint32_t size;
53
  uint32_t size_mask;        /* Address mask, calculated out of size */
54
  unsigned int granularity;  /* how many bytes read/write accepts: 1/2/4 */
55 424 markom
  int delayr;                /* Read delay */
56
  int delayw;                /* Write delay */
57 261 markom
 
58 1350 nogj
  int chip_select;           /* Needed by memory controller; specifies chip
59
                              * select number for this memory area. */
60 543 simons
  int valid;                 /* This bit reflect the memory controler valid bit */
61 426 markom
  FILE *log;                 /* log file if this device is to be logged, NULL otherwise */
62 261 markom
 
63 1359 nogj
  uint32_t (*readfunc)(oraddr_t, void *);
64
  void (*writefunc)(oraddr_t, uint32_t, void *);
65 221 markom
  /* private data */
66 1359 nogj
  void *priv_dat;
67 30 lampret
};
68
 
69 1350 nogj
extern void dumpmemory(oraddr_t from, oraddr_t to, int disasm, int nl);
70
extern uint32_t eval_mem32(oraddr_t memaddr,int*);
71
extern uint16_t eval_mem16(oraddr_t memaddr,int*);
72
extern uint8_t eval_mem8(oraddr_t memaddr,int*);
73
void set_mem32(oraddr_t memaddr, uint32_t value,int*);
74
extern void set_mem16(oraddr_t memaddr, uint16_t value,int*);
75
extern void set_mem8(oraddr_t memaddr, uint8_t value,int*);
76 123 markom
 
77 1350 nogj
uint32_t evalsim_mem32(oraddr_t);
78
uint16_t evalsim_mem16(oraddr_t);
79
uint8_t evalsim_mem8(oraddr_t);
80 1319 phoenix
 
81 1350 nogj
uint32_t evalsim_mem32_atomic(oraddr_t, int);
82
uint16_t evalsim_mem16_atomic(oraddr_t, int);
83
uint8_t evalsim_mem8_atomic(oraddr_t, int);
84 1319 phoenix
 
85 1350 nogj
void setsim_mem32(oraddr_t, uint32_t);
86
void setsim_mem16(oraddr_t, uint16_t);
87
void setsim_mem8(oraddr_t, uint8_t);
88 123 markom
 
89 1350 nogj
void setsim_mem32_atomic(oraddr_t, uint32_t, int);
90
void setsim_mem16_atomic(oraddr_t, uint16_t, int);
91
void setsim_mem8_atomic(oraddr_t, uint8_t, int);
92 1319 phoenix
 
93 424 markom
void init_memory_table ();
94 221 markom
 
95 424 markom
/* Changes read/write memory in read/write only */
96
void lock_memory_table ();
97
 
98 426 markom
/* Closes files, etc. */
99
void done_memory_table ();
100
 
101 427 markom
/* Displays current memory configuration */
102
void memory_table_status ();
103
 
104 261 markom
/* Register read and write function for a memory area.
105
   addr is inside the area, if addr & addr_mask == addr_compare
106
   (used also by peripheral devices like 16450 UART etc.) */
107 1350 nogj
void register_memoryarea_mask(oraddr_t addr_mask, oraddr_t addr_compare,
108
                         uint32_t size, unsigned granularity, unsigned mc_dev,
109 1359 nogj
                         uint32_t (readfunc)(oraddr_t, void *),
110
                         void (writefunc)(oraddr_t, uint32_t, void *),
111
                         void *dat);
112 261 markom
 
113
/* Register read and write function for a memory area.
114
   Memory areas should be aligned. Memory area is rounded up to
115
   fit the nearest 2^n aligment.
116 970 simons
   (used also by peripheral devices like 16450 UART etc.)
117
   If mc_dev is 1, this means that this device will be checked first for match
118
   and will be accessed in case in overlaping memory spaces.
119
   Only one device can have this set to 1 (used for memory controller) */
120 1350 nogj
void register_memoryarea(oraddr_t addr, uint32_t size, unsigned granularity,
121 1359 nogj
                         unsigned mc_dev, uint32_t (readfunc)(oraddr_t, void *),
122
                         void (writefunc)(oraddr_t, uint32_t, void *),
123
                         void *dat);
124 261 markom
 
125 882 simons
/* Finds the memory area for the address and adjust the read and write delays for it. */
126 1350 nogj
void adjust_rw_delay(oraddr_t memaddr, unsigned int delayr, unsigned int delayw);
127 882 simons
 
128 221 markom
/* Check if access is to registered area of memory. */
129 1350 nogj
struct dev_memarea *verify_memoryarea(oraddr_t addr);
130 261 markom
 
131 1308 phoenix
/* Outputs time in pretty form to dest string. */
132 897 markom
char *generate_time_pretty (char *dest, long time_ps);
133 433 markom
 
134 1308 phoenix
/* Returns 32-bit values from mem array. */
135 1350 nogj
uint32_t eval_insn(oraddr_t, int *);
136 1308 phoenix
 
137 1452 nogj
uint32_t eval_insn_direct(oraddr_t memaddr, int* breakpoint, int through_mmu);
138
 
139 1398 nogj
uint8_t eval_direct8(oraddr_t memaddr, int *breakpoint, int through_mmu, int through_dc);
140
uint16_t eval_direct16(oraddr_t memaddr, int *breakpoint, int through_mmu, int through_dc);
141 1350 nogj
uint32_t eval_direct32(oraddr_t addr, int *breakpoint, int through_mmu, int through_dc);
142 1308 phoenix
 
143 1350 nogj
void set_direct32(uint32_t addr, uint32_t value, int *breakpoint, int through_mmu, int through_dc);
144 1308 phoenix
 
145 221 markom
/* Temporary variable to increase speed.  */
146
extern struct dev_memarea *cur_area;
147
 
148 970 simons
/* Virtual address of current access. */
149 1350 nogj
extern oraddr_t cur_vadd;
150 970 simons
 
151 638 simons
/* These are set by mmu if cache inhibit bit is set for current acces.  */
152
extern int data_ci, insn_ci;
153
 
154 123 markom
/* Added by MM */
155
#ifndef LONGEST
156
#define LONGEST long long
157
#define ULONGEST unsigned long long
158
#endif /* ! LONGEST */
159 494 markom
 
160
/* Instructions left to execute */
161
extern int cont_run;
162
 
163 1452 nogj
/* Returns the page that addr belongs to */
164
#define ADDR_PAGE(addr) ((addr) & ~(ADDR_C(PAGE_SIZE) - 1))
165
 
166 494 markom
/* History of execution */
167
#define HISTEXEC_LEN 200
168 1352 nogj
struct hist_exec {
169
  oraddr_t addr;
170
  struct hist_exec *prev;
171
  struct hist_exec *next;
172
};
173 494 markom
 
174 1352 nogj
extern struct hist_exec *hist_exec_tail;

powered by: WebSVN 2.1.0

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