📄 mips_trace.cpp
字号:
#include <systemc.h>
#include "mips_trace.h"
// prefix for all names that are traced
char trace_mips_name_buffer[2048];
int trace_mips_prefix_len = 0;
vector< int > name_segments;
// add new component of the prefix
void push_prefix( const char *prefix ){
if( name_segments.empty() ){
trace_mips_name_buffer[0] = 0;
trace_mips_prefix_len = 0;
}
strcat(trace_mips_name_buffer, prefix);
trace_mips_prefix_len = strlen(trace_mips_name_buffer);
name_segments.push_back( strlen(prefix) );
}
// remove last component of the prefix
void pop_prefix(){
if( name_segments.empty() ) return;
int len = *name_segments.rbegin();
trace_mips_prefix_len -= len;
trace_mips_name_buffer[trace_mips_prefix_len] = 0;
name_segments.pop_back();
}
// macro to trace the given signal with name = prefix+name
#define _do_trace(tf, sig, name) \
strcat(trace_mips_name_buffer,name); \
sc_trace(tf, sig, trace_mips_name_buffer); \
trace_mips_name_buffer[trace_mips_prefix_len] = '\0';
////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////
void trace_mips( sc_trace_file *tf, mMIPS *mips, const char *prefix )
{
push_prefix(prefix);
_do_trace(tf, mips->clk, "clk");
_do_trace(tf, mips->bus_add1, "bus_add1");
_do_trace(tf, mips->bus_add2, "bus_add2");
_do_trace(tf, mips->bus_aluctrl, "bus_aluctrl");
_do_trace(tf, mips->bus_alu_result, "bus_alu_result");
_do_trace(tf, mips->bus_alu_zero, "bus_alu_zero");
_do_trace(tf, mips->bus_branch, "bus_branch");
_do_trace(tf, mips->bus_ctrl2hazard_aluop, "bus_ctrl2hazard_aluop");
_do_trace(tf, mips->bus_ctrl2hazard_alusrc, "bus_ctrl2hazard_alusrc");
_do_trace(tf, mips->bus_ctrl2hazard_branch, "bus_ctrl2hazard_branch");
_do_trace(tf, mips->bus_ctrl2hazard_memread, "bus_ctrl2hazard_memread");
_do_trace(tf, mips->bus_ctrl2hazard_memtoreg, "bus_ctrl2hazard_memtoreg");
_do_trace(tf, mips->bus_ctrl2hazard_memwrite, "bus_ctrl2hazard_memwrite");
_do_trace(tf, mips->bus_ctrl2hazard_regdst, "bus_ctrl2hazard_regdst");
_do_trace(tf, mips->bus_ctrl2hazard_regvalue, "bus_ctrl2hazard_regvalue");
_do_trace(tf, mips->bus_ctrl2hazard_regwrite, "bus_ctrl2hazard_regwrite");
_do_trace(tf, mips->bus_ctrl2hazard_target, "bus_ctrl2hazard_target");
_do_trace(tf, mips->bus_ctrl_aluop, "bus_ctrl_aluop");
_do_trace(tf, mips->bus_ctrl_alusrc, "bus_ctrl_alusrc");
_do_trace(tf, mips->bus_ctrl_branch, "bus_ctrl_branch");
_do_trace(tf, mips->bus_ctrl_c1, "bus_ctrl_c1");
_do_trace(tf, mips->bus_ctrl_c31, "bus_ctrl_c31");
_do_trace(tf, mips->bus_ctrl_c4, "bus_ctrl_c4");
_do_trace(tf, mips->bus_ctrl_memread, "bus_ctrl_memread");
_do_trace(tf, mips->bus_ctrl_memtoreg, "bus_ctrl_memtoreg");
_do_trace(tf, mips->bus_ctrl_memwrite, "bus_ctrl_memwrite");
_do_trace(tf, mips->bus_ctrl_regdst, "bus_ctrl_regdst");
_do_trace(tf, mips->bus_ctrl_regvalue, "bus_ctrl_regvalue");
_do_trace(tf, mips->bus_ctrl_regwrite, "bus_ctrl_regwrite");
_do_trace(tf, mips->bus_ctrl_target, "bus_ctrl_target");
_do_trace(tf, mips->bus_ctrl_enable, "bus_ctrl_enable");
_do_trace(tf, mips->bus_ctrl_signextend, "bus_ctrl_signextend");
_do_trace(tf, mips->bus_decoder_instr_10_6, "bus_decoder_instr_10_6");
_do_trace(tf, mips->bus_decoder_instr_15_0, "bus_decoder_instr_15_0");
_do_trace(tf, mips->bus_decoder_instr_15_11, "bus_decoder_instr_15_11");
_do_trace(tf, mips->bus_decoder_instr_20_16, "bus_decoder_instr_20_16");
_do_trace(tf, mips->bus_decoder_instr_25_0, "bus_decoder_instr_25_0");
_do_trace(tf, mips->bus_decoder_instr_25_21, "bus_decoder_instr_25_21");
_do_trace(tf, mips->bus_decoder_instr_31_26, "bus_decoder_instr_31_26");
_do_trace(tf, mips->bus_decoder_instr_5_0, "bus_decoder_instr_5_0");
_do_trace(tf, mips->bus_dmem_1, "bus_dmem_1");
_do_trace(tf, mips->bus_ex_ctrl_wb_memtoreg, "bus_ex_ctrl_wb_memtoreg");
_do_trace(tf, mips->bus_ex_ctrl_wb_regwrite, "bus_ex_ctrl_wb_regwrite");
_do_trace(tf, mips->bus_ex_regdst_addr, "bus_ex_regdst_addr");
_do_trace(tf, mips->bus_ex_alu_result, "bus_ex_alu_result");
_do_trace(tf, mips->bus_hazard_hazard, "bus_hazard_hazard");
_do_trace(tf, mips->bus_hazard_ifidwrite, "bus_hazard_ifidwrite");
_do_trace(tf, mips->bus_hazard_pcwrite, "bus_hazard_pcwrite");
_do_trace(tf, mips->bus_id_ctrl_ex_aluop, "bus_id_ctrl_ex_aluop");
_do_trace(tf, mips->bus_id_ctrl_ex_alusrc, "bus_id_ctrl_ex_alusrc");
_do_trace(tf, mips->bus_id_ctrl_ex_regdst, "bus_id_ctrl_ex_regdst");
_do_trace(tf, mips->bus_id_ctrl_ex_regvalue, "bus_id_ctrl_ex_regvalue");
_do_trace(tf, mips->bus_id_ctrl_ex_target, "bus_id_ctrl_ex_target");
_do_trace(tf, mips->bus_id_ctrl_mem_branch, "bus_id_ctrl_mem_branch");
_do_trace(tf, mips->bus_id_ctrl_mem_memread, "bus_id_ctrl_mem_memread");
_do_trace(tf, mips->bus_id_ctrl_mem_memwrite, "bus_id_ctrl_mem_memwrite");
_do_trace(tf, mips->bus_id_ctrl_wb_memtoreg, "bus_id_ctrl_wb_memtoreg");
_do_trace(tf, mips->bus_id_ctrl_wb_regwrite, "bus_id_ctrl_wb_regwrite");
_do_trace(tf, mips->bus_id_data_reg1, "bus_id_data_reg1");
_do_trace(tf, mips->bus_id_data_reg2, "bus_id_data_reg2");
_do_trace(tf, mips->bus_id_instr_15_11, "bus_id_instr_15_11");
_do_trace(tf, mips->bus_id_instr_20_16, "bus_id_instr_20_16");
_do_trace(tf, mips->bus_id_instr_25_0, "bus_id_instr_25_0");
_do_trace(tf, mips->bus_id_instr_5_0, "bus_id_instr_5_0");
_do_trace(tf, mips->bus_id_pc, "bus_id_pc");
_do_trace(tf, mips->bus_id_immediate, "bus_id_immediate");
_do_trace(tf, mips->bus_if_instr, "bus_if_instr");
_do_trace(tf, mips->bus_if_pc, "bus_if_pc");
_do_trace(tf, mips->bus_imem_1, "bus_imem_1");
_do_trace(tf, mips->bus_mem_alu_result, "bus_mem_alu_result");
_do_trace(tf, mips->bus_mem_ctrl_wb_memtoreg, "bus_mem_ctrl_wb_memtoreg");
_do_trace(tf, mips->bus_mem_ctrl_wb_regwrite, "bus_mem_ctrl_wb_regwrite");
_do_trace(tf, mips->bus_mem_dmem_data, "bus_mem_dmem_data");
_do_trace(tf, mips->bus_mem_regdst_addr, "bus_mem_regdst_addr");
_do_trace(tf, mips->bus_mux1, "bus_mux1");
_do_trace(tf, mips->bus_mux2, "bus_mux2");
_do_trace(tf, mips->bus_mux3, "bus_mux3");
_do_trace(tf, mips->bus_mux4, "bus_mux4");
_do_trace(tf, mips->bus_mux5, "bus_mux5");
_do_trace(tf, mips->bus_mux6, "bus_mux6");
_do_trace(tf, mips->bus_pc, "bus_pc");
_do_trace(tf, mips->bus_registers_1, "bus_registers_1");
_do_trace(tf, mips->bus_registers_2, "bus_registers_2");
_do_trace(tf, mips->bus_shiftleft, "bus_shiftleft");
_do_trace(tf, mips->bus_shiftleft_jmp, "bus_shiftleft_jmp");
_do_trace(tf, mips->bus_imm2word, "bus_imm2word");
_do_trace(tf, mips->bus_signextendbyte, "bus_signextendbyte");
_do_trace(tf, mips->bus_decoder_nb_instr_20_16, "bus_decoder_nb_instr_20_16");
_do_trace(tf, mips->bus_decoder_nb_instr_25_21, "bus_decoder_nb_instr_25_21");
_do_trace(tf, mips->bus_dmem_wait, "bus_dmem_wait");
_do_trace(tf, mips->bus_imem_wait, "bus_imem_wait");
_do_trace(tf, mips->bus_imem_en, "bus_imem_en");
_do_trace(tf, mips->bus_dmem_en, "bus_dmem_en");
_do_trace(tf, mips->bus_pipe_en, "bus_pipe_en");
_do_trace(tf, mips->bus_ram_din, "memdev.bus_ram_din");
_do_trace(tf, mips->bus_ram_addr, "memdev.bus_ram_addr");
_do_trace(tf, mips->bus_ram_dout, "memdev.bus_ram_dout");
_do_trace(tf, mips->bus_ram_r, "memdev.bus_ram_r");
_do_trace(tf, mips->bus_ram_w, "memdev.bus_ram_w");
_do_trace(tf, mips->memdev->dev_buffer, "memdev.dev_buffer");
_do_trace(tf, mips->memdev->bufw, "memdev.bufw");
_do_trace(tf, mips->memdev->sending, "memdev.sending");
_do_trace(tf, mips->memdev->ram_dout, "memdev.ram_dout");
_do_trace(tf, mips->translator_mmips->x_mem_addr, "translator_mmips.x_mem_addr");
_do_trace(tf, mips->translator_mmips->y_mem_addr, "translator_mmips.y_mem_addr");
_do_trace(tf, mips->translator_mmips->my_xaddr, "translator_mmips.my_xaddr");
_do_trace(tf, mips->translator_mmips->my_yaddr, "translator_mmips.my_yaddr");
_do_trace(tf, mips->translator_mmips->xdimension, "translator_mmips.xdimension");
_do_trace(tf, mips->translator_mmips->ydimension, "translator_mmips.ydimension");
_do_trace(tf, mips->translator_mmips->dev_w, "translator_mmips.dev_w");
_do_trace(tf, mips->translator_mmips->dev_r, "translator_mmips.dev_r");
_do_trace(tf, mips->translator_mmips->dev_din, "translator_mmips.dev_din");
_do_trace(tf, mips->translator_mmips->dev_wdata, "translator_mmips.dev_wdata");
_do_trace(tf, mips->translator_mmips->dev_waddr, "translator_mmips.dev_waddr");
_do_trace(tf, mips->translator_mmips->dev_send_eop, "translator_mmips.dev_send_eop");
_do_trace(tf, mips->translator_mmips->ram_w, "translator_mmips.ram_w");
_do_trace(tf, mips->translator_mmips->ram_r, "translator_mmips.ram_r");
_do_trace(tf, mips->translator_mmips->ram_addr, "translator_mmips.ram_addr");
_do_trace(tf, mips->translator_mmips->ram_din, "translator_mmips.ram_din");
_do_trace(tf, mips->translator_mmips->reg_data_out, "translator_mmips.reg_data_out");
_do_trace(tf, mips->translator_mmips->data_rdy, "translator_mmips.data_rdy");
_do_trace(tf, mips->translator_mmips->send_rdy, "translator_mmips.send_rdy");
_do_trace(tf, mips->translator_mmips->trans_dev_w, "translator_mmips.trans_dev_w");
_do_trace(tf, mips->translator_mmips->trans_dev_r, "translator_mmips.trans_dev_r");
_do_trace(tf, mips->translator_mmips->trans_dev_din, "translator_mmips.trans_dev_din");
_do_trace(tf, mips->translator_mmips->trans_dev_wdata, "translator_mmips.trans_dev_wdata");
_do_trace(tf, mips->translator_mmips->trans_dev_waddr, "translator_mmips.trans_dev_waddr");
_do_trace(tf, mips->translator_mmips->trans_dev_send_eop, "translator_mmips.trans_dev_send_eop");
_do_trace(tf, mips->translator_mmips->local_ram_w, "translator_mmips.local_ram_w");
_do_trace(tf, mips->translator_mmips->local_ram_r, "translator_mmips.local_ram_r");
_do_trace(tf, mips->translator_mmips->enable_mmips, "translator_mmips.enable_mmips");
_do_trace(tf, mips->translator_mmips->trans_ram_dout, "translator_mmips.trans_ram_dout");
_do_trace(tf, mips->translator_mmips->trans_remote_select, "translator_mmips.trans_remote_select");
_do_trace(tf, mips->translator_mmips->trans_send_rdy, "translator_mmips.trans_send_rdy");
_do_trace(tf, mips->translator_mmips->trans_data_rdy, "translator_mmips.trans_data_rdy");
_do_trace(tf, mips->translator_mmips->clk, "translator_mmips.clk");
_do_trace(tf, mips->translator_mmips->rst, "translator_mmips.rst");
char stbuf[32];
for (int i = 0; i < REGSIZE; i++){
sprintf(stbuf, "registers.reg(%d_1)", i);
_do_trace(tf, mips->registers->regs1->bram->memory[i], stbuf);
sprintf(stbuf, "registers.reg(%d_2)", i);
_do_trace(tf, mips->registers->regs2->bram->memory[i], stbuf);
}
pop_prefix();
}
////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////
void trace_remote_memory( sc_trace_file *tf, REMOTE_MEM *remote_memory, const char *prefix )
{
push_prefix(prefix);
_do_trace(tf, remote_memory->clock, "clock");
_do_trace(tf, remote_memory->reset, "reset");
_do_trace(tf, remote_memory->enable, "enable");
_do_trace(tf, remote_memory->xdimension, "xdimension");
_do_trace(tf, remote_memory->ydimension, "ydimension");
_do_trace(tf, remote_memory->dev_din, "dev_din");
_do_trace(tf, remote_memory->dev_rdyr, "dev_rdyr");
_do_trace(tf, remote_memory->dev_rcv_eop, "dev_rcv_eop");
_do_trace(tf, remote_memory->dev_rcv_eop, "dev_rcv_eop");
_do_trace(tf, remote_memory->dev_rdyw, "dev_rdyw");
_do_trace(tf, remote_memory->rd_wr, "rd_wr");
_do_trace(tf, remote_memory->dev_w, "dev_w");
_do_trace(tf, remote_memory->dev_r, "dev_r");
_do_trace(tf, remote_memory->dev_dout, "dev_dout");
_do_trace(tf, remote_memory->dev_wdata, "dev_wdata");
_do_trace(tf, remote_memory->dev_waddr, "dev_waddr");
_do_trace(tf, remote_memory->dev_send_eop, "dev_send_eop");
_do_trace(tf, remote_memory->translator_mem->clk, "translator_mem.clk");
_do_trace(tf, remote_memory->translator_mem->rst, "translator_mem.rst");
_do_trace(tf, remote_memory->translator_mem->xdimension, "translator_mem.xdimension");
_do_trace(tf, remote_memory->translator_mem->ydimension, "translator_mem.ydimension");
_do_trace(tf, remote_memory->translator_mem->reg_data_out, "translator_mem.reg_data_out");
_do_trace(tf, remote_memory->translator_mem->data_rdy, "translator_mem.data_rdy");
_do_trace(tf, remote_memory->translator_mem->rcv_packet_end, "translator_mem.rcv_packet_end");
_do_trace(tf, remote_memory->translator_mem->send_rdy, "translator_mem.send_rdy");
_do_trace(tf, remote_memory->translator_mem->rd_wr, "translator_mem.rd_wr");
_do_trace(tf, remote_memory->translator_mem->rem_mem_dout, "translator_mem.rem_mem_dout");
_do_trace(tf, remote_memory->translator_mem->rem_mem_addr, "translator_mem.rem_mem_addr");
_do_trace(tf, remote_memory->translator_mem->rem_mem_din, "translator_mem.rem_mem_din");
_do_trace(tf, remote_memory->translator_mem->rem_mem_r, "translator_mem.rem_mem_r");
_do_trace(tf, remote_memory->translator_mem->rem_mem_w, "translator_mem.rem_mem_w");
_do_trace(tf, remote_memory->translator_mem->trans_dev_w, "translator_mem.trans_dev_w");
_do_trace(tf, remote_memory->translator_mem->trans_dev_r, "translator_mem.trans_dev_r");
_do_trace(tf, remote_memory->translator_mem->trans_dev_din, "translator_mem.trans_dev_din");
_do_trace(tf, remote_memory->translator_mem->trans_dev_wdata, "translator_mem.trans_dev_wdata");
_do_trace(tf, remote_memory->translator_mem->trans_dev_waddr, "translator_mem.trans_dev_waddr");
_do_trace(tf, remote_memory->translator_mem->trans_dev_send_eop, "translator_mem.trans_dev_send_eop");
pop_prefix();
}
////////////////////////////////////////////////////////////////////////////////
//
////////////////////////////////////////////////////////////////////////////////
void trace_cache( sc_trace_file *tf, DATA_CACHE *mem, const char *prefix )
{
push_prefix(prefix);
_do_trace(tf, mem->addr_reg, "addr_reg");
_do_trace(tf, mem->din_reg, "din_reg");
_do_trace(tf, mem->addr_current, "addr_current");
_do_trace(tf, mem->data_current, "data_current");
_do_trace(tf, mem->data_mem_in, "data_mem_in");
_do_trace(tf, mem->valid_select, "valid_select");
_do_trace(tf, mem->data_fetch_out, "data_fetch_out");
_do_trace(tf, mem->data_mem_out, "data_mem_out");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -