| Line 29... | Line 29... | 
      
        | //
 | //
 | 
      
        | // *Author(s):
 | // *Author(s):
 | 
      
        | //              - Olivier Girard,    olgirard@gmail.com
 | //              - Olivier Girard,    olgirard@gmail.com
 | 
      
        | //
 | //
 | 
      
        | //----------------------------------------------------------------------------
 | //----------------------------------------------------------------------------
 | 
      
        | // $Rev: 37 $
 | // $Rev: 74 $
 | 
      
        | // $LastChangedBy: olivier.girard $
 | // $LastChangedBy: olivier.girard $
 | 
      
        | // $LastChangedDate: 2009-12-29 21:58:14 +0100 (Tue, 29 Dec 2009) $
 | // $LastChangedDate: 2010-08-28 21:53:08 +0200 (Sat, 28 Aug 2010) $
 | 
      
        | //----------------------------------------------------------------------------
 | //----------------------------------------------------------------------------
 | 
      
        | `include "timescale.v"
 | `include "timescale.v"
 | 
      
        | `include "openMSP430_defines.v"
 | `include "openMSP430_defines.v"
 | 
      
        |  
 |  
 | 
      
        | module  omsp_dbg_uart (
 | module  omsp_dbg_uart (
 | 
      
        | Line 180... | Line 180... | 
      
        |  
 |  
 | 
      
        | assign sync_done =  (uart_state==RX_SYNC) & rxd_re & sync_busy;
 | assign sync_done =  (uart_state==RX_SYNC) & rxd_re & sync_busy;
 | 
      
        |  
 |  
 | 
      
        | `ifdef DBG_UART_AUTO_SYNC
 | `ifdef DBG_UART_AUTO_SYNC
 | 
      
        |  
 |  
 | 
      
        | reg [14:0] sync_cnt;
 | reg [`DBG_UART_XFER_CNT_W+2:0] sync_cnt;
 | 
      
        | always @ (posedge mclk or posedge por)
 | always @ (posedge mclk or posedge por)
 | 
      
        |   if (por)            sync_cnt <=  15'h7ff8;
 |   if (por)            sync_cnt <=  {{`DBG_UART_XFER_CNT_W{1'b1}}, 3'b000};
 | 
      
        |   else if (sync_busy) sync_cnt <=  sync_cnt+15'h0001;
 |   else if (sync_busy) sync_cnt <=  sync_cnt+{{`DBG_UART_XFER_CNT_W+2{1'b0}}, 1'b1};
 | 
      
        |  
 |  
 | 
      
        | wire [11:0] bit_cnt_max = sync_cnt[14:3];
 | wire [`DBG_UART_XFER_CNT_W-1:0] bit_cnt_max = sync_cnt[`DBG_UART_XFER_CNT_W+2:3];
 | 
      
        | `else
 | `else
 | 
      
        | wire [11:0] bit_cnt_max = `DBG_UART_CNT;
 | wire [`DBG_UART_XFER_CNT_W-1:0] bit_cnt_max = `DBG_UART_CNT;
 | 
      
        | `endif
 | `endif
 | 
      
        |  
 |  
 | 
      
        |  
 |  
 | 
      
        | //=============================================================================
 | //=============================================================================
 | 
      
        | // 4)  UART RECEIVE / TRANSMIT
 | // 4)  UART RECEIVE / TRANSMIT
 | 
      
        | //=============================================================================
 | //=============================================================================
 | 
      
        |  
 |  
 | 
      
        | // Transfer counter
 | // Transfer counter
 | 
      
        | //------------------------
 | //------------------------
 | 
      
        | reg  [3:0] xfer_bit;
 | reg  [3:0] xfer_bit;
 | 
      
        | reg [11:0] xfer_cnt;
 | reg [`DBG_UART_XFER_CNT_W-1:0] xfer_cnt;
 | 
      
        |  
 |  
 | 
      
        | wire       txd_start    = dbg_rd_rdy | (xfer_done & (uart_state==TX_DATA1));
 | wire       txd_start    = dbg_rd_rdy | (xfer_done & (uart_state==TX_DATA1));
 | 
      
        | wire       rxd_start    = (xfer_bit==4'h0) & rxd_fe & ((uart_state!=RX_SYNC));
 | wire       rxd_start    = (xfer_bit==4'h0) & rxd_fe & ((uart_state!=RX_SYNC));
 | 
      
        | wire       xfer_bit_inc = (xfer_bit!=4'h0) & (xfer_cnt==12'h000);
 | wire       xfer_bit_inc = (xfer_bit!=4'h0) & (xfer_cnt=={`DBG_UART_XFER_CNT_W{1'b0}});
 | 
      
        | assign     xfer_done    = (xfer_bit==4'hb);
 | assign     xfer_done    = (xfer_bit==4'hb);
 | 
      
        |  
 |  
 | 
      
        | always @ (posedge mclk or posedge por)
 | always @ (posedge mclk or posedge por)
 | 
      
        |   if (por)                           xfer_bit <=  4'h0;
 |   if (por)                           xfer_bit <=  4'h0;
 | 
      
        |   else if (txd_start | rxd_start)    xfer_bit <=  4'h1;
 |   else if (txd_start | rxd_start)    xfer_bit <=  4'h1;
 | 
      
        |   else if (xfer_done)                xfer_bit <=  4'h0;
 |   else if (xfer_done)                xfer_bit <=  4'h0;
 | 
      
        |   else if (xfer_bit_inc)             xfer_bit <=  xfer_bit+4'h1;
 |   else if (xfer_bit_inc)             xfer_bit <=  xfer_bit+4'h1;
 | 
      
        |  
 |  
 | 
      
        | always @ (posedge mclk or posedge por)
 | always @ (posedge mclk or posedge por)
 | 
      
        |   if (por)                           xfer_cnt <=  12'h000;
 |   if (por)                           xfer_cnt <=  {`DBG_UART_XFER_CNT_W{1'b0}};
 | 
      
        |   else if (rxd_start)                xfer_cnt <=  {1'b0, bit_cnt_max[11:1]};
 |   else if (rxd_start)                xfer_cnt <=  {1'b0, bit_cnt_max[`DBG_UART_XFER_CNT_W-1:1]};
 | 
      
        |   else if (txd_start | xfer_bit_inc) xfer_cnt <=  bit_cnt_max;
 |   else if (txd_start | xfer_bit_inc) xfer_cnt <=  bit_cnt_max;
 | 
      
        |   else                               xfer_cnt <=  xfer_cnt+12'hfff;
 |   else                               xfer_cnt <=  xfer_cnt+{`DBG_UART_XFER_CNT_W{1'b1}};
 | 
      
        |  
 |  
 | 
      
        |  
 |  
 | 
      
        | // Receive/Transmit buffer
 | // Receive/Transmit buffer
 | 
      
        | //-------------------------
 | //-------------------------
 | 
      
        | wire [19:0] xfer_buf_nxt =  {rxd_s, xfer_buf[19:1]};
 | wire [19:0] xfer_buf_nxt =  {rxd_s, xfer_buf[19:1]};
 |