URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 1483 to Rev 1484
- ↔ Reverse comparison
Rev 1483 → Rev 1484
/trunk/or1ksim/cpu/or32/execute.c
437,11 → 437,12
} |
|
/* Outputs dissasembled instruction */ |
void dump_exe_log () |
void dump_exe_log (void) |
{ |
oraddr_t insn_addr = cpu_state.iqueue.insn_addr; |
unsigned int i, j; |
uorreg_t operand; |
int breakpoint; |
|
if (insn_addr == 0xffffffff) return; |
if ((config.sim.exe_log_start <= runtime.cpu.instructions) && |
455,11 → 456,12
case EXE_LOG_HARDWARE: |
fprintf (runtime.sim.fexe_log, "\nEXECUTED(%11llu): %"PRIxADDR": ", |
runtime.cpu.instructions, insn_addr); |
fprintf (runtime.sim.fexe_log, "%.2x%.2x", evalsim_mem8_void(insn_addr), |
evalsim_mem8_void(insn_addr + 1)); |
fprintf (runtime.sim.fexe_log, "%.2x%.2x", |
evalsim_mem8_void(insn_addr + 2), |
evalsim_mem8_void(insn_addr + 3)); |
eval_direct8(insn_addr, &breakpoint, 0, 0), |
eval_direct8(insn_addr + 1, &breakpoint, 0, 0)); |
fprintf (runtime.sim.fexe_log, "%.2x%.2x", |
eval_direct8(insn_addr + 2, &breakpoint, 0, 0), |
eval_direct8(insn_addr + 3, &breakpoint, 0 ,0)); |
for(i = 0; i < MAX_GPRS; i++) { |
if (i % 4 == 0) |
fprintf(runtime.sim.fexe_log, "\n"); |
/trunk/or1ksim/cpu/common/abstract.c
336,35 → 336,6
|
/* Returns 32-bit values from mem array. Big endian version. |
* |
* this function is only used in dumpmemory() below, so it's |
* safe to asume it's for simulator purposes access only, |
* hence the use of eval_mem32_void() |
* |
* STATISTICS OK. |
*/ |
static uint32_t read_mem(oraddr_t memaddr, int* breakpoint) |
{ |
uint32_t temp; |
|
cur_vadd = memaddr; |
if (config.debug.enabled) |
*breakpoint += CheckDebugUnit(DebugLoadAddress,memaddr); /* 28/05/01 CZ */ |
temp = evalsim_mem32_void(memaddr); |
if (!cur_area) { |
PRINTF("EXCEPTION: read out of memory (32-bit access to %"PRIxADDR")\n", |
memaddr); |
except_handle(EXCEPT_BUSERR, cur_vadd); |
temp = 0; |
} else if (cur_area->log) |
fprintf (cur_area->log, "[%"PRIxADDR"] -> read %08"PRIx32"\n", memaddr, temp); |
|
if (config.debug.enabled) |
*breakpoint += CheckDebugUnit(DebugLoadData,temp); /* MM170901 */ |
return temp; |
} |
|
/* Returns 32-bit values from mem array. Big endian version. |
* |
* STATISTICS OK (only used for cpu_access, that is architectural access) |
*/ |
uint32_t eval_mem32(oraddr_t memaddr,int* breakpoint) |
1008,6 → 979,7
oraddr_t i, j; |
struct label_entry *tmp; |
int ilen = disasm ? 4 : 16; |
int breakpoint; |
|
for(i = from; i < to; i += ilen) { |
PRINTF("%"PRIxADDR": ", i); |
1019,12 → 991,11
entry = get_label(i + j); |
if (entry) |
PRINTF("(%s)", entry->name); |
PRINTF("%02"PRIx8" ", evalsim_mem8(i + j)); |
PRINTF("%02"PRIx8" ", eval_direct8(i + j, &breakpoint, 0, 0)); |
} else PRINTF("XX "); |
j++; |
} else { |
int breakpoint; |
uint32_t _insn = read_mem(i, &breakpoint); |
uint32_t _insn = eval_direct32(i, &breakpoint, 0, 0); |
int index = insn_decode (_insn); |
int len = insn_len (index); |
|
/trunk/or1ksim/cpu/common/parse.c
94,6 → 94,7
static oraddr_t translate(oraddr_t laddr,int* breakpoint) |
{ |
int i; |
int brkp; |
|
/* No translation (i.e. when loading kernel into simulator) */ |
/* PRINTF("transl_table=%x laddr=%x\n", transl_table, laddr); |
103,26 → 104,35
|
/* Try to find our translation in the table. */ |
for(i = 0; i < (MEMORY_LEN / PAGE_SIZE) * 16; i += 16) |
if ((laddr & ~(PAGE_SIZE - 1)) == evalsim_mem32(transl_table + i)) { |
setsim_mem32(transl_table + i + 8, -2); /* Page modified */ |
if ((laddr & ~(PAGE_SIZE - 1)) == eval_direct32(transl_table + i, |
&brkp, 0, 0)) { |
/* Page modified */ |
set_direct32(transl_table + i + 8, -2, &brkp, 0, 0); |
PRINTF("found paddr=%"PRIx32"\n", |
evalsim_mem32(transl_table + i + 4) | (laddr & (PAGE_SIZE - 1))); |
return (oraddr_t)evalsim_mem32(transl_table + i + 4) | (laddr & (oraddr_t)(PAGE_SIZE - 1)); |
eval_direct32(transl_table + i + 4, &brkp, 0, 0) | |
(laddr & (PAGE_SIZE - 1))); |
return (oraddr_t)eval_direct32(transl_table + i + 4, &brkp, 0, 0) | |
(laddr & (oraddr_t)(PAGE_SIZE - 1)); |
} |
|
/* Allocate new phy page for us. */ |
for(i = 0; i < (MEMORY_LEN / PAGE_SIZE) * 16; i += 16) |
if (evalsim_mem32(transl_table + i + 8) == 0) { |
setsim_mem32(transl_table + i, laddr & ~(PAGE_SIZE - 1)); /* VPN */ |
setsim_mem32(transl_table + i + 4, (i/16) * PAGE_SIZE); /* PPN */ |
setsim_mem32(transl_table + i + 8, -2); /* Page modified */ |
if (eval_direct32(transl_table + i + 8, &brkp, 0, 0) == 0) { |
/* VPN */ |
set_direct32(transl_table + i, laddr & ~(PAGE_SIZE - 1), &brkp, 0, 0); |
/* PPN */ |
set_direct32(transl_table + i + 4, (i/16) * PAGE_SIZE, &brkp, 0, 0); |
/* Page modified */ |
set_direct32(transl_table + i + 8, -2, &brkp, 0, 0); |
PRINTF("newly allocated ppn=%"PRIx32"\n", |
evalsim_mem32(transl_table + i + 4)); |
eval_direct32(transl_table + i + 4, &brkp, 0, 0)); |
PRINTF("newly allocated .ppn=%"PRIxADDR"\n", transl_table + i + 4); |
PRINTF("newly allocated ofs=%"PRIxADDR"\n", (laddr & (PAGE_SIZE - 1))); |
PRINTF("newly allocated paddr=%"PRIx32"\n", |
evalsim_mem32(transl_table + i + 4) | (laddr & (PAGE_SIZE - 1))); |
return (oraddr_t)evalsim_mem32(transl_table + i + 4) | (laddr & (oraddr_t)(PAGE_SIZE - 1)); |
eval_direct32(transl_table + i + 4, &brkp, 0, 0) | |
(laddr & (PAGE_SIZE - 1))); |
return (oraddr_t)eval_direct32(transl_table + i + 4, &brkp, 0, 0) | |
(laddr & (oraddr_t)(PAGE_SIZE - 1)); |
} |
/* If we come this far then all phy memory is used and we can't find our page |
nor allocate new page. */ |
/trunk/or1ksim/cuc/cuc.c
482,7 → 482,8
assert (fo = fopen (out_fn, "wt+")); |
|
do { |
unsigned long d = evalsim_mem32 (a); |
int breakpoint; |
unsigned long d = eval_direct32 (a, &breakpoint, 0, 0); |
int index = insn_decode (d); |
assert (index >= 0); |
if (x) x++; |
/trunk/or1ksim/sim-cmd.c
93,6 → 93,7
static void debugmem( oraddr_t from, oraddr_t to ) |
{ |
int i; |
int breakpoint; |
PRINTF("starting to dump mem...\n"); |
for(i=from; i<to; ) { |
struct label_entry *entry; |
102,7 → 103,7
if (verify_memoryarea(i) && (entry = get_label(i))) |
PRINTF("label: %s |", entry->name); |
|
insn = evalsim_mem32(i); |
insn = eval_direct32(i, &breakpoint, 0, 0); |
disassemble_insn (insn); |
PRINTF("%08x %s\n", insn, disassembled); |
i += 4; |
263,6 → 264,7
{ |
static oraddr_t from = 0, to = 0; |
static unsigned int size = 0; |
int breakpoint; |
int i; |
|
if(argc >= 2) { |
287,7 → 289,8
} |
|
for(i = 0; i < size; i += 4) |
setsim_mem32(to + i, evalsim_mem32(from + i)); |
set_direct32(to + i, eval_direct32(from + i, &breakpoint, 0, 0), |
&breakpoint, 0, 0); |
return 0; |
} |
|
/trunk/or1ksim/peripheral/fb.c
186,10 → 186,11
int align = (4 - sx) % 4; |
int zero = CNV32(0); |
int add; |
int breakpoint; |
while (align < 0) align += 4; |
for (x = 0; x < sx; x++) { |
add = (fb->addr & ~(FB_WRAP - 1)) | ((fb->addr + y * sx + x) & (FB_WRAP - 1)); |
fputc (evalsim_mem8 (add), fo); |
fputc (eval_direct8 (add, &breakpoint, 0, 0), fo); |
} |
if (align && !fwrite (&zero, align, 1, fo)) return 1; |
} |
209,6 → 210,8
|
unsigned short int u16; |
unsigned long int u32; |
|
int breakpoint; |
|
if (config.sim.verbose) PRINTF ("Creating %s...", filename); |
fo = fopen (filename, "wb+"); |
251,13 → 254,13
for (x = 0; x < sx; x++) |
if (y >= fb->cameray && x >= fb->camerax && y < fb->cameray + CAM_SIZEY && x < fb->camerax + CAM_SIZEX) { |
int add = (fb->cam_addr + (x - fb->camerax + (y - fb->cameray) * CAM_SIZEX) * 2) ^ 2; |
unsigned short d = evalsim_mem16 (add); |
unsigned short d = eval_direct16 (add, &breakpoint, 0, 0); |
line[x][0] = ((d >> 0) & 0x1f) << 3; /* Blue */ |
line[x][1] = ((d >> 5) & 0x3f) << 2; /* Green */ |
line[x][2] = ((d >> 11) & 0x1f) << 3; /* Red */ |
} else { |
int add = (fb->addr & ~(FB_WRAP - 1)) | ((fb->addr + y * sx + x) & (FB_WRAP - 1)); |
unsigned short d = fb->pal[evalsim_mem8 (add)]; |
unsigned short d = fb->pal[eval_direct8 (add, &breakpoint, 0, 0)]; |
line[x][0] = ((d >> 0) & 0x1f) << 3; /* Blue */ |
line[x][1] = ((d >> 5) & 0x3f) << 2; /* Green */ |
line[x][2] = ((d >> 11) & 0x1f) << 3; /* Red */ |
/trunk/or1ksim/peripheral/vga.c
190,7 → 190,8
int align = 4 - ((bpp + 1) * sx) % 4; |
int zero = 0; |
for (x = 0; x < sx; x++) { |
unsigned long pixel = evalsim_mem32 (vga->vbar[vga->vbindex] + (y * sx + x) * (bpp + 1)); |
int breakpoint; |
unsigned long pixel = eval_direct32 (vga->vbar[vga->vbindex] + (y * sx + x) * (bpp + 1), &breakpoint, 0, 0); |
if (!fwrite (&pixel, sizeof (pixel), 1, fo)) return 1; |
} |
if (!fwrite (&zero, align, 1, fo)) return 1; |
/trunk/or1ksim/support/dumpverilog.c
52,12 → 52,13
unsigned int i, done = 0; |
struct label_entry *tmp; |
char dis[DISWIDTH + 100]; |
int breakpoint; |
PRINTF("// This file was generated by or1ksim %s\n", rcsrev); |
PRINTF(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8))); |
|
for(i = from; i < to; i++) |
{ |
unsigned int _insn = evalsim_mem32 (i); |
unsigned int _insn = eval_direct32 (i, &breakpoint, 0, 0); |
int index = insn_decode(_insn); |
if (index >= 0) |
{ |
65,7 → 66,8
if (tmp) |
PRINTF("\n//\t%s%s", tmp->name, LABELEND_CHAR); |
|
PRINTF("\n\tmem['h%x] = %d'h%.8"PRIx32";", i/DWQ, DW, evalsim_mem32(i)); |
PRINTF("\n\tmem['h%x] = %d'h%.8"PRIx32";", i/DWQ, DW, |
eval_direct32(i, &breakpoint, 0, 0)); |
|
disassemble_insn (_insn); |
strcpy (dis, disassembled); |
80,7 → 82,8
if (i % 64 == 0) |
PRINTF("\n"); |
|
PRINTF("\n\tmem['h%x] = 'h%.2x;", i/DWQ, evalsim_mem8(i)); |
PRINTF("\n\tmem['h%x] = 'h%.2x;", i/DWQ, |
eval_direct8(i, &breakpoint, 0, 0)); |
} |
done = 1; |
} |
99,10 → 102,11
PRINTF("\n%.8x: ", i); |
|
/* don't print ascii chars below 0x20. */ |
if (evalsim_mem32(i) < 0x20) |
PRINTF("0x%.2x ", (unsigned char)evalsim_mem32(i)); |
if (eval_direct32(i, &breakpoint, 0, 0) < 0x20) |
PRINTF("0x%.2x ", (uint8_t)eval_direct32(i, &breakpoint, 0, 0)); |
else |
PRINTF("0x%.2x'%c' ", (unsigned char)evalsim_mem32(i), (unsigned char)evalsim_mem32(i)); |
PRINTF("0x%.2x'%c' ", (uint8_t)eval_direct32(i, &breakpoint, 0, 0), |
(char)eval_direct32(i, &breakpoint, 0, 0)); |
} |
PRINTF(OR1K_MEM_VERILOG_FOOTER); |
} |
110,17 → 114,18
void dumphex(unsigned int from, unsigned int to) |
{ |
unsigned int i; |
int breakpoint; |
|
for(i = from; i < to; i++) { |
unsigned int _insn = evalsim_mem32 (i); |
unsigned int _insn = eval_direct32 (i, &breakpoint, 0, 0); |
int index = insn_decode(_insn); |
if (index >= 0) |
{ |
PRINTF("%.8"PRIx32"\n", evalsim_mem32(i)); |
PRINTF("%.8"PRIx32"\n", eval_direct32(i, &breakpoint, 0, 0)); |
|
i += insn_len(index) - 1; |
} |
else |
PRINTF("%.2x\n", evalsim_mem8(i)); |
PRINTF("%.2x\n", eval_direct8(i, &breakpoint, 0, 0)); |
} |
} |