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

Subversion Repositories can

[/] [can/] [trunk/] [rtl/] [verilog/] [can_bsp.v] - Diff between revs 152 and 153

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

Rev 152 Rev 153
Line 48... Line 48...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.52  2004/11/18 12:39:21  igorm
 
// Fixes for compatibility after the SW reset.
 
//
// Revision 1.51  2004/11/15 18:23:21  igorm
// Revision 1.51  2004/11/15 18:23:21  igorm
// When CAN was reset by setting the reset_mode signal in mode register, it
// When CAN was reset by setting the reset_mode signal in mode register, it
// was possible that CAN was blocked for a short period of time. Problem
// was possible that CAN was blocked for a short period of time. Problem
// occured very rarly.
// occured very rarly.
//
//
Line 548... Line 551...
reg           tx;
reg           tx;
reg           crc_err;
reg           crc_err;
 
 
reg           arbitration_lost;
reg           arbitration_lost;
reg           arbitration_lost_q;
reg           arbitration_lost_q;
reg           read_arbitration_lost_capture_reg_q;
reg           arbitration_field_d;
reg     [4:0] arbitration_lost_capture;
reg     [4:0] arbitration_lost_capture;
reg           arbitration_cnt_en;
reg     [4:0] arbitration_cnt;
reg           arbitration_blocked;
reg           arbitration_blocked;
reg           tx_q;
reg           tx_q;
 
 
reg           need_to_tx;   // When the CAN core has something to transmit and a dominant bit is sampled at the third bit
reg           need_to_tx;   // When the CAN core has something to transmit and a dominant bit is sampled at the third bit
reg     [3:0] data_cnt;     // Counting the data bytes that are written to FIFO
reg     [3:0] data_cnt;     // Counting the data bytes that are written to FIFO
Line 725... Line 728...
 
 
assign go_crc_enable  = hard_sync | go_tx;
assign go_crc_enable  = hard_sync | go_tx;
assign rst_crc_enable = go_rx_crc;
assign rst_crc_enable = go_rx_crc;
 
 
assign bit_de_stuff_set   = go_rx_id1 & (~go_error_frame);
assign bit_de_stuff_set   = go_rx_id1 & (~go_error_frame);
assign bit_de_stuff_reset = go_rx_ack | reset_mode | go_error_frame | go_overload_frame;
assign bit_de_stuff_reset = go_rx_ack | go_error_frame | go_overload_frame;
 
 
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) & (~bit_err_exc6);
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) & (~reset_mode);
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));
Line 750... Line 753...
// Rx idle state
// Rx idle state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_idle <= 1'b0;
    rx_idle <= 1'b0;
  else if (reset_mode | go_rx_id1 | go_error_frame)
  else if (go_rx_id1 | go_error_frame)
    rx_idle <=#Tp 1'b0;
    rx_idle <=#Tp 1'b0;
  else if (go_rx_idle)
  else if (go_rx_idle)
    rx_idle <=#Tp 1'b1;
    rx_idle <=#Tp 1'b1;
end
end
 
 
Line 762... Line 765...
// Rx id1 state
// Rx id1 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_id1 <= 1'b0;
    rx_id1 <= 1'b0;
  else if (reset_mode | go_rx_rtr1 | go_error_frame)
  else if (go_rx_rtr1 | go_error_frame)
    rx_id1 <=#Tp 1'b0;
    rx_id1 <=#Tp 1'b0;
  else if (go_rx_id1)
  else if (go_rx_id1)
    rx_id1 <=#Tp 1'b1;
    rx_id1 <=#Tp 1'b1;
end
end
 
 
Line 774... Line 777...
// Rx rtr1 state
// Rx rtr1 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_rtr1 <= 1'b0;
    rx_rtr1 <= 1'b0;
  else if (reset_mode | go_rx_ide | go_error_frame)
  else if (go_rx_ide | go_error_frame)
    rx_rtr1 <=#Tp 1'b0;
    rx_rtr1 <=#Tp 1'b0;
  else if (go_rx_rtr1)
  else if (go_rx_rtr1)
    rx_rtr1 <=#Tp 1'b1;
    rx_rtr1 <=#Tp 1'b1;
end
end
 
 
Line 786... Line 789...
// Rx ide state
// Rx ide state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_ide <= 1'b0;
    rx_ide <= 1'b0;
  else if (reset_mode | go_rx_r0 | go_rx_id2 | go_error_frame)
  else if (go_rx_r0 | go_rx_id2 | go_error_frame)
    rx_ide <=#Tp 1'b0;
    rx_ide <=#Tp 1'b0;
  else if (go_rx_ide)
  else if (go_rx_ide)
    rx_ide <=#Tp 1'b1;
    rx_ide <=#Tp 1'b1;
