-
Notifications
You must be signed in to change notification settings - Fork 234
[WIP] An applet for communicating using an Ethernet RMII/RGMII PHY #562
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[WIP] An applet for communicating using an Ethernet RMII/RGMII PHY #562
Conversation
cdb8b46 to
0c41273
Compare
|
@whitequark am thinking to build a PCB to adapt the SZFPGA board onto Glasgow. At some point this can become a addon with the PHY on board. I see these pins, I guess you're white-wiring them to Glasgow. Would you be able to share the pinout you're using so I can match it? We could then add them as defaults in the code. I will wire the MDIO, reset and clock out to the remaining 4 pins. |
9121182 to
c1ce6b0
Compare
|
I've updated the applet for modern Glasgow, although haven't yet brought it up to speed to modern Amaranth. That is pending. @TomKeddie The pinout is visible if you do I am quite interested in such a board, by the way! |
4ae9da1 to
d2a49f8
Compare
|
Updated to add RMII support. The new common Ethernet code isn't as high-performant as the old RGMII-only code, this is being investigated. |
c4e07b1 to
cd2db4d
Compare
|
Remaining work:
|
c5574a6 to
752002e
Compare
752002e to
5c7cd0c
Compare

Remaining work before I'm willing to un-draft this, in no particular order:
IODelayinto its own moduleOUT-FIFO -> TX-PACKETandIN-FIFO <- RX-PACKETstate machines into their own componentsEthernetInterfaceclass (doesn't have to beEthernetRGMIIInterfacesince it's not RGMII-specific)make host-side code more zero-copy than it is now (and dropgood enoughwritev)alternatively, dropno really it's good enoughwritevbut integrate its functionality intowriteitself (this is questionable because it's really not clear how thereadcounterpart should work, and in any case it seems like complicating the API for no good reason; this applet really should be using zero-copyread_intoandwrite_intobut adding those is actually quite challengingTo be clear, this is already an excellent MAC that easily meets or exceeds specifications of some commercial USB NICs, especially when it comes to performance under load. You can spam it with hundreds of megabits or even gigabits of UDP junk and the latency never gets above 20 ms on my laptop, usually it's under 2 ms. You can play real-time games or use ssh during that. I just have brainworms and want it to be perfect.
Things that will not get done in this PR:
See, I'm able to limit the scope :) Slightly :)
The most significant out-of-scope issues are probably 1GBASE-T support (which is relatively easy to fix and is an appealing fix because it verifies some Amaranth code) and fairness for the FX2 bus (which absolutely tanks performance if you do bidirectional spam at 100M bandwidth... which is also why I didn't post that particular benchmark :)