VHDL port of RoCEv2 engine#1462
Draft
FilMarini wants to merge 8 commits into
Draft
Conversation
Removed loading of blue-rdma library from the script.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[WIP] VHDL port of the RoCEv2 RDMA transport-layer engine
Summary
SURF currently pulls in the RoCEv2 RDMA transport-layer engine as pre-generated
Bluespec/Verilog. This PR is an early, in-progress effort to re-implement that
same engine natively in VHDL, following the SURF coding standard (two-process
FSMs,
RegType/REG_INIT_Cregister pattern,sl/slvtyping, SURF-providedFIFOs/AXI components wherever applicable, etc.) and reusing SURF
library components instead of hand-rolled equivalents wherever one exists.
The goal is a drop-in, native-VHDL alternative to the current Bluespec-sourced
core — same protocol behavior (RC queue pairs, SQ/RQ request and response
handling, retry/NAK, DMA read/write arbitration, RDMA header generation and
parsing, etc.), but expressed directly in VHDL and integrated with SURF idioms
rather than wrapped Verilog.
This PR is being opened purely for visibility into ongoing work — it is not
ready to be merged or used.
Current status: early development, not usable yet
dependency hierarchy, so that each block's interface is verified against its
submodules before the next block up is attempted.
including top-level integration points (
TransportLayer, and an AXI-Stream/AXI-Lite wrapper
TransportLayerAxiintended to sit alongside SURF'snetworking stack).
these pass in isolated simulation. Some modules and interactions are still
unverified.
simulating the top-level wrapper against a real SoftRoCE peer over a
scapy-mediated network bridge, exercising the RC retry/NAK state machine
under induced packet loss. This has already surfaced and fixed several
correctness bugs, and continues to surface more.
questions on ambiguous BSV constructs, generic-width conventions, missing
coverage, etc.) and have not all been resolved yet.
In short: significant parts of the design translate and simulate correctly
in isolation, but end-to-end correctness, full hardware testing, and coverage
of edge cases are all still in progress. Please do not treat this as a
replacement for the existing BSV/Verilog core yet.
Why open the PR now
Mainly to make this effort visible to anyone working in this area, invite
early feedback on direction/style, and avoid duplicated work. Happy to discuss
approach, naming conventions, or how this should eventually be structured
relative to the existing core.