now reset is correct
diff --git a/verilog/rtl/jacaranda-8/UART/UART.v b/verilog/rtl/jacaranda-8/UART/UART.v
index 6cfb945..1f9d10a 100644
--- a/verilog/rtl/jacaranda-8/UART/UART.v
+++ b/verilog/rtl/jacaranda-8/UART/UART.v
@@ -39,8 +39,10 @@
 
     assign clk_count_bit = clk_freq / BAUD_RATE;
 
-    always @(negedge clk) begin
-        if(state == 1'b0) begin
+    always @(negedge clk or posedge reset) begin
+        if(reset) begin
+            state <= 1'b0;
+        end else if(state == 1'b0) begin
             int_req <= 1'b0;
             if(receive_flag == 1'b1) begin
                 state <= 1'b1;
@@ -62,6 +64,6 @@
     end
 
     tx tx1(clk, reset, tx_en, begin_flag, tx_data, tx, busy_flag, clk_count_bit);
-    rx rx1(clk, rx_en, rx, rx_data, receive_flag, clk_count_bit);
+    rx rx1(clk, reset, rx_en, rx, rx_data, receive_flag, clk_count_bit);
     
 endmodule
diff --git a/verilog/rtl/jacaranda-8/UART/rx.v b/verilog/rtl/jacaranda-8/UART/rx.v
index 83215cf..1d46160 100644
--- a/verilog/rtl/jacaranda-8/UART/rx.v
+++ b/verilog/rtl/jacaranda-8/UART/rx.v
@@ -12,20 +12,21 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-module rx(clk, rx_en, rx, data, end_flag, clk_count_bit);
+module rx(clk, reset, rx_en, rx, data, end_flag, clk_count_bit);
     input wire clk;
+    input wire reset;
     input wire rx_en;
     input wire rx;
-    output reg[7:0] data = 8'b00000000;
-    output reg end_flag = 1'b0;
+    output reg[7:0] data;
+    output reg end_flag;
     input wire [31:0] clk_count_bit;
 
     wire [31:0] clk_begin_to_receive;
 
-    reg[1:0] state = 2'b00;
-    reg[31:0] clk_count = 32'd0;
-    reg[2:0] bit_count = 3'd0;
-    reg[3:0] recent = 4'b1111;
+    reg[1:0] state;
+    reg[31:0] clk_count;
+    reg[2:0] bit_count;
+    reg[3:0] recent;
     wire update_flag;
 
     assign clk_begin_to_receive = clk_count_bit + clk_count_bit / 2 - 4;
@@ -34,40 +35,49 @@
         ? clk_count == clk_begin_to_receive
         : clk_count == clk_count_bit - 32'd1;
     
-    always @(posedge clk) begin
-        case(state)
-            2'b00: begin
-                clk_count <= 32'd0;
-                bit_count <= 3'd0;
-                end_flag <= 1'b0;
-                recent = {recent[2:0], rx};
-                state = (recent == 4'b0000) & rx_en ? 2'b01 : state;
-            end
-            2'b01: begin
-                clk_count <= clk_count + 32'd1;
-                if(update_flag) begin
-                    state = 2'b11;
+    always @(posedge clk or posedge reset) begin
+        if(reset) begin
+            data <= 8'b0;
+            end_flag <= 1'b0;
+            state <= 2'b0;
+            clk_count <= 32'd0;
+            bit_count <= 3'd0;
+            recent <= 4'b1111;
+        end else begin
+            case(state)
+                2'b00: begin
                     clk_count <= 32'd0;
-                    data[2'd0] <= rx;
-                    bit_count <= 3'd1;
+                    bit_count <= 3'd0;
+                    end_flag <= 1'b0;
+                    recent = {recent[2:0], rx};
+                    state = (recent == 4'b0000) & rx_en ? 2'b01 : state;
                 end
-            end
-            2'b11: begin
-                clk_count <= clk_count + 32'd1;
-                if(update_flag) begin
-                    state <= (bit_count == 3'd7) ? 2'b10 : state;
-                    data[bit_count] <= rx;
-                    bit_count <= bit_count + 3'd1;
-               clk_count <= 32'd0;
+                2'b01: begin
+                    clk_count <= clk_count + 32'd1;
+                    if(update_flag) begin
+                        state = 2'b11;
+                        clk_count <= 32'd0;
+                        data[2'd0] <= rx;
+                        bit_count <= 3'd1;
+                    end
                 end
-            end
-            2'b10: begin
-                clk_count <= clk_count + 32'd1;
-                if(update_flag) begin
-                    state <= 2'b00;
-                    end_flag <= 1'b1;
+                2'b11: begin
+                    clk_count <= clk_count + 32'd1;
+                    if(update_flag) begin
+                        state <= (bit_count == 3'd7) ? 2'b10 : state;
+                        data[bit_count] <= rx;
+                        bit_count <= bit_count + 3'd1;
+                   clk_count <= 32'd0;
+                    end
                 end
-            end
-        endcase
+                2'b10: begin
+                    clk_count <= clk_count + 32'd1;
+                    if(update_flag) begin
+                        state <= 2'b00;
+                        end_flag <= 1'b1;
+                    end
+                end
+            endcase
+        end
     end
 endmodule
diff --git a/verilog/rtl/jacaranda-8/computer.v b/verilog/rtl/jacaranda-8/computer.v
index e0b6580..2b26cde 100644
--- a/verilog/rtl/jacaranda-8/computer.v
+++ b/verilog/rtl/jacaranda-8/computer.v
@@ -14,17 +14,6 @@
 
 `default_nettype none
 
-// module computer(
-//     input clock,
-//     input rx,
-//     output tx,
-//     output [3:0] led_out_data,
-//     output [6:0] seg_out_1,
-//     output [6:0] seg_out_2,
-//     output [6:0] seg_out_3
-// );
-
-
 module computer(
 `ifdef USE_POWER_PINS
     inout vdda1,	// User area 1 3.3V supply
@@ -88,12 +77,6 @@
 
     wire reg_w_en;
 
-    reg [7:0] led_in_data;
-    reg led_begin_flag;
-    wire [7:0] led_state_reg;
-
-    reg [7:0] nanaseg_in_data;
-
     wire [7:0] instr_mem_addr;
     wire [7:0] instr_mem_data; 
     wire instr_mem_en;
@@ -153,23 +136,30 @@
             .int_vec(int_vec),
             .reg_w_en(reg_w_en));
 
-    always @(posedge clock) begin
-        if(rs_data == 8'd255 && mem_w_en == 1) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            tx_en <= 1'b0;
+            rx_en <= 1'b0;
+        end else if(rs_data == 8'd255 && mem_w_en == 1) begin
             tx_en <= rd_data[0];
             rx_en <= rd_data[1];
         end
     end
 
-    always @(posedge clock) begin
-        if(rs_data == 8'd253 && mem_w_en == 1) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            tx_data <= 8'b0;
+        end else if(rs_data == 8'd253 && mem_w_en == 1) begin
             tx_data <= rd_data;
         end else begin
             tx_data <= tx_data;
         end
     end
 
-    always @(posedge clock) begin
-        if(rs_data == 8'd251 && mem_w_en == 1) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            gpio_out <= 8'b0;
+        end else if(rs_data == 8'd251 && mem_w_en == 1) begin
             gpio_out <= rd_data;
         end else begin
             gpio_out <= gpio_out;
@@ -191,16 +181,20 @@
                       : (rs_data == 8'd249) ? gpio_in
                       : _mem_r_data;   
 
-    always @(posedge clock) begin
-        if(int_req == 1'b1) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            int_en <= 8'b0;
+        end else if(int_req == 1'b1) begin
             int_en <= 8'h00;
         end else if(int_req == 1'b0) begin
             int_en <= 8'h01;
         end
     end
 
-    always @(posedge clock) begin
-        if(rs_data == 8'd250 && mem_w_en == 1'b1) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            int_vec <= 8'b0;
+        end else if(rs_data == 8'd250 && mem_w_en == 1'b1) begin
             int_vec <= rd_data;
         end else begin
             int_vec <= int_vec;
diff --git a/verilog/rtl/jacaranda-8/cpu.v b/verilog/rtl/jacaranda-8/cpu.v
index 616d825..8024a38 100644
--- a/verilog/rtl/jacaranda-8/cpu.v
+++ b/verilog/rtl/jacaranda-8/cpu.v
@@ -72,8 +72,10 @@
 
     alu alu(rd_data, rs_data, alu_ctrl, alu_out);
 
-    always @(posedge clock) begin
-        if(ret) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            flag <= 0;
+        end if(ret) begin
             flag <= _flag;
         end else if(je_en) begin
             flag <= 0;
@@ -84,16 +86,20 @@
         end
     end
 
-    always @(posedge clock) begin
-        if(ret) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            intr_en <= 1'b0;
+        end else if(ret) begin
             intr_en <= 1'b0;
         end else if(int_req && int_en[0]) begin
-				intr_en <= 1'b1;
+			intr_en <= 1'b1;
         end
     end
 
-    always @(posedge clock) begin
-        if(int_req == 1'b1 && int_en[0]) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            ret_addr <= 8'b0;
+        end else if(int_req == 1'b1 && int_en[0]) begin
             if(jmp_en) begin
                 ret_addr <= rs_data;
             end else if(je_en && flag) begin
@@ -106,16 +112,11 @@
         end
     end
 
-    always @(posedge reset) begin
-        ret_addr<= 8'h00;
-        flag    <= 1'b0;
-        pc      <= 8'h00;
-        intr_en <= 1'b0;
-        _flag   <= 1'b0;
-    end 
-
-    always @(posedge clock) begin
-        if(int_req && int_en[0]) begin
+    always @(posedge clock or posedge reset) begin
+        if(reset) begin
+            _flag <= 1'b0;
+            pc <= 8'b0;
+        end else if(int_req && int_en[0]) begin
             _flag <= flag;
             pc <= int_vec;
         end else if(ret) begin
diff --git a/verilog/rtl/jacaranda-8/wishbone.v b/verilog/rtl/jacaranda-8/wishbone.v
index 2577f79..70bc797 100644
--- a/verilog/rtl/jacaranda-8/wishbone.v
+++ b/verilog/rtl/jacaranda-8/wishbone.v
@@ -58,6 +58,10 @@
 always @(posedge clk) begin
     if(reset) begin
         ready <= 1'b0;
+        instr_mem_addr <= 8'b0;
+        instr_mem_data <= 8'b0;
+        instr_mem_en <= 1'b0;
+        uart_freq <= 32'd50_000_000;
     end else begin
         if(ready) begin
             ready <= 1'b0;