
The Controller Area Network (CAN) is a serial communications protocol which efficiently supports distributed real-time control with a high level of security. Largely employed in automotive electronics, CAN is also employed in applications ranging from high-speed networks to low-cost multiplex wiring.
The CAN bus has the following desirable properties:
The CAN 2.0 Network Controller core is not limited to any vendor specific implementation. Versions are available for all major FPGA vendors, and can be created for any custom ASIC application. The following table shows typical resource requirements for an implementation.
AMD Utilization Report
Family | FFs | LUTs | BRAMs (18K) |
---|---|---|---|
Virtex-7 | 890 | 991 | 0 |
UltraScale | 891 | 986 | 0 |
Altera Utilization Report
Family | ALMs | FFs | LUTs | BRAMs (20K) |
---|---|---|---|---|
Agilex 5 | 849 | 1098 | 1057 | 2 |
The CAN core consists of the following blocks.
Figure 1 – CAN Interface Block Diagram
The external CPU accesses the CAN core through a generic microprocessor interface (address, data, control, interrupt). All internal registers and data buffers are provided through this interface. The register map and bit definitions are modeled after the SJA1000 standalone controller (see Table 2). Messages to be transmitted are written by the CPU to the transmit buffer. The CAN core then handles all aspects of the transmission, generating a programmable interrupt on completion or failure. Messages received by the core are placed in the receive buffer. The receive buffer is a 64 byte circular buffer, allowing up to 5 extended frame messages to be received without CPU intervention. As the CPU reads each message that buffer space is made available for more incoming data. If the buffer is empty, the first received message can generate a programmable interrupt. Received messages are first compared against the acceptance filter. Only messages meeting the acceptance criteria of the filter are placed in the message buffer. In this way traffic not intended for this node is filtered out without CPU intervention.
Optional wrappers are available to connect to standard PLB, AXI, and Avalon local interfaces.