80
3.0 Functional Description
3.5 Reassembly Coprocessor
Bt8230
ATM Segmentation and Reassembly Controller—SAR
N8230DS1F
eliminates, on the average, all but ([1/(2N)] times the number of VCCs) possibili-
ties immediately. This allows a much faster VCC lookup.
Using the Bt8230, system designers can make design trade-offs between per-
formance and memory size. Memory size can be reduced by limiting the number
of outstanding VCCs, and by choosing a small hash table. Performance is opti-
mized by using larger hash tables, which reduces the frequency of hash collisions
and average hash bucket chain depth.
Strategic setup and management of the hash buckets can also improve system
performance. High throughput channels should be placed at the beginning of hash
chains, since they receive a greater number of cells. The linked list structure of
the hash buckets facilitates dynamic management as VCCs are set up and torn
down.
The hash algorithm employed in the Bt8230 is optimized for User Network
Interface (UNI). However, due to the comparison of the full 32-bit header when
searching the hash bucket chain, the Bt8230 is capable of channel discrimination
of the extended VPI field of the Network Node Interface (NNI).
If possible, VPI/VCI pairs should be chosen to minimize hash collisions,
although this may not be feasible in a complex network. However, if a contiguous
range of VPI/VCI pairs is chosen, the hashing algorithm implemented in the
Bt8230 ensures that each pair resolves to a unique hash index even to the maxi-
mum size of the hash table (maximum 16,384 entries).
3.5.2.4 Hashing
Structures
At initialization, all hash table entries that have not been written with a pointer
should be set to NULL. At this time, a hash bucket can be created to “catch”
unrecognized headers. This bucket should be at the end of ALL hash bucket
chains. It should be set up with a mask that ensures all headers will satisfy the
matching condition. System designers can direct the Bt8230 to write all 52 bytes
of the cell (including the header) to memory by setting the 52_EN bit in the hash
bucket entry to a logic one. This allows the channel to be identified and recog-
nized by software.
Adding Hash Buckets
The sequence used to add a hash bucket into a hash bucket chain is:
1
Fill out the hash bucket.
2
If this is the last bucket in the chain, fill out the NEXT pointer in the hash
bucket to NULL.
3
If this is not the last bucket in the chain, fill out the NEXT pointer in the
hash bucket with the pointer to the bucket you want AFTER it in the chain.
4
In the bucket BEFORE it in the chain, write the NEXT pointer to the
newly created bucket.
5
If the hash bucket being added is the first, write the pointer TO the added
bucket into the hash table entry (RM_HBASE + x).
Deleting Hash Buckets
The sequence used to delete a hash bucket from a hash bucket chain is:
1
If this is the last bucket in the chain, write the NEXT pointer in the hash
bucket or hash table entry before the bucket being deleted to NULL.
2
If this is not the last bucket in the chain, write the NEXT pointer in the
hash bucket or hash table entry before the bucket being deleted to point to
the bucket following the deleted hash bucket.
Both the adding and deleting of hash buckets can be performed without inter-
rupting the reassembly process.