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

Subversion Repositories can

[/] [can/] [tags/] [rel_6/] [rtl/] [verilog/] [can_bsp.v] - Diff between revs 39 and 44

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

Rev 39 Rev 44
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);

powered by: WebSVN 2.1.0

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