|
I've been using opencores Ethernet module in my project and observed problems similar to what was reported here: http://www.nabble.com/bugs-in-ethernet-MAC-tf1043922.html Problems were more pronounced on a half-duplex link, with many collisions. I think I identified the problem with SignalTap on Altera, and fixed it. I was wondering how I can submit the fix. Basically, the problem is that sometimes RxBdAddress does not wrap around but rather goes outside the range. That is caused by improper RxStatus/RxBdReady being latched in. Depending on sequence of events, what can happen is that RxStatus/RxBdReady will be read in on the cycle immediately before RxBdAddress gets incremented, and then the pointer will be read with respect to the next BD. So RxStatus/RxBdReady will be from a different BD then the pointer; furthermore they'll be incorrect for the current BD. If this happens on the transition to the last BD, RxStatus will be latched without wraparound bit, and RxBdAddress will be incremented rather than wrapped around. The fix that works for me is this change in eth_wishbone.v: 1865c1865
< if(RxEn & RxEn_q & RxBDRead)
---
> if(RxEn & RxEn_q & RxBDRead & ~RxStatusWrite) Thanks Maxim Adelman ---- E-mailed this to Igor.
|