end
end
 
 
Line 798... Line 801...
// Rx id2 state
// Rx id2 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_id2 <= 1'b0;
    rx_id2 <= 1'b0;
  else if (reset_mode | go_rx_rtr2 | go_error_frame)
  else if (go_rx_rtr2 | go_error_frame)
    rx_id2 <=#Tp 1'b0;
    rx_id2 <=#Tp 1'b0;
  else if (go_rx_id2)
  else if (go_rx_id2)
    rx_id2 <=#Tp 1'b1;
    rx_id2 <=#Tp 1'b1;
end
end
 
 
Line 810... Line 813...
// Rx rtr2 state
// Rx rtr2 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_rtr2 <= 1'b0;
    rx_rtr2 <= 1'b0;
  else if (reset_mode | go_rx_r1 | go_error_frame)
  else if (go_rx_r1 | go_error_frame)
    rx_rtr2 <=#Tp 1'b0;
    rx_rtr2 <=#Tp 1'b0;
  else if (go_rx_rtr2)
  else if (go_rx_rtr2)
    rx_rtr2 <=#Tp 1'b1;
    rx_rtr2 <=#Tp 1'b1;
end
end
 
 
Line 822... Line 825...
// Rx r0 state
// Rx r0 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_r1 <= 1'b0;
    rx_r1 <= 1'b0;
  else if (reset_mode | go_rx_r0 | go_error_frame)
  else if (go_rx_r0 | go_error_frame)
    rx_r1 <=#Tp 1'b0;
    rx_r1 <=#Tp 1'b0;
  else if (go_rx_r1)
  else if (go_rx_r1)
    rx_r1 <=#Tp 1'b1;
    rx_r1 <=#Tp 1'b1;
end
end
 
 
Line 834... Line 837...
// Rx r0 state
// Rx r0 state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_r0 <= 1'b0;
    rx_r0 <= 1'b0;
  else if (reset_mode | go_rx_dlc | go_error_frame)
  else if (go_rx_dlc | go_error_frame)
    rx_r0 <=#Tp 1'b0;
    rx_r0 <=#Tp 1'b0;
  else if (go_rx_r0)
  else if (go_rx_r0)
    rx_r0 <=#Tp 1'b1;
    rx_r0 <=#Tp 1'b1;
end
end
 
 
Line 846... Line 849...
// Rx dlc state
// Rx dlc state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_dlc <= 1'b0;
    rx_dlc <= 1'b0;
  else if (reset_mode | go_rx_data | go_rx_crc | go_error_frame)
  else if (go_rx_data | go_rx_crc | go_error_frame)
    rx_dlc <=#Tp 1'b0;
    rx_dlc <=#Tp 1'b0;
  else if (go_rx_dlc)
  else if (go_rx_dlc)
    rx_dlc <=#Tp 1'b1;
    rx_dlc <=#Tp 1'b1;
end
end
 
 
Line 858... Line 861...
// Rx data state
// Rx data state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_data <= 1'b0;
    rx_data <= 1'b0;
  else if (reset_mode | go_rx_crc | go_error_frame)
  else if (go_rx_crc | go_error_frame)
    rx_data <=#Tp 1'b0;
    rx_data <=#Tp 1'b0;
  else if (go_rx_data)
  else if (go_rx_data)
    rx_data <=#Tp 1'b1;
    rx_data <=#Tp 1'b1;
end
end
 
 
Line 870... Line 873...
// Rx crc state
// Rx crc state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_crc <= 1'b0;
    rx_crc <= 1'b0;
  else if (reset_mode | go_rx_crc_lim | go_error_frame)
  else if (go_rx_crc_lim | go_error_frame)
    rx_crc <=#Tp 1'b0;
    rx_crc <=#Tp 1'b0;
  else if (go_rx_crc)
  else if (go_rx_crc)
    rx_crc <=#Tp 1'b1;
    rx_crc <=#Tp 1'b1;
end
end
 
 
Line 882... Line 885...
// Rx crc delimiter state
// Rx crc delimiter state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_crc_lim <= 1'b0;
    rx_crc_lim <= 1'b0;
  else if (reset_mode | go_rx_ack | go_error_frame)
  else if (go_rx_ack | go_error_frame)
    rx_crc_lim <=#Tp 1'b0;
    rx_crc_lim <=#Tp 1'b0;
  else if (go_rx_crc_lim)
  else if (go_rx_crc_lim)
    rx_crc_lim <=#Tp 1'b1;
    rx_crc_lim <=#Tp 1'b1;
