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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_52/] [or1ksim/] [support/] [dumpverilog.c] - Diff between revs 85 and 123

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 85 Rev 123
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

powered by: WebSVN 2.1.0

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