data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v
1: b'%Warning-WIDTH: data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v:323: Operator ASSIGNDLY expects 32 bits on the Assign RHS, but Assign RHS\'s UNSIGNED generates 5 bits.\n                                                                                                         : ... In instance IR_reg\n   tpimm<=$unsigned(ir[10:6]);\n        ^~\n                ... Use "/* verilator lint_off WIDTH */" and lint_on around source to disable this message.\n%Warning-WIDTH: data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v:325: Operator ASSIGNDLY expects 32 bits on the Assign RHS, but Assign RHS\'s SIGNED generates 16 bits.\n                                                                                                         : ... In instance IR_reg\n   tpimm<=$signed(ir[15:0]);\n        ^~\n%Warning-WIDTH: data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v:327: Operator ASSIGNDLY expects 32 bits on the Assign RHS, but Assign RHS\'s UNSIGNED generates 16 bits.\n                                                                                                         : ... In instance IR_reg\n   tpimm<=$unsigned(ir[15:0]);\n        ^~\n%Warning-WIDTH: data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v:329: Operator ASSIGNDLY expects 32 bits on the Assign RHS, but Assign RHS\'s REPLICATE generates 28 bits.\n                                                                                                         : ... In instance IR_reg\n   tpimm<={$unsigned(ir[25:0]),2\'h0};\n        ^~\n%Error: data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips/IR_reg.v:595: Cannot find file containing module: \'REG_FILE\'\nREG_FILE u_REG_FILE(\n^~~~~~~~\n        ... Looked in:\n             data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips,data/full_repos/permissive/115487336/REG_FILE\n             data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips,data/full_repos/permissive/115487336/REG_FILE.v\n             data/full_repos/permissive/115487336/mycode/Mips/MultiCycleWithPipeline-Mips,data/full_repos/permissive/115487336/REG_FILE.sv\n             REG_FILE\n             REG_FILE.v\n             REG_FILE.sv\n             obj_dir/REG_FILE\n             obj_dir/REG_FILE.v\n             obj_dir/REG_FILE.sv\n%Error: Exiting due to 1 error(s), 4 warning(s)\n'
module IR_reg(
	input clk,
	input rst_n,
	
	input [31:0] pc,
	input [31:0] ir,
	
	input is_int,
	
	input ir_stall,
	input ir_bubble,
	
	

	input preg_we,
	input [4:0] pregaddr3,
	input [31:0] pregvalue3,

	
	output reg [31:0] next_pc,
	output reg [31:0] next_ir,
	
	output reg [4:0] regaddr1,
	output reg [4:0] regaddr2,
	output reg [4:0] regaddr3,
	
	output [31:0] alu_a,
	output  [31:0] alu_b,
	
	output [31:0] swdata,
	
	output reg [4:0] op,
	output reg [5:0] optype,
	
	output reg RTI,
	output syscall
);
assign syscall = ir==32'h0000_000C ? 1 : 0;

wire [31:0] regout1;
wire [31:0] regout2;
assign swdata = regout2;

reg [31:0] next_temppc;

reg [31:0] local_swdata;


reg [4:0] ir_local_regaddr1;
reg [4:0] ir_local_regaddr2;
reg [4:0] ir_local_regaddr3;

reg [5:0] ir_local_optype;

























reg [4:0] ir_local_op;


