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

Subversion Repositories can

[/] [can/] [trunk/] [rtl/] [verilog/] [can_bsp.v] - Diff between revs 126 and 129

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

Rev 126 Rev 129
Line 48... Line 48...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.44  2003/09/30 00:55:12  mohor
 
// Error counters fixed to be compatible with Bosch VHDL reference model.
 
// Small synchronization changes.
 
//
// Revision 1.43  2003/09/25 18:55:49  mohor
// Revision 1.43  2003/09/25 18:55:49  mohor
// Synchronization changed, error counters fixed.
// Synchronization changed, error counters fixed.
//
//
// Revision 1.42  2003/08/29 07:01:14  mohor
// Revision 1.42  2003/08/29 07:01:14  mohor
// When detecting bus-free, signal bus_free_cnt_en was cleared to zero
// When detecting bus-free, signal bus_free_cnt_en was cleared to zero
Line 665... Line 669...
wire          bit_err_exc1;
wire          bit_err_exc1;
wire          bit_err_exc2;
wire          bit_err_exc2;
wire          bit_err_exc3;
wire          bit_err_exc3;
wire          bit_err_exc4;
wire          bit_err_exc4;
wire          bit_err_exc5;
wire          bit_err_exc5;
 
wire          bit_err_exc6;
wire          error_flag_over;
wire          error_flag_over;
wire          overload_flag_over;
wire          overload_flag_over;
 
 
wire    [5:0] limited_tx_cnt_ext;
wire    [5:0] limited_tx_cnt_ext;
wire    [5:0] limited_tx_cnt_std;
wire    [5:0] limited_tx_cnt_std;
Line 693... Line 698...
 
 
assign go_error_frame = (form_err | stuff_err | bit_err | ack_err | (crc_err & go_rx_eof));
assign go_error_frame = (form_err | stuff_err | bit_err | ack_err | (crc_err & go_rx_eof));
assign error_frame_ended = (error_cnt2 == 3'd7) & tx_point;
assign error_frame_ended = (error_cnt2 == 3'd7) & tx_point;
assign overload_frame_ended = (overload_cnt2 == 3'd7) & tx_point;
assign overload_frame_ended = (overload_cnt2 == 3'd7) & tx_point;
 
 
//assign go_overload_frame = (   ((sample_point &  rx_eof  & (eof_cnt == 3'd6)) | error_frame_ended | overload_frame_ended) & overload_request | 
//assign go_overload_frame = (   ((sample_point &  rx_eof  & (eof_cnt == 3'd6)) | error_frame_ended | overload_frame_ended) & (overload_request | (~sampled_bit)) | 
assign go_overload_frame = (   ((sample_point &  rx_eof  & (eof_cnt == 3'd6)) | error_frame_ended | overload_frame_ended) & (overload_request | (~sampled_bit)) |
//assign go_overload_frame = (     sample_point & ((~sampled_bit) | overload_request) & (rx_eof  & (eof_cnt == 3'd6) | error_frame_ended | overload_frame_ended) | 
 
assign go_overload_frame = (     sample_point & ((~sampled_bit) | overload_request) & (rx_eof & (~transmitter) & (eof_cnt == 3'd6) | error_frame_ended | overload_frame_ended) |
                                 sample_point & (~sampled_bit) & rx_inter & (bit_cnt[1:0] < 2'd2)                                            |
                                 sample_point & (~sampled_bit) & rx_inter & (bit_cnt[1:0] < 2'd2)                                            |
                                 sample_point & (~sampled_bit) & ((error_cnt2 == 3'd7) | (overload_cnt2 == 3'd7))
                                 sample_point & (~sampled_bit) & ((error_cnt2 == 3'd7) | (overload_cnt2 == 3'd7))
                           )
                           )
                           & (~overload_frame_blocked)
                           & (~overload_frame_blocked)
                           ;
                           ;
Line 712... Line 718...
 
 
assign remote_rq = ((~ide) & rtr1) | (ide & rtr2);
assign remote_rq = ((~ide) & rtr1) | (ide & rtr2);
assign limited_data_len = (data_len < 4'h8)? data_len : 4'h8;
assign limited_data_len = (data_len < 4'h8)? data_len : 4'h8;
 
 
assign ack_err = rx_ack & sample_point & sampled_bit & tx_state & (~self_test_mode);
assign ack_err = rx_ack & sample_point & sampled_bit & tx_state & (~self_test_mode);
assign bit_err = (tx_state | error_frame | overload_frame | rx_ack) & sample_point & (tx != sampled_bit) & (~bit_err_exc1) & (~bit_err_exc2) & (~bit_err_exc3) & (~bit_err_exc4) & (~bit_err_exc5);
assign bit_err = (tx_state | error_frame | overload_frame | rx_ack) & sample_point & (tx != sampled_bit) & (~bit_err_exc1) & (~bit_err_exc2) & (~bit_err_exc3) & (~bit_err_exc4) & (~bit_err_exc5) & (~bit_err_exc6);
assign bit_err_exc1 = tx_state & arbitration_field & tx;
assign bit_err_exc1 = tx_state & arbitration_field & tx;
assign bit_err_exc2 = rx_ack & tx;
assign bit_err_exc2 = rx_ack & tx;
assign bit_err_exc3 = error_frame & node_error_passive & (error_cnt1 < 3'd7);
assign bit_err_exc3 = error_frame & node_error_passive & (error_cnt1 < 3'd7);
assign bit_err_exc4 = (error_frame & (error_cnt1 == 3'd7) & (~enable_error_cnt2)) | (overload_frame & (overload_cnt1 == 3'd7) & (~enable_overload_cnt2));
assign bit_err_exc4 = (error_frame & (error_cnt1 == 3'd7) & (~enable_error_cnt2)) | (overload_frame & (overload_cnt1 == 3'd7) & (~enable_overload_cnt2));
assign bit_err_exc5 = (error_frame & (error_cnt2 == 3'd7)) | (overload_frame & (overload_cnt2 == 3'd7));
assign bit_err_exc5 = (error_frame & (error_cnt2 == 3'd7)) | (overload_frame & (overload_cnt2 == 3'd7));
 
assign bit_err_exc6 = (eof_cnt == 3'd6) & rx_eof & (~transmitter);
 
 
assign arbitration_field = rx_id1 | rx_rtr1 | rx_ide | rx_id2 | rx_rtr2;
assign arbitration_field = rx_id1 | rx_rtr1 | rx_ide | rx_id2 | rx_rtr2;
 
 
assign last_bit_of_inter = rx_inter & (bit_cnt[1:0] == 2'd2);
assign last_bit_of_inter = rx_inter & (bit_cnt[1:0] == 2'd2);
assign not_first_bit_of_inter = rx_inter & (bit_cnt[1:0] != 2'd0);
assign not_first_bit_of_inter = rx_inter & (bit_cnt[1:0] != 2'd0);
Line 1164... Line 1171...
 
 
 
 
// Conditions for form error
// Conditions for form error
assign form_err = sample_point & ( ((~bit_de_stuff) & rx_crc_lim & (~sampled_bit)               ) |
assign form_err = sample_point & ( ((~bit_de_stuff) & rx_crc_lim & (~sampled_bit)               ) |
                                   (                  rx_ack_lim & (~sampled_bit)               ) |
                                   (                  rx_ack_lim & (~sampled_bit)               ) |
                                   ((eof_cnt < 3'd6)& rx_eof     & (~sampled_bit) & (~tx_state) ) |
//                                   ((eof_cnt < 3'd6)& rx_eof     & (~sampled_bit) & (~tx_state) ) |
                                   (                & rx_eof     & (~sampled_bit) &   tx_state  )
//                                   (                & rx_eof     & (~sampled_bit) &   tx_state  )
 
//                                   ((eof_cnt < 3'd6)& rx_eof     & (~sampled_bit) & (~tx_state) ) 
 
                                   ((eof_cnt < 3'd6)& rx_eof     & (~sampled_bit) & (~transmitter) ) |
 
                                   (                & rx_eof     & (~sampled_bit) &   transmitter  )
                                 );
                                 );
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
Line 1757... Line 1767...
  else if (go_early_tx | (tx_point & tx_state & (~bit_de_stuff_tx)))
  else if (go_early_tx | (tx_point & tx_state & (~bit_de_stuff_tx)))
    tx_pointer <=#Tp tx_pointer + 1'b1;
    tx_pointer <=#Tp tx_pointer + 1'b1;
end
end
 
 
 
 
//assign tx_successful = transmitter & go_rx_inter & ((~error_frame_ended) & (~overload_frame_ended) & (~arbitration_lost) | single_shot_transmission);
//assign tx_successful = transmitter & go_rx_inter & (~error_frame_ended) & (~overload_frame_ended) & (~arbitration_lost);
assign tx_successful = transmitter & go_rx_inter & (~error_frame_ended) & (~overload_frame_ended) & (~arbitration_lost);
assign tx_successful = transmitter & go_rx_inter & (~go_error_frame) & (~error_frame_ended) & (~overload_frame_ended) & (~arbitration_lost);
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
Line 1891... Line 1901...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    arbitration_lost <= 1'b0;
    arbitration_lost <= 1'b0;
  else if (go_rx_idle | error_frame | reset_mode)
//  else if (go_rx_idle | error_frame | reset_mode)
 
  else if (go_rx_idle | error_frame_ended | reset_mode)
    arbitration_lost <=#Tp 1'b0;
    arbitration_lost <=#Tp 1'b0;
  else if (tx_state & sample_point & tx & arbitration_field)
//  else if (tx_state & sample_point & tx & arbitration_field)
 
  else if (transmitter & sample_point & tx & arbitration_field)
    arbitration_lost <=#Tp (~sampled_bit);
    arbitration_lost <=#Tp (~sampled_bit);
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
Line 1955... Line 1967...
    rx_err_cnt <=#Tp {1'b0, data_in};
    rx_err_cnt <=#Tp {1'b0, data_in};
  else if (set_reset_mode)
  else if (set_reset_mode)
    rx_err_cnt <=#Tp 9'h0;
    rx_err_cnt <=#Tp 9'h0;
  else
  else
    begin
    begin
 
//      if ((~listen_only_mode) & (~transmitter | arbitration_lost | suspend))
      if ((~listen_only_mode) & (~transmitter | arbitration_lost))
      if ((~listen_only_mode) & (~transmitter | arbitration_lost))
        begin
        begin
          if (go_rx_ack_lim & (~go_error_frame) & (~crc_err) & (rx_err_cnt > 9'h0))
          if (go_rx_ack_lim & (~go_error_frame) & (~crc_err) & (rx_err_cnt > 9'h0))
            begin
            begin
              if (rx_err_cnt > 9'd127)
              if (rx_err_cnt > 9'd127)
                rx_err_cnt <=#Tp 9'd127;
                rx_err_cnt <=#Tp 9'd127;
              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 < 9'd248)   // 248 + 8 = 256
          else if (rx_err_cnt < 9'd128)
            begin
            begin
              if (go_error_frame & (~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_flag_over & (~error_flag_over_latched) & sample_point & (~sampled_bit) & (error_cnt1 == 3'd7) & (~rx_err_cnt_blocked)  ) |   // 2
//              else if ( (error_flag_over & (~error_flag_over_latched) & sample_point & (~sampled_bit) & (error_cnt1 == 3'd7) & (~rx_err_cnt_blocked)  ) |   // 2
 
//              else if ( (error_flag_over & (~error_flag_over_latched) & sample_point & (~sampled_bit) & (error_cnt1 == 3'd7)     ) |   // 2
 
              else if ( (error_flag_over & (~error_flag_over_latched) & sample_point & (~sampled_bit) & (error_cnt1 == 3'd7)     ) |   // 2
                        (go_error_frame & rule5                                                                                  ) |   // 5
                        (go_error_frame & rule5                                                                                  ) |   // 5
//                        (error_frame & sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                            )     // 6
//                        (error_frame & sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                            )     // 6
                        (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                            )     // 6
                        (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                            )     // 6
                      )
                      )
                rx_err_cnt <=#Tp rx_err_cnt + 4'h8;
                rx_err_cnt <=#Tp rx_err_cnt + 4'h8;
Line 1992... Line 2007...
    begin
    begin
      if (set_reset_mode)
      if (set_reset_mode)
        tx_err_cnt <=#Tp 9'd127;
        tx_err_cnt <=#Tp 9'd127;
      else if ((tx_err_cnt > 9'd0) & (tx_successful | bus_free))
      else if ((tx_err_cnt > 9'd0) & (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 & (~arbitration_lost) & (~suspend))
      else if (transmitter & (~arbitration_lost))
      else if (transmitter & (~arbitration_lost))
        begin
        begin
          if ( (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                  ) |       // 6
          if ( (sample_point & (~sampled_bit) & (delayed_dominant_cnt == 3'h7)                  ) |       // 6
               (go_error_frame & 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_latched) & (~rule3_exc1_2) & (~rule3_exc2)  )         // 3
               (go_error_frame & (~(transmitter & node_error_passive & ack_err)) & (~(transmitter & stuff_err & arbitration_field & sample_point & tx & (~sampled_bit)))                                       ) |       // 3 
//               (go_error_frame & (~(transmitter & node_error_passive & ack_err))                ) // 3 ?
               (error_frame & rule3_exc1_2                                                                              ) //|       // 3
               (go_error_frame & (~(transmitter & node_error_passive & ack_err))                ) |       // 3 
//               (go_error_frame & (~(transmitter & stuff_err & arbitration_field & sample_point & tx & (~sampled_bit)))  )         // 
               (error_frame & rule3_exc1_2)                                                               // 3
 
             )
             )
            tx_err_cnt <=#Tp tx_err_cnt + 4'h8;
            tx_err_cnt <=#Tp tx_err_cnt + 4'h8;
        end
        end
    end
    end
end
end
Line 2011... Line 2026...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_err_cnt_blocked <= 1'b0;
    rx_err_cnt_blocked <= 1'b0;
  else if (reset_mode | error_frame_ended)
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
    rx_err_cnt_blocked <=#Tp 1'b0;
    rx_err_cnt_blocked <=#Tp 1'b0;
  else if (sample_point & (error_cnt1 == 3'd7))
  else if (sample_point & (error_cnt1 == 3'd7))
    rx_err_cnt_blocked <=#Tp 1'b1;
    rx_err_cnt_blocked <=#Tp 1'b1;
end
end
 
 

powered by: WebSVN 2.1.0

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