MPC5200B Users Guide, Rev. 1
14-40 Freescale Semiconductor
Initialization Sequence
The hash table algorithm used in the group and individual hash filtering operates as follows. The 48-bit destination address is mapped into
one of 64 bits which are represented by 64 bits stored in GADDR1,2 (group address hash match) or IADDR1,2 (individual address hash
match). This mapping is performed by passing the 48-bit address through the on-chip 32-bit CRC generator and selecting the 6 most
significant bits of the CRC-encoded result to generate a number between 0 and 63. The MSB of the CRC result selects GADDR1 (MSB = 1)
or GADDR2 (MSB = 0). The least significant 5 bits of the hash result select the bit within the selected register. If the CRC generator selects
a bit that is set in the hash table, the frame is accepted; otherwise, it is rejected.
For example, if eight group addresses are stored in the hash table and random group addresses are received, the hash table prevents roughly
56/64 (or 87.5%) of the group address frames from reaching memory. Those that do reach memory must be further filtered by the processor
to determine if they truely contain one of the eight desired addresses.
The effectiveness of the hash table declines as the number of addresses increases.
The hash table registers must be initialized by the user. The user may compute the hash for a particular address in software. The CRC32
polynomial to use in computing the hash is:
A table of example Destination Addresses and corresponding hash values is included below for reference.
Figure 14-3. Ethernet Address Recognition - microcode decisions
Receive Address
I/G Address
?
Exact Match
?
Hash Search
Group Table
Match
?
Hash Search
Individual Table
False
Match
?
False False
True True
True
NOTES:
FCE - field in R_CNTRL register (Flow Control Enable)
I/G - Individual/Group bit in Destination Address (least significant bit in first byte received in MAC frame)
Individual
Group
ar_em_b = 0
ar_hm_b = 1
True
ar_em_b = 0
ar_hm_b = 1
ar_em_b = 1
ar_hm_b = 1
ar_em_b = 1
ar_hm_b = 0
False
True
False
?
Pause Address
FCE
?
ar_em_b = 1
ar_hm_b = 0
ar_em_b = 1
ar_hm_b = 1
AR_EM_B - bit in RECV.AR_DONE register (address recognition exact match bar)
AR_HM_B - bit in RECV.AR_DONE register (address recognition hash match bar)
Recognition
X32 X26 X23 X22 X16 X12 X11 X10 X8X7X5X4X2X1++++++++++++++