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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_61/] [or1ksim/] [sim-config.h] - Blame information for rev 713

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

Line No. Rev Author Line
1 7 jrydberg
/* config.h -- Simulator configuration 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 428 markom
 
20
#ifndef _CONFIG_H_
21
#define _CONFIG_H_
22
 
23 173 markom
#include <stdio.h>
24
 
25 7 jrydberg
/* Simulator configuration macros. Eventually this one will be a lot bigger. */
26 30 lampret
 
27 672 markom
#define MAX_UARTS        4            /* Max. number of UARTs simulated */   
28
#define MAX_DMAS         4            /* Max. number of DMA controllers */
29
#define MAX_ETHERNETS    4            /* Max. number of Ethernet MACs   */
30
#define MAX_GPIOS        4            /* Max. number of GPIO modules    */
31
#define MAX_MEMORIES     16           /* Max. number of memory devices attached */
32
#define MAX_VGAS         4            /* Max. number of VGAs */
33
#define MAX_SBUF_LEN     256          /* Max. length of store buffer */
34 424 markom
 
35 672 markom
#define EXE_LOG_HARDWARE 0            /* Print out RTL states */
36 675 markom
#define EXE_LOG_SIMPLE   1            /* Executed log prints out dissasembly */
37
#define EXE_LOG_SOFTWARE 2            /* Simple with some register output*/
38 672 markom
 
39 239 markom
#define STR_SIZE        (256)
40
 
