package hardware;
/**
* RegDst,Branch,MemRead,MemtoReg,ALUOP,MemWrite,ALUSrc,RegWrite // 8
*
*
*/
public class ControlUnit {
public static String Branch = "";
public static String MemRead = "";
public static String MemtoReg = "";
public static String MemWrite = "";
public static String ALUOP = "";
public static String ALUSrc = "";
public static String RegWrite = "";
public static String Jump = "0";
public static String ALUCONT_OP = ""; // control to be passed to ALU;
public static void MainControl(String flag, String opcode) {
// Op or funct
if (flag.equalsIgnoreCase("0")) {
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "0";
MemtoReg = "0";
MemWrite = "0";
MemRead = "0";
if (opcode.equalsIgnoreCase("0000000000000000")) {
// ADD
ALUOP = "000";
} else if (opcode.equalsIgnoreCase("0000000000000001")) {
ALUOP = "001";
} else if (opcode.equalsIgnoreCase("0000000000000010")) {
ALUOP = "010";
} else if (opcode.equalsIgnoreCase("0000000000000011")) {
ALUOP = "011";
} else if (opcode.equalsIgnoreCase("0000000000000100")) {
ALUOP = "100";
}
} else if (flag.equalsIgnoreCase("1")) {
// funct
if (opcode.equalsIgnoreCase("00000")) {
// lw
ALUOP = "000";
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "1";
MemtoReg = "1";
MemWrite = "0";
MemRead = "1";
} else if (opcode.equalsIgnoreCase("00001")) {
// sw
ALUOP = "000";
RegWrite = "0";
Jump = "0";
Branch = "0";
ALUSrc = "1";
MemtoReg = "X";
MemWrite = "1"; // changed
MemRead = "0";
} else if (opcode.equalsIgnoreCase("00010")) {
ALUOP = "000";
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "1";
MemtoReg = "0";
MemWrite = "0";
MemRead = "0";
} else if (opcode.equalsIgnoreCase("00011")) {
ALUOP = "101";
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "1";
MemtoReg = "0";
MemWrite = "0";
MemRead = "0";
} else if (opcode.equalsIgnoreCase("00100")) {
ALUOP = "001";
RegWrite = "0";
Jump = "0";
Branch = "1";
ALUSrc = "0";
MemtoReg = "X";
MemWrite = "0";
MemRead = "0";
} else if (opcode.equalsIgnoreCase("00101")) {
ALUOP = "100";
RegWrite = "0";
Jump = "0";
Branch = "1";
ALUSrc = "0";
MemtoReg = "X";
MemWrite = "0";
MemRead = "0";
} else if (opcode.equalsIgnoreCase("00110")) {
ALUOP = "XXX";
RegWrite = "0";
Jump = "1";
Branch = "0";
ALUSrc = "X";
MemtoReg = "X";
MemWrite = "X";
MemRead = "X";
} else if (opcode.equalsIgnoreCase("0000000000000111")) {
ALUOP = "110";
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "0";
MemtoReg = "0";
MemWrite = "0";
MemRead = "0";
} else if (opcode.equalsIgnoreCase("0000000000001000")) {
ALUOP = "111";
RegWrite = "1";
Jump = "0";
Branch = "0";
ALUSrc = "0";
MemtoReg = "0";
MemWrite = "0";
MemRead = "0";
}
}
}
}