mem_wb.h

来自「SystemC 实现 MIPS 处理器 源代码」· C头文件 代码 · 共 64 行

H
64
字号
#ifndef MEM_WB_H
#define MEM_WB_H

#include "STDAFX.h"

SC_MODULE(MEM_WB)
{
	sc_in_clk clk;

	sc_in<sc_uint<32> > MEM_WB_instr_in;
	sc_in<sc_uint<32> > MEM_WB_ALU_result_in;
	sc_in<sc_uint<32> > MEM_WB_Memdata_in;

	sc_out<bool> MEM_WB_isRegWrite;
	sc_out<sc_uint<5> > MEM_WB_Reg_address;
	sc_out<sc_uint<32> > MEM_WB_Reg_data;

	void entry()
	{
		bool isregwrite=false;
		unsigned int regaddress=0,regdata=0;

		unsigned int op=MEM_WB_instr_in.read().range(31,26).to_uint();
		if (op==0) 
		{
			isregwrite=true;
			regaddress=MEM_WB_instr_in.read().range(15,11).to_uint();
			regdata=MEM_WB_ALU_result_in.read();
		}

		if (op==8 || op==12 || op==13)
		{
			isregwrite=true;
			regaddress=MEM_WB_instr_in.read().range(20,16).to_uint();
			regdata=MEM_WB_ALU_result_in.read();
		}

		if (op==35)
		{
			isregwrite=true;
			regaddress=MEM_WB_instr_in.read().range(20,16).to_uint();
			regdata=MEM_WB_Memdata_in.read();
		}

		if (sc_simulation_time()==50) 
		{
			cout<<"isregwrite"<<isregwrite<<endl;
		}

		MEM_WB_isRegWrite.write(isregwrite);
		MEM_WB_Reg_address.write(regaddress);
		MEM_WB_Reg_data.write(regdata);
	}

	SC_CTOR(MEM_WB)
	{
		SC_METHOD(entry);
		sensitive_pos<<clk;
		dont_initialize();
	}
};


#endif

⌨️ 快捷键说明

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