backend: Support OBI buses without rready (#48)#132
Draft
DanielKellerM wants to merge 1 commit into
Draft
Conversation
Some OBI configurations omit the optional rready signal, so the subordinate cannot be back-pressured on the R channel. The OBI read and write managers relied on rready to throttle responses, making them incompatible with such buses. Add an ObiUseRReady backend parameter (default 1, unchanged behaviour). When 0, insert the upstream obi_rready_converter on each OBI manager port: it absorbs responses into a FIFO and credit-throttles requests to NumAxInFlight, so the bus is never back-pressured. The iDMA OBI managers are left untouched and the default path is byte-identical.
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.
Closes #48.
Problem
Some OBI configurations omit the optional
rreadysignal (obi_cfg_t.UseRReady = 0), so the subordinate cannot be back-pressured on the R channel. iDMA's OBI read/write managers drive and rely onrreadyto throttle responses (idma_obi_read.sv:120,idma_obi_write.sv:168), making them incompatible with such buses — exactly as reported in #48.Approach
Reuse the upstream, already-verified
obi_rready_converter(OBI package) rather than reworking iDMA's datapath:ObiUseRReady(default1'b1), threadedidma_backend→idma_transport_layer→ the OBI DB template. Emitted only for variants that use OBI.ObiUseRReady = 1→ byte-identical to today (direct connect; existing users and tests unaffected).ObiUseRReady = 0→ a generate branch insertsobi_rready_converteron each OBI manager port. It buffers responses in aFALL_THROUGHFIFO (depthNumAxInFlight) and credit-throttles the A channel, so the subordinate is never back-pressured, while iDMA's managers keep usingrreadyinternally (left completely untouched).obi_a_chan_t/obi_r_chan_tare derived locally via the SVtype()operator, so no new type parameters leak into the backend interface (no break for integrators).Why the converter and not a credit counter inside the iDMA managers: an in-manager credit that returns on buffer push over-issues (the buffer may still hold undrained data, dropping a later response). The converter buffers the raw response before the byte-masking stage, which is correct regardless of buffer occupancy — and it's already verified upstream.
Verification
make idma_hw_allregenerates all OBI variants; theObiUseRReady = 1branch is the previous instantiation verbatim.bender script flist-plus):idma_backend_synth_{rw_obi,r_obi_w_axi,r_axi_w_obi}→ 0 errors;ObiUseRReady = 0path (converter live): 0 errors —obi_rready_converter,credit_counter, and thetype()-derived channel types all resolve.obi_rready_converter/credit_counterare pulled from the existingobi/common_cellsdeps — noBender.ymlchange.Remaining before merge (why this is a draft)
obi2axi_bridge→axi_sim_mem); the proper test threadsObiUseRReady = 0to the DUT and drives it fromobi_sim_memconfiguredUseRReady = 0(upstream-supported), checking data integrity + no dropped responses across thesimple/medium/error_simplejobs. The converter itself is upstream-verified, but iDMA should prove the integration in sim.Part of the iDMA 0.7.0 enhancement set; additive and default-off, so it does not gate the release.