feat: add native axi_to_apb converter#431
Open
fischeti wants to merge 1 commit into
Open
Conversation
5f66dd6 to
9e222cd
Compare
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.
This PR adds a native
axi_to_apbconverter, which supports both downsizing datawidth and truncating the address.Current situation
It is already possible now to convert from AXI to APB but multiple modules are needed like 1)
axi_to_axi_lite ─▶ axi_lite_to_apbor 2)axi_to_reg ─▶ reg_to_apb. Both add intermediate protocol signals and generally make the code more verbose. Further, 2) uses a non-standard protocol and pulls inregister_interfaceas a dependency.Also, 1) has the disadvantage that it pulls in a
axi_to_axi_litewhich has relatively heavy burst splitter and other components, which is overkill to convert to APB. Further, neitheraxi_to_axi_litenoraxi_lite_to_apballow to natively downsize the datawidth, hence aaxi_lite_dw_converteris also needed.Exploration
I prototyped three ways to bridge AXI4+ATOP to APB4 and compared area (post-synth, gate equivalents):
axi_to_axi_lite→axi_lite_dw_converter→axi_lite_to_apbchainaxi_to_detailed_mem+ inline APB master (this PR)The AXI4-Lite chain was the heaviest: it drags in burst splitting, and a Lite data-width converter.
A fully native FSM was the smallest (~10% below the chosen option), but it was vibecoded so not proven logic, and code complexity is higher.
The chosen
axi_to_detailed_mem+ inline APB master sits in between: it reusesaxi_to_detailed_memthe AXI conversion. It is ~20% smaller than the Lite chain.Verification
The adapter is verified with a
tb_axi_to_apbtestbench, that checks the APB interface for protocol compliancy, as well as an AXI scoreboard to check for correct data. I also added different types of slaves (ideal, random) to simulate backpressure.