Case 1) Preemptible frame which got fragmented.
- Idle -> preemptible frame when:
- PRE_FRAME is set before first data push
- preemptible -> frag when
- EOF_MCRC_REQ is set after the last data is pushed into TX L2 FIFO and before TX L1 FIFO is empty
- frag -> frag when
- PRE_FRAME is set before first data push and EOF_MCRC_REQ is set after the last data is pushed into TX L2 FIFO and before TX L1 FIFO is empty
- frag -> Ifrag when:
- PRE_FRAME is set before first data push and TX_EOF_REQ set after the last data is pushed into TX L2 FIFO and before TX L1 FIFO is empty
- Ifrag -> Idle when CRC is pushed into TX L1 FIFO
Case 2) Preemptible frame which did not get fragmented.
- Idle -> preemptible frame when:
- PRE_FRAME is set before first data push
- preemptible -> Idle when
- TX_EOF_REQ is set before TX L1 FIFO is empty
Note: Express frames can and will occur between the fragments.
Rules:
- Preemptible must get set before the first data is pushed into TX L2 FIFO
- EOF_MCRC_REQ is set after the last data is pushed into TX L2 FIFO and before TX L1 FIFO is empty
- TX_EOF_REQ can only get asserted on the last frag or preemptible frame which did not get fragmented. It can not get asserted in none last fragments.
Note: TX_EOF_REQ can not get asserted when EOF_MCRC_REQ is asserted.