I have created a peripheral that interacts with XPS_LL_TEMAC via the LocalLink interface. I am trying to simulate to verify correct functionality. The RX side (TEMAC->my peripheral) seems to work fine, but I am having trouble on the TX side. I have followed the LocalLink timing diagrams given in the XPS_LL_TEMAC docs. I created a simple UDP packet (hard coded) to be sucked down into the TEMAC across the LocalLink. The LocalLink transfer looks ok, but then the TEMAC never sends anything over the GMII interface.
In the TC register, I have set TX to 1 and FCS to 0.
Are there more register settings I should check?
Is there any internal state that would be helpful to probe, to try to see where the hangup is?
Investigating further, I found that a FIFO buried in XPS_LL_TEMAC that appeared to hook the LLink interface to the TEMAC core appeared to be missing the first two words of the actual payload (after the header) when it got sucked down the LocalLink bus. For the heck of it, I tried transmitting 10 dummy header words ahead of the payload, instead of the specified 8. Amazingly, my packet now gets sent out of the GMII interface.
Am I somehow misunderstanding the spec? Looking at the HDL for the XPS_LL_FIFO peripheral does seem to indicate something fishy going on between the 8 dummy header words and when the payload starts... it looks like there is a delay state there or something.
So am I missing something or is there a problem with the timing diagram in the XPS_LL_TEMAC spec?