41 7 jrydberg
struct config {
42 239 markom
  struct {
43 332 markom
    int enabled;                      /* Is tick timer enabled?  */
44
  } tick;
45
 
46 261 markom
  int nuarts;
47 239 markom
  struct {
48 310 markom
    char rxfile[STR_SIZE];            /* Filename for RX */
49
    char txfile[STR_SIZE];            /* Filename for TX (required) */
50
    int jitter;                       /* CZ 250801 - in msecs...time to block */
51
    unsigned long baseaddr;           /* Naturally aligned base address */
52 332 markom
    int irq;                          /* IRQ of this device */
53 313 markom
    unsigned long vapi_id;            /* VAPI id for this instance */
54 341 markom
    int uart16550;                    /* Whether this device is uart 16450 or 16550 */
55 424 markom
  } uarts[MAX_UARTS];
56 239 markom
 
57 261 markom
  int ndmas;
58 239 markom
  struct {
59
    unsigned long baseaddr;
60 332 markom
    int irq;                          /* IRQ of this device */
61 313 markom
    unsigned long vapi_id;            /* VAPI id for this instance */
62 424 markom
  } dmas[MAX_DMAS];
63 239 markom
 
64 304 markom
  int nethernets;
65 361 markom
  struct {
66
    unsigned long baseaddr;
67
    unsigned dma;                     /* Which controller is this ethernet "connected" to */
68
    unsigned tx_channel;              /* DMA channel used for TX */
69
    unsigned rx_channel;              /* DMA channel used for RX */
70
    char rxfile[STR_SIZE];            /* Filename for RX */
71
    char txfile[STR_SIZE];            /* File for TX */
72
    unsigned long vapi_id;            /* VAPI id for this instance */
73 424 markom
  } ethernets[MAX_ETHERNETS];
74 444 erez
 
75
  int ngpios;
76 261 markom
  struct {
77 444 erez
    unsigned long baseaddr;           /* Base address */
78
    int irq;                          /* IRQ of this device */
79 477 erez
    unsigned long base_vapi_id;       /* First VAPI ID.  GPIO uses 8 consecutive IDs */
80 444 erez
  } gpios[MAX_GPIOS];
81 645 markom
 
82
  int nvgas;
83
  struct {
84
    unsigned long baseaddr;           /* Base address */
85
    int irq;                          /* IRQ of this device */
86
    int refresh_rate;                 /* Number of clocks per refresh */
87
    char filename[STR_SIZE];          /* Base file name; suffix of ####.bmp is added */
88
  } vgas[MAX_VGAS];
89 444 erez
 
90
  struct {
91 645 markom
    int enabled;                      /* Whether frame buffer is enabled */
92 647 markom
    unsigned long baseaddr;           /* Base address of frame buffer register */
93 645 markom
    int refresh_rate;                 /* Number of clocks per refresh */
94
    char filename[STR_SIZE];          /* Base file name; suffix of ####.bmp is added */
95
  } fb;
96 664 markom
 
97
  struct {
98
    int enabled;                      /* Is keyboard enabled?  */
99
    unsigned long baseaddr;           /* Base address of frame buffer register */
100
    int irq;                          /* Irq number of this device */
101
    char rxfile[STR_SIZE];            /* Filename for RX */
102
  } kbd;
103 645 markom
 
104
  struct {
105 261 markom
    int enabled;                      /* is MC enabled? */
106
    unsigned long baseaddr;           /* Naturally aligned base address */
107 239 markom
    unsigned POC;                     /* power on reset configuration register */
108
  } mc;
109 645 markom
 
110 262 markom
  struct {
111 394 markom
    int pattern;                      /* A user specified memory initialization pattern */
112
    int random_seed;                  /* Initialize the memory with random values, starting with seed */
113 262 markom
    enum {
114 269 markom
      MT_UNKNOWN,
115 262 markom
      MT_PATTERN,
116
      MT_RANDOM
117
    } type;
118 424 markom
    int nmemories;                    /* Number of attached memories */
119
    struct {
120
      int ce;                         /* Which ce this memory is associated with */
121
      unsigned long baseaddr;         /* Start address of the memory */
122
      unsigned long size;             /* Memory size */
123
      char name[STR_SIZE];            /* Memory type string */
124
      char log[STR_SIZE];             /* Memory log filename */
125
      int delayr;                     /* Read cycles */
126
      int delayw;                     /* Write cycles */
127
    } table[MAX_MEMORIES];
128 262 markom
  } memory;
129 425 markom
 
130
  struct {
131
    int enabled;                      /* Whether IMMU is enabled */
132
    int nways;                        /* Number of ITLB ways */
133
    int nsets;                        /* Number of ITLB sets */
134
    int pagesize;                     /* ITLB page size */
135
    int entrysize;                    /* ITLB entry size */
136
    int ustates;                      /* number of ITLB usage states */
137 541 markom
    int missdelay;                    /* How much cycles does the miss cost */
138
    int hitdelay;                     /* How much cycles does the hit cost */
139 425 markom
  } immu;
140
 
141
  struct {
142
    int enabled;                      /* Whether DMMU is enabled */
143
    int nways;                        /* Number of DTLB ways */
144
    int nsets;                        /* Number of DTLB sets */
145
    int pagesize;                     /* DTLB page size */
146
    int entrysize;                    /* DTLB entry size */
147
    int ustates;                      /* number of DTLB usage states */
148 541 markom
    int missdelay;                    /* How much cycles does the miss cost */
149
    int hitdelay;                     /* How much cycles does the hit cost */
150 425 markom
  } dmmu;
151 428 markom
 
152
  struct {
153
    int enabled;                      /* Whether instruction cache is enabled */
154
    int nways;                        /* Number of IC ways */
155
    int nsets;                        /* Number of IC sets */
156
    int blocksize;                    /* IC entry size */
157
    int ustates;                      /* number of IC usage states */
158 541 markom
    int missdelay;                    /* How much cycles does the miss cost */
159
    int hitdelay;                     /* How much cycles does the hit cost */
160 428 markom
  } ic;
161 424 markom
 
162 263 markom
  struct {
163 541 markom
    int enabled;                      /* Whether data cache is enabled */
164 428 markom
    int nways;                        /* Number of DC ways */
165
    int nsets;                        /* Number of DC sets */
166
    int blocksize;                    /* DC entry size */
167
    int ustates;                      /* number of DC usage states */
168 541 markom
    int store_missdelay;              /* How much cycles does the store miss cost */
169
    int store_hitdelay;               /* How much cycles does the store hit cost */
170
    int load_missdelay;               /* How much cycles does the load miss cost */
171
    int load_hitdelay;                /* How much cycles does the load hit cost */
172 428 markom
  } dc;
173
 
174
  struct {
175 672 markom
    int enabled;                      /* branch prediction buffer analysis */
176
    int sbp_bnf_fwd;                  /* Static branch prediction for l.bnf uses forward prediction */
177
    int sbp_bf_fwd;                   /* Static branch prediction for l.bf uses forward prediction */
178
    int btic;                         /* branch prediction target insn cache analysis */
179
    int missdelay;                    /* How much cycles does the miss cost */
180
    int hitdelay;                     /* How much cycles does the hit cost */
181
#if 0                                 
182
    int nways;                        /* Number of BP ways */
183
    int nsets;                        /* Number of BP sets */
184
    int blocksize;                    /* BP entry size */
185
    int ustates;                      /* number of BP usage states */
186
    int pstates;                      /* number of BP predict states */
187
#endif                                
188
  } bpb;
189
 
190
  struct {
191
    unsigned long upr;                /* Unit present register */
192
    unsigned long ver, rev;           /* Version register */
193
    int sr;                           /* Supervision register */
194
    int superscalar;                  /* superscalara analysis */
195
    int hazards;                      /* dependency hazards analysis */
196
    int dependstats;                  /* dependency statistics */
197
    int sbuf_len;                     /* length of store buffer, zero if disabled */
198
  } cpu;
199
 
200
  struct {
201
    int debug;                        /* Simulator debugging */
202
    int verbose;                      /* Force verbose output */
203
 
204
    int profile;                      /* Is profiler running */
205
    int profile_mode;                 /* Profiler operating mode */
206
    char prof_fn[STR_SIZE];           /* Profiler filename */
207
 
208
    int mprofile;                     /* Is memory profiler running */
209
    int mprofile_mode;                /* Memory profiler operating mode */
210
    int mprofile_group;               /* Grouping for memory profiler */
211
    char mprof_fn[STR_SIZE];          /* Memory profiler filename */
212
 
213
    int history;                      /* instruction stream history analysis */
214
    int exe_log;                      /* Print out RTL states? */
215
    int exe_log_type;                 /* Type of log */
216
    int exe_log_start;                /* First instruction to log */
217
    int exe_log_end;                  /* Last instruction to log, -1 if continuous */
218
    int exe_log_marker;               /* If nonzero, place markers before each exe_log_marker instructions */
219
    char exe_log_fn[STR_SIZE];        /* RTL state comparison filename */
220
    int spr_log;                      /* Print out SPR states */
221
    char spr_log_fn[STR_SIZE];        /* SPR state log filename */
222
    long clkcycle_ps;                 /* Clock duration in ps */
223
  } sim;
224
 
225
  struct {
226
    int enabled;                      /* Whether is debug module enabled */
227
    int gdb_enabled;                  /* Whether is debugging with gdb possible */
228
    int server_port;                  /* A user specified port number for services */
229
    unsigned long vapi_id;            /* "Fake" vapi device id for JTAG proxy */
230
  } debug;
231
 
232
  struct {                            /* Verification API, part of Advanced Core Verification */
233
    int enabled;                      /* Whether is VAPI module enabled */
234
    int server_port;                  /* A user specified port number for services */
235
    int log_enabled;                  /* Whether to log the vapi requests */
236
    int hide_device_id;               /* Whether to log device ID for each request */
237
    char vapi_fn[STR_SIZE];           /* vapi log filename */
238
  } vapi;
239
 
240
  struct {
241
    int enabled;                      /* Whether power menagement is operational */
242
  } pm;
243
};
244
 
