Line 48... |
Line 48... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.25 2003/02/19 14:44:03 mohor
|
|
// CAN core finished. Host interface added. Registers finished.
|
|
// Synchronization to the wishbone finished.
|
|
//
|
// Revision 1.24 2003/02/18 00:10:15 mohor
|
// Revision 1.24 2003/02/18 00:10:15 mohor
|
// Most of the registers added. Registers "arbitration lost capture", "error code
|
// Most of the registers added. Registers "arbitration lost capture", "error code
|
// capture" + few more still need to be added.
|
// capture" + few more still need to be added.
|
//
|
//
|
// Revision 1.23 2003/02/14 20:17:01 mohor
|
// Revision 1.23 2003/02/14 20:17:01 mohor
|
Line 452... |
Line 456... |
reg node_bus_off_q;
|
reg node_bus_off_q;
|
reg ack_err_latched;
|
reg ack_err_latched;
|
reg bit_err_latched;
|
reg bit_err_latched;
|
reg stuff_err_latched;
|
reg stuff_err_latched;
|
reg form_err_latched;
|
reg form_err_latched;
|
reg rule5;
|
|
reg rule3_exc1_1;
|
reg rule3_exc1_1;
|
reg rule3_exc1_2;
|
reg rule3_exc1_2;
|
reg rule3_exc2;
|
reg rule3_exc2;
|
reg suspend;
|
reg suspend;
|
reg susp_cnt_en;
|
reg susp_cnt_en;
|
reg [2:0] susp_cnt;
|
reg [2:0] susp_cnt;
|
reg go_error_frame_q;
|
|
reg error_flag_over_blocked;
|
reg error_flag_over_blocked;
|
|
|
reg [7:0] error_capture_code;
|
reg [7:0] error_capture_code;
|
reg [7:6] error_capture_code_type;
|
reg [7:6] error_capture_code_type;
|
reg error_capture_code_blocked;
|
reg error_capture_code_blocked;
|
Line 472... |
Line 474... |
wire error_capture_code_direction;
|
wire error_capture_code_direction;
|
|
|
wire bit_de_stuff;
|
wire bit_de_stuff;
|
wire bit_de_stuff_tx;
|
wire bit_de_stuff_tx;
|
|
|
|
wire rule5;
|
|
|
/* Rx state machine */
|
/* Rx state machine */
|
wire go_rx_idle;
|
wire go_rx_idle;
|
wire go_rx_id1;
|
wire go_rx_id1;
|
wire go_rx_rtr1;
|
wire go_rx_rtr1;
|
Line 1069... |
Line 1072... |
else if (bit_err)
|
else if (bit_err)
|
bit_err_latched <=#Tp 1'b1;
|
bit_err_latched <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
// Rule 5 (Fault confinement).
|
|
always @ (posedge clk or posedge rst)
|
|
begin
|
|
if (rst)
|
|
rule5 <= 1'b0;
|
|
else if (reset_mode | error_flag_over)
|
|
rule5 <=#Tp 1'b0;
|
|
else if ((~node_error_passive) & bit_err & (~bit_err_latched) & (error_frame & (error_cnt1 < 7) |
|
|
overload_frame & (overload_cnt1 < 7) )
|
|
)
|
|
rule5 <=#Tp 1'b1;
|
|
end
|
|
|
|
|
// Rule 5 (Fault confinement).
|
|
assign rule5 = (~node_error_passive) & bit_err & (error_frame & (error_cnt1 < 7) |
|
|
overload_frame & (overload_cnt1 < 7) );
|
|
|
// Rule 3 exception 1 - first part (Fault confinement).
|
// Rule 3 exception 1 - first part (Fault confinement).
|
always @ (posedge clk or posedge rst)
|
always @ (posedge clk or posedge rst)
|
begin
|
begin
|
if (rst)
|
if (rst)
|
Line 1347... |
Line 1341... |
if (sample_point)
|
if (sample_point)
|
error_frame_q <=#Tp error_frame;
|
error_frame_q <=#Tp error_frame;
|
end
|
end
|
|
|
|
|
always @ (posedge clk)
|
|
begin
|
|
go_error_frame_q <=#Tp go_error_frame;
|
|
end
|
|
|
|
|
|
always @ (posedge clk or posedge rst)
|
always @ (posedge clk or posedge rst)
|
begin
|
begin
|
if (rst)
|
if (rst)
|
error_cnt1 <= 1'b0;
|
error_cnt1 <= 1'b0;
|
else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
|
else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
|
Line 1805... |
Line 1793... |
else
|
else
|
rx_err_cnt <=#Tp rx_err_cnt - 1'b1;
|
rx_err_cnt <=#Tp rx_err_cnt - 1'b1;
|
end
|
end
|
else if ((rx_err_cnt < 248) & (~transmitter)) // 248 + 8 = 256
|
else if ((rx_err_cnt < 248) & (~transmitter)) // 248 + 8 = 256
|
begin
|
begin
|
if (go_error_frame_q & (~rule5)) // 1 (rule 5 is just the opposite then rule 1 exception
|
if (go_error_frame & (~rule5)) // 1 (rule 5 is just the opposite then rule 1 exception
|
rx_err_cnt <=#Tp rx_err_cnt + 1'b1;
|
rx_err_cnt <=#Tp rx_err_cnt + 1'b1;
|
else if ( (error_frame & sample_point & (~sampled_bit) & (error_cnt1 == 7) & (~rx_err_cnt_blocked) ) | // 2
|
else if ( (error_frame & sample_point & (~sampled_bit) & (error_cnt1 == 7) & (~rx_err_cnt_blocked) ) | // 2
|
(go_error_frame_q & rule5 ) | // 5
|
(go_error_frame & rule5 ) | // 5
|
(error_frame & sample_point & (~sampled_bit) & (delayed_dominant_cnt == 7) ) // 6
|
(error_frame & sample_point & (~sampled_bit) & (delayed_dominant_cnt == 7) ) // 6
|
)
|
)
|
rx_err_cnt <=#Tp rx_err_cnt + 4'h8;
|
rx_err_cnt <=#Tp rx_err_cnt + 4'h8;
|
end
|
end
|
end
|
end
|
Line 1833... |
Line 1821... |
else if ((tx_err_cnt > 0) & (tx_successful | bus_free))
|
else if ((tx_err_cnt > 0) & (tx_successful | bus_free))
|
tx_err_cnt <=#Tp tx_err_cnt - 1'h1;
|
tx_err_cnt <=#Tp tx_err_cnt - 1'h1;
|
else if (transmitter)
|
else if (transmitter)
|
begin
|
begin
|
if ( (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 7) ) | // 6
|
if ( (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 7) ) | // 6
|
(error_flag_over & (~error_flag_over_blocked) & rule5 ) | // 4 (rule 5 is the same as rule 4)
|
(go_error_frame & rule5 ) | // 4 (rule 5 is the same as rule 4)
|
(error_flag_over & (~error_flag_over_blocked) & (~rule3_exc1_2) & (~rule3_exc2) ) // 3
|
(error_flag_over & (~error_flag_over_blocked) & (~rule3_exc1_2) & (~rule3_exc2) ) // 3
|
)
|
)
|
tx_err_cnt <=#Tp tx_err_cnt + 4'h8;
|
tx_err_cnt <=#Tp tx_err_cnt + 4'h8;
|
end
|
end
|
end
|
end
|
Line 1861... |
Line 1849... |
begin
|
begin
|
if (rst)
|
if (rst)
|
node_error_passive <= 1'b0;
|
node_error_passive <= 1'b0;
|
else if ((rx_err_cnt < 128) & (tx_err_cnt < 128) & error_frame_ended)
|
else if ((rx_err_cnt < 128) & (tx_err_cnt < 128) & error_frame_ended)
|
node_error_passive <=#Tp 1'b0;
|
node_error_passive <=#Tp 1'b0;
|
else if (((rx_err_cnt >= 128) | (tx_err_cnt >= 128)) & (error_frame_ended | (~reset_mode) & reset_mode_q) & (~node_bus_off))
|
else if (((rx_err_cnt >= 128) | (tx_err_cnt >= 128)) & (error_frame_ended | go_error_frame | (~reset_mode) & reset_mode_q) & (~node_bus_off))
|
node_error_passive <=#Tp 1'b1;
|
node_error_passive <=#Tp 1'b1;
|
end
|
end
|
|
|
|
|
assign node_error_active = ~(node_error_passive | node_bus_off);
|
assign node_error_active = ~(node_error_passive | node_bus_off);
|