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

📄 main_spy.cpp

📁 国外开源的一个片上网络系统的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :    * *  Author          :   Sander Stuijk (sander@ics.ele.tue.nl) * *  Date            :   November 18, 2002 * *  Function        :   Pipelined mMIPS * *  History         : *      18-11-02    :   Initial version. *						- lw, sw, beq, add, addu, subu,  *						- and, or, slt *		19-11-02	:	- xor, sltu *						- addiu, andi, ori, xori, slti, sltiu *						- lui, bne *						- sll, srl, sra (1, 2, 8 bits) *						- sb, lb *		21-11-02	:	- j, jal, jalr, jr  *      13-12-02    :   Synthesizable version A.S.Slusarczyk@tue.nl */ #include "top.h"#define NOVCD 1#define NOMEMVCD 1// global signalssc_signal<bool> clk;unsigned sim_time = 0, period = 20;sc_signal< sc_lv<5> > commin;sc_signal< sc_lv<4> > commo;sc_signal< sc_lv<4> > commi;// helper routines to communicate with SPYvoid READ( unsigned _addr, int w = 64 );void WRITE( unsigned _addr );void SEND( unsigned v );unsigned RCV( );void TICK( int t );// it is advisable to only read/write resolved signals from within// a process, therefore the following modules are created:// a module to write to bidirectional resolved signalSC_MODULE(W){  sc_in< sc_lv<4> > nrvi;  sc_inout_rv<4> rv;  SC_CTOR(W){	SC_METHOD(w);	sensitive << nrvi;	  }  void w(){	//	cout << sc_time_stamp() << " W " << nrvi.read() << endl;	rv.write(nrvi.read());  }};// a module to read from bidirectional resolved signalSC_MODULE(R){  sc_in_rv<4> rv;  sc_out< sc_lv<4> > nrvo;  SC_CTOR(R){	SC_METHOD(r);	sensitive << rv;  }  void r(){	//	cout << sc_time_stamp() << " R " << rv.read() << endl;	nrvo.write(rv.read());  }};// //  MAIN//int sc_main(int argc, char *argv[]){  char stbuf[32];  // the processor  mMIPS mips("mips");  sc_signal< bool > rst, en;  mips.clock(clk);  mips.reset(rst);  mips.enable(en);  // PC for display  sc_signal< sc_bv<DWORD> > bus_pc;  mips.bus_pc(bus_pc);  #ifdef SPYING  // control input to SPY_COMM  mips.commin(commin);  // SPY control signals  mips.spy_reset(rst);  mips.spy_clock(clk);  // some signals to display the state of communication  sc_signal<CTL_STATE> ctl_state;  sc_signal< sc_uint<4> > sr_nibble;  mips.ctl_state(ctl_state);  mips.sr_nibble(sr_nibble);    // setup the bidirectional connection  sc_signal_rv<4> _comminout;  R r("r");  W w("w");  // write to bidir by writing commi  w.nrvi( commi );  // read from bidir by reading commo  r.nrvo( commo );  r.rv( _comminout );  w.rv( _comminout );  mips.comminout(_comminout);#endif    /*   *	Initialization   */	  mips.imem->rom_init("mips_rom.bin");   mips.imem->rom_dump("mips_rom.0.dump");   mips.dmem->ram_init("mips_ram.bin");  mips.dmem->ram_dump("mips_ram.0.dump");#ifndef NOVCD  /*   *	Tracing   */  sc_trace_file *tf;  tf = sc_create_vcd_trace_file("mips");	  // Signals  sc_trace(tf, clk, 				"clock");  sc_trace(tf, rst, 				"reset");  sc_trace(tf, en, 				"enable");  sc_trace(tf, mips.bus_add1, 					"bus_add1");  sc_trace(tf, mips.bus_add2, 					"bus_add2");  sc_trace(tf, mips.bus_aluctrl, 				"bus_aluctrl");  sc_trace(tf, mips.bus_alu_result, 			"bus_alu_result");  sc_trace(tf, mips.bus_alu_zero, 				"bus_alu_zero");  sc_trace(tf, mips.bus_branch, 				"bus_branch");  sc_trace(tf, mips.bus_ctrl2hazard_aluop,		"bus_ctrl2hazard_aluop");  sc_trace(tf, mips.bus_ctrl2hazard_alusrc,	"bus_ctrl2hazard_alusrc");  sc_trace(tf, mips.bus_ctrl2hazard_branch,	"bus_ctrl2hazard_branch");  sc_trace(tf, mips.bus_ctrl2hazard_memread,	"bus_ctrl2hazard_memread");  sc_trace(tf, mips.bus_ctrl2hazard_memtoreg,	"bus_ctrl2hazard_memtoreg");  sc_trace(tf, mips.bus_ctrl2hazard_memwrite,	"bus_ctrl2hazard_memwrite");  sc_trace(tf, mips.bus_ctrl2hazard_regdst,	"bus_ctrl2hazard_regdst");  sc_trace(tf, mips.bus_ctrl2hazard_regvalue,	"bus_ctrl2hazard_regvalue");  sc_trace(tf, mips.bus_ctrl2hazard_regwrite,	"bus_ctrl2hazard_regwrite");  sc_trace(tf, mips.bus_ctrl2hazard_target,	"bus_ctrl2hazard_target");  sc_trace(tf, mips.bus_ctrl_aluop,			"bus_ctrl_aluop");  sc_trace(tf, mips.bus_ctrl_alusrc, 			"bus_ctrl_alusrc");  sc_trace(tf, mips.bus_ctrl_branch, 			"bus_ctrl_branch");  sc_trace(tf, mips.bus_ctrl_c1, 				"bus_ctrl_c1");  sc_trace(tf, mips.bus_ctrl_c31, 				"bus_ctrl_c31");  sc_trace(tf, mips.bus_ctrl_c4, 				"bus_ctrl_c4");  sc_trace(tf, mips.bus_ctrl_memread, 			"bus_ctrl_memread");  sc_trace(tf, mips.bus_ctrl_memtoreg, 		"bus_ctrl_memtoreg");  sc_trace(tf, mips.bus_ctrl_memwrite, 		"bus_ctrl_memwrite");  sc_trace(tf, mips.bus_ctrl_regdst, 			"bus_ctrl_regdst");  sc_trace(tf, mips.bus_ctrl_regvalue,			"bus_ctrl_regvalue");  sc_trace(tf, mips.bus_ctrl_regwrite, 		"bus_ctrl_regwrite");  sc_trace(tf, mips.bus_ctrl_target, 			"bus_ctrl_target");  sc_trace(tf, mips.bus_ctrl_enable, 			"bus_ctrl_enable");  sc_trace(tf, mips.bus_decoder_instr_10_6, 	"bus_decoder_instr_10_6");  sc_trace(tf, mips.bus_decoder_instr_15_0, 	"bus_decoder_instr_15_0");  sc_trace(tf, mips.bus_decoder_instr_15_11, 	"bus_decoder_instr_15_11");  sc_trace(tf, mips.bus_decoder_instr_20_16, 	"bus_decoder_instr_20_16");  sc_trace(tf, mips.bus_decoder_instr_25_0, 	"bus_decoder_instr_25_0");  sc_trace(tf, mips.bus_decoder_instr_25_21, 	"bus_decoder_instr_25_21");  sc_trace(tf, mips.bus_decoder_instr_31_26, 	"bus_decoder_instr_31_26");  sc_trace(tf, mips.bus_decoder_instr_5_0, 	"bus_decoder_instr_5_0");  sc_trace(tf, mips.bus_dmem_1, 				"bus_dmem_1");  sc_trace(tf, mips.bus_ex_add_result,			"bus_ex_add_result");   sc_trace(tf, mips.bus_ex_alu_result,			"bus_ex_alu_result");   sc_trace(tf, mips.bus_ex_alu_zero,			"bus_ex_alu_zero");   sc_trace(tf, mips.bus_ex_ctrl_mem_branch,	"bus_ex_ctrl_mem_branch"); #ifndef BRAM  sc_trace(tf, mips.bus_ex_ctrl_mem_memread,	"bus_ex_ctrl_mem_memread");   sc_trace(tf, mips.bus_ex_ctrl_mem_memwrite,	"bus_ex_ctrl_mem_memwrite"); #endif  sc_trace(tf, mips.bus_ex_ctrl_wb_memtoreg,	"bus_ex_ctrl_wb_memtoreg");   sc_trace(tf, mips.bus_ex_ctrl_wb_regwrite,	"bus_ex_ctrl_wb_regwrite"); #ifndef BRAM  sc_trace(tf, mips.bus_ex_data_reg2,			"bus_ex_data_reg2"); #endif  sc_trace(tf, mips.bus_ex_regdst_addr,		"bus_ex_regdst_addr");   sc_trace(tf, mips.bus_hazard_hazard,			"bus_hazard_hazard");  sc_trace(tf, mips.bus_hazard_ifidwrite,		"bus_hazard_ifidwrite");  sc_trace(tf, mips.bus_hazard_pcwrite,		"bus_hazard_pcwrite");  sc_trace(tf, mips.bus_id_ctrl_ex_aluop,		"bus_id_ctrl_ex_aluop");   sc_trace(tf, mips.bus_id_ctrl_ex_alusrc,		"bus_id_ctrl_ex_alusrc");   sc_trace(tf, mips.bus_id_ctrl_ex_regdst,		"bus_id_ctrl_ex_regdst");   sc_trace(tf, mips.bus_id_ctrl_ex_regvalue,	"bus_id_ctrl_ex_regvalue");   sc_trace(tf, mips.bus_id_ctrl_ex_target,		"bus_id_ctrl_ex_target");   sc_trace(tf, mips.bus_id_ctrl_mem_branch,	"bus_id_ctrl_mem_branch");   sc_trace(tf, mips.bus_id_ctrl_mem_memread,	"bus_id_ctrl_mem_memread");   sc_trace(tf, mips.bus_id_ctrl_mem_memwrite,	"bus_id_ctrl_mem_memwrite");   sc_trace(tf, mips.bus_id_ctrl_wb_memtoreg,	"bus_id_ctrl_wb_memtoreg");   sc_trace(tf, mips.bus_id_ctrl_wb_regwrite,	"bus_id_ctrl_wb_regwrite");   sc_trace(tf, mips.bus_id_data_reg1,			"bus_id_data_reg1");   sc_trace(tf, mips.bus_id_data_reg2,			"bus_id_data_reg2");   sc_trace(tf, mips.bus_id_instr_15_11,		"bus_id_instr_15_11");   sc_trace(tf, mips.bus_id_instr_20_16,		"bus_id_instr_20_16");   sc_trace(tf, mips.bus_id_instr_25_0,			"bus_id_instr_25_0");   sc_trace(tf, mips.bus_id_instr_5_0,			"bus_id_instr_5_0");   sc_trace(tf, mips.bus_id_pc,					"bus_id_pc");   sc_trace(tf, mips.bus_id_signextend,			"bus_id_signextend");   sc_trace(tf, mips.bus_if_instr,				"bus_if_instr");   sc_trace(tf, mips.bus_if_pc,					"bus_if_pc");   sc_trace(tf, mips.bus_imem_1, 				"bus_imem_1");  sc_trace(tf, mips.bus_mem_alu_result,		"bus_mem_alu_result");   sc_trace(tf, mips.bus_mem_ctrl_wb_memtoreg,	"bus_mem_ctrl_wb_memtoreg");   sc_trace(tf, mips.bus_mem_ctrl_wb_regwrite,	"bus_mem_ctrl_wb_regwrite");   sc_trace(tf, mips.bus_mem_dmem_data,			"bus_mem_dmem_data");  sc_trace(tf, mips.bus_mem_regdst_addr,		"bus_mem_regdst_addr");   sc_trace(tf, mips.bus_mux1, 					"bus_mux1");  sc_trace(tf, mips.bus_mux2, 					"bus_mux2");  sc_trace(tf, mips.bus_mux3, 					"bus_mux3");  sc_trace(tf, mips.bus_mux4, 					"bus_mux4");  sc_trace(tf, mips.bus_mux5, 					"bus_mux5");  sc_trace(tf, mips.bus_mux6, 					"bus_mux6");  sc_trace(tf, mips.bus_pc, 					"bus_pc");  sc_trace(tf, mips.bus_registers_1, 			"bus_registers_1");  sc_trace(tf, mips.bus_registers_2, 			"bus_registers_2");  sc_trace(tf, mips.bus_shiftleft, 			"bus_shiftleft");  sc_trace(tf, mips.bus_shiftleft_jmp, 		"bus_shiftleft_jmp");  sc_trace(tf, mips.bus_signextend, 			"bus_signextend");  sc_trace(tf, mips.bus_signextendbyte, 		"bus_signextendbyte");#ifndef BREG  for (int i = 0; i < REGSIZE; i++)	{	  sprintf(stbuf, "registers.reg(%d)", i);	  sc_trace(tf, mips.registers->rfile[i], stbuf);	}#else  sc_trace(tf, mips.bus_decoder_nb_instr_20_16, 	"bus_decoder_nb_instr_20_16");  sc_trace(tf, mips.bus_decoder_nb_instr_25_21, 	"bus_decoder_nb_instr_25_21");#ifndef NOMEMVCD  for (int i = 0; i < REGSIZE; i++)	{	  sprintf(stbuf, "registers.reg(%d_1h)", i);	  sc_trace(tf, mips.registers->regs1->bramh->memory[i], stbuf);	  sprintf(stbuf, "registers.reg(%d_1l)", i);	  sc_trace(tf, mips.registers->regs1->braml->memory[i], stbuf);	  sprintf(stbuf, "registers.reg(%d_2h)", i);	  sc_trace(tf, mips.registers->regs2->bramh->memory[i], stbuf);	  sprintf(stbuf, "registers.reg(%d_2l)", i);	  sc_trace(tf, mips.registers->regs2->braml->memory[i], stbuf);	}  sc_trace(tf, mips.registers->regs1->DOAH,"registers1.DOAH");sc_trace(tf, mips.registers->regs1->DOAL,"registers1.DOAL");  sc_trace(tf, mips.registers->regs1->ADDRAH,"registers1.ADDRAH");sc_trace(tf, mips.registers->regs1->ADDRAL,"registers1.ADDRAL");  sc_trace(tf, mips.registers->regs1->DIAH,"registers1.DIAH");sc_trace(tf, mips.registers->regs1->DIAL,"registers1.DIAL");  sc_trace(tf, mips.registers->regs1->ENAH,"registers1.ENAH");sc_trace(tf, mips.registers->regs1->ENAL,"registers1.ENAL");  sc_trace(tf, mips.registers->regs1->WEAH,"registers1.WEAH");sc_trace(tf, mips.registers->regs1->WEAL,"registers1.WEAL");  sc_trace(tf, mips.registers->regs1->CLKAH,"registers1.CLKAH");sc_trace(tf, mips.registers->regs1->CLKAL,"registers1.CALKAL");  sc_trace(tf, mips.registers->regs1->RSTAH,"registers1.RSTAH");sc_trace(tf, mips.registers->regs1->RSTAL,"registers1.RSTAL");  sc_trace(tf, mips.registers->regs1->DOBH,"registers1.DOBH");sc_trace(tf, mips.registers->regs1->DOBL,"registers1.DOBL");  sc_trace(tf, mips.registers->regs1->ADDRBH,"registers1.ADDRBH");sc_trace(tf, mips.registers->regs1->ADDRBL,"registers1.ADDRBL");  sc_trace(tf, mips.registers->regs1->DIBH,"registers1.DIBH");sc_trace(tf, mips.registers->regs1->DIBL,"registers1.DIBL");  sc_trace(tf, mips.registers->regs1->ENBH,"registers1.ENBH");sc_trace(tf, mips.registers->regs1->ENBL,"registers1.ENBL");  sc_trace(tf, mips.registers->regs1->WEBH,"registers1.WEBH");sc_trace(tf, mips.registers->regs1->WEBL,"registers1.WEBL");  sc_trace(tf, mips.registers->regs1->CLKBH,"registers1.CLKBH");sc_trace(tf, mips.registers->regs1->CLKBL,"registers1.CBLKBL");  sc_trace(tf, mips.registers->regs1->RSTBH,"registers1.RSTBH");sc_trace(tf, mips.registers->regs1->RSTBL,"registers1.RSTBL");  sc_trace(tf, mips.registers->regs2->DOAH,"registers2.DOAH");sc_trace(tf, mips.registers->regs2->DOAL,"registers2.DOAL");  sc_trace(tf, mips.registers->regs2->ADDRAH,"registers2.ADDRAH");sc_trace(tf, mips.registers->regs2->ADDRAL,"registers2.ADDRAL");  sc_trace(tf, mips.registers->regs2->DIAH,"registers2.DIAH");sc_trace(tf, mips.registers->regs2->DIAL,"registers2.DIAL");  sc_trace(tf, mips.registers->regs2->ENAH,"registers2.ENAH");sc_trace(tf, mips.registers->regs2->ENAL,"registers2.ENAL");  sc_trace(tf, mips.registers->regs2->WEAH,"registers2.WEAH");sc_trace(tf, mips.registers->regs2->WEAL,"registers2.WEAL");  sc_trace(tf, mips.registers->regs2->CLKAH,"registers2.CLKAH");sc_trace(tf, mips.registers->regs2->CLKAL,"registers2.CALKAL");  sc_trace(tf, mips.registers->regs2->RSTAH,"registers2.RSTAH");sc_trace(tf, mips.registers->regs2->RSTAL,"registers2.RSTAL");  sc_trace(tf, mips.registers->regs2->DOBH,"registers2.DOBH");sc_trace(tf, mips.registers->regs2->DOBL,"registers2.DOBL");  sc_trace(tf, mips.registers->regs2->ADDRBH,"registers2.ADDRBH");sc_trace(tf, mips.registers->regs2->ADDRBL,"registers2.ADDRBL");  sc_trace(tf, mips.registers->regs2->DIBH,"registers2.DIBH");sc_trace(tf, mips.registers->regs2->DIBL,"registers2.DIBL");  sc_trace(tf, mips.registers->regs2->ENBH,"registers2.ENBH");sc_trace(tf, mips.registers->regs2->ENBL,"registers2.ENBL");  sc_trace(tf, mips.registers->regs2->WEBH,"registers2.WEBH");sc_trace(tf, mips.registers->regs2->WEBL,"registers2.WEBL");  sc_trace(tf, mips.registers->regs2->CLKBH,"registers2.CLKBH");sc_trace(tf, mips.registers->regs2->CLKBL,"registers2.CBLKBL");  sc_trace(tf, mips.registers->regs2->RSTBH,"registers2.RSTBH");sc_trace(tf, mips.registers->regs2->RSTBL,"registers2.RSTBL");#endif  #endif#ifndef BRAM  for (int i = 0; i < RAMSIZE; i++)	{	  sprintf(stbuf, "memory.dmem(%d)", i);	  sc_trace(tf, mips.dmem->ramfile[i], stbuf);	}#else#ifndef NOMEMVCD  for (int i = 0; i < RAMSIZE ; i+=4)	{	  sprintf(stbuf, "memory.dmem(%d)", i);	  sc_trace(tf, mips.dmem->bram0->memory[i/4], stbuf);	  sprintf(stbuf, "memory.dmem(%d)", i+1);	  sc_trace(tf, mips.dmem->bram1->memory[i/4], stbuf);	  sprintf(stbuf, "memory.dmem(%d)", i+2);	  sc_trace(tf, mips.dmem->bram2->memory[i/4], stbuf);	  sprintf(stbuf, "memory.dmem(%d)", i+3);	  sc_trace(tf, mips.dmem->bram3->memory[i/4], stbuf);	  }  sc_trace(tf, mips.dmem->DO1,"dmem.DO1");sc_trace(tf, mips.dmem->DO0,"dmem.DO0");  sc_trace(tf, mips.dmem->ADDR1,"dmem.ADDR1");sc_trace(tf, mips.dmem->ADDR0,"dmem.ADDR0");  sc_trace(tf, mips.dmem->DI1,"dmem.DI1");sc_trace(tf, mips.dmem->DI0,"dmem.DI0");  sc_trace(tf, mips.dmem->EN1,"dmem.EN1");sc_trace(tf, mips.dmem->EN0,"dmem.EN0");  sc_trace(tf, mips.dmem->WE1,"dmem.WE1");sc_trace(tf, mips.dmem->WE0,"dmem.WE0");  sc_trace(tf, mips.dmem->CLK1,"dmem.CLK1");sc_trace(tf, mips.dmem->CLK0,"dmem.CLK0");  sc_trace(tf, mips.dmem->RST1,"dmem.RST1");sc_trace(tf, mips.dmem->RST0,"dmem.RST0");  sc_trace(tf, mips.dmem->DO3,"dmem.DO3");sc_trace(tf, mips.dmem->DO2,"dmem.DO2");  sc_trace(tf, mips.dmem->ADDR3,"dmem.ADDR3");sc_trace(tf, mips.dmem->ADDR2,"dmem.ADDR2");  sc_trace(tf, mips.dmem->DI3,"dmem.DI3");sc_trace(tf, mips.dmem->DI2,"dmem.DI2");

⌨️ 快捷键说明

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