245
struct runtime {
246
  struct {
247
    FILE *fprof;                      /* Profiler file */
248
    FILE *fmprof;                     /* Memory profiler file */
249
    FILE *fexe_log;                   /* RTL state comparison file */
250
    FILE *fspr_log;                   /* SPR state log file */
251
    int init;                         /* Whether we are still initilizing sim */
252
    int script_file_specified;        /* Whether script file was already loaded */
253
    char *filename;                   /* Original Command Simulator file (CZ) */
254
    int output_cfg;                   /* Whether sim is to output cfg files */
255
    char script_fn[STR_SIZE];         /* Script file read */
256
    int iprompt;                      /* Interactive prompt */
257 264 markom
  } sim;
258 557 markom
 
259
  struct {
260 672 markom
    unsigned long ifea;               /* Instruction fetch effective address */
261
    unsigned long lea;                /* Load effective address */
262
    unsigned long sea;                /* Store effective address */
263
    unsigned long ld;                 /* Load data */
264
    unsigned long sd;                 /* Store data */
265
    unsigned long lsea;               /* Load/Store effective address */
266
  } cpu;
267
 
268
  struct {
269 551 markom
    int random_seed;                  /* Initialize the memory with random values, starting with seed */
270 672 markom
  } memory;
271
 
272
  struct {                            /* Verification API, part of Advanced Core Verification */
273
    int enabled;                      /* Whether is VAPI module enabled */
274
    FILE *vapi_file;                  /* vapi file */
275
    int server_port;                  /* A user specified port number for services */
276 293 markom
  } vapi;
277 7 jrydberg
};
278 239 markom
 
279 551 markom
#if FAST_SIM
280
#include "fast_config.c"
281 557 markom
#define IFF(x) if (x)
282 551 markom
#else
283 7 jrydberg
extern struct config config;
284 557 markom
#define IFF(x) if (1)
285 551 markom
#endif
286
 
287 361 markom
extern struct runtime runtime;
288 239 markom
 
289
/* Read environment from a script file. Does not fail - assumes defaukt configuration instead. */
290
void read_script_file (char *filename);
291 361 markom
 
292
/* Executes set sim command.  Returns nonzero if error.  */
293
void set_config_command (char *s);
294 428 markom
 
295 549 markom
/* Outputs C structure of current config to file */
296
void output_cfg (FILE *f);
297
 
298 428 markom
#endif

powered by: WebSVN 2.1.0

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