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

📄 id_ex.h

📁 SystemC 实现 MIPS 处理器 源代码
💻 H
字号:
#ifndef ID_EX_H
#define ID_EX_H

#include "STDAFX.h"

//译码、执行 寄存器
SC_MODULE(ID_EX)
{
	sc_in_clk clk;

	//指令输入
	sc_in<sc_uint<32> > ID_EX_instr_in;
	//寄存器读出的数据
	sc_in<sc_uint<32> > ID_EX_regdata1_in,ID_EX_regdata2_in;
	//立即数
	sc_in<sc_uint<32> > ID_EX_imm_in;

	//指令输出
	sc_out<sc_uint<32> > ID_EX_instr_out;
	//立即数
	sc_out<sc_uint<32> > ID_EX_imm_out;
	//ALU操作
	sc_out<sc_uint<6> > ID_EX_ALUC;
	//ALU操作数的决定
	sc_out<bool> ID_EX_ALUA,ID_EX_ALUB;
	//第二个寄存器读出的数据需要保留给下一级
	sc_out<sc_uint<32> > ID_EX_regdata1_out,ID_EX_regdata2_out;

	void entry()
	{
		ID_EX_instr_out.write(ID_EX_instr_in.read());
		ID_EX_regdata1_out.write(ID_EX_regdata1_in.read());
		ID_EX_regdata2_out.write(ID_EX_regdata2_in.read());
		ID_EX_imm_out.write(ID_EX_imm_in.read());

		bool alua,alub;
		unsigned int op=ID_EX_instr_in.read().range(31,26).to_uint();
		unsigned int aluc=ID_EX_instr_in.read().range(5,0).to_uint();
		if (op==0)
		{
			alua=0;
			alub=0;
			if (aluc==0 || aluc==2 || aluc==3) alua=1;
		}
		else
		{
			alua=0;
			alub=1;
			if (op==8) aluc=32;
			if (op==12) aluc=36;
			if (op==13) aluc=37;
			if (op==35) aluc=32;
			if (op==43) aluc=32;
		}
		ID_EX_ALUC.write(aluc);
		ID_EX_ALUA.write(alua);
		ID_EX_ALUB.write(alub);


		fout<<"Current Time: ";
		fout<<sc_simulation_time()<<endl;
		fout<<"ID_EX:"<<endl;
		fout<<"Instr: ";PrintInstr(ID_EX_instr_in.read(),fout);
		fout<<"-----------------------"<<endl;
		
	}
	

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



#endif

⌨️ 快捷键说明

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