data/full_repos/permissive/435890256/uvm_ref1/Processor-UVM-Verification/Code/Processor/reg_file.v
data/verilator_xmls/61a212fc-5a13-44c4-bdb0-ad0d47e410e1.xml
module reg_file(
    output reg [15:0] r0,
    output reg [15:0] r1,
    input clk,
	 input [1:0] reconfig,
    input [2:0] a0,
    input [2:0] a1,
    input [2:0] d,
    input [15:0] wr,
    input [1:0] w_en
    );

	 reg [15:0]gpr[7:0];
	 integer i;
	 initial 
	  for(i=0;i<8;i=i+1)
	  begin
	  gpr[i]=0;
	  end
	 always@(negedge clk)
		begin
			if(reconfig==2'b11)
				begin
					r0<=gpr[a0];
					r1<=gpr[a1];
				end
			else if(reconfig==2'b10)
				begin
					r0<={gpr[a0][15:8],{8{1'b0}}};
					r1<={gpr[a1][15:8],{8{1'b0}}};
				end
			else if(reconfig==2'b01)
				begin
					r0<={{8{1'b0}},gpr[a0][7:0]};
					r1<={{8{1'b0}},gpr[a1][7:0]};
				end
			else
				begin
					r0<=16'b0;
					r1<=16'b0;
				end
				
		end
		
	always@(posedge clk)
		begin
			if(w_en==2'b11)
				gpr[d]<=wr;
			else if(w_en==2'b01)
				gpr[d][7:0]<=wr[7:0];
			else if(w_en==2'b10)
				gpr[d][15:8]<=wr[15:8];
		end

endmodule
module reg_file(
    output reg [15:0] r0,
    output reg [15:0] r1,
    input clk,
	 input [1:0] reconfig,
    input [2:0] a0,
    input [2:0] a1,
    input [2:0] d,
    input [15:0] wr,
    input [1:0] w_en
    );


	 reg [15:0]gpr[7:0];
	 integer i;
	 initial 
	  for(i=0;i<8;i=i+1)
	  begin
	  gpr[i]=0;
	  end
	 always@(negedge clk)
		begin
			if(reconfig==2'b11)
				begin
					r0<=gpr[a0];
					r1<=gpr[a1];
				end
			else if(reconfig==2'b10)
				begin
					r0<={gpr[a0][15:8],{8{1'b0}}};
					r1<={gpr[a1][15:8],{8{1'b0}}};
				end
			else if(reconfig==2'b01)
				begin
					r0<={{8{1'b0}},gpr[a0][7:0]};
					r1<={{8{1'b0}},gpr[a1][7:0]};
				end
			else
				begin
					r0<=16'b0;
					r1<=16'b0;
				end
				
		end
		
	always@(posedge clk)
		begin
			if(w_en==2'b11)
				gpr[d]<=wr;
			else if(w_en==2'b01)
				gpr[d][7:0]<=wr[7:0];
			else if(w_en==2'b10)
				gpr[d][15:8]<=wr[15:8];
		end

endmodule