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

Subversion Repositories or1k

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

Go to most recent revision | 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 479 markom
enum insn_type { it_unknown, it_exception, it_arith, it_shift, it_compare, it_branch,
39 720 markom
     it_jump, it_load, it_store, it_movimm, it_move, it_extend, it_nop, it_mac, it_float };
40 2 cvs
 
41
/* Instruction queue */
42
struct iqueue_entry {
43 123 markom
  enum insn_type func_unit;
44 138 markom
  int insn_index;
45
  unsigned long insn;
46
  unsigned long op[2 * MAX_OPERANDS];
47 123 markom
  unsigned long insn_addr;
48 2 cvs
};
49
 
50 30 lampret
/* Memory regions assigned to devices */
51
struct dev_memarea {
52 221 markom
  struct dev_memarea *next;
53 261 markom
  /*unsigned long start;
54 1308 phoenix
  unsigned long end;*/         /* if start + size > end, this block is disabled; to enable it recalculate end addr. */
55 261 markom
  unsigned long addr_mask;
56
  unsigned long addr_compare;
57 123 markom
  unsigned long size;
58 261 markom
  unsigned long size_mask;   /* Address mask, calculated out of size */
59 235 erez
  unsigned long granularity; /* how many bytes read/write accepts: 1/2/4 */
60 424 markom
  int delayr;                /* Read delay */
61
  int delayw;                /* Write delay */
62 261 markom
 
63
  int chip_select;           /* Needed by memory controller; specifies chip select number for this memory area. */
64 543 simons
  int valid;                 /* This bit reflect the memory controler valid bit */
65 426 markom
  FILE *log;                 /* log file if this device is to be logged, NULL otherwise */
66 261 markom
 
67 235 erez
  unsigned long (*readfunc)(unsigned long);
68
  void (*writefunc)(unsigned long, unsigned long);
69 221 markom
  /* private data */
70
  unsigned long misc;
71 30 lampret
};
72
 
73 2 cvs
extern struct iqueue_entry iqueue[20];
74 138 markom
extern struct iqueue_entry icomplet[20];
75 537 markom
extern unsigned long pc;
76
extern int    mem_cycles;   /* Number of memory cycles in during this instruction execution */
77
extern int    cycles;       /* Total number of cycles executed so far */
78 2 cvs
 
79 306 markom
extern void dumpmemory(unsigned int from, unsigned int to, int disasm, int nl);
80 123 markom
extern unsigned long eval_mem32(unsigned long memaddr,int*);
81
extern unsigned short eval_mem16(unsigned long memaddr,int*);
82
extern unsigned char eval_mem8(unsigned long memaddr,int*);
83
extern void set_mem32(unsigned long memaddr, unsigned long value,int*);
84
extern void set_mem16(unsigned long memaddr, unsigned short value,int*);
85
extern void set_mem8(unsigned long memaddr, unsigned char value,int*);
86
 
87 221 markom
unsigned long evalsim_mem32(unsigned long);
88
unsigned short evalsim_mem16(unsigned long);
89
unsigned char evalsim_mem8(unsigned long);
90 1319 phoenix
 
91
unsigned long evalsim_mem32_atomic(unsigned long, int);
92
unsigned short evalsim_mem16_atomic(unsigned long, int);
93
unsigned char evalsim_mem8_atomic(unsigned long, int);
94
 
95 123 markom
void setsim_mem32(unsigned long,unsigned long);
96
void setsim_mem16(unsigned long,unsigned short);
97
void setsim_mem8(unsigned long,unsigned char);
98
 
99 1319 phoenix
void setsim_mem32_atomic(unsigned long,unsigned long, int);
100
void setsim_mem16_atomic(unsigned long,unsigned short, int);
101
void setsim_mem8_atomic(unsigned long,unsigned char, int);
102
 
103 424 markom
void init_memory_table ();
104 221 markom
 
105 424 markom
/* Changes read/write memory in read/write only */
106
void lock_memory_table ();
107
 
108 426 markom
/* Closes files, etc. */
109
void done_memory_table ();
110
 
111 427 markom
/* Displays current memory configuration */
112
void memory_table_status ();
113
 
114 261 markom
/* Register read and write function for a memory area.
115
   addr is inside the area, if addr & addr_mask == addr_compare
116
   (used also by peripheral devices like 16450 UART etc.) */
117
void register_memoryarea_mask(unsigned long addr_mask, unsigned long addr_compare,
118 970 simons
                         unsigned long size, unsigned granularity, unsigned mc_dev,
119 261 markom
                         unsigned long (readfunc)(unsigned long),
120
                         void (writefunc)(unsigned long, unsigned long));
121
 
122
/* Register read and write function for a memory area.
123
   Memory areas should be aligned. Memory area is rounded up to
124
   fit the nearest 2^n aligment.
125 970 simons
   (used also by peripheral devices like 16450 UART etc.)
126
   If mc_dev is 1, this means that this device will be checked first for match
127
   and will be accessed in case in overlaping memory spaces.
128
   Only one device can have this set to 1 (used for memory controller) */
129 261 markom
void register_memoryarea(unsigned long addr,
130 970 simons
                         unsigned long size, unsigned granularity, unsigned mc_dev,
131 261 markom
                         unsigned long (readfunc)(unsigned long),
132
                         void (writefunc)(unsigned long, unsigned long));
133
 
134 882 simons
/* Finds the memory area for the address and adjust the read and write delays for it. */
135
void adjust_rw_delay(unsigned long memaddr, unsigned long delayr, unsigned long delayw);
136
 
137 221 markom
/* Check if access is to registered area of memory. */
138
struct dev_memarea *verify_memoryarea(unsigned long addr);
139 261 markom
 
140 1308 phoenix
/* Outputs time in pretty form to dest string. */
141 897 markom
char *generate_time_pretty (char *dest, long time_ps);
142 433 markom
 
143 1308 phoenix
/* Returns 32-bit values from mem array. */
144
unsigned long eval_insn(unsigned long, int *);
145
 
146
void simmem_write_word(unsigned long addr, unsigned long value);
147
 
148
unsigned long simmem_read_word(unsigned long addr);
149
 
150
unsigned long eval_direct32(unsigned long addr, int *breakpoint, int through_mmu, int through_dc);
151
 
152
void set_direct32(unsigned long addr, unsigned long value, int *breakpoint, int through_mmu, int through_dc);
153
 
154 221 markom
/* Temporary variable to increase speed.  */
155
extern struct dev_memarea *cur_area;
156
 
157 970 simons
/* Virtual address of current access. */
158
extern unsigned long cur_vadd;
159
 
160 638 simons
/* These are set by mmu if cache inhibit bit is set for current acces.  */
161
extern int data_ci, insn_ci;
162
 
163 123 markom
/* Added by MM */
164
#ifndef LONGEST
165
#define LONGEST long long
166
#define ULONGEST unsigned long long
167
#endif /* ! LONGEST */
168 494 markom
 
169
/* Instructions left to execute */
170
extern int cont_run;
171
 
172
/* History of execution */
173
#define HISTEXEC_LEN 200
174
extern int histexec[HISTEXEC_LEN];
175
 

powered by: WebSVN 2.1.0

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