Description
(This first comment will be updated as the porting efforts evolve and will summarize results so that others can benefit from it.)
Hi @alexforencich and all,
First off, congrats for an impresive piece. The project is not only well maintained but has grown a significant community around it. Very impressive. Congrats and kudos to @alexforencich. I'm currently involved into a project considering to port Corundum into the AMD KR260. This board leverages an AMD Zynq UltraScale+ SoC and exposes various Ethernet (Gb RGMII PL and PS) interfaces and an SFP+ connector which makes it a pretty target for benchmarking.
For now, our endeavour aims to bring ethernet-verilog up to speed into the KR260 and produce some latency performance benchmarking comparisons by leveraging a low overhead and real-time capable tracer (we'll be using LTTng on the PS side, and Vitis Profiler on the PL side).
By doing so, we hope to contribute to this project by 1)
bringing a usable port of ethernet-verilog (Corundum) for a popular FPGA SoC SOM, 2)
provide a fair and reproducible latency benchmark that compares UDP/IP networking performance (L1-L2-L3-L4) across various setups.
Media Access
Transport (UDP) Network (IP) Control (MAC) Physical layer (PHY) Media Dependent Interface (MDI)
+----------------+ +----------------+ +------------------+ +---------------------------------------+ +-------------------+
| | | | | | | PCS: Physical PMA: Physical | | |
| | | | | | | Coding Medium | | +---------+ |
| | | | | | | Sublayer Attachment | | | | |
| | | | | | | +--------------+ +-----------+ | | | | |
| | | | | | | | | | | | | | | |
<---+ <----+ <-----+ <----------+encoder<---------+serializer<-----------+ | | +---------+
| | | | | | | | | | | | | | SFP+ +<--------> cable |
| | | | | | | | | | | | | | trans. | | +---------+
| | | | | | | | | | | | | | | |
+---> +-----> +-----> +---------->decoder+--------->clk+->des+------------> | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | +--------------+ +-----------+ | | +---------+ |
| | | | | | | | | |
+----------------+ +----------------+ +------------------+ +---------------------------------------+ +-------------------+
After reading through 1, it appears that creating example designs for verilog-ethernet is the first recommended step. This ticket will thereby track progress on this regard, porting verilog-ethernet to KR260. The list below aims to lay out some of the milestones neccessary to achieve the porting goals.
Sources considered
- Source code: https://github.com/alexforencich/verilog-ethernet
- Paper https://cseweb.ucsd.edu/~snoeren/papers/corundum-fccm20.pdf
- Future of corundum https://github.com/corundum/corundum/wiki/Future-of-Corundum
- Corundum overview https://docs.corundum.io/en/latest/modules/overview.html
- Corundum porting guide https://docs.corundum.io/en/latest/porting.html
- Corundum operations, describes reception and transmission operations https://docs.corundum.io/en/latest/operations.html (:warning: useful yet complex to follow)
- K26 SOM XDC file
Related issues and past experiences
Environment used
- Vitis/Vivado release:
2022.1
- branch of repo used:
master
Contributions
- remark license need in reference design example for ZCU102 Add license need to ZCU102 reference design #147
- 10G BASE-R PHY IP reference design example KR260 Add KR260 reference design example #150
- Docker/VSCode devcontainer for simplified reproduction of results Add devcontainer environment for the repo #151
Hardware used
Milestones:
- verilog-ethernet in ZCU102 (link to example)
- inspect source code of
10G BASE-R PHY IP
example - Understand build system setup and hooks to Vivado
- Build ethernet-verilog for ZCU102 (
10G BASE-R PHY IP core
) - Test
10G BASE-R PHY
- inspect source code of
- verilog-ethernet in KR260
- Port
10G BASE-R PHY
example to the SFP+ connector -
Bring up a(skipped, focusing instead on the RGMII PHYs)1G PHY
example to the SFP+ connector - Bring up a
1G MAC
example into one of the PL Ethernet PHYs
- Port
- Latency performance benchmarking
- Produce CPU baseline by using Ethernet PHYs connected to the PS and the Linux Networking Stack (LNS)
- Benchmark
10G BASE-R PHY
example to the SFP+ connector -
Benchmark(skipped, focusing instead on the RGMII PHYs)1G PHY
example to the SFP+ connector - Benchmark
1G MAC
example into one of the PL Ethernet PHYs
Footnotes
-
Corundum porting guide https://docs.corundum.io/en/latest/porting.html ↩