Hi
in some scenarios where wrong frames are received, the first valid frame received afterwards can have corrupted data.
The problem is in can_bsp.v line 1017..1026
always @ (posedge clk or posedge rst) begin if (rst) byte_cnt <= 3'h0; else if (write_data_to_tmp_fifo) byte_cnt <=#Tp byte_cnt + 1'b1; else if (sample_point & go_rx_crc_lim) byte_cnt <=#Tp 3'h0; end
This byte_cnt holds the index where to write a received data to a temporary buffer. The problem is, this is reset to 0 after the data is complete. In case a frame started correctly and in the middle of the data an error happens, the byte_cnt is not reset and the next frame starts to write the data at the wrong index. To fix this, the byte_cnt should be reset when the frame is going to receive the data bytes:
always @ (posedge clk or posedge rst) begin if (rst) byte_cnt <= 3'h0; else if (write_data_to_tmp_fifo) byte_cnt <=#Tp byte_cnt + 1'b1; else if (go_rx_data) byte_cnt <=#Tp 3'h0; end
cu Frank