phy: add a 10G PCS/PMA, with full PHY for US+ GTH and GTY transceivers - #218
phy: add a 10G PCS/PMA, with full PHY for US+ GTH and GTY transceivers#218storborg wants to merge 3 commits into
Conversation
|
From reviewing #217, it ought to be practical to combine my work and yours to work at both 5G and 10G, on both 7-series GTP/GTX and US+ GTY/GTH. Is it fair to assume that you would prefer the all-Python PCS rather than including the I think I will try to:
Side thought, it would be really cool to support auto-negotiation! |
|
@storborg This looks good! I have been using the GT{X/Y/H} transceivers in the 64b66b route for several protocols, most importantly for 10G, Aurora and some other custom protocols, similar to what you have done here mixed in with Forencich's Block Sync and LFSR code. My one recommendation would be to keep 64bit transceiver instantiation re-usable. And bonus points would be if the GT code is reconciled with the standard 20-40 bit liteiclink stuff. But this is good work, thank you! @enjoy-digital I will test this on another one of my boards to give you some more confidence if you need it. |
|
Thanks @jersey99! Your LiteEth repo was one of the few resources I could find on getting 10G operational in LiteX at all, very helpful starting point. Maybe it makes sense for the transceiver instantiations to be maintained in liteiclink instead of here? Reconciling them with the 20-40 bit liteiclink code seems difficult, and I'm not really sure what that would entail. Do you mean using the same module classes with parameter options for the data format? Or just mirroring the interface pattern? |
|
Ok, I've added a 5GBASE-R UltraScale+ implementation to this branch, and wired it into the same Alibaba KU3P testbed. It's not stress-tested yet, but it works in PMA loopback modes, and brings up a link with another 5GBASE-R device: 5GBASE-R <-> 88X3310 PHY <-> 5GBASE-T <-> AQC111U USB 3.1 interface Thanks to the PCS being identical, this was mostly just a matter of working the However, actually testing against a real hardware peer was a weird side quest into SFP+ transceiver internals! See comment here. |
…ration tests wrapping MAC/XGMII/PCS
I just went to open this PR and noticed #217, which has some pretty similar work. Nice timing! I'll dig into the differences and see if I can adapt my PR to match that.
Summary
My goal was basically to make 10GBASE-R as turnkey and "native" as 1000BASE-X on UltraScale+.
usp_gth_10g_baser.pyfile, but with some updates informed by the Vivadogt_wizardI also used Alex Forencich's
verilog-ethernetheavily for inspiration. My methodology was essentially to mirror the module architecture and interfaces, implement each module one at a time, and run equivalence checks between my blocks and Alex's. I deviated a bit from those equivalance checks in favor of compliance with 802.3ae, but in particular, kept Alex's watchdog strategy.This branch is aggressively tested in simulation and in hardware on the Alibaba KU3P board, but not yet tested on a GTH platform (I am hoping to do this soon on the Tria AUBoard-15P). I'm primarily using Vivado 2026.1 and testing to X710 and ConnectX-5 NICs.
I'm marking this as a draft PR for a few reasons:
TODO
Add a patch that can improve Etherbone stability when connected to a 10G-capable crossbarI'll do this in a separate PR to try to keep them both easier to reviewFuture Work
Investigate portability to 7-series GTXMaybe this is superseded by phy: add Artix-7 5GBASE-R support #217