diff --git a/controller/verilog/socdebug_usrt_control.v b/controller/verilog/socdebug_usrt_control.v
index e65041d581d60f79f648c5c1b4b555fc1f1b5571..768525c39359b70c783a1d0b5cf19d5f238e9dfa 100644
--- a/controller/verilog/socdebug_usrt_control.v
+++ b/controller/verilog/socdebug_usrt_control.v
@@ -315,8 +315,6 @@ assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
     end
   end
 
-
-
   // Register read data
   always @(posedge PCLKG or negedge PRESETn)
   begin
@@ -419,159 +417,21 @@ assign  write_enable10 = write_enable & (PADDR[11:2] == 10'h004);
 
   assign TX_VALID_o = tx_buf_full;
 
-  // Increment TickCounter
-  assign nxt_tx_tick_cnt = ((tx_state==4'h1) & reg_baud_tick) ? {5{1'b0}} :
-                        tx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  // Registering TickCounter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_tick_cnt     <= {4{1'b0}};
-    else if (reg_baud_tick)
-      tx_tick_cnt     <= nxt_tx_tick_cnt[3:0];
-  end
-
-  // Increment state (except Idle(0) and Wait for Tick(1))
-  assign tx_state_inc   = (((&tx_tick_cnt)|(tx_state==4'h1)) & reg_baud_tick)|reg_ctrl[6];
-          // state increment every cycle of high speed test mode is enabled
-  // Clear buffer full status when data is load into shift register
-  assign tx_buf_clear   = ((tx_state==4'h0) & tx_buf_full) |
-                        ((tx_state==4'hB) & tx_buf_full & tx_state_inc);
-
-  // tx_state machine
-  // 0 = Idle, 1 =  Wait for Tick,
-  // 2 = Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  always @(tx_state or tx_buf_full or tx_state_inc or reg_ctrl)
-  begin
-  case (tx_state)
-    0: begin
-       nxt_tx_state = (tx_buf_full & reg_ctrl[0]) ? 5'h01 : 5'h00;  // New data is written to buffer
-       end
-    1,                         // State 1   : Wait for next Tick
-    2,3,4,5,6,7,8,9,10: begin  // State 2-10: Start bit, D0 - D7
-       nxt_tx_state = tx_state + {3'b000,tx_state_inc};
-       end
-    11: begin // Stop bit , goto next start bit or Idle
-       nxt_tx_state = (tx_state_inc) ? ( tx_buf_full ? 5'h02:5'h00) : {1'b0, tx_state};
-       end
-    default:
-       nxt_tx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign tx_state_update = tx_state_inc | ((tx_state==4'h0) & tx_buf_full & reg_ctrl[0]) | (tx_state>4'd11);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_state        <= {4{1'b0}};
-    else if (tx_state_update)
-      tx_state        <= nxt_tx_state[3:0];
-  end
-
-  // Load/shift TX register
-  assign tx_buf_ctrl_load  = (((tx_state==4'h0) & tx_buf_full) |
-                              ((tx_state==4'hB) & tx_buf_full & tx_state_inc));
-  assign tx_buf_ctrl_shift =  ((tx_state>4'h2) & tx_state_inc);
-
-  assign nxt_tx_shift_buf = tx_buf_ctrl_load ? reg_tx_buf[7:0] : {1'b1,tx_shift_buf[7:1]};
-
-  // Registering TX shift register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      tx_shift_buf    <= {8{1'b0}};
-    else if (tx_buf_ctrl_shift | tx_buf_ctrl_load)
-      tx_shift_buf    <= nxt_tx_shift_buf;
-  end
-
-  // Data output
-  assign nxt_txd = (tx_state==4'h2) ? 1'b0 :
-                   (tx_state>4'h2) ? tx_shift_buf[0] : 1'b1;
-
-  assign update_reg_txd = (nxt_txd != reg_txd);
-
-  // Registering outputs
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      reg_txd         <= 1'b1;
-    else if (update_reg_txd)
-      reg_txd         <= nxt_txd;
-  end
-
   // Generate TX overrun error status
-  assign tx_overrun = tx_buf_full & (~tx_buf_clear) & write_enable00;
+///  assign tx_overrun = tx_buf_full & (~tx_buf_clear) & write_enable00;
+  assign tx_overrun = tx_buf_full & write_enable00;
 
   // Connect to external
   assign TXD  = reg_txd;
   assign TXEN = reg_ctrl[0];
 
-// --------------------------------------------
-// Receive synchronizer and low pass filter
-
-  // Doubling Flip-flop synxt_rx_tick_cntnchroniser
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      begin
-      rxd_sync_1 <= 1'b1;
-      rxd_sync_2 <= 1'b1;
-      end
-    else if (reg_ctrl[1]) // Turn off synchronizer if receive is not enabled
-      begin
-      rxd_sync_1 <= RXD;
-      rxd_sync_2 <= rxd_sync_1;
-      end
-  end
-
-  // Averaging low pass filter
-  assign nxt_rxd_lpf = {rxd_lpf[1:0], rxd_sync_2};
-  // Registering stage for low pass filter
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rxd_lpf <= 3'b111;
-    else if (reg_baud_tick)
-      rxd_lpf <= nxt_rxd_lpf;
-  end
-
-  // Averaging values
-  assign rx_shift_in = (rxd_lpf[1] & rxd_lpf[0]) |
-                       (rxd_lpf[1] & rxd_lpf[2]) |
-                       (rxd_lpf[0] & rxd_lpf[2]);
 
 // --------------------------------------------
 // Receive
 
-assign RX_READY_o = !rx_buf_full;
-
 
-  // Increment TickCounter
-  assign nxt_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) ? 5'h08 :
-                        rx_tick_cnt + {{3{1'b0}},reg_baud_tick};
-
-  assign update_rx_tick_cnt = ((rx_state==4'h0) & (~rx_shift_in)) | reg_baud_tick;
-
-  // Registering other register
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_tick_cnt    <= {4{1'b0}};
-    else if (update_rx_tick_cnt)
-      rx_tick_cnt    <= nxt_rx_tick_cnt[3:0];
-  end
-
-  // Increment state
-  assign rx_state_inc   = ((&rx_tick_cnt) & reg_baud_tick);
-  // Buffer full status
   assign nxt_rx_buf_full = rxbuf_sample | (rx_buf_full & (~rx_data_read));
 
-  // Sample shift register when D7 is sampled
-///  assign rxbuf_sample  = ((rx_state==4'h9) & rx_state_inc);
   assign rxbuf_sample  = RX_VALID_i & !rx_buf_full;
 
   // Reading receive buffer (Set at 1st cycle of APB transfer
@@ -580,81 +440,33 @@ assign RX_READY_o = !rx_buf_full;
   // Generate RX overrun error status
   assign rx_overrun = rx_buf_full & rxbuf_sample & (~rx_data_read);
 
-  // rx_state machine
-  // 0 = Idle, 1 =  Start of Start bit detected
-  // 2 = Sample Start bit, 3 = D0 .... 10 = D7
-  // 11 = Stop bit
-  // 11, 12, 13, 14, 15: illegal/unused states
-  always @(rx_state or rx_shift_in or rx_state_inc or reg_ctrl)
-  begin
-  case (rx_state)
-    0: begin
-       nxt_rx_state = ((~rx_shift_in) & reg_ctrl[1]) ? 5'h01 : 5'h00;  // Wait for Start bit
-       end
-    1,                      // State 1  : Wait for middle of start bit
-    2,3,4,5,6,7,8,9: begin  // State 2-9: D0 - D7
-       nxt_rx_state = rx_state + {3'b000,rx_state_inc};
-       end
-    10: begin // Stop bit , goto back to Idle
-       nxt_rx_state = (rx_state_inc) ? 5'h00 : 5'h0A;
-       end
-    default:
-       nxt_rx_state = {5{1'bx}};
-  endcase
-  end
-
-  assign rx_state_update = rx_state_inc |  ((~rx_shift_in) & reg_ctrl[1]);
-
-  // Registering rx_state
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_state       <= {4{1'b0}};
-    else if (rx_state_update)
-      rx_state       <= nxt_rx_state[3:0];
-  end
-
   // Buffer full status
   always @(posedge PCLK or negedge PRESETn)
   begin
     if (~PRESETn)
       rx_buf_full     <= 1'b0;
-    else if ( & reg_ctrl[1] & (rxbuf_sample | rx_data_read))
+    else if ( reg_ctrl[1] & (rxbuf_sample | rx_data_read))
       rx_buf_full     <= nxt_rx_buf_full;
   end
 
-  // Sample receive buffer
-///  assign nxt_rx_buf     = {rx_shift_in, rx_shift_buf};
-  assign nxt_rx_buf     = RX_DATA8_i[7:0];
-  
+  assign RX_READY_o = !rx_buf_full;
+
   // Registering receive data buffer
   always @(posedge PCLK or negedge PRESETn)
   begin
     if (~PRESETn)
       reg_rx_buf      <= {8{1'b0}};
     else if  (rxbuf_sample)
-      reg_rx_buf      <= nxt_rx_buf;
+      reg_rx_buf      <=  RX_DATA8_i[7:0];
   end
 
-  // Shift register
-  assign nxt_rx_shift_buf= {rx_shift_in, rx_shift_buf[6:1]};
-  // Registering shift buffer
-  always @(posedge PCLK or negedge PRESETn)
-  begin
-    if (~PRESETn)
-      rx_shift_buf    <= {7{1'b0}};
-    else if (rx_state_inc)
-      rx_shift_buf    <= nxt_rx_shift_buf;
-  end
-
-
-
 // --------------------------------------------
 // Interrupts
   // Set by event
-  assign intr_stat_set[1] = reg_ctrl[3] & rxbuf_sample; // A new receive data is sampled
-  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full & tx_buf_clear;
-                            // Falling edge of buffer full
+///  assign intr_stat_set[1] = reg_ctrl[3] & rxbuf_sample; // A new receive data is sampled
+  assign intr_stat_set[1] = reg_ctrl[3] & reg_ctrl[1] & rxbuf_sample; // A new receive data is sampled
+///  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full; // & tx_buf_clear;
+  assign intr_stat_set[0] = reg_ctrl[2] & reg_ctrl[0] & tx_buf_full & TX_READY_i; // Falling edge of buffer full
   // Clear by write to IntClear register
   assign intr_stat_clear[1:0] = {2{write_enable0c}} & PWDATA[1:0];