always@(*)
begin
	if(ir_stall)
	begin
		ir_local_op=op;
		ir_local_optype=optype;
		next_temppc=next_pc;
	end
	else if(ir_bubble || is_int)
	begin
		ir_local_op=5'h0;
		ir_local_optype=6'h3F;
	end
	
	else if(ir==32'h0)
	begin
		ir_local_op=5'h0;
		ir_local_optype=6'h3F;
	end
	
	else if(ir==32'h4200_0018)
	begin
		ir_local_optype=6'h20;
	end
	else if(ir==32'h0000_000C)
	begin
		ir_local_op=5'h12;
		ir_local_optype=6'h21;
	end
	else
	begin
		next_temppc=pc;
		case(ir[31:26])
			6'h0:
			begin
				if(ir[5:0]==6'b001000)
				begin
					ir_local_optype=6'h10;
					ir_local_op=5'h12;
				end
				else if(ir[5:0] == 6'b000000)
				begin
					ir_local_op=5'hD;
					ir_local_optype=6'h01;
				end
				else if(ir[5:0] == 6'b000010)
				begin
					ir_local_op=5'hE;
					ir_local_optype=6'h01;
				end
				else if(ir[5:0] == 6'b000011)
				begin
					ir_local_op=5'hF;
					ir_local_optype=6'h01;
				end
				else
				begin
					ir_local_optype=6'h00;
					if(ir[5:0]==6'b10_0000)
					begin
						ir_local_op=5'h01;
					end
					else if(ir[5:0]==6'b10_0001)
					begin
						ir_local_op=5'h01;
					end
					else if(ir[5:0]==6'b10_0010)
					begin
						ir_local_op=5'h02;
					end
					else if(ir[5:0]==6'b10_0011)
					begin
						ir_local_op=5'h02;
					end
					else if(ir[5:0]==6'b10_0100)
					begin
						ir_local_op=5'h03;
					end
					else if(ir[5:0]==6'b10_0101)
					begin
						ir_local_op=5'h04;
					end
					else if(ir[5:0]==6'b10_0110)
					begin
						ir_local_op=5'h05;
					end
					else if(ir[5:0]==6'b10_0111)
					begin
						ir_local_op=5'h06;
					end
					else if(ir[5:0]==6'b00_0100)
					begin
						ir_local_op=5'h0D;
					end
					else if(ir[5:0]==6'b00_0110)
					begin
						ir_local_op=5'h0E;
					end
					else if(ir[5:0]==6'b00_0111)
					begin
						ir_local_op=5'h0F;
					end
					else
					begin
					end
				end
			end
			6'b01_1100:
			begin
				if(ir[5:0]==6'b10_0001)
				begin
					ir_local_optype=6'h02;
					ir_local_op=5'h1E;
				end
				else if(ir[5:0]==6'b10_0000)
				begin
					ir_local_optype=6'h02;
					ir_local_op=5'h1F;
				end
				else
				begin
				end
			end
			6'b00_1000:
			begin
				ir_local_optype=6'h04;
				ir_local_op=5'h01;
			end
			6'b00_1100:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h03;
			end
			6'b00_1101:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h04;
			end
			6'b00_1110:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h05;
			end
			6'b00_1111:
			begin
				ir_local_optype=6'h06;
				ir_local_op=5'h10;
			end
			6'b00_1001:
			begin
				ir_local_optype=6'h06;
				ir_local_op=5'h11;
			end
			6'b00_0010:
			begin
				ir_local_optype=6'h11;
				ir_local_op=5'h13;
			end
			6'b00_0100:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0B;
			end
			6'b00_0101:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0C;
			end
			6'b00_0111:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h07;
			end
			6'b00_0110:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0A;
			end
			6'b00_0001:
			begin
				if(ir[16])
				begin
					ir_local_optype=6'h12;
					ir_local_op=5'h08;
				end
				else
				begin
					ir_local_optype=6'h12;
					ir_local_op=5'h09;
				end
			end
			6'b10_0011:
			begin
				ir_local_optype=6'h13;
				ir_local_op=5'h01;
			end
			6'b101011:
			begin
				ir_local_optype=6'h14;
				ir_local_op=5'h01;
			end
			default:
			begin
			end
			
		endcase
	end
end



reg [31:0] tpimm;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		tpimm<=32'h0;
	end
	else
	begin
		if(ir_local_optype==6'h01)
			tpimm<=$unsigned(ir[10:6]);
		else if(ir_local_optype==6'h04 || ir_local_optype==6'h13 || ir_local_optype==6'h14)
			tpimm<=$signed(ir[15:0]);
		else if(ir_local_optype==6'h05 || ir_local_optype==6'h06)
			tpimm<=$unsigned(ir[15:0]);
		else if(ir_local_optype==6'h11)
			tpimm<={$unsigned(ir[25:0]),2'h0};
		else
		begin
		end
	end
end

reg is_reg_or_imm;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		is_reg_or_imm<=0;
	end
	else
	begin
		if(ir_local_optype==6'h01 || ir_local_optype==6'h04 || ir_local_optype==6'h05
	 || ir_local_optype==6'h06  || ir_local_optype==6'h13  || ir_local_optype==6'h14  || ir_local_optype==6'h11)
		begin
			is_reg_or_imm<=1;
		end
		else
			is_reg_or_imm<=0;
	end
end



reg is_shamt;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
		is_shamt<=0;
	else
	begin
		if(ir_local_optype==6'h01)
			is_shamt<=1;
		else
			is_shamt<=0;
	end
end

assign alu_a = is_shamt? regout2 : regout1;

assign alu_b = is_reg_or_imm ? tpimm : regout2;



always@(*)
begin
	RTI=0;
	if(ir_stall)
	begin
		ir_local_regaddr1=regaddr1;
		ir_local_regaddr2=regaddr2;
		ir_local_regaddr3=regaddr3;
	end
	else if(ir_local_optype==6'h3F)
	begin
		ir_local_regaddr1=5'h0;
		ir_local_regaddr2=5'h0;
		ir_local_regaddr3=5'h0;
	end
	else if(ir_local_optype==6'h00)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h01)
	begin
		ir_local_regaddr1=ir[20:16];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h02)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h04)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h05)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h06)
	begin
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h10)
	begin
		ir_local_regaddr1=ir[25:21];
	end
	else if(ir_local_optype==6'h11)
	begin
	end
	else if(ir_local_optype==6'h12)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
	end
	
	else if(ir_local_optype==6'h13)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h14)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
	end
	
	
	else if(ir_local_optype==6'h20)
	begin

		RTI=1;
	end
	else if(ir_local_optype==6'h21)
	begin
		ir_local_regaddr1=5'h2;
	end
	else
	begin

	end
end










reg two_bubble;

always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		optype<=6'h3F;
		op<=5'h0;
		regaddr1<=5'h0;
		regaddr2<=5'h0;
		regaddr3<=5'h0;
		next_pc<=32'h0;
		next_ir<=32'h0;
		two_bubble<=1;
	end
	else
	begin
		next_pc<=next_temppc;
		next_ir<=ir;
		if(two_bubble)
		begin
			two_bubble<=0;
			optype<=6'h3F;
		end
		else
		begin
			optype<=ir_local_optype;
		end
		op<=ir_local_op;
		regaddr1<=ir_local_regaddr1;
		regaddr2<=ir_local_regaddr2;
		regaddr3<=ir_local_regaddr3;
	end
end




REG_FILE u_REG_FILE(
	.clk(clk),
	.rst_n(rst_n),
	.r1_addr(ir_local_regaddr1),
	.r2_addr(ir_local_regaddr2),
	.r3_addr(pregaddr3),
	.r3_din(pregvalue3),
	.r3_wr(preg_we),
	.r1_dout(regout1),
	.r2_dout(regout2)
);


endmodule
module IR_reg(
	input clk,
	input rst_n,
	
	input [31:0] pc,
	input [31:0] ir,
	
	input is_int,
	
	input ir_stall,
	input ir_bubble,
	
	

	input preg_we,
	input [4:0] pregaddr3,
	input [31:0] pregvalue3,

	
	output reg [31:0] next_pc,
	output reg [31:0] next_ir,
	
	output reg [4:0] regaddr1,
	output reg [4:0] regaddr2,
	output reg [4:0] regaddr3,
	
	output [31:0] alu_a,
	output  [31:0] alu_b,
	
	output [31:0] swdata,
	
	output reg [4:0] op,
	output reg [5:0] optype,
	
	output reg RTI,
	output syscall
);

assign syscall = ir==32'h0000_000C ? 1 : 0;

wire [31:0] regout1;
wire [31:0] regout2;
assign swdata = regout2;

reg [31:0] next_temppc;

reg [31:0] local_swdata;


reg [4:0] ir_local_regaddr1;
reg [4:0] ir_local_regaddr2;
reg [4:0] ir_local_regaddr3;

reg [5:0] ir_local_optype;

























reg [4:0] ir_local_op;


always@(*)
begin
	if(ir_stall)
	begin
		ir_local_op=op;
		ir_local_optype=optype;
		next_temppc=next_pc;
	end
	else if(ir_bubble || is_int)
	begin
		ir_local_op=5'h0;
		ir_local_optype=6'h3F;
	end
	
	else if(ir==32'h0)
	begin
		ir_local_op=5'h0;
		ir_local_optype=6'h3F;
	end
	
	else if(ir==32'h4200_0018)
	begin
		ir_local_optype=6'h20;
	end
	else if(ir==32'h0000_000C)
	begin
		ir_local_op=5'h12;
		ir_local_optype=6'h21;
	end
	else
	begin
		next_temppc=pc;
		case(ir[31:26])
			6'h0:
			begin
				if(ir[5:0]==6'b001000)
				begin
					ir_local_optype=6'h10;
					ir_local_op=5'h12;
				end
				else if(ir[5:0] == 6'b000000)
				begin
					ir_local_op=5'hD;
					ir_local_optype=6'h01;
				end
				else if(ir[5:0] == 6'b000010)
				begin
					ir_local_op=5'hE;
					ir_local_optype=6'h01;
				end
				else if(ir[5:0] == 6'b000011)
				begin
					ir_local_op=5'hF;
					ir_local_optype=6'h01;
				end
				else
				begin
					ir_local_optype=6'h00;
					if(ir[5:0]==6'b10_0000)
					begin
						ir_local_op=5'h01;
					end
					else if(ir[5:0]==6'b10_0001)
					begin
						ir_local_op=5'h01;
					end
					else if(ir[5:0]==6'b10_0010)
					begin
						ir_local_op=5'h02;
					end
					else if(ir[5:0]==6'b10_0011)
					begin
						ir_local_op=5'h02;
					end
					else if(ir[5:0]==6'b10_0100)
					begin
						ir_local_op=5'h03;
					end
					else if(ir[5:0]==6'b10_0101)
					begin
						ir_local_op=5'h04;
					end
					else if(ir[5:0]==6'b10_0110)
					begin
						ir_local_op=5'h05;
					end
					else if(ir[5:0]==6'b10_0111)
					begin
						ir_local_op=5'h06;
					end
					else if(ir[5:0]==6'b00_0100)
					begin
						ir_local_op=5'h0D;
					end
					else if(ir[5:0]==6'b00_0110)
					begin
						ir_local_op=5'h0E;
					end
					else if(ir[5:0]==6'b00_0111)
					begin
						ir_local_op=5'h0F;
					end
					else
					begin
					end
				end
			end
			6'b01_1100:
			begin
				if(ir[5:0]==6'b10_0001)
				begin
					ir_local_optype=6'h02;
					ir_local_op=5'h1E;
				end
				else if(ir[5:0]==6'b10_0000)
				begin
					ir_local_optype=6'h02;
					ir_local_op=5'h1F;
				end
				else
				begin
				end
			end
			6'b00_1000:
			begin
				ir_local_optype=6'h04;
				ir_local_op=5'h01;
			end
			6'b00_1100:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h03;
			end
			6'b00_1101:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h04;
			end
			6'b00_1110:
			begin
				ir_local_optype=6'h05;
				ir_local_op=5'h05;
			end
			6'b00_1111:
			begin
				ir_local_optype=6'h06;
				ir_local_op=5'h10;
			end
			6'b00_1001:
			begin
				ir_local_optype=6'h06;
				ir_local_op=5'h11;
			end
			6'b00_0010:
			begin
				ir_local_optype=6'h11;
				ir_local_op=5'h13;
			end
			6'b00_0100:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0B;
			end
			6'b00_0101:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0C;
			end
			6'b00_0111:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h07;
			end
			6'b00_0110:
			begin
				ir_local_optype=6'h12;
				ir_local_op=5'h0A;
			end
			6'b00_0001:
			begin
				if(ir[16])
				begin
					ir_local_optype=6'h12;
					ir_local_op=5'h08;
				end
				else
				begin
					ir_local_optype=6'h12;
					ir_local_op=5'h09;
				end
			end
			6'b10_0011:
			begin
				ir_local_optype=6'h13;
				ir_local_op=5'h01;
			end
			6'b101011:
			begin
				ir_local_optype=6'h14;
				ir_local_op=5'h01;
			end
			default:
			begin
			end
			
		endcase
	end
end



reg [31:0] tpimm;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		tpimm<=32'h0;
	end
	else
	begin
		if(ir_local_optype==6'h01)
			tpimm<=$unsigned(ir[10:6]);
		else if(ir_local_optype==6'h04 || ir_local_optype==6'h13 || ir_local_optype==6'h14)
			tpimm<=$signed(ir[15:0]);
		else if(ir_local_optype==6'h05 || ir_local_optype==6'h06)
			tpimm<=$unsigned(ir[15:0]);
		else if(ir_local_optype==6'h11)
			tpimm<={$unsigned(ir[25:0]),2'h0};
		else
		begin
		end
	end
end

reg is_reg_or_imm;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		is_reg_or_imm<=0;
	end
	else
	begin
		if(ir_local_optype==6'h01 || ir_local_optype==6'h04 || ir_local_optype==6'h05
	 || ir_local_optype==6'h06  || ir_local_optype==6'h13  || ir_local_optype==6'h14  || ir_local_optype==6'h11)
		begin
			is_reg_or_imm<=1;
		end
		else
			is_reg_or_imm<=0;
	end
end



reg is_shamt;
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
		is_shamt<=0;
	else
	begin
		if(ir_local_optype==6'h01)
			is_shamt<=1;
		else
			is_shamt<=0;
	end
end

assign alu_a = is_shamt? regout2 : regout1;

assign alu_b = is_reg_or_imm ? tpimm : regout2;



always@(*)
begin
	RTI=0;
	if(ir_stall)
	begin
		ir_local_regaddr1=regaddr1;
		ir_local_regaddr2=regaddr2;
		ir_local_regaddr3=regaddr3;
	end
	else if(ir_local_optype==6'h3F)
	begin
		ir_local_regaddr1=5'h0;
		ir_local_regaddr2=5'h0;
		ir_local_regaddr3=5'h0;
	end
	else if(ir_local_optype==6'h00)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h01)
	begin
		ir_local_regaddr1=ir[20:16];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h02)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[15:11];
	end
	else if(ir_local_optype==6'h04)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h05)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h06)
	begin
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h10)
	begin
		ir_local_regaddr1=ir[25:21];
	end
	else if(ir_local_optype==6'h11)
	begin
	end
	else if(ir_local_optype==6'h12)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
	end
	
	else if(ir_local_optype==6'h13)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr3=ir[20:16];
	end
	else if(ir_local_optype==6'h14)
	begin
		ir_local_regaddr1=ir[25:21];
		ir_local_regaddr2=ir[20:16];
	end
	
	
	else if(ir_local_optype==6'h20)
	begin

		RTI=1;
	end
	else if(ir_local_optype==6'h21)
	begin
		ir_local_regaddr1=5'h2;
	end
	else
	begin

	end
end










reg two_bubble;

always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		optype<=6'h3F;
		op<=5'h0;
		regaddr1<=5'h0;
		regaddr2<=5'h0;
		regaddr3<=5'h0;
		next_pc<=32'h0;
		next_ir<=32'h0;
		two_bubble<=1;
	end
	else
	begin
		next_pc<=next_temppc;
		next_ir<=ir;
		if(two_bubble)
		begin
			two_bubble<=0;
			optype<=6'h3F;
		end
		else
		begin
			optype<=ir_local_optype;
		end
		op<=ir_local_op;
		regaddr1<=ir_local_regaddr1;
		regaddr2<=ir_local_regaddr2;
		regaddr3<=ir_local_regaddr3;
	end
end




REG_FILE u_REG_FILE(
	.clk(clk),
	.rst_n(rst_n),
	.r1_addr(ir_local_regaddr1),
	.r2_addr(ir_local_regaddr2),
	.r3_addr(pregaddr3),
	.r3_din(pregvalue3),
	.r3_wr(preg_we),
	.r1_dout(regout1),
	.r2_dout(regout2)
);


endmodule