The receive logic assists packet preemption by performing integrity checks
on received mPackets and extracting the mPacket header fields for presentation on the
rx_preambleout[55:0]
port.
Preempted frames are signaled to the user logic by means of symmetrical
preempt and resume
tuser
flags. These signals indicate if a received packet was preempted
upstream or if it represents a continuation fragment packet.
For continuation packets, the FRAG_COUNT field, found in the
rx_preambleout
signals, indicates to the user logic that the packet must
be reassembled. Reassembly is the responsibility of the user logic.
The AXI4-Stream ERR flag is used by the MRMAC to indicate that a resumed packet has failed the mCRC check. In the event a continuation packet is received with a bad mCRC, it is left to the user logic to take appropriate action.
The RX logic supports two integrity checking modes, which are controlled through bits found in the CONFIGURATION_RX_REG register.
ctl_tx_check_sdf | ctl_rx_check_preamble | Result |
---|---|---|
1 | 1 | Strict SMD checking is enabled. In this mode, a received packet whose SMD byte does not match valid values from Table 99-1 from the IEEE 802.3-2018 (Clause 99) (see below) results in the AXI4-Stream ERR signal being asserted. |
0 | 0 | The RX preemption logic acts in pass-through mode and packets with invalid SMD values are passed through to the user logic without ERR. In this mode, received packets with SMD values not matching Table 99-1 toggles the error statistics (that is, stat_rx_bad_sfd) but not have the ERR flag asserted on the AXI interface. Note that if an SMD value not found in Table 99-1 is received, it indicates to the RX logic that the frame's FCS field must be checked against its expected CRC value, not an mCRC. |
mPacket Type | Notation | Frame Count | Value |
---|---|---|---|
verify packet | SMD-V | – | 0x07 |
respond packet | SMD-R | – | 0x19 |
express packet | SMD-E | – | 0xD5 |
preemptable packet start | SMD-S0 | 0 | 0xE6 |
SMD-S1 | 1 | 0x4C | |
SMD-S2 | 2 | 0x7F | |
SMD-S3 | 3 | 0xB3 | |
continuation fragment | SMD-C0 | 0 | 0x61 |
SMD-C1 | 1 | 0x52 | |
SMD-C2 | 2 | 0x9E | |
SMD-C3 | 3 | 0x2A |
In this example, an inbound frame (Frame A) is pre-empted by the arrival of
priority packet Frame B. Frame A resumes later with data A17. It
is the responsibility of the user logic to parse the extracted rx_preamble_out_0
to correctly re-assemble Frame A from the two segments.