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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_61/] [or1ksim/] [sim-config.c] - Blame information for rev 212

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

Line No. Rev Author Line
1 7 jrydberg
/* config.c -- Simulator configuration
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
/* Simulator configuration. Eventually this one will be a lot bigger. */
21
 
22 103 lampret
#include <stdio.h>
23 7 jrydberg
#include "sim-config.h"
24 30 lampret
#include "abstract.h"
25 103 lampret
#include "spr_defs.h"
26 7 jrydberg
 
27
struct config config;
28
 
29
void init_defconfig()
30
{
31 103 lampret
        unsigned long val;
32
 
33 30 lampret
        memset(&config, 0, sizeof(config));
34 123 markom
        config.dc.tagtype = NONE/*VIRTUAL*/;
35
        config.ic.tagtype = NONE/*VIRTUAL*/;
36 103 lampret
        config.bp.bpb_sim = 1;
37
        config.bp.btic_sim = 1;
38 30 lampret
        config.clkcycle_ns = 4; /* 4 for 4ns (250MHz) */
39
        config.uarts[0].rxfile = "/tmp/uart0.rx";
40
        config.uarts[0].txfile = "/tmp/uart0.tx";
41
        config.uarts[0].baseaddr = 0x80000000;
42 190 chris
        config.uarts[0].jitter = -1; /* Async behavior */
43 212 erez
        config.dmas[0].baseaddr = 0x90000000;
44 30 lampret
        config.ram.startaddr = MEMORY_START;
45
        config.ram.endaddr = MEMORY_START + MEMORY_LEN;
46 103 lampret
        config.simdebug = 0;
47 173 markom
        config.profile = 0;
48 103 lampret
        config.iprompt = 0;
49
        config.dependstats = 1;
50
        config.dependency = 1;
51
        config.history = 1;
52
        config.superscalar = 1;
53
        config.slp = 1;
54 190 chris
        config.profile = 0;
55 103 lampret
 
56
        mtspr(SPR_VR, SPR_VR_VER & 0x1200);
57 196 simons
        mtspr(SPR_CPUCFGR, SPR_CPUCFGR_OB32S);
58
        mtspr(SPR_DMMUCFGR, (0 << 5) | (7 << 2) | (1 << 0));
59
        mtspr(SPR_IMMUCFGR, (0 << 5) | (7 << 2) | (1 << 0));
60
        mtspr(SPR_DCCFGR, (0 << 5) | (7 << 2) | (1 << 0));
61
        mtspr(SPR_ICCFGR, (0 << 5) | (7 << 2) | (1 << 0));
62
        mtspr(SPR_DCFGR, SPR_DCFGR_WPCI);
63
        mtspr(SPR_PCCFGR, 1);
64 103 lampret
 
65
        val = SPR_UPR_UP | SPR_UPR_DCP | SPR_UPR_ICP | SPR_UPR_DMP |
66
        SPR_UPR_IMP | SPR_UPR_OB32P | SPR_UPR_DUP | SPR_UPR_PICP |
67
        SPR_UPR_PMP | SPR_UPR_TTP;
68
 
69
        mtspr(SPR_UPR, val);
70
}
71
 
72
int parse_args(int argc, char *argv[])
73
{
74
        unsigned long val;
75
 
76
        argv++; argc--;
77
        while (argc) {
78 123 markom
          if (argc && (*argv[0] != '-')) {
79
                    config.filename = argv[0];
80
                    argc--;
81
                    argv++;
82
                 } else
83
                 if (strncmp(*argv, "-loadmem",8) == 0) {  /* (CZ) */
84
                        MemoryBlock** block = &config.memory;
85
                        int address = 0;
86
 
87
                        if(!--argc)
88
                          return 1;
89
 
90
                        if(argv[0][8] == '@')
91
                          {
92
                            char *s;
93
 
94
                            address = strtol(address,&s,0);
95
                            if(*s)
96
                              return 1;
97
                          }
98
                        else if(argv[0][8])
99
                          return 1;
100
 
101
                        while(*block)
102
                          block = &(*block)->next;
103
                        *block = (MemoryBlock*)malloc(sizeof(MemoryBlock));
104
                        memset(*block,0,sizeof(MemoryBlock));
105
                        (*block)->address = address;
106
                        (*block)->file = *(++argv);
107
                        argv++; argc--;
108
                } else
109
                if (strcmp(*argv, "-initmem") == 0) {  /* (CZ) */
110
                        char *pattern,*s;
111
                        if(!--argc)
112
                          return 1;
113
                        pattern = *(++argv);
114
                        if(!strcmp(pattern,"random"))
115
                          config.random_mem = 1;
116
                        else
117
                          {
118
                            val = strtol(pattern,&s,0);
119
                            if(*s)
120
                              return 1;
121
                            config.pattern_mem = val;
122
                          }
123
                } else
124
                if (strcmp(*argv, "-nosrv") == 0) {  /* (CZ) */
125
                        config.inhibit_server = 1;
126
                        argv++; argc--;
127
                } else
128
                if (strcmp(*argv, "-srv") == 0) {  /* (CZ) */
129
                        char *s;
130
                        if(!--argc)
131
                          return 1;
132
                        config.server_port = strtol(*(++argv),&s,10);
133
                        if(*s)
134
                          return 1;
135
                        argv++; argc--;
136
                } else
137 103 lampret
                if (strcmp(*argv, "-i") == 0) {
138
                        config.iprompt = 1;
139
                        argv++; argc--;
140
                } else
141
                if (strcmp(*argv, "-v") == 0) {
142
                        version();
143
                        exit(0);
144
                } else
145
                if (strcmp(*argv, "-bpb") == 0) {
146
                        config.bp.bpb_sim = 0;
147
                        argv++; argc--;
148
                } else
149
                if (strcmp(*argv, "-hazards") == 0) {
150
                        config.dependstats = 0;
151
                        config.dependency = 0;
152
                        argv++; argc--;
153
                } else
154
                if (strcmp(*argv, "-history") == 0) {
155
                        config.history = 0;
156
                        argv++; argc--;
157
                } else
158
                if (strcmp(*argv, "-superscalar") == 0) {
159
                        config.superscalar = 0;
160
                        argv++; argc--;
161
                } else
162
                if (strcmp(*argv, "-fast") == 0) {
163
                        config.superscalar = 0;
164
                        config.history = 0;
165
                        config.dependstats = 0;
166
                        config.dependency = 0;
167
                        config.bp.bpb_sim = 0;
168
                        config.bp.btic_sim = 0;
169
                        config.slp = 0;
170
                        argv++; argc--;
171
                } else
172
                if (strcmp(*argv, "-btic") == 0) {
173
                        config.bp.btic_sim = 0;
174
                        argv++; argc--;
175
                } else
176
                if (strcmp(*argv, "-upr") == 0) {
177
                        argv++; argc--;
178
                        val = strtoul(*argv, NULL, 0);
179
                        mtspr(SPR_UPR, val);
180
                        argv++; argc--;
181
                } else
182
                if (strcmp(*argv, "-ver") == 0) {
183
                        argv++; argc--;
184
                        val = strtoul(*argv, NULL, 0);
185
                        setsprbits(SPR_VR, SPR_VR_VER, val);
186
                        argv++; argc--;
187
                } else
188
                if (strcmp(*argv, "-rev") == 0) {
189
                        argv++; argc--;
190
                        val = strtoul(*argv, NULL, 0);
191
                        setsprbits(SPR_VR, SPR_VR_REV, val);
192
                        argv++; argc--;
193 173 markom
                } else
194
                if (strcmp(*argv, "-profile") == 0) {
195
                  config.profile = 1;
196
                  argv++; argc--;
197 103 lampret
                } else {
198
                        printf("Unknown option: %s\n", *argv);
199
                        return 1;
200
                }
201
        }
202
 
203
        if (!argc)
204
                return 0;
205
 
206
        return 0;
207
}
208
 
209
void print_config()
210
{
211
        printf("Machine initialization...\n");
212 167 markom
        if (testsprbits(SPR_UPR, SPR_UPR_DCP))
213 103 lampret
                printf("Data cache tag: %s\n", config.dc.tagtype == VIRTUAL ? "virtual" : "physical");
214
        else
215
                printf("No data cache.\n");
216 167 markom
        if (testsprbits(SPR_UPR, SPR_UPR_ICP))
217 103 lampret
                printf("Insn cache tag: %s\n", config.ic.tagtype == VIRTUAL ? "virtual" : "physical");
218
        else
219
                printf("No instruction cache.\n");
220
        if (config.bp.bpb_sim)
221
                printf("BPB simulation on.\n");
222
        else
223
                printf("BPB simulation off.\n");
224
        if (config.bp.btic_sim)
225
                printf("BTIC simulation on.\n");
226
        else
227
                printf("BTIC simulation off.\n");
228
        printf("Clock cycle: %d ns\n", config.clkcycle_ns);
229 30 lampret
        printf("RAM: 0x%x to ", config.ram.startaddr);
230
        printf("0x%x (", config.ram.endaddr);
231
        printf("%d KB)\n\n", (config.ram.endaddr - config.ram.startaddr) / 1024);
232 103 lampret
        if (config.simdebug)
233
                printf("simdebug on, ");
234
        else
235
                printf("simdebug off, ");
236
        if (config.iprompt)
237
                printf("interactive prompt on\n");
238
        else
239
                printf("interactive prompt off\n");
240 7 jrydberg
}

powered by: WebSVN 2.1.0

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