`timescale 1ns / 1ps module RegFile(input wire clk, reset, input wire [1:0] write_index, op0_idx, op1_idx, input wire [8:0] write_data, output wire [8:0] op0, op1); wire [8:0] r0_out, r1_out, r2_out, r3_out; // To select a register En input must be 2'b00 register r0( .clk(clk), .reset(reset), .En({write_index[0], write_index[1]}), .Din(write_data), .Dout(r0_out)); register r1( .clk(clk), .reset(reset), .En({write_index[0], ~write_index[1]}), .Din(write_data), .Dout(r1_out)); register r2( .clk(clk), .reset(reset), .En({~write_index[0], write_index[1]}), .Din(write_data), .Dout(r2_out)); register r3( .clk(clk), .reset(reset), .En({~write_index[0], ~write_index[1]}), .Din(write_data), .Dout(r3_out)); mux_4_1 m0( .A(r0_out), .B(r1_out), .C(r2_out), .D(r3_out), .out(op0), .switch(op0_idx)); mux_4_1 m1( .A(r0_out), .B(r1_out), .C(r2_out), .D(r3_out), .out(op1), .switch(op1_idx)); endmodule