IXP1200 Network Processor Family ATM OC-3/12/Ethernet IP Router Example Design
Application Note 29
Modified on: 3/20/02,

3.7.2 CRC -32 Checker and Generator High Level Algorithm

The PDUs within each VC on each port are enqueued on the output in the same order that they
were dequeued from the input.

3.7.3 CRC-32 Computation

CRC-32 computation is performed by the calculate_crc32() macro in atm_aal5_crc32lib.uc.
The data stream is used to index tables of pre-computed CRC-32 results. The results are combined
serially to produce the CRC-32 for the entire AAL5 PDU.
The lookup tables are generated by code in atm_aal5_crc32_table.c. In simulation, the code
produces files that contain the tables and are downloaded into SRAM by startup scripts.
For hardware, the tables are generated by the same code running on the StrongARM core, but
rather than creating files, the tables are written directly to memory.
4.0 Software Subsystems & Data Structures

4.1 Virtual Circuit Lookup Table - atm_vc_table.uc

4.1.1 VC Table Function

The ATM receive microengine uses a VC Lookup Table to manage reassembly of cells into PDUs.
The virtual circuit address bits in each cell header, plus the receive port number, uniquely specify a
VC table entry for that VC. ATM Receive performs a VC Lookup to qualify every cell received.
The lookup returns the VC Lookup Table Entry structure with the format shown in Figure 23 and
Figure 24.
Figure 20. CRC-32 High Level Algorithm
// CRC Checker
while(1)
dequeue PDU from CRC CHK BDQ
calculate_crc() over entire PDU
if (AAL5 trailer CRC == calculated CRC)
enqueue PDU onto Ethernet Transmit packet queue
else
drop PDU
endif
//CRC Generator
while(1)
dequeue PDU from CRC GEN BDQ
calculate_crc() over entire PDU
write calculated CRC into AAL5 trailer in DRAM data buffer
enqueue PDU onto ATM TX UBR BDQ