⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mips_trace.cpp

📁 改进的基于6个mips核的NOC网络
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#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 + -