Line 34... |
Line 34... |
#include "execute.h"
|
#include "execute.h"
|
#include "sprs.h"
|
#include "sprs.h"
|
#include "stats.h"
|
#include "stats.h"
|
#include "except.h"
|
#include "except.h"
|
#include "dumpverilog.h"
|
#include "dumpverilog.h"
|
|
#include "or32.h"
|
|
|
extern struct mem_entry mem[MEMORY_LEN];
|
extern struct mem_entry mem[MEMORY_LEN];
|
extern char rcsrev[];
|
extern char rcsrev[];
|
|
|
void dumpverilog(char *verilog_modname, unsigned int from, unsigned int to)
|
void dumpverilog(char *verilog_modname, unsigned int from, unsigned int to)
|
{
|
{
|
unsigned int i, done = 0;
|
unsigned int i, done = 0;
|
struct label_entry *tmp;
|
struct label_entry *tmp;
|
char dis[DISWIDTH + 100];
|
char dis[DISWIDTH + 100];
|
|
int breakpoint = 0;
|
|
|
printf("// This file was generated by or1ksim %s\n", rcsrev);
|
printf("// This file was generated by or1ksim %s\n", rcsrev);
|
printf(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8)));
|
printf(OR1K_MEM_VERILOG_HEADER(verilog_modname, from/DWQ, to/DWQ, (DISWIDTH*8)));
|
|
|
for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++) {
|
for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++) {
|
if (mem[i].insn) {
|
if (mem[i].insn->insn_index >= 0) {
|
tmp = mem[i].label;
|
tmp = mem[i].label;
|
for(; tmp; tmp = tmp->next)
|
for(; tmp; tmp = tmp->next)
|
printf("\n//\t%s%s", tmp->name, LABELEND_CHAR);
|
printf("\n//\t%s%s", tmp->name, LABELEND_CHAR);
|
|
|
printf("\n\tmem['h%x] = %d'h%.2x%.2x", i/DWQ, DW, mem[i].data, mem[i+1].data);
|
printf("\n\tmem['h%x] = %d'h%.2x%.2x", i/DWQ, DW, mem[i].data, mem[i+1].data);
|
printf("%.2x%.2x;", mem[i+2].data, mem[i+3].data);
|
printf("%.2x%.2x;", mem[i+2].data, mem[i+3].data);
|
if (mem[i].insn)
|
if (mem[i].insn)
|
sprintf(dis, "%s %s", mem[i].insn->insn, mem[i].insn->op1);
|
sprintf(dis, "%s %s", insn_name(mem[i].insn->insn_index), mem[i].insn->op1);
|
if (strlen(mem[i].insn->op2))
|
if (strlen(mem[i].insn->op2))
|
sprintf(dis, "%s%s%s", dis, OPERAND_DELIM, mem[i].insn->op2);
|
sprintf(dis, "%s%s%s", dis, OPERAND_DELIM, mem[i].insn->op2);
|
if (strlen(mem[i].insn->op3))
|
if (strlen(mem[i].insn->op3))
|
sprintf(dis, "%s%s%s", dis, OPERAND_DELIM, mem[i].insn->op3);
|
sprintf(dis, "%s%s%s", dis, OPERAND_DELIM, mem[i].insn->op3);
|
if (strlen(mem[i].insn->op4))
|
if (strlen(mem[i].insn->op4))
|
Line 68... |
Line 70... |
if (strlen(dis) < DISWIDTH)
|
if (strlen(dis) < DISWIDTH)
|
memset(dis + strlen(dis), ' ', DISWIDTH);
|
memset(dis + strlen(dis), ' ', DISWIDTH);
|
dis[DISWIDTH] = '\0';
|
dis[DISWIDTH] = '\0';
|
printf("\n\tdis['h%x] = {\"%s\"};", i/DWQ, dis);
|
printf("\n\tdis['h%x] = {\"%s\"};", i/DWQ, dis);
|
dis[0] = '\0';
|
dis[0] = '\0';
|
i += (insn_len(mem[i].insn->insn) - 1);
|
i += (insn_len(mem[i].insn->insn_index) - 1);
|
} else
|
} else
|
{
|
{
|
if (i % 64 == 0)
|
if (i % 64 == 0)
|
printf("\n");
|
printf("\n");
|
|
|
Line 91... |
Line 93... |
for(i = from; i < to; i++) {
|
for(i = from; i < to; i++) {
|
if (i % 8 == 0)
|
if (i % 8 == 0)
|
printf("\n%.8x: ", i);
|
printf("\n%.8x: ", i);
|
|
|
/* don't print ascii chars below 0x20. */
|
/* don't print ascii chars below 0x20. */
|
if (evalsim_mem32(i) < 0x20)
|
if (evalsim_mem32(i,&breakpoint) < 0x20)
|
printf("0x%.2x ", (unsigned char)evalsim_mem32(i));
|
printf("0x%.2x ", (unsigned char)evalsim_mem32(i,&breakpoint));
|
else
|
else
|
printf("0x%.2x'%c' ", (unsigned char)evalsim_mem32(i), (unsigned char)evalsim_mem32(i));
|
printf("0x%.2x'%c' ", (unsigned char)evalsim_mem32(i,&breakpoint), (unsigned char)evalsim_mem32(i,&breakpoint));
|
|
|
}
|
}
|
printf(OR1K_MEM_VERILOG_FOOTER);
|
printf(OR1K_MEM_VERILOG_FOOTER);
|
}
|
}
|
|
|
|
|
void dumphex(unsigned int from, unsigned int to)
|
void dumphex(unsigned int from, unsigned int to)
|
{
|
{
|
unsigned int i, done = 0;
|
unsigned int i, done = 0;
|
|
int breakpoint = 0;
|
|
|
for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++) {
|
for(i = from; i < to && i < (MEMORY_START + MEMORY_LEN); i++) {
|
if (mem[i].insn) {
|
if (mem[i].insn) {
|
printf("%.2x%.2x", mem[i].data, mem[i+1].data);
|
printf("%.2x%.2x", mem[i].data, mem[i+1].data);
|
printf("%.2x%.2x\n", mem[i+2].data, mem[i+3].data);
|
printf("%.2x%.2x\n", mem[i+2].data, mem[i+3].data);
|
i += (insn_len(mem[i].insn->insn) - 1);
|
i += (insn_len(mem[i].insn->insn_index) - 1);
|
} else
|
} else
|
{
|
{
|
printf("%.2x\n", (unsigned char)mem[i].data);
|
printf("%.2x\n", (unsigned char)mem[i].data);
|
}
|
}
|
done = 1;
|
done = 1;
|
Line 124... |
Line 127... |
}
|
}
|
|
|
/* this needs to be fixed */
|
/* this needs to be fixed */
|
|
|
for(i = from; i < to; i++) {
|
for(i = from; i < to; i++) {
|
printf("%.2x", (unsigned char)evalsim_mem32(i));
|
printf("%.2x", (unsigned char)evalsim_mem32(i,&breakpoint));
|
}
|
}
|
}
|
}
|
|
|
No newline at end of file
|
No newline at end of file
|