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

Subversion Repositories can

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

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

Rev 11 Rev 12
Line 43... Line 43...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.4  2003/01/08 02:10:53  mohor
 
// Acceptance filter added.
 
//
// Revision 1.3  2002/12/28 04:13:23  mohor
// Revision 1.3  2002/12/28 04:13:23  mohor
// Backup version.
// Backup version.
//
//
// Revision 1.2  2002/12/27 00:12:52  mohor
// Revision 1.2  2002/12/27 00:12:52  mohor
// Header changed, testbench improved to send a frame (crc still missing).
// Header changed, testbench improved to send a frame (crc still missing).
Line 75... Line 78...
 
 
  /* Mode register */
  /* Mode register */
  reset_mode,
  reset_mode,
  acceptance_filter_mode,
  acceptance_filter_mode,
 
 
  /* Clock Divider register */
  // Clock Divider register
  extended_mode,
  extended_mode,
 
 
  rx_idle,
  rx_idle,
 
 
  /* This section is for BASIC and EXTENDED mode */
  /* This section is for BASIC and EXTENDED mode */
Line 504... Line 507...
    tmp_fifo[byte_cnt] <=#Tp tmp_data;
    tmp_fifo[byte_cnt] <=#Tp tmp_data;
end
end
 
 
 
 
 
 
 
 
// CRC
// CRC
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    crc_in <= 0;
    crc_in <= 0;
Line 611... Line 613...
// CRC error generation
// CRC error generation
always @ (posedge clk or posedge rst)
always @ (posedge clk or posedge rst)
begin
begin
  if (rst)
  if (rst)
    crc_error <= 0;
    crc_error <= 0;
  else if (sample_point & rx_crc_lim)
  else if (go_rx_ack)
    crc_error <=#Tp crc_in != calculated_crc;
    crc_error <=#Tp crc_in != calculated_crc;
  else if (reset_mode | rx_eof)
  else if (reset_mode | rx_eof)
    crc_error <=#Tp 0;
    crc_error <=#Tp 0;
end
end
 
 
Line 648... Line 650...
 
 
  /* Mode register */
  /* Mode register */
  .reset_mode(reset_mode),
  .reset_mode(reset_mode),
  .acceptance_filter_mode(acceptance_filter_mode),
  .acceptance_filter_mode(acceptance_filter_mode),
 
 
 
  // Clock Divider register
  .extended_mode(extended_mode),
  .extended_mode(extended_mode),
 
 
  /* This section is for BASIC and EXTENDED mode */
  /* This section is for BASIC and EXTENDED mode */
  /* Acceptance code register */
  /* Acceptance code register */
  .acceptance_code_0(acceptance_code_0),
  .acceptance_code_0(acceptance_code_0),
Line 687... Line 690...
 
 
);
);
 
 
 
 
 
 
 
reg [3:0] wr_fifo_cnt;    // Counting the data written in FIFO
 
 
 
reg wr_fifo_normal_mode;    // Write fifo when in normal mode (clock divider register)
 
reg wr_fifo_ext_mode_std;   // Write fifo when in extended mode (clock divider register) and receiving standard format msg
 
reg wr_fifo_ext_mode_ext;   // Write fifo when in extended mode (clock divider register) and receiving extended format msg
 
 
 
wire reset_wr_fifo_normal_mode;
 
 
 
wire [3:0] total_rx_byte = (data_len < 8)? data_len : 4'h8;
 
 
 
 
 
 
 
 
 
 
 
