If a PAUSE frame is received by the GMAC, and this PAUSE frame is acted on within the GMAC, RX_BAD_FRAME is asserted to indicate that the frame should be dropped.
I have implemented a counter that counts the number of RX_BAD_FRAMEs as error indicators. The number of bad frames are reported to the administrative microprocessor. The problem is that PAUSE frames are compliant frames and should not trigger system errors.
RX_BAD_FRAME should not be used to drive an error counter. RX_BAD_FRAME is intended to indicate which frames received through the GMAC should be dropped by higher level logic. Any frame with a detected error, or a PAUSE frame that has been acted on, is indicated by the assertion of RX_BAD_FRAME.
You should only use ports contained within the RX_STATISTICS_VECTOR[21:0] or TX_STATISTICS_VECTOR[28:0] to generate statistic counters. Bit 1 of RX_STATISTICS_VECTOR[21:0] is the BAD_FRAME indicator and is only asserted for frames that contain detected errors. You should use RX_STATISTICS_VECTOR[21:0], and not RX_BAD_FRAME, to trigger statistic counters .