OpenCores
URL https://opencores.org/ocsvn/uart16550/uart16550/trunk

Subversion Repositories uart16550

[/] [uart16550/] [trunk/] [rtl/] [verilog/] [uart_receiver.v] - Diff between revs 69 and 79

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 69 Rev 79
Line 61... Line 61...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.27  2001/12/30 20:39:13  mohor
 
// More than one character was stored in case of break. End of the break
 
// was not detected correctly.
 
//
// Revision 1.26  2001/12/20 13:28:27  mohor
// Revision 1.26  2001/12/20 13:28:27  mohor
// Missing declaration of rf_push_q fixed.
// Missing declaration of rf_push_q fixed.
//
//
// Revision 1.25  2001/12/20 13:25:46  mohor
// Revision 1.25  2001/12/20 13:25:46  mohor
// rx push changed to be only one cycle wide.
// rx push changed to be only one cycle wide.
Line 168... Line 172...
 
 
// synopsys translate_off
// synopsys translate_off
`include "timescale.v"
`include "timescale.v"
// synopsys translate_on
// synopsys translate_on
 
 
`include "uart_defines.v"
//`include "uart_defines.v"
 
 
module uart_receiver (clk, wb_rst_i, lcr, rf_pop, srx_pad_i, enable,
module uart_receiver (clk, wb_rst_i, lcr, rf_pop, srx_pad_i, enable,
        counter_t, rf_count, rf_data_out, rf_error_bit, rf_overrun, rx_reset, lsr_mask, rstate, rf_push_pulse);
        counter_t, rf_count, rf_data_out, rf_error_bit, rf_overrun, rx_reset, lsr_mask, rstate, rf_push_pulse);
 
 
input                           clk;
input                           clk;
Line 214... Line 218...
wire    [`UART_FIFO_COUNTER_W-1:0]       rf_count;
wire    [`UART_FIFO_COUNTER_W-1:0]       rf_count;
wire                            rf_error_bit; // an error (parity or framing) is inside the fifo
wire                            rf_error_bit; // an error (parity or framing) is inside the fifo
wire                            break_error = (counter_b == 0);
wire                            break_error = (counter_b == 0);
 
 
// RX FIFO instance
// RX FIFO instance
uart_fifo #(`UART_FIFO_REC_WIDTH) fifo_rx(
uart_rfifo #(`UART_FIFO_REC_WIDTH) fifo_rx(
        .clk(           clk             ),
        .clk(           clk             ),
        .wb_rst_i(      wb_rst_i        ),
        .wb_rst_i(      wb_rst_i        ),
        .data_in(       rf_data_in      ),
        .data_in(       rf_data_in      ),
        .data_out(      rf_data_out     ),
        .data_out(      rf_data_out     ),
        .push(          rf_push_pulse           ),
        .push(          rf_push_pulse           ),
Line 245... Line 249...
parameter  sr_rec_prepare                       = 4'd6;
parameter  sr_rec_prepare                       = 4'd6;
parameter  sr_end_bit                           = 4'd7;
parameter  sr_end_bit                           = 4'd7;
parameter  sr_ca_lc_parity            = 4'd8;
parameter  sr_ca_lc_parity            = 4'd8;
parameter  sr_wait1                                     = 4'd9;
parameter  sr_wait1                                     = 4'd9;
parameter  sr_push                                      = 4'd10;
parameter  sr_push                                      = 4'd10;
parameter  sr_last                                      = 4'd11;
 
 
 
 
 
always @(posedge clk or posedge wb_rst_i)
always @(posedge clk or posedge wb_rst_i)
begin
begin
  if (wb_rst_i)
  if (wb_rst_i)
Line 271... Line 274...
  begin
  begin
        case (rstate)
        case (rstate)
        sr_idle : begin
        sr_idle : begin
                        rf_push                           <= #1 1'b0;
                        rf_push                           <= #1 1'b0;
                        rf_data_in        <= #1 0;
                        rf_data_in        <= #1 0;
 
                        rcounter16        <= #1 4'b1110;
                        if (srx_pad_i==1'b0 & ~break_error)   // detected a pulse (start bit?)
                        if (srx_pad_i==1'b0 & ~break_error)   // detected a pulse (start bit?)
                        begin
                        begin
                                rstate            <= #1 sr_rec_start;
                                rstate            <= #1 sr_rec_start;
                                rcounter16        <= #1 4'b1110;
 
                        end
                        end
                end
                end
        sr_rec_start :  begin
        sr_rec_start :  begin
                                if (rcounter16_eq_7)    // check the pulse
                                if (rcounter16_eq_7)    // check the pulse
                                        if (srx_pad_i==1'b1)   // no start bit
                                        if (srx_pad_i==1'b1)   // no start bit
Line 378... Line 381...
            if(break_error)
            if(break_error)
                          rf_data_in    <= #1 {8'b0, 3'b100}; // break input (empty character) to receiver FIFO
                          rf_data_in    <= #1 {8'b0, 3'b100}; // break input (empty character) to receiver FIFO
            else
            else
                                rf_data_in  <= #1 {rshift, 1'b0, rparity_error, rframing_error};
                                rf_data_in  <= #1 {rshift, 1'b0, rparity_error, rframing_error};
                  rf_push                 <= #1 1'b1;
                  rf_push                 <= #1 1'b1;
                                rstate        <= #1 sr_last;
                                rstate        <= #1 sr_idle;
          end
          end
 
 
                        end
                        end
        sr_last :       begin
 
                                if (rcounter16_eq_1 & srx_pad_i | break_error)
 
                                        rstate <= #1 sr_idle;
 
                                rcounter16 <= #1 rcounter16_minus_1;
 
                                rf_push    <= #1 1'b0;
 
                        end
 
        default : rstate <= #1 sr_idle;
        default : rstate <= #1 sr_idle;
        endcase
        endcase
  end  // if (enable)
  end  // if (enable)
end // always of receiver
end // always of receiver
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.