← 返回首页
Docs: clarify the DW converters' burst-type support (WRAP / FIXED) — documentation gap, not a bug · Issue #429 · pulp-platform/axi · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

Docs: clarify the DW converters' burst-type support (WRAP / FIXED) — documentation gap, not a bug #429

New issue
New issue

Description

This is a documentation-clarification issue, not a bug report. The runtime behaviour is intentional and correct; only the public documentation is silent about it.

Affected: axi live HEAD e55ae2a — src/axi_dw_downsizer.sv, src/axi_dw_converter.sv, and the top-level README.md module table.

The gap

The data-width converters have real, intentional burst-type restrictions, but they are only discoverable by reading the SystemVerilog source headers — the public docs don't mention them, so a user first learns of them by getting an unexpected SLVERR (or by seeing FIXED silently become INCR downstream). Concretely: (1) the README.md module table (the entry point) describes axi_dw_converter / axi_dw_downsizer / axi_dw_upsizer purely as "a data width converter…", with no mention of burst-type support; (2) there is no per-module doc page for the DW converters under doc/ (unlike axi_xbar, axi_mux, etc.), so there is nowhere else to look; (3) the restriction is stated, but only in source headers, and even there incompletely — axi_dw_downsizer.sv (lines 18–21): WRAP → SLVERR, FIXED single-beat only, multi-beat FIXED → SLVERR; axi_dw_converter.sv (lines 14–16): "the downsizer also does not support FIXED bursts with incoming axlen != 0"; and neither header documents that a single-beat FIXED transaction requiring downsizing is re-encoded as INCR on the master (narrow) port.

The undocumented behaviour (grounded in source)

src/axi_dw_downsizer.sv (read path ~435–463, write path ~521–547):

axi_pkg::BURST_FIXED: begin if (r_req_d.ar.len == '0) begin // single beat only // ... downsize ratio math ... if (conv_ratio != 1) begin r_req_d.ar.len = r_req_d.burst_len ; r_req_d.ar.burst = axi_pkg::BURST_INCR; // <-- single-beat FIXED RE-ENCODED as INCR end end else begin r_req_d.ar_throw_error = 1'b1; // multi-beat FIXED -> SLVERR end end axi_pkg::BURST_WRAP: begin r_req_d.ar_throw_error = 1'b1; // WRAP -> SLVERR (unsupported) end

So precisely: INCR is supported at any length; WRAP is not supported → SLVERR; FIXED is supported only single-beat (axlen == 0), and multi-beat FIXED → SLVERR. A single-beat wide FIXED that needs downsizing is re-encoded as INCR on the master port — address-equivalent for one beat, but a downstream observer sees INCR, not FIXED.

Why this is NOT a bug

WRAP / multi-beat-FIXED → SLVERR is a deliberate, signalled rejection of an unsupported feature (not a silent miscompute). The single-beat FIXED → INCR re-encode is semantically correct: with exactly one beat the burst type has no observable address effect, so INCR and FIXED are equivalent at the byte level. The only gap is documentation — a user reading the README cannot discover any of this.

Proposed fix

Add a burst-type-support note to the README.md module table covering all three DW modules: INCR any length; WRAP → SLVERR; FIXED single-beat only (axlen == 0), multi-beat FIXED → SLVERR; single-beat downsized FIXED re-encoded as INCR on the master port. (Optionally also append the re-encode note to the module headers so the source is self-consistent.) A ready README-only patch (clean git apply --check at HEAD e55ae2a, placed after the module table so it renders intact) is available — happy to open a PR.

Verify

Documentation-only change — git apply --check clean at live HEAD e55ae2a; no RTL touched, no functional regression.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    • Open in GitHub Copilot app

    Footer

    © 2026 GitHub, Inc.