IXP1200 Network Processor Family ATM OC-3/12/Ethernet IP Router Example Design

The hardware byte aligner operates on the data before the CRC computation hardware. This can be seen in the transfer to quadword 0 of the TFIFO element with sdram_crc[t_fifo_wr], mask_right with a byte alignment of 2 and a CRC mask value of 4.

Quadwords 1-5 are transferred with sdram_crc[t_fifo_wr, 5] with the same alignment. For quadword 6, the processing depends upon whether or not it is the last cell of a PDU:

If quadword 6 is not the last cell, it is transferred via sdram[t_fifo_wr], mask_left, then the syndrome is extracted for use when the next cell is sent on this VC.

If quadword 6 is the last cell, the syndrome is read after quadword 5 is finished, it is inverted and transferred viat_fifo_wr[] to quadword 6 from the microengine.

In all cases, after the cell is transferred and CRC is done, the first quadword is overwritten by the microengine to insert the ATM header on the front of the cell. As the TFIFO is addressable only as quadwords, the write will also update the first four bytes of cell payload (labeled LLC0 in the example diagram). To preserve these first four payload bytes, the microengine first reads them from DRAM and combines them with the ATM header before overwriting quadword0.

As with LLC0 in the ATM receiver, this design can be optimized to take advantage of that the constant LLC0 constitutes the first four bytes of payload on the first cell of a PDU (with the initial configuration, it is enabled by default):

#define CRC32_TX_LLC0

3.7CRC-32 Checker and Generator Microengines (Soft-CRC)

The CRC-32 microengine code, "Software CRC", is needed only for IXP1200 configurations. IXP1240 or IXP1250 designs employ sdram_crc[] hardware instructions to perform the same calculation more efficiently.

In IXP1200 configurations, there are two microengines dedicated to AAL5 CRC-32 calculations:

One consumes the ATM Receive data stream and checks the CRC-32 before routing to Ethernet Transmit packet-queues.

One consumes the Ethernet Receive data stream and generates CRC-32 before forwarding to the appropriate ATM Transmit queues.

3.7.1Functional Differences between Checker and Generator

There are four functional differences between the Checker and Generator:

DRAM data buffer payload alignment: depends on if it was received from ATM or Ethernet.

Queues to be consumed.

Queues to be supplied.

CRC-32 answer - the checker compares it to the received CRC, while the Generator writes it into the AAL5 trailer.

The source code is assembled into binaries optimal for Checking or Generating based on the microengine number assignments from system_config.h.

#define CRC_CHECKER (UENGINE_ID == CRC32_CHECKER_UENGINE) #define CRC_GENERATOR(UENGINE_ID == CRC32_GENERATOR_UENGINE)

28

Application Note

Modified on: 3/20/02,

Page 28
Image 28
Intel IXP1200 CRC-32 Checker and Generator Microengines Soft-CRC, Functional Differences between Checker and Generator