📄 id_ex.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 + -