diff --git a/rtl/registers_bank.v b/rtl/registers_bank.v
index e60ba2e..b338862 100644
--- a/rtl/registers_bank.v
+++ b/rtl/registers_bank.v
@@ -1,41 +1,20 @@
 module registers_bank (input clock, reset, we,
                        input [4:0] sel_in, sel_out_a, sel_out_b,
                        input [31:0] data_in,
-                       output [31:0] output_a, output_b);
+                       output [31:0] data_out_a, data_out_b);
     
     reg [31:0] registers[31:0];
 
     assign registers[0] = 32'b0;
-    assign registers[1] = 32'b0;
-    assign registers[2] = 32'b0;
-    assign registers[3] = 32'b0;
-    assign registers[4] = 32'b0;
-    assign registers[5] = 32'b0;
-    assign registers[6] = 32'b0;
-    assign registers[7] = 32'b0;
-    assign registers[8] = 32'b0;
-    assign registers[9] = 32'b0;
-    assign registers[10] = 32'b0;
-    assign registers[11] = 32'b0;
-    assign registers[12] = 32'b0;
-    assign registers[13] = 32'b0;
-    assign registers[14] = 32'b0;
-    assign registers[15] = 32'b0;
-    assign registers[16] = 32'b0;
-    assign registers[17] = 32'b0;
-    assign registers[18] = 32'b0;
-    assign registers[19] = 32'b0;
-    assign registers[20] = 32'b0;
-    assign registers[21] = 32'b0;
     
     always @(posedge clock, posedge reset) begin
         if (reset == 1)
             registers[0] <= 32'b0;
-        else if (we == 1)
+        else if (we == 1 && sel_in != 5'b00000)
             registers[sel_in] <= data_in;
     end
 
-    assign output_a = registers[sel_out_a];
-    assign output_b = registers[sel_out_b];
+    assign data_out_a = registers[sel_out_a];
+    assign data_out_b = registers[sel_out_b];
 
 endmodule
diff --git a/rtl/risc_v_cpu.v b/rtl/risc_v_cpu.v
index e5b3ea7..e62cc53 100644
--- a/rtl/risc_v_cpu.v
+++ b/rtl/risc_v_cpu.v
@@ -1,24 +1,23 @@
 module risc_v_cpu (input clock, reset, output [31:0] out);
     
-    wire [31:0] alu_in_b;
-    wire [31:0] alu_out;
     wire        alu_src, alu_not;
     wire [3:0]  alu_func;
+    wire [31:0] alu_in_b, alu_out;
 
-    wire        reg_we, adder_pc;
+    wire        reg_we;
     wire [1:0]  reg_sel_data_in;
     wire [4:0]  reg_sel_out_a, reg_sel_out_b, reg_sel_in;
+    wire [31:0] reg_data_out_a, reg_data_out_b, reg_data_in;
 
     wire [31:0] instruction;
 
     wire        mem_we;
+    wire [31:0] mem_out;
 
     wire [1:0] jmp_pc;
     wire b_pc;
 
-    wire [31:0] reg_data_in;
-    wire [31:0] output_a, output_b;
-
+    wire adder_pc;
     wire [31:0] imm;
 
     wire [31:0] pc_addr;
@@ -26,7 +25,6 @@ module risc_v_cpu (input clock, reset, output [31:0] out);
 
     wire [1:0] pc_in;
 
-    wire [31:0] memory_out;
 
     wire [31:0] pc_store;
 
@@ -55,19 +53,19 @@ module risc_v_cpu (input clock, reset, output [31:0] out);
         .sel_out_a(reg_sel_out_a),
         .sel_out_b(reg_sel_out_b),
         .data_in(reg_data_in),
-        .output_a(output_a),
-        .output_b(output_b)
+        .data_out_a(reg_data_out_a),
+        .data_out_b(reg_data_out_b)
     );
 
     mux2_1 mux2_1_1 (
-        .A(output_b),
+        .A(reg_data_out_b),
         .B(imm),
         .S(alu_src),
         .O(alu_in_b)
     );
 
     alu alu (
-        .input_a(output_a),
+        .input_a(reg_data_out_a),
         .input_b(alu_in_b),
         .op_code(alu_func),
         .out(alu_out)
@@ -106,13 +104,13 @@ module risc_v_cpu (input clock, reset, output [31:0] out);
         .reset(reset),
         .we(mem_we),
         .address(alu_out),
-        .data_in(output_b),
-        .data_out(memory_out)
+        .data_in(reg_data_out_b),
+        .data_out(mem_out)
     );
 
     mux4_1 mux4_1_2 (
         .A(alu_out),
-        .B(memory_out),
+        .B(mem_out),
         .C(pc_addr + 4),
         .D(pc_addr + alu_out),
         .S(reg_sel_data_in),