end
end
 
 
Line 894... Line 897...
// Rx ack state
// Rx ack state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_ack <= 1'b0;
    rx_ack <= 1'b0;
  else if (reset_mode | go_rx_ack_lim | go_error_frame)
  else if (go_rx_ack_lim | go_error_frame)
    rx_ack <=#Tp 1'b0;
    rx_ack <=#Tp 1'b0;
  else if (go_rx_ack)
  else if (go_rx_ack)
    rx_ack <=#Tp 1'b1;
    rx_ack <=#Tp 1'b1;
end
end
 
 
Line 906... Line 909...
// Rx ack delimiter state
// Rx ack delimiter state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_ack_lim <= 1'b0;
    rx_ack_lim <= 1'b0;
  else if (reset_mode | go_rx_eof | go_error_frame)
  else if (go_rx_eof | go_error_frame)
    rx_ack_lim <=#Tp 1'b0;
    rx_ack_lim <=#Tp 1'b0;
  else if (go_rx_ack_lim)
  else if (go_rx_ack_lim)
    rx_ack_lim <=#Tp 1'b1;
    rx_ack_lim <=#Tp 1'b1;
end
end
 
 
Line 918... Line 921...
// Rx eof state
// Rx eof state
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_eof <= 1'b0;
    rx_eof <= 1'b0;
  else if (reset_mode | go_rx_inter | go_error_frame | go_overload_frame)
  else if (go_rx_inter | go_error_frame | go_overload_frame)
    rx_eof <=#Tp 1'b0;
    rx_eof <=#Tp 1'b0;
  else if (go_rx_eof)
  else if (go_rx_eof)
    rx_eof <=#Tp 1'b1;
    rx_eof <=#Tp 1'b1;
end
end
 
 
Line 931... Line 934...
// Interframe space
// Interframe space
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_inter <= 1'b0;
    rx_inter <= 1'b0;
  else if (reset_mode | go_rx_idle | go_rx_id1 | go_overload_frame | go_error_frame)
  else if (go_rx_idle | go_rx_id1 | go_overload_frame | go_error_frame)
    rx_inter <=#Tp 1'b0;
    rx_inter <=#Tp 1'b0;
  else if (go_rx_inter)
  else if (go_rx_inter)
    rx_inter <=#Tp 1'b1;
    rx_inter <=#Tp 1'b1;
end
end
 
 
Line 943... Line 946...
// ID register
// ID register
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    id <= 29'h0;
    id <= 29'h0;
  else if (reset_mode)
 
    id <= 29'h0;
 
  else if (sample_point & (rx_id1 | rx_id2) & (~bit_de_stuff))
  else if (sample_point & (rx_id1 | rx_id2) & (~bit_de_stuff))
    id <=#Tp {id[27:0], sampled_bit};
    id <=#Tp {id[27:0], sampled_bit};
end
end
 
 
 
 
// rtr1 bit
// rtr1 bit
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rtr1 <= 1'b0;
    rtr1 <= 1'b0;
  else if (reset_mode)
 
    rtr1 <= 1'b0;
 
  else if (sample_point & rx_rtr1 & (~bit_de_stuff))
  else if (sample_point & rx_rtr1 & (~bit_de_stuff))
    rtr1 <=#Tp sampled_bit;
    rtr1 <=#Tp sampled_bit;
end
end
 
 
 
 
// rtr2 bit
// rtr2 bit
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rtr2 <= 1'b0;
    rtr2 <= 1'b0;
  else if (reset_mode)
 
    rtr2 <= 1'b0;
 
  else if (sample_point & rx_rtr2 & (~bit_de_stuff))
  else if (sample_point & rx_rtr2 & (~bit_de_stuff))
    rtr2 <=#Tp sampled_bit;
    rtr2 <=#Tp sampled_bit;
end
end
 
 
 
 
// ide bit
// ide bit
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    ide <= 1'b0;
    ide <= 1'b0;
  else if (reset_mode)
 
    ide <= 1'b0;
 
  else if (sample_point & rx_ide & (~bit_de_stuff))
  else if (sample_point & rx_ide & (~bit_de_stuff))
    ide <=#Tp sampled_bit;
    ide <=#Tp sampled_bit;
end
end
 
 
 
 
// Data length
// Data length
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    data_len <= 4'b0;
    data_len <= 4'b0;
  else if (reset_mode)
 
    data_len <= 4'b0;
 
  else if (sample_point & rx_dlc & (~bit_de_stuff))
  else if (sample_point & rx_dlc & (~bit_de_stuff))
    data_len <=#Tp {data_len[2:0], sampled_bit};
    data_len <=#Tp {data_len[2:0], sampled_bit};
