📄 mips_trace.cpp
字号:
#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 + -