assign reset_wr_fifo_normal_mode = wr_fifo_cnt == (1'b1 + total_rx_byte);
 
 
 
always @ (posedge clk or posedge rst)
 
begin
 
  if (rst)
 
    wr_fifo_normal_mode <= 1'b0;
 
  if (go_rx_ack_lim & (~extended_mode) & id_ok & (~crc_error))
 
    wr_fifo_normal_mode <=#Tp 1'b1;
 
  else if (reset_wr_fifo_normal_mode)
 
    wr_fifo_normal_mode <=#Tp 1'b0;
 
end
 
 
 
 
 
always @ (posedge clk or posedge rst)
 
begin
 
  if (rst)
 
    wr_fifo_cnt <= 0;
 
  if (wr_fifo_normal_mode)
 
    wr_fifo_cnt <=#Tp wr_fifo_cnt + 1;
 
  else if (reset_wr_fifo_normal_mode)
 
    wr_fifo_cnt <=#Tp 0;
 
end
 
 
 
 
 
reg [7:0] data_for_fifo;
 
always @ (extended_mode or ide or tmp_fifo or wr_fifo_cnt)
 
begin
 
  if (extended_mode)      // extended mode
 
    begin
 
      if (ide)              // extended format
 
        begin
 
          case (wr_fifo_cnt)            // synopsys parallel_case synopsys full_case
 
            4'h0  : data_for_fifo <= {1'b1, rtr2, 2'h0, data_len};
 
            4'h1  : data_for_fifo <= id[28:21];
 
            4'h2  : data_for_fifo <= id[20:13];
 
            4'h3  : data_for_fifo <= id[12:5];
 
            4'h4  : data_for_fifo <= {id[4:0], 3'h0};
 
            4'h5  : data_for_fifo <= tmp_fifo[0];
 
            4'h6  : data_for_fifo <= tmp_fifo[1];
 
            4'h7  : data_for_fifo <= tmp_fifo[2];
 
            4'h8  : data_for_fifo <= tmp_fifo[3];
 
            4'h9  : data_for_fifo <= tmp_fifo[4];
 
            4'hA  : data_for_fifo <= tmp_fifo[5];
 
            4'hB  : data_for_fifo <= tmp_fifo[6];
 
            4'hC  : data_for_fifo <= tmp_fifo[7];
 
          endcase
 
        end
 
      else                  // standard format
 
        begin
 
          case (wr_fifo_cnt)            // synopsys parallel_case synopsys full_case
 
            4'h0  : data_for_fifo <= {1'b0, rtr1, 2'h0, data_len};
 
            4'h1  : data_for_fifo <= id[10:3];
 
            4'h2  : data_for_fifo <= {id[2:0], 5'h0};
 
            4'h3  : data_for_fifo <= tmp_fifo[0];
 
            4'h4  : data_for_fifo <= tmp_fifo[1];
 
            4'h5  : data_for_fifo <= tmp_fifo[2];
 
            4'h6  : data_for_fifo <= tmp_fifo[3];
 
            4'h7  : data_for_fifo <= tmp_fifo[4];
 
            4'h8  : data_for_fifo <= tmp_fifo[5];
 
            4'h9  : data_for_fifo <= tmp_fifo[6];
 
            4'hA  : data_for_fifo <= tmp_fifo[7];
 
          endcase
 
        end
 
    end
 
  else                    // normal mode
 
    begin
 
      case (wr_fifo_cnt)            // synopsys parallel_case synopsys full_case
 
        4'h0  : data_for_fifo <= id[10:3];
 
        4'h1  : data_for_fifo <= {id[2:0], rtr1, data_len};
 
        4'h2  : data_for_fifo <= tmp_fifo[0];
 
        4'h3  : data_for_fifo <= tmp_fifo[1];
 
        4'h4  : data_for_fifo <= tmp_fifo[2];
 
        4'h5  : data_for_fifo <= tmp_fifo[3];
 
        4'h6  : data_for_fifo <= tmp_fifo[4];
 
        4'h7  : data_for_fifo <= tmp_fifo[5];
 
        4'h8  : data_for_fifo <= tmp_fifo[6];
 
        4'h9  : data_for_fifo <= tmp_fifo[7];
 
      endcase
 
    end
 
end
 
 
 
/*
 
always @ (posedge clk or posedge rst)
 
begin
 
  if (write_data_to_tmp_fifo)
 
    tmp_fifo[byte_cnt] <=#Tp tmp_data;
 
end
 
 
 
 
 
 
 
// Instantiation of the RX fifo module
 
can_fifo i_can_fifo;
 
(
 
  .clk(clk),
 
  .rst(rst),
 
 
 
  .rd(rd),
 
  .wr(wr),
 
  .wr_length_info(wr_length_info),
 
 
 
  .data_in(data_in),
 
  .data_out(data_out),
 
 
 
  .reset_mode(reset_mode),
 
  .release_buffer(release_buffer),
 
 
 
  // Clock Divider register
 
  .extended_mode(extended_mode)
 
 
 
);
 
*/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
endmodule
endmodule
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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