end
end
 
 
 
 
// Data
// Data
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    tmp_data <= 8'h0;
    tmp_data <= 8'h0;
  else if (reset_mode)
 
    tmp_data <= 8'h0;
 
  else if (sample_point & rx_data & (~bit_de_stuff))
  else if (sample_point & rx_data & (~bit_de_stuff))
    tmp_data <=#Tp {tmp_data[6:0], sampled_bit};
    tmp_data <=#Tp {tmp_data[6:0], sampled_bit};
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    write_data_to_tmp_fifo <= 1'b0;
    write_data_to_tmp_fifo <= 1'b0;
  else if (reset_mode)
 
    write_data_to_tmp_fifo <= 1'b0;
 
  else if (sample_point & rx_data & (~bit_de_stuff) & (&bit_cnt[2:0]))
  else if (sample_point & rx_data & (~bit_de_stuff) & (&bit_cnt[2:0]))
    write_data_to_tmp_fifo <=#Tp 1'b1;
    write_data_to_tmp_fifo <=#Tp 1'b1;
  else
  else
    write_data_to_tmp_fifo <=#Tp 1'b0;
    write_data_to_tmp_fifo <=#Tp 1'b0;
end
end
Line 1027... Line 1016...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    byte_cnt <= 3'h0;
    byte_cnt <= 3'h0;
  else if (reset_mode)
 
    byte_cnt <= 3'h0;
 
  else if (write_data_to_tmp_fifo)
  else if (write_data_to_tmp_fifo)
    byte_cnt <=#Tp byte_cnt + 1'b1;
    byte_cnt <=#Tp byte_cnt + 1'b1;
  else if (sample_point & go_rx_crc_lim)
  else if (sample_point & go_rx_crc_lim)
    byte_cnt <=#Tp 3'h0;
    byte_cnt <=#Tp 3'h0;
end
end
Line 1049... Line 1036...
// CRC
// CRC
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    crc_in <= 15'h0;
    crc_in <= 15'h0;
  else if (reset_mode)
 
    crc_in <= 15'h0;
 
  else if (sample_point & rx_crc & (~bit_de_stuff))
  else if (sample_point & rx_crc & (~bit_de_stuff))
    crc_in <=#Tp {crc_in[13:0], sampled_bit};
    crc_in <=#Tp {crc_in[13:0], sampled_bit};
end
end
 
 
 
 
// bit_cnt
// bit_cnt
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bit_cnt <= 6'd0;
    bit_cnt <= 6'd0;
  else if (reset_mode)
 
    bit_cnt <= 6'd0;
 
  else if (go_rx_id1 | go_rx_id2 | go_rx_dlc | go_rx_data | go_rx_crc |
  else if (go_rx_id1 | go_rx_id2 | go_rx_dlc | go_rx_data | go_rx_crc |
           go_rx_ack | go_rx_eof | go_rx_inter | go_error_frame | go_overload_frame)
           go_rx_ack | go_rx_eof | go_rx_inter | go_error_frame | go_overload_frame)
    bit_cnt <=#Tp 6'd0;
    bit_cnt <=#Tp 6'd0;
  else if (sample_point & (~bit_de_stuff))
  else if (sample_point & (~bit_de_stuff))
    bit_cnt <=#Tp bit_cnt + 1'b1;
    bit_cnt <=#Tp bit_cnt + 1'b1;
Line 1076... Line 1059...
// eof_cnt
// eof_cnt
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    eof_cnt <= 3'd0;
    eof_cnt <= 3'd0;
  else if (reset_mode)
 
    eof_cnt <= 3'd0;
 
  else if (sample_point)
  else if (sample_point)
    begin
    begin
      if (go_rx_inter | go_error_frame | go_overload_frame)
      if (go_rx_inter | go_error_frame | go_overload_frame)
        eof_cnt <=#Tp 3'd0;
        eof_cnt <=#Tp 3'd0;
      else if (rx_eof)
      else if (rx_eof)
Line 1093... Line 1074...
// Enabling bit de-stuffing
// Enabling bit de-stuffing
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bit_stuff_cnt_en <= 1'b0;
    bit_stuff_cnt_en <= 1'b0;
  else if (reset_mode)
 
    bit_stuff_cnt_en <= 1'b0;
 
  else if (bit_de_stuff_set)
  else if (bit_de_stuff_set)
    bit_stuff_cnt_en <=#Tp 1'b1;
    bit_stuff_cnt_en <=#Tp 1'b1;
  else if (bit_de_stuff_reset)
  else if (bit_de_stuff_reset)
    bit_stuff_cnt_en <=#Tp 1'b0;
    bit_stuff_cnt_en <=#Tp 1'b0;
