Line 17... |
Line 17... |
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
|
/* Simulator configuration. Eventually this one will be a lot bigger. */
|
/* Simulator configuration. Eventually this one will be a lot bigger. */
|
|
|
|
#include <stdio.h>
|
#include "sim-config.h"
|
#include "sim-config.h"
|
#include "abstract.h"
|
#include "abstract.h"
|
|
#include "spr_defs.h"
|
|
|
struct config config;
|
struct config config;
|
|
|
void init_defconfig()
|
void init_defconfig()
|
{
|
{
|
printf("Machine initialization...\n");
|
unsigned long val;
|
|
|
memset(&config, 0, sizeof(config));
|
memset(&config, 0, sizeof(config));
|
config.dc.tagtype = VIRTUAL;
|
config.dc.tagtype = VIRTUAL;
|
printf("Data cache tag: %s\n", config.dc.tagtype == VIRTUAL ? "virtual" : "physical");
|
|
config.ic.tagtype = VIRTUAL;
|
config.ic.tagtype = VIRTUAL;
|
printf("Insn cache tag: %s\n", config.ic.tagtype == VIRTUAL ? "virtual" : "physical");
|
config.bp.bpb_sim = 1;
|
|
config.bp.btic_sim = 1;
|
config.clkcycle_ns = 4; /* 4 for 4ns (250MHz) */
|
config.clkcycle_ns = 4; /* 4 for 4ns (250MHz) */
|
printf("Clock cycle: %d ns\n", config.clkcycle_ns);
|
|
config.uarts[0].rxfile = "/tmp/uart0.rx";
|
config.uarts[0].rxfile = "/tmp/uart0.rx";
|
config.uarts[0].txfile = "/tmp/uart0.tx";
|
config.uarts[0].txfile = "/tmp/uart0.tx";
|
config.uarts[0].baseaddr = 0x80000000;
|
config.uarts[0].baseaddr = 0x80000000;
|
config.ram.startaddr = MEMORY_START;
|
config.ram.startaddr = MEMORY_START;
|
config.ram.endaddr = MEMORY_START + MEMORY_LEN;
|
config.ram.endaddr = MEMORY_START + MEMORY_LEN;
|
|
config.simdebug = 0;
|
|
config.iprompt = 0;
|
|
config.dependstats = 1;
|
|
config.dependency = 1;
|
|
config.history = 1;
|
|
config.superscalar = 1;
|
|
config.slp = 1;
|
|
|
|
mtspr(SPR_VR, SPR_VR_VER & 0x1200);
|
|
|
|
val = SPR_UPR_UP | SPR_UPR_DCP | SPR_UPR_ICP | SPR_UPR_DMP |
|
|
SPR_UPR_IMP | SPR_UPR_OB32P | SPR_UPR_DUP | SPR_UPR_PICP |
|
|
SPR_UPR_PMP | SPR_UPR_TTP;
|
|
|
|
mtspr(SPR_UPR, val);
|
|
}
|
|
|
|
int parse_args(int argc, char *argv[])
|
|
{
|
|
unsigned long val;
|
|
|
|
argv++; argc--;
|
|
while (argc) {
|
|
if (argc && (*argv[0] != '-'))
|
|
return 0;
|
|
|
|
if (strcmp(*argv, "-i") == 0) {
|
|
config.iprompt = 1;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-v") == 0) {
|
|
version();
|
|
exit(0);
|
|
} else
|
|
if (strcmp(*argv, "-bpb") == 0) {
|
|
config.bp.bpb_sim = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-hazards") == 0) {
|
|
config.dependstats = 0;
|
|
config.dependency = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-history") == 0) {
|
|
config.history = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-superscalar") == 0) {
|
|
config.superscalar = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-fast") == 0) {
|
|
config.superscalar = 0;
|
|
config.history = 0;
|
|
config.dependstats = 0;
|
|
config.dependency = 0;
|
|
config.bp.bpb_sim = 0;
|
|
config.bp.btic_sim = 0;
|
|
config.slp = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-btic") == 0) {
|
|
config.bp.btic_sim = 0;
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-upr") == 0) {
|
|
argv++; argc--;
|
|
val = strtoul(*argv, NULL, 0);
|
|
mtspr(SPR_UPR, val);
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-ver") == 0) {
|
|
argv++; argc--;
|
|
val = strtoul(*argv, NULL, 0);
|
|
setsprbits(SPR_VR, SPR_VR_VER, val);
|
|
argv++; argc--;
|
|
} else
|
|
if (strcmp(*argv, "-rev") == 0) {
|
|
argv++; argc--;
|
|
val = strtoul(*argv, NULL, 0);
|
|
setsprbits(SPR_VR, SPR_VR_REV, val);
|
|
argv++; argc--;
|
|
} else {
|
|
printf("Unknown option: %s\n", *argv);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
if (!argc)
|
|
return 0;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void print_config()
|
|
{
|
|
printf("Machine initialization...\n");
|
|
if (getsprbits(SPR_UPR, SPR_UPR_DCP))
|
|
printf("Data cache tag: %s\n", config.dc.tagtype == VIRTUAL ? "virtual" : "physical");
|
|
else
|
|
printf("No data cache.\n");
|
|
if (getsprbits(SPR_UPR, SPR_UPR_ICP))
|
|
printf("Insn cache tag: %s\n", config.ic.tagtype == VIRTUAL ? "virtual" : "physical");
|
|
else
|
|
printf("No instruction cache.\n");
|
|
if (config.bp.bpb_sim)
|
|
printf("BPB simulation on.\n");
|
|
else
|
|
printf("BPB simulation off.\n");
|
|
if (config.bp.btic_sim)
|
|
printf("BTIC simulation on.\n");
|
|
else
|
|
printf("BTIC simulation off.\n");
|
|
printf("Clock cycle: %d ns\n", config.clkcycle_ns);
|
printf("RAM: 0x%x to ", config.ram.startaddr);
|
printf("RAM: 0x%x to ", config.ram.startaddr);
|
printf("0x%x (", config.ram.endaddr);
|
printf("0x%x (", config.ram.endaddr);
|
printf("%d KB)\n\n", (config.ram.endaddr - config.ram.startaddr) / 1024);
|
printf("%d KB)\n\n", (config.ram.endaddr - config.ram.startaddr) / 1024);
|
config.simdebug = 0;
|
if (config.simdebug)
|
printf("simdebug off\n");
|
printf("simdebug on, ");
|
|
else
|
|
printf("simdebug off, ");
|
|
if (config.iprompt)
|
|
printf("interactive prompt on\n");
|
|
else
|
|
printf("interactive prompt off\n");
|
}
|
}
|
|
|
No newline at end of file
|
No newline at end of file
|