Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.11 2003/01/15 14:40:23 mohor
|
|
// RX state machine fixed to receive "remote request" frames correctly. No data bytes are written to fifo when such frames are received.
|
|
//
|
// Revision 1.10 2003/01/15 13:16:47 mohor
|
// Revision 1.10 2003/01/15 13:16:47 mohor
|
// When a frame with "remote request" is received, no data is stored to fifo, just the frame information (identifier, ...). Data length that is stored is the received data length and not the actual data length that is stored to fifo.
|
// When a frame with "remote request" is received, no data is stored to fifo, just the frame information (identifier, ...). Data length that is stored is the received data length and not the actual data length that is stored to fifo.
|
//
|
//
|
// Revision 1.9 2003/01/14 12:19:35 mohor
|
// Revision 1.9 2003/01/14 12:19:35 mohor
|
// rx_fifo is now working.
|
// rx_fifo is now working.
|
Line 281... |
Line 284... |
assign go_rx_r0 = (~bit_de_stuff) & sample_point & (rx_ide & (~sampled_bit) | rx_r1);
|
assign go_rx_r0 = (~bit_de_stuff) & sample_point & (rx_ide & (~sampled_bit) | rx_r1);
|
assign go_rx_dlc = (~bit_de_stuff) & sample_point & rx_r0;
|
assign go_rx_dlc = (~bit_de_stuff) & sample_point & rx_r0;
|
assign go_rx_data = (~bit_de_stuff) & sample_point & rx_dlc & (bit_cnt == 3) & (sampled_bit | (|data_len[2:0])) & (~remote_rq);
|
assign go_rx_data = (~bit_de_stuff) & sample_point & rx_dlc & (bit_cnt == 3) & (sampled_bit | (|data_len[2:0])) & (~remote_rq);
|
assign go_rx_crc = (~bit_de_stuff) & sample_point & (rx_dlc & (bit_cnt == 3) & ((~sampled_bit) & (~(|data_len[2:0])) | remote_rq) |
|
assign go_rx_crc = (~bit_de_stuff) & sample_point & (rx_dlc & (bit_cnt == 3) & ((~sampled_bit) & (~(|data_len[2:0])) | remote_rq) |
|
rx_data & (bit_cnt == ((limited_data_len<<3) - 1'b1)));
|
rx_data & (bit_cnt == ((limited_data_len<<3) - 1'b1)));
|
assign go_rx_crc_lim = sample_point & rx_crc & (bit_cnt == 14);
|
assign go_rx_crc_lim = (~bit_de_stuff) & sample_point & rx_crc & (bit_cnt == 14);
|
assign go_rx_ack = sample_point & rx_crc_lim;
|
assign go_rx_ack = sample_point & rx_crc_lim;
|
assign go_rx_ack_lim = sample_point & rx_ack;
|
assign go_rx_ack_lim = sample_point & rx_ack;
|
assign go_rx_eof = sample_point & rx_ack_lim | (~reset_mode) & reset_mode_q;
|
assign go_rx_eof = sample_point & rx_ack_lim | (~reset_mode) & reset_mode_q;
|
|
|
assign go_crc_enable = hard_sync;
|
assign go_crc_enable = hard_sync;
|
Line 768... |
Line 771... |
|
|
wire [2:0] header_len;
|
wire [2:0] header_len;
|
wire storing_header;
|
wire storing_header;
|
wire [3:0] limited_data_len_minus1;
|
wire [3:0] limited_data_len_minus1;
|
wire reset_wr_fifo;
|
wire reset_wr_fifo;
|
|
wire no_error;
|
assign header_len[2:0] = extended_mode ? (ide? (3'h5) : (3'h3)) : 3'h2;
|
assign header_len[2:0] = extended_mode ? (ide? (3'h5) : (3'h3)) : 3'h2;
|
assign storing_header = header_cnt < header_len;
|
assign storing_header = header_cnt < header_len;
|
assign limited_data_len_minus1[3:0] = remote_rq? 4'hf : ((data_len < 8)? (data_len -1'b1) : 4'h7); // - 1 because counter counts from 0
|
assign limited_data_len_minus1[3:0] = remote_rq? 4'hf : ((data_len < 8)? (data_len -1'b1) : 4'h7); // - 1 because counter counts from 0
|
assign reset_wr_fifo = data_cnt == (limited_data_len_minus1 + header_len);
|
assign reset_wr_fifo = data_cnt == (limited_data_len_minus1 + header_len);
|
|
assign no_error = ~crc_error;
|
|
|
// Write enable signal for 64-byte rx fifo
|
// Write enable signal for 64-byte rx fifo
|
always @ (posedge clk or posedge rst)
|
always @ (posedge clk or posedge rst)
|
begin
|
begin
|
if (rst)
|
if (rst)
|
wr_fifo <= 1'b0;
|
wr_fifo <= 1'b0;
|
else if (reset_wr_fifo)
|
else if (reset_wr_fifo)
|
wr_fifo <=#Tp 1'b0;
|
wr_fifo <=#Tp 1'b0;
|
else if (go_rx_ack_lim & (~extended_mode) & id_ok & (~crc_error))
|
else if (go_rx_ack_lim & id_ok & no_error) // FIX go_rx_ack_lim
|
wr_fifo <=#Tp 1'b1;
|
wr_fifo <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
// Header counter. Header length depends on the mode of operation and frame format.
|
// Header counter. Header length depends on the mode of operation and frame format.
|