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
|
|
|