Reordered case statement by opcode and improved comment labels

This commit is contained in:
WilliamMiceli
2019-03-29 16:17:27 -04:00
parent 445f5ce830
commit 93469aa23f

View File

@@ -15,9 +15,73 @@ module ControlUnit(
always @(instIn, functBit)begin always @(instIn, functBit)begin
case(instIn) case(instIn)
4'b0101: 4'b0000: // Halt/NOP
if(functBit == 1) begin begin
aluOut <= 4'b0001; //sub halt <= 1'b1;
RegEn <= 1'b1;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0001: // Load Byte
begin
aluOut <= 4'b0000;
mem <= 1'b1;
dataMemEn <= 1'b0;
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
halt <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0010: // Store Byte
begin
aluOut <= 4'b0000;
mem <= 1'b0;
dataMemEn <= 1'b1;
RegEn <= 1'b1;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
addi <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0011: // Link
begin
halt <= 1'b0;
RegEn <= 1'b0;
FU <= 3'b001;
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b1;
bank <= 2'b10;
js <= 1'b0;
end
4'b0100: // Zero
begin
aluOut <= 4'b1011;
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0101: // Add/Subtract
if(functBit == 1) begin // Subtract
aluOut <= 4'b0001;
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; FU <= 3'b001;
halt <= 1'b0; halt <= 1'b0;
@@ -28,8 +92,8 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
else begin else begin // Add
aluOut <= 4'b0000; //Add aluOut <= 4'b0000;
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching FU <= 3'b001; // Disable Branching
halt <= 1'b0; halt <= 1'b0;
@@ -40,33 +104,22 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
4'b1101: begin 4'b0110: // Add Immediate
aluOut <= 4'b0011; //nor begin
RegEn <= 1'b0; aluOut <= 4'b1010;
FU <= 3'b001; // Disable Branching addi <= 1'b1;
halt <= 1'b0; RegEn <= 1'b0;
addi <= 1'b0; FU <= 3'b001; // Disable Branching
mem <= 1'b0; halt <= 1'b0;
dataMemEn <= 1'b0; mem <= 1'b0;
link <= 1'b0; dataMemEn <= 1'b0;
bank <= 2'b10; link <= 1'b0;
js <= 1'b0; bank <= 2'b10;
end js <= 1'b0;
4'b0100: begin end
aluOut <= 4'b1011; //zero 4'b0111: // Set if Less Than
RegEn <= 1'b0; begin
FU <= 3'b001; // Disable Branching aluOut <= 4'b1001;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1110:
if(functBit == 1) begin
aluOut <= 4'b0100; //and
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching FU <= 3'b001; // Disable Branching
halt <= 1'b0; halt <= 1'b0;
@@ -77,8 +130,100 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
else begin 4'b1000: // Jump to Register
aluOut <= 4'b0010; //or begin
aluOut <= 4'b0000;
FU <= 3'b000;
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1001: // Jump Forward
begin
aluOut <= 4'b0000;
FU <= 3'b010;
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1010: // Bank Load/Bank Store
begin
halt <= 1'b0;
RegEn <= !functBit;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
link <= 1'b0;
bank <= {functBit,functBit};
js <= 1'b0;
end
4'b1011: // Jump Backward
begin
aluOut <= 4'b0000;
FU <= 3'b010;
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b1;
end
4'b1100: // Branch if Zero
begin
aluOut <= 4'b1010;
FU <= 3'b110;
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1101: // NOR
begin
aluOut <= 4'b0011;
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1110: // OR/AND
if(functBit == 1) // AND
begin
aluOut <= 4'b0100;
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
else // OR
begin
aluOut <= 4'b0010;
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching FU <= 3'b001; // Disable Branching
halt <= 1'b0; halt <= 1'b0;
@@ -89,9 +234,10 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
4'b1111: 4'b1111: // Shift Right Logical/Shift Left Logical
if(functBit == 1) begin if(functBit == 1) // Shift Right Logical
aluOut <= 4'b0110; //srl begin
aluOut <= 4'b0110;
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching FU <= 3'b001; // Disable Branching
halt <= 1'b0; halt <= 1'b0;
@@ -102,8 +248,9 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
else begin else // Shift Left Logical
aluOut <= 4'b0101; //shift left begin
aluOut <= 4'b0101;
RegEn <= 1'b0; RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching FU <= 3'b001; // Disable Branching
halt <= 1'b0; halt <= 1'b0;
@@ -114,161 +261,31 @@ module ControlUnit(
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
4'b0111: begin default:
aluOut <= 4'b1001; //Less than begin
RegEn <= 1'b0; halt <= 1'b1;
FU <= 3'b001; // Disable Branching RegEn <= 1'b1;
halt <= 1'b0; FU <= 3'b001;
addi <= 1'b0; addi <= 1'b0;
mem <= 1'b0; aluOut <= 4'b0000;
dataMemEn <= 1'b0; mem <= 1'b0;
link <= 1'b0; link <= 1'b0;
bank <= 2'b10; bank <= 2'b10;
js <= 1'b0; js <= 1'b0;
end end
4'b0110: begin
aluOut <= 4'b1010;
addi <= 1'b1; // addi
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1001: begin
aluOut <= 4'b0000;
FU <= 3'b010; // jf
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1011: begin
aluOut <= 4'b0000;
FU <= 3'b010; // jb
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b1;
end
4'b0011: begin // link
halt <= 1'b0;
RegEn <= 1'b0;
FU <= 3'b001;
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b1;
bank <= 2'b10;
js <= 1'b0;
end
4'b1100: begin
aluOut <= 4'b1010;
FU <= 3'b110; // branch
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1000: begin
aluOut <= 4'b0000;
FU <= 3'b000; // jumpreg
RegEn <= 1'b1;
halt <= 1'b0;
addi <= 1'b0;
mem <= 1'b0;
dataMemEn <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0001: begin
aluOut <= 4'b0000;
mem <= 1'b1; // load
dataMemEn <= 1'b0;
RegEn <= 1'b0;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
halt <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b0010: begin
aluOut <= 4'b0000;
mem <= 1'b0; // store
dataMemEn <= 1'b1;
RegEn <= 1'b1;
FU <= 3'b001; // Disable Branching
halt <= 1'b0;
addi <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
4'b1010: begin
halt <= 1'b0; // bank
RegEn <= !functBit;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
link <= 1'b0;
bank <= {functBit,functBit};
js <= 1'b0;
end
4'b0000: begin
halt <= 1'b1; // halt
RegEn <= 1'b1;
FU <= 3'b001; // Disable Branching
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
default: begin
halt <= 1'b1;
RegEn <= 1'b1;
FU <= 3'b001;
addi <= 1'b0;
aluOut <= 4'b0000;
mem <= 1'b0;
link <= 1'b0;
bank <= 2'b10;
js <= 1'b0;
end
endcase endcase
end end
endmodule endmodule
module ControlUnit_tb(); module ControlUnit_tb();
reg [3:0] instruction; reg [3:0] instruction;
reg functionB; reg functionB;
wire [3:0] aluOutput; wire [3:0] aluOutput;
wire [2:0] FetchUnit; wire [2:0] FetchUnit;
wire addImmediate; wire addImmediate, memory, RegEnable;
wire memory;
wire RegEnable;
ControlUnit ControlUnit0( ControlUnit ControlUnit0(
.instIn(instruction), .instIn(instruction),