end
end
Line 1107... Line 1086...
// bit_stuff_cnt
// bit_stuff_cnt
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bit_stuff_cnt <= 3'h1;
    bit_stuff_cnt <= 3'h1;
  else if (reset_mode)
 
    bit_stuff_cnt <= 3'h1;
 
  else if (bit_de_stuff_reset)
  else if (bit_de_stuff_reset)
    bit_stuff_cnt <=#Tp 3'h1;
    bit_stuff_cnt <=#Tp 3'h1;
  else if (sample_point & bit_stuff_cnt_en)
  else if (sample_point & bit_stuff_cnt_en)
    begin
    begin
      if (bit_stuff_cnt == 3'h5)
      if (bit_stuff_cnt == 3'h5)
Line 1128... Line 1105...
// bit_stuff_cnt_tx
// bit_stuff_cnt_tx
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bit_stuff_cnt_tx <= 3'h1;
    bit_stuff_cnt_tx <= 3'h1;
  else if (reset_mode)
  else if (reset_mode || bit_de_stuff_reset)
    bit_stuff_cnt_tx <= 3'h1;
 
  else if (bit_de_stuff_reset)
 
    bit_stuff_cnt_tx <=#Tp 3'h1;
    bit_stuff_cnt_tx <=#Tp 3'h1;
  else if (tx_point_q & bit_stuff_cnt_en)
  else if (tx_point_q & bit_stuff_cnt_en)
    begin
    begin
      if (bit_stuff_cnt_tx == 3'h5)
      if (bit_stuff_cnt_tx == 3'h5)
        bit_stuff_cnt_tx <=#Tp 3'h1;
        bit_stuff_cnt_tx <=#Tp 3'h1;
Line 1175... Line 1150...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    crc_enable <= 1'b0;
    crc_enable <= 1'b0;
  else if (reset_mode | rst_crc_enable)
  else if (rst_crc_enable)
    crc_enable <=#Tp 1'b0;
    crc_enable <=#Tp 1'b0;
  else if (go_crc_enable)
  else if (go_crc_enable)
    crc_enable <=#Tp 1'b1;
    crc_enable <=#Tp 1'b1;
end
end
 
 
Line 1236... Line 1211...
// 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)
    rule3_exc1_1 <= 1'b0;
    rule3_exc1_1 <= 1'b0;
  else if (reset_mode | error_flag_over | rule3_exc1_2)
  else if (error_flag_over | rule3_exc1_2)
    rule3_exc1_1 <=#Tp 1'b0;
    rule3_exc1_1 <=#Tp 1'b0;
  else if (transmitter & node_error_passive & ack_err)
  else if (transmitter & node_error_passive & ack_err)
    rule3_exc1_1 <=#Tp 1'b1;
    rule3_exc1_1 <=#Tp 1'b1;
end
end
 
 
Line 1248... Line 1223...
// Rule 3 exception 1 - second part (Fault confinement).
// Rule 3 exception 1 - second part (Fault confinement).
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rule3_exc1_2 <= 1'b0;
    rule3_exc1_2 <= 1'b0;
  else if (reset_mode | go_error_frame | rule3_exc1_2)
  else if (go_error_frame | rule3_exc1_2)
    rule3_exc1_2 <=#Tp 1'b0;
    rule3_exc1_2 <=#Tp 1'b0;
  else if (rule3_exc1_1 & (error_cnt1 < 3'd7) & sample_point & (~sampled_bit))
  else if (rule3_exc1_1 & (error_cnt1 < 3'd7) & sample_point & (~sampled_bit))
    rule3_exc1_2 <=#Tp 1'b1;
    rule3_exc1_2 <=#Tp 1'b1;
end
end
 
 
Line 1351... Line 1326...
 
 
 
 
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 < 4'h8)? (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 < 4'h8)? (data_len -1'b1) : 4'h7);   // - 1 because counter counts from 0
assign reset_wr_fifo = (data_cnt == (limited_data_len_minus1 + {1'b0, header_len})) | reset_mode;
assign reset_wr_fifo = (data_cnt == (limited_data_len_minus1 + {1'b0, header_len})) || reset_mode;
 
 
assign err = form_err | stuff_err | bit_err | ack_err | form_err_latched | stuff_err_latched | bit_err_latched | ack_err_latched | crc_err;
assign err = form_err | stuff_err | bit_err | ack_err | form_err_latched | stuff_err_latched | bit_err_latched | ack_err_latched | crc_err;
 
 
 
 
 
 
Line 1451... Line 1426...
// Transmitting error frame.
// Transmitting error frame.
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    error_frame <= 1'b0;
    error_frame <= 1'b0;
  else if (reset_mode | error_frame_ended | go_overload_frame)
//  else if (reset_mode || error_frame_ended || go_overload_frame)
 
  else if (set_reset_mode || error_frame_ended || go_overload_frame)
    error_frame <=#Tp 1'b0;
    error_frame <=#Tp 1'b0;
  else if (go_error_frame)
  else if (go_error_frame)
    error_frame <=#Tp 1'b1;
    error_frame <=#Tp 1'b1;
end
end
 
 
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    error_cnt1 <= 3'd0;
    error_cnt1 <= 3'd0;
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
  else if (error_frame_ended | go_error_frame | go_overload_frame)
    error_cnt1 <=#Tp 3'd0;
    error_cnt1 <=#Tp 3'd0;
  else if (error_frame & tx_point & (error_cnt1 < 3'd7))
  else if (error_frame & tx_point & (error_cnt1 < 3'd7))
    error_cnt1 <=#Tp error_cnt1 + 1'b1;
    error_cnt1 <=#Tp error_cnt1 + 1'b1;
end
end
 
 
Line 1477... Line 1454...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    error_flag_over_latched <= 1'b0;
    error_flag_over_latched <= 1'b0;
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
  else if (error_frame_ended | go_error_frame | go_overload_frame)
    error_flag_over_latched <=#Tp 1'b0;
    error_flag_over_latched <=#Tp 1'b0;
  else if (error_flag_over)
  else if (error_flag_over)
    error_flag_over_latched <=#Tp 1'b1;
    error_flag_over_latched <=#Tp 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    enable_error_cnt2 <= 1'b0;
    enable_error_cnt2 <= 1'b0;
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
  else if (error_frame_ended | go_error_frame | go_overload_frame)
    enable_error_cnt2 <=#Tp 1'b0;
    enable_error_cnt2 <=#Tp 1'b0;
  else if (error_frame & (error_flag_over & sampled_bit))
  else if (error_frame & (error_flag_over & sampled_bit))
    enable_error_cnt2 <=#Tp 1'b1;
    enable_error_cnt2 <=#Tp 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    error_cnt2 <= 3'd0;
    error_cnt2 <= 3'd0;
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame)
  else if (error_frame_ended | go_error_frame | go_overload_frame)
    error_cnt2 <=#Tp 3'd0;
    error_cnt2 <=#Tp 3'd0;
  else if (enable_error_cnt2 & tx_point)
  else if (enable_error_cnt2 & tx_point)
    error_cnt2 <=#Tp error_cnt2 + 1'b1;
    error_cnt2 <=#Tp error_cnt2 + 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    delayed_dominant_cnt <= 3'h0;
    delayed_dominant_cnt <= 3'h0;
  else if (reset_mode | enable_error_cnt2 | go_error_frame | enable_overload_cnt2 | go_overload_frame)
  else if (enable_error_cnt2 | go_error_frame | enable_overload_cnt2 | go_overload_frame)
    delayed_dominant_cnt <=#Tp 3'h0;
    delayed_dominant_cnt <=#Tp 3'h0;
  else if (sample_point & (~sampled_bit) & ((error_cnt1 == 3'd7) | (overload_cnt1 == 3'd7)))
  else if (sample_point & (~sampled_bit) & ((error_cnt1 == 3'd7) | (overload_cnt1 == 3'd7)))
    delayed_dominant_cnt <=#Tp delayed_dominant_cnt + 1'b1;
    delayed_dominant_cnt <=#Tp delayed_dominant_cnt + 1'b1;
end
end
 
 
Line 1522... Line 1499...
// passive_cnt
// passive_cnt
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    passive_cnt <= 3'h1;
    passive_cnt <= 3'h1;
  else if (reset_mode | error_frame_ended | go_error_frame | go_overload_frame | first_compare_bit)
  else if (error_frame_ended | go_error_frame | go_overload_frame | first_compare_bit)
    passive_cnt <=#Tp 3'h1;
    passive_cnt <=#Tp 3'h1;
  else if (sample_point & (passive_cnt < 3'h6))
  else if (sample_point & (passive_cnt < 3'h6))
    begin
    begin
      if (error_frame & (~enable_error_cnt2) & (sampled_bit == sampled_bit_q))
      if (error_frame & (~enable_error_cnt2) & (sampled_bit == sampled_bit_q))
        passive_cnt <=#Tp passive_cnt + 1'b1;
        passive_cnt <=#Tp passive_cnt + 1'b1;
Line 1551... Line 1528...
// Transmitting overload frame.
// Transmitting overload frame.
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    overload_frame <= 1'b0;
    overload_frame <= 1'b0;
  else if (reset_mode | overload_frame_ended | go_error_frame)
  else if (overload_frame_ended | go_error_frame)
    overload_frame <=#Tp 1'b0;
    overload_frame <=#Tp 1'b0;
  else if (go_overload_frame)
  else if (go_overload_frame)
    overload_frame <=#Tp 1'b1;
    overload_frame <=#Tp 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    overload_cnt1 <= 3'd0;
    overload_cnt1 <= 3'd0;
  else if (reset_mode | overload_frame_ended | go_error_frame | go_overload_frame)
  else if (overload_frame_ended | go_error_frame | go_overload_frame)
    overload_cnt1 <=#Tp 3'd0;
    overload_cnt1 <=#Tp 3'd0;
  else if (overload_frame & tx_point & (overload_cnt1 < 3'd7))
  else if (overload_frame & tx_point & (overload_cnt1 < 3'd7))
    overload_cnt1 <=#Tp overload_cnt1 + 1'b1;
    overload_cnt1 <=#Tp overload_cnt1 + 1'b1;
end
end
 
 
Line 1576... Line 1553...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    enable_overload_cnt2 <= 1'b0;
    enable_overload_cnt2 <= 1'b0;
  else if (reset_mode | overload_frame_ended | go_error_frame | go_overload_frame)
  else if (overload_frame_ended | go_error_frame | go_overload_frame)
    enable_overload_cnt2 <=#Tp 1'b0;
    enable_overload_cnt2 <=#Tp 1'b0;
  else if (overload_frame & (overload_flag_over & sampled_bit))
  else if (overload_frame & (overload_flag_over & sampled_bit))
    enable_overload_cnt2 <=#Tp 1'b1;
    enable_overload_cnt2 <=#Tp 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    overload_cnt2 <= 3'd0;
    overload_cnt2 <= 3'd0;
  else if (reset_mode | overload_frame_ended | go_error_frame | go_overload_frame)
  else if (overload_frame_ended | go_error_frame | go_overload_frame)
    overload_cnt2 <=#Tp 3'd0;
    overload_cnt2 <=#Tp 3'd0;
  else if (enable_overload_cnt2 & tx_point)
  else if (enable_overload_cnt2 & tx_point)
    overload_cnt2 <=#Tp overload_cnt2 + 1'b1;
    overload_cnt2 <=#Tp overload_cnt2 + 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    overload_request_cnt <= 2'b0;
    overload_request_cnt <= 2'b0;
  else if (reset_mode | go_error_frame | go_rx_id1)
  else if (go_error_frame | go_rx_id1)
    overload_request_cnt <=#Tp 2'b0;
    overload_request_cnt <=#Tp 2'b0;
  else if (overload_request & overload_frame)
  else if (overload_request & overload_frame)
    overload_request_cnt <=#Tp overload_request_cnt + 1'b1;
    overload_request_cnt <=#Tp overload_request_cnt + 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    overload_frame_blocked <= 1'b0;
    overload_frame_blocked <= 1'b0;
  else if (reset_mode | go_error_frame | go_rx_id1)
  else if (go_error_frame | go_rx_id1)
    overload_frame_blocked <=#Tp 1'b0;
    overload_frame_blocked <=#Tp 1'b0;
  else if (overload_request & overload_frame & overload_request_cnt == 2'h2)   // This is a second sequential overload_request
  else if (overload_request & overload_frame & overload_request_cnt == 2'h2)   // This is a second sequential overload_request
    overload_frame_blocked <=#Tp 1'b1;
    overload_frame_blocked <=#Tp 1'b1;
end
end
 
 
Line 1908... Line 1885...
 
 
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_ended | reset_mode)
  else if (go_rx_idle | error_frame_ended)
    arbitration_lost <=#Tp 1'b0;
    arbitration_lost <=#Tp 1'b0;
  else if (transmitter & sample_point & tx & arbitration_field & ~sampled_bit)
  else if (transmitter & sample_point & tx & arbitration_field & ~sampled_bit)
    arbitration_lost <=#Tp 1'b1;
    arbitration_lost <=#Tp 1'b1;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    begin
 
      arbitration_lost_q <=#Tp 1'b0;
 
      read_arbitration_lost_capture_reg_q <=#Tp 1'b0;
 
    end
 
  else if (reset_mode)
 
    begin
 
      arbitration_lost_q <=#Tp 1'b0;
      arbitration_lost_q <=#Tp 1'b0;
      read_arbitration_lost_capture_reg_q <=#Tp 1'b0;
 
    end
 
  else
  else
    begin
 
      arbitration_lost_q <=#Tp arbitration_lost;
      arbitration_lost_q <=#Tp arbitration_lost;
      read_arbitration_lost_capture_reg_q <=#Tp read_arbitration_lost_capture_reg;
 
    end
    end
 
 
 
 
 
always @ (posedge clk or posedge rst)
 
begin
 
  if (rst)
 
    arbitration_field_d <=#Tp 1'b0;
 
  else if (sample_point)
 
    arbitration_field_d <=#Tp arbitration_field;
end
end
 
 
 
 
assign set_arbitration_lost_irq = arbitration_lost & (~arbitration_lost_q) & (~arbitration_blocked);
assign set_arbitration_lost_irq = arbitration_lost & (~arbitration_lost_q) & (~arbitration_blocked);
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    arbitration_cnt_en <= 1'b0;
    arbitration_cnt <= 5'h0;
  else if (reset_mode || arbitration_blocked)
  else if (sample_point && !bit_de_stuff)
    arbitration_cnt_en <=#Tp 1'b0;
    if (arbitration_field_d)
  else if (rx_id1 & sample_point & (~arbitration_blocked))
      arbitration_cnt <=#Tp arbitration_cnt + 1'b1;
    arbitration_cnt_en <=#Tp 1'b1;
    else
 
      arbitration_cnt <=#Tp 5'h0;
end
end
 
 
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    arbitration_blocked <= 1'b0;
    arbitration_lost_capture <= 5'h0;
  else if (reset_mode || read_arbitration_lost_capture_reg)
 
    arbitration_blocked <=#Tp 1'b0;
 
  else if (set_arbitration_lost_irq)
  else if (set_arbitration_lost_irq)
    arbitration_blocked <=#Tp 1'b1;
    arbitration_lost_capture <=#Tp arbitration_cnt;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    arbitration_lost_capture <= 5'h0;
    arbitration_blocked <= 1'b0;
  else if (read_arbitration_lost_capture_reg_q)
  else if (read_arbitration_lost_capture_reg)
    arbitration_lost_capture <=#Tp 5'h0;
    arbitration_blocked <=#Tp 1'b0;
  else if (sample_point & (~arbitration_blocked) & arbitration_cnt_en & (~bit_de_stuff))
  else if (set_arbitration_lost_irq)
    arbitration_lost_capture <=#Tp arbitration_lost_capture + 1'b1;
    arbitration_blocked <=#Tp 1'b1;
end
end
 
 
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    rx_err_cnt <= 9'h0;
    rx_err_cnt <= 9'h0;
  else if (we_rx_err_cnt & (~node_bus_off))
  else if (we_rx_err_cnt & (~node_bus_off))
Line 2063... Line 2035...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bus_free_cnt <= 4'h0;
    bus_free_cnt <= 4'h0;
  else if (reset_mode)
 
    bus_free_cnt <=#Tp 4'h0;
 
  else if (sample_point)
  else if (sample_point)
    begin
    begin
      if (sampled_bit & bus_free_cnt_en & (bus_free_cnt < 4'd10))
      if (sampled_bit & bus_free_cnt_en & (bus_free_cnt < 4'd10))
        bus_free_cnt <=#Tp bus_free_cnt + 1'b1;
        bus_free_cnt <=#Tp bus_free_cnt + 1'b1;
      else
      else
Line 2090... Line 2060...
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    bus_free <= 1'b0;
    bus_free <= 1'b0;
  else if (reset_mode)
  else if (sample_point & sampled_bit & (bus_free_cnt==4'd10) && waiting_for_bus_free)
    bus_free <= 1'b0;
 
  else if (sample_point & sampled_bit & (bus_free_cnt==4'd10))
 
    bus_free <=#Tp 1'b1;
    bus_free <=#Tp 1'b1;
  else
  else
    bus_free <=#Tp 1'b0;
    bus_free <=#Tp 1'b0;
end
end
 
 
 
 
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    waiting_for_bus_free <= 1'b1;
    waiting_for_bus_free <= 1'b1;
  else if (reset_mode)
 
    waiting_for_bus_free <= 1'b1;
 
  else if (bus_free & (~node_bus_off))
  else if (bus_free & (~node_bus_off))
    waiting_for_bus_free <=#Tp 1'b0;
    waiting_for_bus_free <=#Tp 1'b0;
  else if ((~reset_mode) & reset_mode_q | node_bus_off_q & (~reset_mode))
  else if (node_bus_off_q & (~reset_mode))
    waiting_for_bus_free <=#Tp 1'b1;
    waiting_for_bus_free <=#Tp 1'b1;
end
end
 
 
 
 
assign bus_off_on = ~node_bus_off;
assign bus_off_on = ~node_bus_off;

powered by: WebSVN 2.1.0

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