[rtl] Add the 2x2 AXI-Stream switch - #7
Merged
Merged
Conversation
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.
Adds a 2x2 AXI-Stream switch that routes each packet on its tdest field, arbitrating per packet so beats from two sources never interleave on one output. Each output owns a round-robin arbiter and a skid buffer, and the input side asserts tready only when its granted output will take the beat that cycle. The testbench runs both sources against random destinations, forced contention on a single output, and random backpressure, checking per-flow data and tlast order, packet atomicity at each output, and output handshake stability.
The proof covers AXI-Stream compliance on all four ports, routing and mux correctness, packet atomicity, symbolic end-to-end beat delivery over a solver-chosen source, destination, and beat index, and a bounded wait per output under fair source and sink assumptions. Child instances are read as plain RTL so their own assume statements cannot constrain the switch and rig the result. Every formal task now gets its own CI job.