URL
https://opencores.org/ocsvn/can/can/trunk
Subversion Repositories can
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 63 to Rev 64
- ↔ Reverse comparison
Rev 63 → Rev 64
/trunk/rtl/verilog/can_register_asyn_syn.v
File deleted
trunk/rtl/verilog/can_register_asyn_syn.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/rtl/verilog/can_register.v
===================================================================
--- trunk/rtl/verilog/can_register.v (revision 63)
+++ trunk/rtl/verilog/can_register.v (nonexistent)
@@ -1,97 +0,0 @@
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// can_register.v ////
-//// ////
-//// ////
-//// This file is part of the CAN Protocol Controller ////
-//// http://www.opencores.org/projects/can/ ////
-//// ////
-//// ////
-//// Author(s): ////
-//// Igor Mohor ////
-//// igorm@opencores.org ////
-//// ////
-//// ////
-//// All additional information is available in the README.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2002, 2003 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//// The CAN protocol is developed by Robert Bosch GmbH and ////
-//// protected by patents. Anybody who wants to implement this ////
-//// CAN IP core on silicon has to obtain a CAN protocol license ////
-//// from Bosch. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2003/02/09 02:24:33 mohor
-// Bosch license warning added. Error counters finished. Overload frames
-// still need to be fixed.
-//
-// Revision 1.2 2002/12/27 00:12:52 mohor
-// Header changed, testbench improved to send a frame (crc still missing).
-//
-// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
-// Initial
-//
-//
-//
-
-// synopsys translate_off
-`include "timescale.v"
-// synopsys translate_on
-
-
-module can_register
-( data_in,
- data_out,
- we,
- clk
-);
-
-parameter WIDTH = 8; // default parameter of the register width
-
-input [WIDTH-1:0] data_in;
-input we;
-input clk;
-
-output [WIDTH-1:0] data_out;
-reg [WIDTH-1:0] data_out;
-
-
-
-always @ (posedge clk)
-begin
- if (we) // write
- data_out<=#1 data_in;
-end
-
-
-
-endmodule
trunk/rtl/verilog/can_register.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/rtl/verilog/can_registers.v
===================================================================
--- trunk/rtl/verilog/can_registers.v (revision 63)
+++ trunk/rtl/verilog/can_registers.v (nonexistent)
@@ -1,1187 +0,0 @@
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// can_registers.v ////
-//// ////
-//// ////
-//// This file is part of the CAN Protocol Controller ////
-//// http://www.opencores.org/projects/can/ ////
-//// ////
-//// ////
-//// Author(s): ////
-//// Igor Mohor ////
-//// igorm@opencores.org ////
-//// ////
-//// ////
-//// All additional information is available in the README.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2002, 2003 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//// The CAN protocol is developed by Robert Bosch GmbH and ////
-//// protected by patents. Anybody who wants to implement this ////
-//// CAN IP core on silicon has to obtain a CAN protocol license ////
-//// from Bosch. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.19 2003/03/10 17:34:25 mohor
-// Doubled declarations removed.
-//
-// Revision 1.18 2003/03/01 22:52:11 mohor
-// Data is latched on read.
-//
-// Revision 1.17 2003/02/19 15:09:02 mohor
-// Incomplete sensitivity list fixed.
-//
-// Revision 1.16 2003/02/19 14:44:03 mohor
-// CAN core finished. Host interface added. Registers finished.
-// Synchronization to the wishbone finished.
-//
-// Revision 1.15 2003/02/18 00:10:15 mohor
-// Most of the registers added. Registers "arbitration lost capture", "error code
-// capture" + few more still need to be added.
-//
-// Revision 1.14 2003/02/14 20:17:01 mohor
-// Several registers added. Not finished, yet.
-//
-// Revision 1.13 2003/02/12 14:25:30 mohor
-// abort_tx added.
-//
-// Revision 1.12 2003/02/11 00:56:06 mohor
-// Wishbone interface added.
-//
-// Revision 1.11 2003/02/09 02:24:33 mohor
-// Bosch license warning added. Error counters finished. Overload frames
-// still need to be fixed.
-//
-// Revision 1.10 2003/01/31 01:13:38 mohor
-// backup.
-//
-// Revision 1.9 2003/01/15 13:16:48 mohor
-// When a frame with "remote request" is received, no data is stored
-// to fifo, just the frame information (identifier, ...). Data length
-// that is stored is the received data length and not the actual data
-// length that is stored to fifo.
-//
-// Revision 1.8 2003/01/14 17:25:09 mohor
-// Addresses corrected to decimal values (previously hex).
-//
-// Revision 1.7 2003/01/14 12:19:35 mohor
-// rx_fifo is now working.
-//
-// Revision 1.6 2003/01/10 17:51:34 mohor
-// Temporary version (backup).
-//
-// Revision 1.5 2003/01/09 14:46:58 mohor
-// Temporary files (backup).
-//
-// Revision 1.4 2003/01/08 02:10:55 mohor
-// Acceptance filter added.
-//
-// Revision 1.3 2002/12/27 00:12:52 mohor
-// Header changed, testbench improved to send a frame (crc still missing).
-//
-// Revision 1.2 2002/12/26 16:00:34 mohor
-// Testbench define file added. Clock divider register added.
-//
-// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
-// Initial
-//
-//
-//
-
-// synopsys translate_off
-`include "timescale.v"
-// synopsys translate_on
-`include "can_defines.v"
-
-module can_registers
-(
- clk,
- rst,
- cs,
- we,
- addr,
- data_in,
- data_out,
- irq,
-
- sample_point,
- transmitting,
- set_reset_mode,
- node_bus_off,
- error_status,
- rx_err_cnt,
- tx_err_cnt,
- transmit_status,
- receive_status,
- tx_successful,
- need_to_tx,
- overrun,
- info_empty,
- set_bus_error_irq,
- set_arbitration_lost_irq,
- arbitration_lost_capture,
- node_error_passive,
- node_error_active,
- rx_message_counter,
-
-
- /* Mode register */
- reset_mode,
- listen_only_mode,
- acceptance_filter_mode,
- self_test_mode,
-
-
- /* Command register */
- clear_data_overrun,
- release_buffer,
- abort_tx,
- tx_request,
- self_rx_request,
- single_shot_transmission,
-
- /* Arbitration Lost Capture Register */
- read_arbitration_lost_capture_reg,
-
- /* Error Code Capture Register */
- read_error_code_capture_reg,
- error_capture_code,
-
- /* Bus Timing 0 register */
- baud_r_presc,
- sync_jump_width,
-
- /* Bus Timing 1 register */
- time_segment1,
- time_segment2,
- triple_sampling,
-
- /* Error Warning Limit register */
- error_warning_limit,
-
- /* Rx Error Counter register */
- we_rx_err_cnt,
-
- /* Tx Error Counter register */
- we_tx_err_cnt,
-
- /* Clock Divider register */
- extended_mode,
- clkout,
-
-
- /* This section is for BASIC and EXTENDED mode */
- /* Acceptance code register */
- acceptance_code_0,
-
- /* Acceptance mask register */
- acceptance_mask_0,
- /* End: This section is for BASIC and EXTENDED mode */
-
- /* This section is for EXTENDED mode */
- /* Acceptance code register */
- acceptance_code_1,
- acceptance_code_2,
- acceptance_code_3,
-
- /* Acceptance mask register */
- acceptance_mask_1,
- acceptance_mask_2,
- acceptance_mask_3,
- /* End: This section is for EXTENDED mode */
-
- /* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
- tx_data_0,
- tx_data_1,
- tx_data_2,
- tx_data_3,
- tx_data_4,
- tx_data_5,
- tx_data_6,
- tx_data_7,
- tx_data_8,
- tx_data_9,
- tx_data_10,
- tx_data_11,
- tx_data_12
- /* End: Tx data registers */
-
-
-
-
-);
-
-parameter Tp = 1;
-
-input clk;
-input rst;
-input cs;
-input we;
-input [7:0] addr;
-input [7:0] data_in;
-
-output [7:0] data_out;
-reg [7:0] data_out;
-
-output irq;
-
-input sample_point;
-input transmitting;
-input set_reset_mode;
-input node_bus_off;
-input error_status;
-input [7:0] rx_err_cnt;
-input [7:0] tx_err_cnt;
-input transmit_status;
-input receive_status;
-input tx_successful;
-input need_to_tx;
-input overrun;
-input info_empty;
-input set_bus_error_irq;
-input set_arbitration_lost_irq;
-input [4:0] arbitration_lost_capture;
-input node_error_passive;
-input node_error_active;
-input [6:0] rx_message_counter;
-
-
-
-/* Mode register */
-output reset_mode;
-output listen_only_mode;
-output acceptance_filter_mode;
-output self_test_mode;
-
-/* Command register */
-output clear_data_overrun;
-output release_buffer;
-output abort_tx;
-output tx_request;
-output self_rx_request;
-output single_shot_transmission;
-
-/* Arbitration Lost Capture Register */
-output read_arbitration_lost_capture_reg;
-
-/* Error Code Capture Register */
-output read_error_code_capture_reg;
-input [7:0] error_capture_code;
-
-/* Bus Timing 0 register */
-output [5:0] baud_r_presc;
-output [1:0] sync_jump_width;
-
-
-/* Bus Timing 1 register */
-output [3:0] time_segment1;
-output [2:0] time_segment2;
-output triple_sampling;
-
-/* Error Warning Limit register */
-output [7:0] error_warning_limit;
-
-/* Rx Error Counter register */
-output we_rx_err_cnt;
-
-/* Tx Error Counter register */
-output we_tx_err_cnt;
-
-/* Clock Divider register */
-output extended_mode;
-output clkout;
-
-
-/* This section is for BASIC and EXTENDED mode */
-/* Acceptance code register */
-output [7:0] acceptance_code_0;
-
-/* Acceptance mask register */
-output [7:0] acceptance_mask_0;
-
-/* End: This section is for BASIC and EXTENDED mode */
-
-
-/* This section is for EXTENDED mode */
-/* Acceptance code register */
-output [7:0] acceptance_code_1;
-output [7:0] acceptance_code_2;
-output [7:0] acceptance_code_3;
-
-/* Acceptance mask register */
-output [7:0] acceptance_mask_1;
-output [7:0] acceptance_mask_2;
-output [7:0] acceptance_mask_3;
-
-/* End: This section is for EXTENDED mode */
-
-/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
-output [7:0] tx_data_0;
-output [7:0] tx_data_1;
-output [7:0] tx_data_2;
-output [7:0] tx_data_3;
-output [7:0] tx_data_4;
-output [7:0] tx_data_5;
-output [7:0] tx_data_6;
-output [7:0] tx_data_7;
-output [7:0] tx_data_8;
-output [7:0] tx_data_9;
-output [7:0] tx_data_10;
-output [7:0] tx_data_11;
-output [7:0] tx_data_12;
-/* End: Tx data registers */
-
-
-reg tx_successful_q;
-reg overrun_q;
-reg overrun_status;
-reg transmission_complete;
-reg transmit_buffer_status_q;
-reg receive_buffer_status;
-reg info_empty_q;
-reg error_status_q;
-reg node_bus_off_q;
-reg node_error_passive_q;
-reg transmit_buffer_status;
-reg single_shot_transmission;
-
-reg [7:0] data_out_tmp;
-
-// Some interrupts exist in basic mode and in extended mode. Since they are in different registers they need to be multiplexed.
-wire data_overrun_irq_en;
-wire error_warning_irq_en;
-wire transmit_irq_en;
-wire receive_irq_en;
-
-wire [7:0] irq_reg;
-
-wire we_mode = cs & we & (addr == 8'd0);
-wire we_command = cs & we & (addr == 8'd1);
-wire we_bus_timing_0 = cs & we & (addr == 8'd6) & reset_mode;
-wire we_bus_timing_1 = cs & we & (addr == 8'd7) & reset_mode;
-wire we_clock_divider_low = cs & we & (addr == 8'd31);
-wire we_clock_divider_hi = we_clock_divider_low & reset_mode;
-
-wire read = cs & (~we);
-wire read_irq_reg = read & (addr == 8'd3);
-assign read_arbitration_lost_capture_reg = read & extended_mode & (addr == 8'd11);
-assign read_error_code_capture_reg = read & extended_mode & (addr == 8'd12);
-
-/* This section is for BASIC and EXTENDED mode */
-wire we_acceptance_code_0 = cs & we & reset_mode & ((~extended_mode) & (addr == 8'd4) | extended_mode & (addr == 8'd16));
-wire we_acceptance_mask_0 = cs & we & reset_mode & ((~extended_mode) & (addr == 8'd5) | extended_mode & (addr == 8'd20));
-wire we_tx_data_0 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd10) | extended_mode & (addr == 8'd16)) & transmit_buffer_status;
-wire we_tx_data_1 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd11) | extended_mode & (addr == 8'd17)) & transmit_buffer_status;
-wire we_tx_data_2 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd12) | extended_mode & (addr == 8'd18)) & transmit_buffer_status;
-wire we_tx_data_3 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd13) | extended_mode & (addr == 8'd19)) & transmit_buffer_status;
-wire we_tx_data_4 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd14) | extended_mode & (addr == 8'd20)) & transmit_buffer_status;
-wire we_tx_data_5 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd15) | extended_mode & (addr == 8'd21)) & transmit_buffer_status;
-wire we_tx_data_6 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd16) | extended_mode & (addr == 8'd22)) & transmit_buffer_status;
-wire we_tx_data_7 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd17) | extended_mode & (addr == 8'd23)) & transmit_buffer_status;
-wire we_tx_data_8 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd18) | extended_mode & (addr == 8'd24)) & transmit_buffer_status;
-wire we_tx_data_9 = cs & we & (~reset_mode) & ((~extended_mode) & (addr == 8'd19) | extended_mode & (addr == 8'd25)) & transmit_buffer_status;
-wire we_tx_data_10 = cs & we & (~reset_mode) & ( extended_mode & (addr == 8'd26)) & transmit_buffer_status;
-wire we_tx_data_11 = cs & we & (~reset_mode) & ( extended_mode & (addr == 8'd27)) & transmit_buffer_status;
-wire we_tx_data_12 = cs & we & (~reset_mode) & ( extended_mode & (addr == 8'd28)) & transmit_buffer_status;
-/* End: This section is for BASIC and EXTENDED mode */
-
-
-/* This section is for EXTENDED mode */
-wire we_interrupt_enable = cs & we & (addr == 8'd4) & extended_mode;
-wire we_error_warning_limit = cs & we & (addr == 8'd13) & reset_mode & extended_mode;
-assign we_rx_err_cnt = cs & we & (addr == 8'd14) & reset_mode & extended_mode;
-assign we_tx_err_cnt = cs & we & (addr == 8'd15) & reset_mode & extended_mode;
-wire we_acceptance_code_1 = cs & we & (addr == 8'd17) & reset_mode & extended_mode;
-wire we_acceptance_code_2 = cs & we & (addr == 8'd18) & reset_mode & extended_mode;
-wire we_acceptance_code_3 = cs & we & (addr == 8'd19) & reset_mode & extended_mode;
-wire we_acceptance_mask_1 = cs & we & (addr == 8'd21) & reset_mode & extended_mode;
-wire we_acceptance_mask_2 = cs & we & (addr == 8'd22) & reset_mode & extended_mode;
-wire we_acceptance_mask_3 = cs & we & (addr == 8'd23) & reset_mode & extended_mode;
-/* End: This section is for EXTENDED mode */
-
-
-
-always @ (posedge clk)
-begin
- tx_successful_q <=#Tp tx_successful;
- overrun_q <=#Tp overrun;
- transmit_buffer_status_q <=#Tp transmit_buffer_status;
- info_empty_q <=#Tp info_empty;
- error_status_q <=#Tp error_status;
- node_bus_off_q <=#Tp node_bus_off;
- node_error_passive_q <=#Tp node_error_passive;
-end
-
-
-
-/* Mode register */
-wire [0:0] mode;
-wire [4:1] mode_basic;
-wire [3:1] mode_ext;
-wire receive_irq_en_basic;
-wire transmit_irq_en_basic;
-wire error_irq_en_basic;
-wire overrun_irq_en_basic;
-
-can_register_asyn_syn #(1, 1'h1) MODE_REG0
-( .data_in(data_in[0]),
- .data_out(mode[0]),
- .we(we_mode),
- .clk(clk),
- .rst(rst),
- .rst_sync(set_reset_mode)
-);
-
-can_register_asyn #(4, 0) MODE_REG_BASIC
-( .data_in(data_in[4:1]),
- .data_out(mode_basic[4:1]),
- .we(we_mode),
- .clk(clk),
- .rst(rst)
-);
-
-can_register_asyn #(3, 0) MODE_REG_EXT
-( .data_in(data_in[3:1]),
- .data_out(mode_ext[3:1]),
- .we(we_mode & reset_mode),
- .clk(clk),
- .rst(rst)
-);
-
-assign reset_mode = mode[0];
-assign listen_only_mode = mode_ext[1];
-assign self_test_mode = mode_ext[2];
-assign acceptance_filter_mode = mode_ext[3];
-
-assign receive_irq_en_basic = mode_basic[1];
-assign transmit_irq_en_basic = mode_basic[2];
-assign error_irq_en_basic = mode_basic[3];
-assign overrun_irq_en_basic = mode_basic[4];
-/* End Mode register */
-
-
-/* Command register */
-wire [4:0] command;
-can_register_asyn_syn #(1, 1'h0) COMMAND_REG0
-( .data_in(data_in[0]),
- .data_out(command[0]),
- .we(we_command),
- .clk(clk),
- .rst(rst),
- .rst_sync(tx_request & sample_point)
-);
-
-can_register_asyn_syn #(1, 1'h0) COMMAND_REG1
-( .data_in(data_in[1]),
- .data_out(command[1]),
- .we(we_command),
- .clk(clk),
- .rst(rst),
- .rst_sync(abort_tx & ~transmitting)
-);
-
-can_register_asyn_syn #(2, 2'h0) COMMAND_REG
-( .data_in(data_in[3:2]),
- .data_out(command[3:2]),
- .we(we_command),
- .clk(clk),
- .rst(rst),
- .rst_sync(|command[3:2])
-);
-
-can_register_asyn_syn #(1, 1'h0) COMMAND_REG4
-( .data_in(data_in[4]),
- .data_out(command[4]),
- .we(we_command),
- .clk(clk),
- .rst(rst),
- .rst_sync(tx_successful & (~tx_successful_q) | abort_tx)
-);
-
-assign self_rx_request = command[4] & (~command[0]);
-assign clear_data_overrun = command[3];
-assign release_buffer = command[2];
-assign abort_tx = command[1] & (~command[0]) & (~command[4]);
-assign tx_request = command[0] | command[4];
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- single_shot_transmission <= 1'b0;
- else if (we_command & data_in[1] & (data_in[1] | data_in[4]))
- single_shot_transmission <=#Tp 1'b1;
- else if (tx_successful & (~tx_successful_q))
- single_shot_transmission <=#Tp 1'b0;
-end
-
-
-
-/* End Command register */
-
-
-/* Status register */
-
-wire [7:0] status;
-
-assign status[7] = node_bus_off;
-assign status[6] = error_status;
-assign status[5] = transmit_status;
-assign status[4] = receive_status;
-assign status[3] = transmission_complete;
-assign status[2] = transmit_buffer_status;
-assign status[1] = overrun_status;
-assign status[0] = receive_buffer_status;
-
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- transmission_complete <= 1'b1;
- else if (tx_successful & (~tx_successful_q) | abort_tx)
- transmission_complete <=#Tp 1'b1;
- else if (tx_request)
- transmission_complete <=#Tp 1'b0;
-end
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- transmit_buffer_status <= 1'b1;
- else if (tx_request)
- transmit_buffer_status <=#Tp 1'b0;
- else if (~need_to_tx)
- transmit_buffer_status <=#Tp 1'b1;
-end
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- overrun_status <= 1'b0;
- else if (overrun & (~overrun_q))
- overrun_status <=#Tp 1'b1;
- else if (clear_data_overrun)
- overrun_status <=#Tp 1'b0;
-end
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- receive_buffer_status <= 1'b0;
- else if (release_buffer)
- receive_buffer_status <=#Tp 1'b0;
- else if (~info_empty)
- receive_buffer_status <=#Tp 1'b1;
-end
-
-/* End Status register */
-
-
-/* Interrupt Enable register (extended mode) */
-wire [7:0] irq_en_ext;
-wire bus_error_irq_en;
-wire arbitration_lost_irq_en;
-wire error_passive_irq_en;
-wire data_overrun_irq_en_ext;
-wire error_warning_irq_en_ext;
-wire transmit_irq_en_ext;
-wire receive_irq_en_ext;
-
-can_register #(8) IRQ_EN_REG
-( .data_in(data_in),
- .data_out(irq_en_ext),
- .we(we_interrupt_enable),
- .clk(clk)
-);
-
-
-assign bus_error_irq_en = irq_en_ext[7];
-assign arbitration_lost_irq_en = irq_en_ext[6];
-assign error_passive_irq_en = irq_en_ext[5];
-assign data_overrun_irq_en_ext = irq_en_ext[3];
-assign error_warning_irq_en_ext = irq_en_ext[2];
-assign transmit_irq_en_ext = irq_en_ext[1];
-assign receive_irq_en_ext = irq_en_ext[0];
-/* End Bus Timing 0 register */
-
-
-/* Bus Timing 0 register */
-wire [7:0] bus_timing_0;
-can_register #(8) BUS_TIMING_0_REG
-( .data_in(data_in),
- .data_out(bus_timing_0),
- .we(we_bus_timing_0),
- .clk(clk)
-);
-
-assign baud_r_presc = bus_timing_0[5:0];
-assign sync_jump_width = bus_timing_0[7:6];
-/* End Bus Timing 0 register */
-
-
-/* Bus Timing 1 register */
-wire [7:0] bus_timing_1;
-can_register #(8) BUS_TIMING_1_REG
-( .data_in(data_in),
- .data_out(bus_timing_1),
- .we(we_bus_timing_1),
- .clk(clk)
-);
-
-assign time_segment1 = bus_timing_1[3:0];
-assign time_segment2 = bus_timing_1[6:4];
-assign triple_sampling = bus_timing_1[7];
-/* End Bus Timing 1 register */
-
-
-/* Error Warning Limit register */
-can_register_asyn #(8, 96) ERROR_WARNING_REG
-( .data_in(data_in),
- .data_out(error_warning_limit),
- .we(we_error_warning_limit),
- .clk(clk),
- .rst(rst)
-);
-/* End Error Warning Limit register */
-
-
-
-/* Clock Divider register */
-wire [7:0] clock_divider;
-wire clock_off;
-wire [2:0] cd;
-reg [2:0] clkout_div;
-reg [2:0] clkout_cnt;
-reg clkout_tmp;
-//reg clkout;
-
-can_register #(1) CLOCK_DIVIDER_REG_7
-( .data_in(data_in[7]),
- .data_out(clock_divider[7]),
- .we(we_clock_divider_hi),
- .clk(clk)
-);
-
-assign clock_divider[6:4] = 3'h0;
-
-can_register #(1) CLOCK_DIVIDER_REG_3
-( .data_in(data_in[3]),
- .data_out(clock_divider[3]),
- .we(we_clock_divider_hi),
- .clk(clk)
-);
-
-can_register #(3) CLOCK_DIVIDER_REG_LOW
-( .data_in(data_in[2:0]),
- .data_out(clock_divider[2:0]),
- .we(we_clock_divider_low),
- .clk(clk)
-);
-
-assign extended_mode = clock_divider[7];
-assign clock_off = clock_divider[3];
-assign cd[2:0] = clock_divider[2:0];
-
-
-
-always @ (cd)
-begin
- case (cd) // synopsys_full_case synopsys_paralel_case
- 3'b000 : clkout_div <= 0;
- 3'b001 : clkout_div <= 1;
- 3'b010 : clkout_div <= 2;
- 3'b011 : clkout_div <= 3;
- 3'b100 : clkout_div <= 4;
- 3'b101 : clkout_div <= 5;
- 3'b110 : clkout_div <= 6;
- 3'b111 : clkout_div <= 0;
- endcase
-end
-
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- clkout_cnt <= 3'h0;
- else if (clkout_cnt == clkout_div)
- clkout_cnt <=#Tp 3'h0;
- else
- clkout_cnt <= clkout_cnt + 1'b1;
-end
-
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- clkout_tmp <= 1'b0;
- else if (clkout_cnt == clkout_div)
- clkout_tmp <=#Tp ~clkout_tmp;
-end
-
-
-/*
-//always @ (cd or clk or clkout_tmp or clock_off)
-always @ (cd or clkout_tmp or clock_off)
-begin
- if (clock_off)
- clkout <=#Tp 1'b1;
-// else if (&cd)
-// clkout <=#Tp clk;
- else
- clkout <=#Tp clkout_tmp;
-end
-*/
-assign clkout = clock_off ? 1'b1 : ((&cd)? clk : clkout_tmp);
-
-
-
-/* End Clock Divider register */
-
-
-
-
-/* This section is for BASIC and EXTENDED mode */
-
-/* Acceptance code register */
-can_register #(8) ACCEPTANCE_CODE_REG0
-( .data_in(data_in),
- .data_out(acceptance_code_0),
- .we(we_acceptance_code_0),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance mask register */
-can_register #(8) ACCEPTANCE_MASK_REG0
-( .data_in(data_in),
- .data_out(acceptance_mask_0),
- .we(we_acceptance_mask_0),
- .clk(clk)
-);
-/* End: Acceptance mask register */
-/* End: This section is for BASIC and EXTENDED mode */
-
-
-/* Tx data 0 register. */
-can_register #(8) TX_DATA_REG0
-( .data_in(data_in),
- .data_out(tx_data_0),
- .we(we_tx_data_0),
- .clk(clk)
-);
-/* End: Tx data 0 register. */
-
-
-/* Tx data 1 register. */
-can_register #(8) TX_DATA_REG1
-( .data_in(data_in),
- .data_out(tx_data_1),
- .we(we_tx_data_1),
- .clk(clk)
-);
-/* End: Tx data 1 register. */
-
-
-/* Tx data 2 register. */
-can_register #(8) TX_DATA_REG2
-( .data_in(data_in),
- .data_out(tx_data_2),
- .we(we_tx_data_2),
- .clk(clk)
-);
-/* End: Tx data 2 register. */
-
-
-/* Tx data 3 register. */
-can_register #(8) TX_DATA_REG3
-( .data_in(data_in),
- .data_out(tx_data_3),
- .we(we_tx_data_3),
- .clk(clk)
-);
-/* End: Tx data 3 register. */
-
-
-/* Tx data 4 register. */
-can_register #(8) TX_DATA_REG4
-( .data_in(data_in),
- .data_out(tx_data_4),
- .we(we_tx_data_4),
- .clk(clk)
-);
-/* End: Tx data 4 register. */
-
-
-/* Tx data 5 register. */
-can_register #(8) TX_DATA_REG5
-( .data_in(data_in),
- .data_out(tx_data_5),
- .we(we_tx_data_5),
- .clk(clk)
-);
-/* End: Tx data 5 register. */
-
-
-/* Tx data 6 register. */
-can_register #(8) TX_DATA_REG6
-( .data_in(data_in),
- .data_out(tx_data_6),
- .we(we_tx_data_6),
- .clk(clk)
-);
-/* End: Tx data 6 register. */
-
-
-/* Tx data 7 register. */
-can_register #(8) TX_DATA_REG7
-( .data_in(data_in),
- .data_out(tx_data_7),
- .we(we_tx_data_7),
- .clk(clk)
-);
-/* End: Tx data 7 register. */
-
-
-/* Tx data 8 register. */
-can_register #(8) TX_DATA_REG8
-( .data_in(data_in),
- .data_out(tx_data_8),
- .we(we_tx_data_8),
- .clk(clk)
-);
-/* End: Tx data 8 register. */
-
-
-/* Tx data 9 register. */
-can_register #(8) TX_DATA_REG9
-( .data_in(data_in),
- .data_out(tx_data_9),
- .we(we_tx_data_9),
- .clk(clk)
-);
-/* End: Tx data 9 register. */
-
-
-/* Tx data 10 register. */
-can_register #(8) TX_DATA_REG10
-( .data_in(data_in),
- .data_out(tx_data_10),
- .we(we_tx_data_10),
- .clk(clk)
-);
-/* End: Tx data 10 register. */
-
-
-/* Tx data 11 register. */
-can_register #(8) TX_DATA_REG11
-( .data_in(data_in),
- .data_out(tx_data_11),
- .we(we_tx_data_11),
- .clk(clk)
-);
-/* End: Tx data 11 register. */
-
-
-/* Tx data 12 register. */
-can_register #(8) TX_DATA_REG12
-( .data_in(data_in),
- .data_out(tx_data_12),
- .we(we_tx_data_12),
- .clk(clk)
-);
-/* End: Tx data 12 register. */
-
-
-
-
-
-/* This section is for EXTENDED mode */
-
-/* Acceptance code register 1 */
-can_register #(8) ACCEPTANCE_CODE_REG1
-( .data_in(data_in),
- .data_out(acceptance_code_1),
- .we(we_acceptance_code_1),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance code register 2 */
-can_register #(8) ACCEPTANCE_CODE_REG2
-( .data_in(data_in),
- .data_out(acceptance_code_2),
- .we(we_acceptance_code_2),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance code register 3 */
-can_register #(8) ACCEPTANCE_CODE_REG3
-( .data_in(data_in),
- .data_out(acceptance_code_3),
- .we(we_acceptance_code_3),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance mask register 1 */
-can_register #(8) ACCEPTANCE_MASK_REG1
-( .data_in(data_in),
- .data_out(acceptance_mask_1),
- .we(we_acceptance_mask_1),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance mask register 2 */
-can_register #(8) ACCEPTANCE_MASK_REG2
-( .data_in(data_in),
- .data_out(acceptance_mask_2),
- .we(we_acceptance_mask_2),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* Acceptance mask register 3 */
-can_register #(8) ACCEPTANCE_MASK_REG3
-( .data_in(data_in),
- .data_out(acceptance_mask_3),
- .we(we_acceptance_mask_3),
- .clk(clk)
-);
-/* End: Acceptance code register */
-
-
-/* End: This section is for EXTENDED mode */
-
-
-
-
-// Reading data from registers
-always @ ( addr or read or extended_mode or mode or bus_timing_0 or bus_timing_1 or clock_divider or
- acceptance_code_0 or acceptance_code_1 or acceptance_code_2 or acceptance_code_3 or
- acceptance_mask_0 or acceptance_mask_1 or acceptance_mask_2 or acceptance_mask_3 or
- reset_mode or tx_data_0 or tx_data_1 or tx_data_2 or tx_data_3 or tx_data_4 or
- tx_data_5 or tx_data_6 or tx_data_7 or tx_data_8 or tx_data_9 or status or
- error_warning_limit or rx_err_cnt or tx_err_cnt or irq_en_ext or irq_reg or mode_ext or
- arbitration_lost_capture or rx_message_counter or mode_basic or error_capture_code
- )
-begin
- if(read) // read
- begin
- if (extended_mode) // EXTENDED mode (Different register map depends on mode)
- begin
- case(addr)
- 8'd0 : data_out_tmp <= {4'b0000, mode_ext[3:1], mode[0]};
- 8'd1 : data_out_tmp <= 8'h0;
- 8'd2 : data_out_tmp <= status;
- 8'd3 : data_out_tmp <= irq_reg;
- 8'd4 : data_out_tmp <= irq_en_ext;
- 8'd6 : data_out_tmp <= bus_timing_0;
- 8'd7 : data_out_tmp <= bus_timing_1;
- 8'd11 : data_out_tmp <= {3'h0, arbitration_lost_capture[4:0]};
- 8'd12 : data_out_tmp <= error_capture_code;
- 8'd13 : data_out_tmp <= error_warning_limit;
- 8'd14 : data_out_tmp <= rx_err_cnt;
- 8'd15 : data_out_tmp <= tx_err_cnt;
- 8'd16 : data_out_tmp <= acceptance_code_0;
- 8'd17 : data_out_tmp <= acceptance_code_1;
- 8'd18 : data_out_tmp <= acceptance_code_2;
- 8'd19 : data_out_tmp <= acceptance_code_3;
- 8'd20 : data_out_tmp <= acceptance_mask_0;
- 8'd21 : data_out_tmp <= acceptance_mask_1;
- 8'd22 : data_out_tmp <= acceptance_mask_2;
- 8'd23 : data_out_tmp <= acceptance_mask_3;
- 8'd24 : data_out_tmp <= 8'h0;
- 8'd25 : data_out_tmp <= 8'h0;
- 8'd26 : data_out_tmp <= 8'h0;
- 8'd27 : data_out_tmp <= 8'h0;
- 8'd28 : data_out_tmp <= 8'h0;
- 8'd29 : data_out_tmp <= {1'b0, rx_message_counter};
- 8'd31 : data_out_tmp <= clock_divider;
-
- default: data_out_tmp <= 8'h0;
- endcase
- end
- else // BASIC mode
- begin
- case(addr)
- 8'd0 : data_out_tmp <= {3'b001, mode_basic[4:1], mode[0]};
- 8'd1 : data_out_tmp <= 8'hff;
- 8'd2 : data_out_tmp <= status;
- 8'd3 : data_out_tmp <= {4'hf, irq_reg[3:0]};
- 8'd4 : data_out_tmp <= reset_mode? acceptance_code_0 : 8'hff;
- 8'd5 : data_out_tmp <= reset_mode? acceptance_mask_0 : 8'hff;
- 8'd6 : data_out_tmp <= reset_mode? bus_timing_0 : 8'hff;
- 8'd7 : data_out_tmp <= reset_mode? bus_timing_1 : 8'hff;
- 8'd10 : data_out_tmp <= reset_mode? 8'hff : tx_data_0;
- 8'd11 : data_out_tmp <= reset_mode? 8'hff : tx_data_1;
- 8'd12 : data_out_tmp <= reset_mode? 8'hff : tx_data_2;
- 8'd13 : data_out_tmp <= reset_mode? 8'hff : tx_data_3;
- 8'd14 : data_out_tmp <= reset_mode? 8'hff : tx_data_4;
- 8'd15 : data_out_tmp <= reset_mode? 8'hff : tx_data_5;
- 8'd16 : data_out_tmp <= reset_mode? 8'hff : tx_data_6;
- 8'd17 : data_out_tmp <= reset_mode? 8'hff : tx_data_7;
- 8'd18 : data_out_tmp <= reset_mode? 8'hff : tx_data_8;
- 8'd19 : data_out_tmp <= reset_mode? 8'hff : tx_data_9;
- 8'd31 : data_out_tmp <= clock_divider;
-
- default: data_out_tmp <= 8'h0;
- endcase
- end
- end
- else
- data_out_tmp <= 8'h0;
-end
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- data_out <= 0;
- else if (read)
- data_out <=#Tp data_out_tmp;
-end
-
-// Some interrupts exist in basic mode and in extended mode. Since they are in different registers they need to be multiplexed.
-assign data_overrun_irq_en = extended_mode ? data_overrun_irq_en_ext : overrun_irq_en_basic;
-assign error_warning_irq_en = extended_mode ? error_warning_irq_en_ext : error_irq_en_basic;
-assign transmit_irq_en = extended_mode ? transmit_irq_en_ext : transmit_irq_en_basic;
-assign receive_irq_en = extended_mode ? receive_irq_en_ext : receive_irq_en_basic;
-
-
-reg data_overrun_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- data_overrun_irq <= 1'b0;
- else if (overrun & (~overrun_q) & data_overrun_irq_en)
- data_overrun_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- data_overrun_irq <=#Tp 1'b0;
-end
-
-
-reg transmit_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- transmit_irq <= 1'b0;
- else if (transmit_buffer_status & (~transmit_buffer_status_q) & transmit_irq_en)
- transmit_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- transmit_irq <=#Tp 1'b0;
-end
-
-
-reg receive_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- receive_irq <= 1'b0;
- else if (release_buffer)
- receive_irq <=#Tp 1'b0;
- else if ((~info_empty) & (~receive_irq) & receive_irq_en)
- receive_irq <=#Tp 1'b1;
-end
-
-
-reg error_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- error_irq <= 1'b0;
- else if (((error_status ^ error_status_q) | (node_bus_off ^ node_bus_off_q)) & error_warning_irq_en)
- error_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- error_irq <=#Tp 1'b0;
-end
-
-
-reg bus_error_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- bus_error_irq <= 1'b0;
- else if (set_bus_error_irq & bus_error_irq_en)
- bus_error_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- bus_error_irq <=#Tp 1'b0;
-end
-
-
-reg arbitration_lost_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- arbitration_lost_irq <= 1'b0;
- else if (set_arbitration_lost_irq & arbitration_lost_irq_en)
- arbitration_lost_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- arbitration_lost_irq <=#Tp 1'b0;
-end
-
-
-
-reg error_passive_irq;
-always @ (posedge clk or posedge rst)
-begin
- if (rst)
- error_passive_irq <= 1'b0;
- else if ((node_error_passive & (~node_error_passive_q) | (~node_error_passive) & node_error_passive_q & node_error_active) & error_passive_irq_en)
- error_passive_irq <=#Tp 1'b1;
- else if (read_irq_reg)
- error_passive_irq <=#Tp 1'b0;
-end
-
-
-
-assign irq_reg = {bus_error_irq, arbitration_lost_irq, error_passive_irq, 1'b0, data_overrun_irq, error_irq, transmit_irq, receive_irq};
-
-assign irq = data_overrun_irq | transmit_irq | receive_irq | error_irq | bus_error_irq | arbitration_lost_irq | error_passive_irq;
-
-
-
-
-
-endmodule
trunk/rtl/verilog/can_registers.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/rtl/verilog/can_top.v
===================================================================
--- trunk/rtl/verilog/can_top.v (revision 63)
+++ trunk/rtl/verilog/can_top.v (nonexistent)
@@ -1,741 +0,0 @@
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// can_top.v ////
-//// ////
-//// ////
-//// This file is part of the CAN Protocol Controller ////
-//// http://www.opencores.org/projects/can/ ////
-//// ////
-//// ////
-//// Author(s): ////
-//// Igor Mohor ////
-//// igorm@opencores.org ////
-//// ////
-//// ////
-//// All additional information is available in the README.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2002, 2003 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//// The CAN protocol is developed by Robert Bosch GmbH and ////
-//// protected by patents. Anybody who wants to implement this ////
-//// CAN IP core on silicon has to obtain a CAN protocol license ////
-//// from Bosch. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.27 2003/03/12 05:56:33 mohor
-// Bidirectional port_0_i changed to port_0_io.
-// input cs_can changed to cs_can_i.
-//
-// Revision 1.26 2003/03/12 04:39:40 mohor
-// rd_i and wr_i are active high signals. If 8051 is connected, these two signals
-// need to be negated one level higher.
-//
-// Revision 1.25 2003/03/12 04:17:36 mohor
-// 8051 interface added (besides WISHBONE interface). Selection is made in
-// can_defines.v file.
-//
-// Revision 1.24 2003/03/10 17:24:40 mohor
-// wire declaration added.
-//
-// Revision 1.23 2003/03/05 15:33:13 mohor
-// tx_o is now tristated signal. tx_oen and tx_o combined together.
-//
-// Revision 1.22 2003/03/05 15:01:56 mohor
-// Top level signal names changed.
-//
-// Revision 1.21 2003/03/01 22:53:33 mohor
-// Actel APA ram supported.
-//
-// Revision 1.20 2003/02/19 15:09:02 mohor
-// Incomplete sensitivity list fixed.
-//
-// Revision 1.19 2003/02/19 15:04:14 mohor
-// Typo fixed.
-//
-// Revision 1.18 2003/02/19 14:44:03 mohor
-// CAN core finished. Host interface added. Registers finished.
-// Synchronization to the wishbone finished.
-//
-// Revision 1.17 2003/02/18 00:10:15 mohor
-// Most of the registers added. Registers "arbitration lost capture", "error code
-// capture" + few more still need to be added.
-//
-// Revision 1.16 2003/02/14 20:17:01 mohor
-// Several registers added. Not finished, yet.
-//
-// Revision 1.15 2003/02/12 14:25:30 mohor
-// abort_tx added.
-//
-// Revision 1.14 2003/02/11 00:56:06 mohor
-// Wishbone interface added.
-//
-// Revision 1.13 2003/02/09 18:40:29 mohor
-// Overload fixed. Hard synchronization also enabled at the last bit of
-// interframe.
-//
-// Revision 1.12 2003/02/09 02:24:33 mohor
-// Bosch license warning added. Error counters finished. Overload frames
-// still need to be fixed.
-//
-// Revision 1.11 2003/02/04 14:34:52 mohor
-// *** empty log message ***
-//
-// Revision 1.10 2003/01/31 01:13:38 mohor
-// backup.
-//
-// Revision 1.9 2003/01/15 13:16:48 mohor
-// When a frame with "remote request" is received, no data is stored to
-// fifo, just the frame information (identifier, ...). Data length that
-// is stored is the received data length and not the actual data length
-// that is stored to fifo.
-//
-// Revision 1.8 2003/01/14 17:25:09 mohor
-// Addresses corrected to decimal values (previously hex).
-//
-// Revision 1.7 2003/01/10 17:51:34 mohor
-// Temporary version (backup).
-//
-// Revision 1.6 2003/01/09 21:54:45 mohor
-// rx fifo added. Not 100 % verified, yet.
-//
-// Revision 1.5 2003/01/08 02:10:56 mohor
-// Acceptance filter added.
-//
-// Revision 1.4 2002/12/28 04:13:23 mohor
-// Backup version.
-//
-// Revision 1.3 2002/12/27 00:12:52 mohor
-// Header changed, testbench improved to send a frame (crc still missing).
-//
-// Revision 1.2 2002/12/26 16:00:34 mohor
-// Testbench define file added. Clock divider register added.
-//
-// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
-// Initial
-//
-//
-//
-
-// synopsys translate_off
-`include "timescale.v"
-// synopsys translate_on
-`include "can_defines.v"
-
-module can_top
-(
- `ifdef CAN_WISHBONE_IF
- wb_clk_i,
- wb_rst_i,
- wb_dat_i,
- wb_dat_o,
- wb_cyc_i,
- wb_stb_i,
- wb_we_i,
- wb_adr_i,
- wb_ack_o,
- `else
- rst_i,
- ale_i,
- rd_i,
- wr_i,
- port_0_io,
- `endif
- cs_can_i,
- clk_i,
- rx_i,
- tx_o,
- irq_o,
- clkout_o
-);
-
-parameter Tp = 1;
-
-`ifdef CAN_WISHBONE_IF
- input wb_clk_i;
- input wb_rst_i;
- input [7:0] wb_dat_i;
- output [7:0] wb_dat_o;
- input wb_cyc_i;
- input wb_stb_i;
- input wb_we_i;
- input [7:0] wb_adr_i;
- output wb_ack_o;
-
- reg wb_ack_o;
- reg cs_sync1;
- reg cs_sync2;
- reg cs_sync3;
-
- reg cs_ack1;
- reg cs_ack2;
- reg cs_ack3;
- reg cs_sync_rst1;
- reg cs_sync_rst2;
-`else
- input rst_i;
- input ale_i;
- input rd_i;
- input wr_i;
- inout [7:0] port_0_io;
-
- reg [7:0] addr_latched;
- reg wr_i_q;
- reg rd_i_q;
-`endif
-
-input cs_can_i;
-input clk_i;
-input rx_i;
-output tx_o;
-output irq_o;
-output clkout_o;
-
-reg data_out_fifo_selected;
-
-
-wire [7:0] data_out_fifo;
-wire [7:0] data_out_regs;
-
-
-/* Mode register */
-wire reset_mode;
-wire listen_only_mode;
-wire acceptance_filter_mode;
-wire self_test_mode;
-
-/* Command register */
-wire release_buffer;
-wire tx_request;
-wire abort_tx;
-wire self_rx_request;
-wire single_shot_transmission;
-
-/* Arbitration Lost Capture Register */
-wire read_arbitration_lost_capture_reg;
-
-/* Error Code Capture Register */
-wire read_error_code_capture_reg;
-wire [7:0] error_capture_code;
-
-/* Bus Timing 0 register */
-wire [5:0] baud_r_presc;
-wire [1:0] sync_jump_width;
-
-/* Bus Timing 1 register */
-wire [3:0] time_segment1;
-wire [2:0] time_segment2;
-wire triple_sampling;
-
-/* Error Warning Limit register */
-wire [7:0] error_warning_limit;
-
-/* Rx Error Counter register */
-wire we_rx_err_cnt;
-
-/* Tx Error Counter register */
-wire we_tx_err_cnt;
-
-/* Clock Divider register */
-wire extended_mode;
-
-/* This section is for BASIC and EXTENDED mode */
-/* Acceptance code register */
-wire [7:0] acceptance_code_0;
-
-/* Acceptance mask register */
-wire [7:0] acceptance_mask_0;
-/* End: This section is for BASIC and EXTENDED mode */
-
-
-/* This section is for EXTENDED mode */
-/* Acceptance code register */
-wire [7:0] acceptance_code_1;
-wire [7:0] acceptance_code_2;
-wire [7:0] acceptance_code_3;
-
-/* Acceptance mask register */
-wire [7:0] acceptance_mask_1;
-wire [7:0] acceptance_mask_2;
-wire [7:0] acceptance_mask_3;
-/* End: This section is for EXTENDED mode */
-
-/* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
-wire [7:0] tx_data_0;
-wire [7:0] tx_data_1;
-wire [7:0] tx_data_2;
-wire [7:0] tx_data_3;
-wire [7:0] tx_data_4;
-wire [7:0] tx_data_5;
-wire [7:0] tx_data_6;
-wire [7:0] tx_data_7;
-wire [7:0] tx_data_8;
-wire [7:0] tx_data_9;
-wire [7:0] tx_data_10;
-wire [7:0] tx_data_11;
-wire [7:0] tx_data_12;
-/* End: Tx data registers */
-
-wire cs;
-
-/* Output signals from can_btl module */
-wire clk_en;
-wire sample_point;
-wire sampled_bit;
-wire sampled_bit_q;
-wire tx_point;
-wire hard_sync;
-wire resync;
-
-
-/* output from can_bsp module */
-wire rx_idle;
-wire transmitting;
-wire last_bit_of_inter;
-wire set_reset_mode;
-wire node_bus_off;
-wire error_status;
-wire [7:0] rx_err_cnt;
-wire [7:0] tx_err_cnt;
-wire rx_err_cnt_dummy; // The MSB is not displayed. It is just used for easier calculation (no counter overflow).
-wire tx_err_cnt_dummy; // The MSB is not displayed. It is just used for easier calculation (no counter overflow).
-wire transmit_status;
-wire receive_status;
-wire tx_successful;
-wire need_to_tx;
-wire overrun;
-wire info_empty;
-wire set_bus_error_irq;
-wire set_arbitration_lost_irq;
-wire [4:0] arbitration_lost_capture;
-wire node_error_passive;
-wire node_error_active;
-wire [6:0] rx_message_counter;
-wire tx_out;
-wire tx_oen;
-
-wire rst;
-wire we;
-wire [7:0] addr;
-wire [7:0] data_in;
-reg [7:0] data_out;
-
-
-/* Connecting can_registers module */
-can_registers i_can_registers
-(
- .clk(clk_i),
- .rst(rst),
- .cs(cs),
- .we(we),
- .addr(addr),
- .data_in(data_in),
- .data_out(data_out_regs),
- .irq(irq_o),
-
- .sample_point(sample_point),
- .transmitting(transmitting),
- .set_reset_mode(set_reset_mode),
- .node_bus_off(node_bus_off),
- .error_status(error_status),
- .rx_err_cnt(rx_err_cnt),
- .tx_err_cnt(tx_err_cnt),
- .transmit_status(transmit_status),
- .receive_status(receive_status),
- .tx_successful(tx_successful),
- .need_to_tx(need_to_tx),
- .overrun(overrun),
- .info_empty(info_empty),
- .set_bus_error_irq(set_bus_error_irq),
- .set_arbitration_lost_irq(set_arbitration_lost_irq),
- .arbitration_lost_capture(arbitration_lost_capture),
- .node_error_passive(node_error_passive),
- .node_error_active(node_error_active),
- .rx_message_counter(rx_message_counter),
-
-
- /* Mode register */
- .reset_mode(reset_mode),
- .listen_only_mode(listen_only_mode),
- .acceptance_filter_mode(acceptance_filter_mode),
- .self_test_mode(self_test_mode),
-
- /* Command register */
- .clear_data_overrun(),
- .release_buffer(release_buffer),
- .abort_tx(abort_tx),
- .tx_request(tx_request),
- .self_rx_request(self_rx_request),
- .single_shot_transmission(single_shot_transmission),
-
- /* Arbitration Lost Capture Register */
- .read_arbitration_lost_capture_reg(read_arbitration_lost_capture_reg),
-
- /* Error Code Capture Register */
- .read_error_code_capture_reg(read_error_code_capture_reg),
- .error_capture_code(error_capture_code),
-
- /* Bus Timing 0 register */
- .baud_r_presc(baud_r_presc),
- .sync_jump_width(sync_jump_width),
-
- /* Bus Timing 1 register */
- .time_segment1(time_segment1),
- .time_segment2(time_segment2),
- .triple_sampling(triple_sampling),
-
- /* Error Warning Limit register */
- .error_warning_limit(error_warning_limit),
-
- /* Rx Error Counter register */
- .we_rx_err_cnt(we_rx_err_cnt),
-
- /* Tx Error Counter register */
- .we_tx_err_cnt(we_tx_err_cnt),
-
- /* Clock Divider register */
- .extended_mode(extended_mode),
- .clkout(clkout_o),
-
- /* This section is for BASIC and EXTENDED mode */
- /* Acceptance code register */
- .acceptance_code_0(acceptance_code_0),
-
- /* Acceptance mask register */
- .acceptance_mask_0(acceptance_mask_0),
- /* End: This section is for BASIC and EXTENDED mode */
-
- /* This section is for EXTENDED mode */
- /* Acceptance code register */
- .acceptance_code_1(acceptance_code_1),
- .acceptance_code_2(acceptance_code_2),
- .acceptance_code_3(acceptance_code_3),
-
- /* Acceptance mask register */
- .acceptance_mask_1(acceptance_mask_1),
- .acceptance_mask_2(acceptance_mask_2),
- .acceptance_mask_3(acceptance_mask_3),
- /* End: This section is for EXTENDED mode */
-
- /* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
- .tx_data_0(tx_data_0),
- .tx_data_1(tx_data_1),
- .tx_data_2(tx_data_2),
- .tx_data_3(tx_data_3),
- .tx_data_4(tx_data_4),
- .tx_data_5(tx_data_5),
- .tx_data_6(tx_data_6),
- .tx_data_7(tx_data_7),
- .tx_data_8(tx_data_8),
- .tx_data_9(tx_data_9),
- .tx_data_10(tx_data_10),
- .tx_data_11(tx_data_11),
- .tx_data_12(tx_data_12)
- /* End: Tx data registers */
-
-
-
-
-
-
-);
-
-
-
-
-
-/* Connecting can_btl module */
-can_btl i_can_btl
-(
- .clk(clk_i),
- .rst(rst),
- .rx(rx_i),
-
- /* Mode register */
- .reset_mode(reset_mode),
-
- /* Bus Timing 0 register */
- .baud_r_presc(baud_r_presc),
- .sync_jump_width(sync_jump_width),
-
- /* Bus Timing 1 register */
- .time_segment1(time_segment1),
- .time_segment2(time_segment2),
- .triple_sampling(triple_sampling),
-
- /* Output signals from this module */
- .clk_en(clk_en),
- .sample_point(sample_point),
- .sampled_bit(sampled_bit),
- .sampled_bit_q(sampled_bit_q),
- .tx_point(tx_point),
- .hard_sync(hard_sync),
- .resync(resync),
-
-
- /* output from can_bsp module */
- .rx_idle(rx_idle),
- .transmitting(transmitting),
- .last_bit_of_inter(last_bit_of_inter)
-
-
-
-);
-
-
-
-can_bsp i_can_bsp
-(
- .clk(clk_i),
- .rst(rst),
-
- /* From btl module */
- .sample_point(sample_point),
- .sampled_bit(sampled_bit),
- .sampled_bit_q(sampled_bit_q),
- .tx_point(tx_point),
- .hard_sync(hard_sync),
-
- .addr(addr),
- .data_in(data_in),
- .data_out(data_out_fifo),
- .fifo_selected(data_out_fifo_selected),
-
- /* Mode register */
- .reset_mode(reset_mode),
- .listen_only_mode(listen_only_mode),
- .acceptance_filter_mode(acceptance_filter_mode),
- .self_test_mode(self_test_mode),
-
- /* Command register */
- .release_buffer(release_buffer),
- .tx_request(tx_request),
- .abort_tx(abort_tx),
- .self_rx_request(self_rx_request),
- .single_shot_transmission(single_shot_transmission),
-
- /* Arbitration Lost Capture Register */
- .read_arbitration_lost_capture_reg(read_arbitration_lost_capture_reg),
-
- /* Error Code Capture Register */
- .read_error_code_capture_reg(read_error_code_capture_reg),
- .error_capture_code(error_capture_code),
-
- /* Error Warning Limit register */
- .error_warning_limit(error_warning_limit),
-
- /* Rx Error Counter register */
- .we_rx_err_cnt(we_rx_err_cnt),
-
- /* Tx Error Counter register */
- .we_tx_err_cnt(we_tx_err_cnt),
-
- /* Clock Divider register */
- .extended_mode(extended_mode),
-
- /* output from can_bsp module */
- .rx_idle(rx_idle),
- .transmitting(transmitting),
- .last_bit_of_inter(last_bit_of_inter),
- .set_reset_mode(set_reset_mode),
- .node_bus_off(node_bus_off),
- .error_status(error_status),
- .rx_err_cnt({rx_err_cnt_dummy, rx_err_cnt[7:0]}), // The MSB is not displayed. It is just used for easier calculation (no counter overflow).
- .tx_err_cnt({tx_err_cnt_dummy, tx_err_cnt[7:0]}), // The MSB is not displayed. It is just used for easier calculation (no counter overflow).
- .transmit_status(transmit_status),
- .receive_status(receive_status),
- .tx_successful(tx_successful),
- .need_to_tx(need_to_tx),
- .overrun(overrun),
- .info_empty(info_empty),
- .set_bus_error_irq(set_bus_error_irq),
- .set_arbitration_lost_irq(set_arbitration_lost_irq),
- .arbitration_lost_capture(arbitration_lost_capture),
- .node_error_passive(node_error_passive),
- .node_error_active(node_error_active),
- .rx_message_counter(rx_message_counter),
-
- /* This section is for BASIC and EXTENDED mode */
- /* Acceptance code register */
- .acceptance_code_0(acceptance_code_0),
-
- /* Acceptance mask register */
- .acceptance_mask_0(acceptance_mask_0),
- /* End: This section is for BASIC and EXTENDED mode */
-
- /* This section is for EXTENDED mode */
- /* Acceptance code register */
- .acceptance_code_1(acceptance_code_1),
- .acceptance_code_2(acceptance_code_2),
- .acceptance_code_3(acceptance_code_3),
-
- /* Acceptance mask register */
- .acceptance_mask_1(acceptance_mask_1),
- .acceptance_mask_2(acceptance_mask_2),
- .acceptance_mask_3(acceptance_mask_3),
- /* End: This section is for EXTENDED mode */
-
- /* Tx data registers. Holding identifier (basic mode), tx frame information (extended mode) and data */
- .tx_data_0(tx_data_0),
- .tx_data_1(tx_data_1),
- .tx_data_2(tx_data_2),
- .tx_data_3(tx_data_3),
- .tx_data_4(tx_data_4),
- .tx_data_5(tx_data_5),
- .tx_data_6(tx_data_6),
- .tx_data_7(tx_data_7),
- .tx_data_8(tx_data_8),
- .tx_data_9(tx_data_9),
- .tx_data_10(tx_data_10),
- .tx_data_11(tx_data_11),
- .tx_data_12(tx_data_12),
- /* End: Tx data registers */
-
- /* Tx signal */
- .tx(tx_out),
- .tx_oen(tx_oen)
-);
-
-assign tx_o = tx_oen? 1'bz : tx_out;
-
-
-// Multiplexing wb_dat_o from registers and rx fifo
-always @ (extended_mode or addr or reset_mode)
-begin
- if (extended_mode & (~reset_mode) & ((addr >= 8'd16) && (addr <= 8'd28)) | (~extended_mode) & ((addr >= 8'd20) && (addr <= 8'd29)))
- data_out_fifo_selected <= 1'b1;
- else
- data_out_fifo_selected <= 1'b0;
-end
-
-
-always @ (posedge clk_i)
-begin
-// if (wb_cyc_i & (~wb_we_i))
- if (cs & (~we))
- begin
- if (data_out_fifo_selected)
- data_out <=#Tp data_out_fifo;
- else
- data_out <=#Tp data_out_regs;
- end
-end
-
-
-
-`ifdef CAN_WISHBONE_IF
- // Combining wb_cyc_i and wb_stb_i signals to cs signal. Than synchronizing to clk_i clock domain.
- always @ (posedge clk_i or posedge rst)
- begin
- if (rst)
- begin
- cs_sync1 <= 1'b0;
- cs_sync2 <= 1'b0;
- cs_sync3 <= 1'b0;
- cs_sync_rst1 <= 1'b0;
- cs_sync_rst2 <= 1'b0;
- end
- else
- begin
- cs_sync1 <=#Tp wb_cyc_i & wb_stb_i & (~cs_sync_rst2) & cs_can_i;
- cs_sync2 <=#Tp cs_sync1 & (~cs_sync_rst2);
- cs_sync3 <=#Tp cs_sync2 & (~cs_sync_rst2);
- cs_sync_rst1 <=#Tp cs_ack3;
- cs_sync_rst2 <=#Tp cs_sync_rst1;
- end
- end
-
-
- assign cs = cs_sync2 & (~cs_sync3);
-
-
- always @ (posedge wb_clk_i)
- begin
- cs_ack1 <=#Tp cs_sync3;
- cs_ack2 <=#Tp cs_ack1;
- cs_ack3 <=#Tp cs_ack2;
- end
-
-
-
- // Generating acknowledge signal
- always @ (posedge wb_clk_i)
- begin
- wb_ack_o <=#Tp (cs_ack2 & (~cs_ack3));
- end
-
-
- assign rst = wb_rst_i;
- assign we = wb_we_i;
- assign addr = wb_adr_i;
- assign data_in = wb_dat_i;
- assign wb_dat_o = data_out;
-
-
-`else
-
- // Latching address
- always @ (negedge clk_i or posedge rst)
- begin
- if (rst)
- addr_latched <= 8'h0;
- else if (ale_i)
- addr_latched <=#Tp port_0_io;
- end
-
-
- // Generating delayed wr_i and rd_i signals
- always @ (posedge clk_i or posedge rst)
- begin
- if (rst)
- begin
- wr_i_q <= 1'b0;
- rd_i_q <= 1'b0;
- end
- else
- begin
- wr_i_q <=#Tp wr_i;
- rd_i_q <=#Tp rd_i;
- end
- end
-
-
- assign cs = ((wr_i & (~wr_i_q)) | (rd_i & (~rd_i_q))) & cs_can_i;
-
-
- assign rst = rst_i;
- assign we = wr_i;
- assign addr = addr_latched;
- assign data_in = port_0_io;
- assign port_0_io = (cs_can_i & rd_i)? data_out : 8'hz;
-
-`endif
-
-endmodule
Index: trunk/rtl/verilog/can_register_asyn.v
===================================================================
--- trunk/rtl/verilog/can_register_asyn.v (revision 63)
+++ trunk/rtl/verilog/can_register_asyn.v (nonexistent)
@@ -1,102 +0,0 @@
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// can_register_asyn.v ////
-//// ////
-//// ////
-//// This file is part of the CAN Protocol Controller ////
-//// http://www.opencores.org/projects/can/ ////
-//// ////
-//// ////
-//// Author(s): ////
-//// Igor Mohor ////
-//// igorm@opencores.org ////
-//// ////
-//// ////
-//// All additional information is available in the README.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2002, 2003 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//// The CAN protocol is developed by Robert Bosch GmbH and ////
-//// protected by patents. Anybody who wants to implement this ////
-//// CAN IP core on silicon has to obtain a CAN protocol license ////
-//// from Bosch. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.3 2003/02/09 02:24:33 mohor
-// Bosch license warning added. Error counters finished. Overload frames
-// still need to be fixed.
-//
-// Revision 1.2 2002/12/27 00:12:52 mohor
-// Header changed, testbench improved to send a frame (crc still missing).
-//
-// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
-// Initial
-//
-//
-//
-
-// synopsys translate_off
-`include "timescale.v"
-// synopsys translate_on
-
-
-module can_register_asyn
-( data_in,
- data_out,
- we,
- clk,
- rst
-);
-
-parameter WIDTH = 8; // default parameter of the register width
-parameter RESET_VALUE = 0;
-
-input [WIDTH-1:0] data_in;
-input we;
-input clk;
-input rst;
-
-output [WIDTH-1:0] data_out;
-reg [WIDTH-1:0] data_out;
-
-
-
-always @ (posedge clk or posedge rst)
-begin
- if (rst) // asynchronous reset
- data_out<=#1 RESET_VALUE;
- else if (we) // write
- data_out<=#1 data_in;
-end
-
-
-
-endmodule
trunk/rtl/verilog/can_register_asyn.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/rtl/verilog/can_defines.v
===================================================================
--- trunk/rtl/verilog/can_defines.v (revision 63)
+++ trunk/rtl/verilog/can_defines.v (revision 64)
@@ -1,81 +1,85 @@
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// can_defines.v ////
-//// ////
-//// ////
-//// This file is part of the CAN Protocol Controller ////
-//// http://www.opencores.org/projects/can/ ////
-//// ////
-//// ////
-//// Author(s): ////
-//// Igor Mohor ////
-//// igorm@opencores.org ////
-//// ////
-//// ////
-//// All additional information is available in the README.txt ////
-//// file. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2002, 2003 Authors ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer. ////
-//// ////
-//// This source file is free software; you can redistribute it ////
-//// and/or modify it under the terms of the GNU Lesser General ////
-//// Public License as published by the Free Software Foundation; ////
-//// either version 2.1 of the License, or (at your option) any ////
-//// later version. ////
-//// ////
-//// This source is distributed in the hope that it will be ////
-//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
-//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
-//// PURPOSE. See the GNU Lesser General Public License for more ////
-//// details. ////
-//// ////
-//// You should have received a copy of the GNU Lesser General ////
-//// Public License along with this source; if not, download it ////
-//// from http://www.opencores.org/lgpl.shtml ////
-//// ////
-//// The CAN protocol is developed by Robert Bosch GmbH and ////
-//// protected by patents. Anybody who wants to implement this ////
-//// CAN IP core on silicon has to obtain a CAN protocol license ////
-//// from Bosch. ////
-//// ////
-//////////////////////////////////////////////////////////////////////
-//
-// CVS Revision History
-//
-// $Log: not supported by cvs2svn $
-// Revision 1.5 2003/03/05 15:03:20 mohor
-// Xilinx RAM added.
-//
-// Revision 1.4 2003/03/01 22:52:47 mohor
-// Actel APA ram supported.
-//
-// Revision 1.3 2003/02/09 02:24:33 mohor
-// Bosch license warning added. Error counters finished. Overload frames
-// still need to be fixed.
-//
-// Revision 1.2 2002/12/27 00:12:52 mohor
-// Header changed, testbench improved to send a frame (crc still missing).
-//
-// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
-// Initial
-//
-//
-//
-
-
-// Uncomment following line if you want to use WISHBONE interface. Otherwise
-// 8051 interface is used.
-// `define CAN_WISHBONE_IF
-
-// Uncomment following line if you want to use CAN in Actel APA devices (embedded memory used)
-// `define ACTEL_APA_RAM
-
-// Uncomment following line if you want to use CAN in Xilinx devices (embedded memory used)
-// `define XILINX_RAM
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// can_defines.v ////
+//// ////
+//// ////
+//// This file is part of the CAN Protocol Controller ////
+//// http://www.opencores.org/projects/can/ ////
+//// ////
+//// ////
+//// Author(s): ////
+//// Igor Mohor ////
+//// igorm@opencores.org ////
+//// ////
+//// ////
+//// All additional information is available in the README.txt ////
+//// file. ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2002, 2003 Authors ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source is distributed in the hope that it will be ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
+//// PURPOSE. See the GNU Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//// The CAN protocol is developed by Robert Bosch GmbH and ////
+//// protected by patents. Anybody who wants to implement this ////
+//// CAN IP core on silicon has to obtain a CAN protocol license ////
+//// from Bosch. ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//
+// CVS Revision History
+//
+// $Log: not supported by cvs2svn $
+// Revision 1.6 2003/03/12 04:19:13 mohor
+// 8051 interface added (besides WISHBONE interface). Selection is made in
+// can_defines.v file.
+//
+// Revision 1.5 2003/03/05 15:03:20 mohor
+// Xilinx RAM added.
+//
+// Revision 1.4 2003/03/01 22:52:47 mohor
+// Actel APA ram supported.
+//
+// Revision 1.3 2003/02/09 02:24:33 mohor
+// Bosch license warning added. Error counters finished. Overload frames
+// still need to be fixed.
+//
+// Revision 1.2 2002/12/27 00:12:52 mohor
+// Header changed, testbench improved to send a frame (crc still missing).
+//
+// Revision 1.1.1.1 2002/12/20 16:39:21 mohor
+// Initial
+//
+//
+//
+
+
+// Uncomment following line if you want to use WISHBONE interface. Otherwise
+// 8051 interface is used.
+// `define CAN_WISHBONE_IF
+
+// Uncomment following line if you want to use CAN in Actel APA devices (embedded memory used)
+ `define ACTEL_APA_RAM
+
+// Uncomment following line if you want to use CAN in Xilinx devices (embedded memory used)
+// `define XILINX_RAM