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

📄 mips_trace.cpp

📁 国外开源的一个片上网络系统的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include <systemc.h>#include "mips_trace.h"// prefix for all names that are tracedchar trace_mips_name_buffer[2048];int trace_mips_prefix_len = 0;vector< int > name_segments;// add new component of the prefixvoid 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 prefixvoid 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");  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_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");  _do_trace(tf, mem->tag_in, "tag_in");  _do_trace(tf, mem->tag_out, "tag_out");  _do_trace(tf, mem->tag_reg, "tag_reg");  _do_trace(tf, mem->index, "index");  _do_trace(tf, mem->index_reg, "index_reg");  _do_trace(tf, mem->offset, "offset");  _do_trace(tf, mem->offset_reg, "offset_reg");  _do_trace(tf, mem->byte, "byte");  _do_trace(tf, mem->byte_reg, "byte_reg");  _do_trace(tf, mem->cache_en, "cache_en");  _do_trace(tf, mem->cache_we, "cache_we");  _do_trace(tf, mem->valid, "valid");  _do_trace(tf, mem->fetch_word, "fetch_word");  _do_trace(tf, mem->fetch_word_rdy, "fetch_word_rdy");  _do_trace(tf, mem->rewrite, "rewrite");  _do_trace(tf, mem->byte_rpl, "byte_rpl");  _do_trace(tf, mem->current_reg, "current_reg");  _do_trace(tf, mem->miss_ctrl->current_state, "miss_ctrl.current_state");  _do_trace(tf, mem->miss_ctrl->operation, "miss_ctrl.operation");  _do_trace(tf, mem->miss_ctrl->waiting, "miss_ctrl.waiting");  _do_trace(tf, mem->miss_ctrl->miss, "miss_ctrl.miss");  _do_trace(tf, mem->miss_ctrl->next_fetch_word, "miss_ctrl.next_fetch_word");  _do_trace(tf, mem->miss_ctrl->word_inc, "miss_ctrl.word_inc");  _do_trace(tf, mem->miss_ctrl->word_clr, "miss_ctrl.word_clr");  _do_trace(tf, mem->miss_ctrl->start_write, "miss_ctrl.start_write");  _do_trace(tf, mem->miss_ctrl->write_in_progress, "miss_ctrl.write_in_progress");  char stbuf[32];  for( int i = 0 ; i < 256 ; i++ )    {      sprintf(stbuf, "memory.block%02d_w0", i);      _do_trace(tf, mem->cache_memory->bram0->memory[2*i], stbuf );      sprintf(stbuf, "memory.block%02d_w1", i);      _do_trace(tf, mem->cache_memory->bram0->memory[2*i+1], stbuf );      sprintf(stbuf, "memory.block%02d_w2", i);      _do_trace(tf, mem->cache_memory->bram1->memory[2*i], stbuf );      sprintf(stbuf, "memory.block%02d_w3", i);      _do_trace(tf, mem->cache_memory->bram1->memory[2*i+1], stbuf );    }  pop_prefix();}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void trace_router_inctrl( sc_trace_file *tf,  INPUT_CTRL *inctrl ){  _do_trace(tf, inctrl->data_latch, "data_latch");  _do_trace(tf, inctrl->current_state, "current_state");  _do_trace(tf, inctrl->next_state, "next_state");  _do_trace(tf, inctrl->header_select, "header_select");  _do_trace(tf, inctrl->end_of_route, "end_of_route");  _do_trace(tf, inctrl->start_of_packet, "start_of_packet");  _do_trace(tf, inctrl->end_of_packet, "end_of_packet");  _do_trace(tf, inctrl->header, "header");}void trace_router_queue( sc_trace_file *tf,  OUTPUT_QUEUE *queue ){  _do_trace(tf, queue->current_state, "current_state");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -