OpenCores
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));
}
}

powered by: WebSVN 2.1.0

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