Skip to content

Refactor HyperBus into asynchronous, isochronous, and synchronous variants - #36

Draft
phsauter wants to merge 13 commits into
mainfrom
phsauter/top-split-peakrdl
Draft

Refactor HyperBus into asynchronous, isochronous, and synchronous variants#36
phsauter wants to merge 13 commits into
mainfrom
phsauter/top-split-peakrdl

Conversation

@phsauter

@phsauter phsauter commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Requires #34 and #39.

This PR replaces the former monolithic HyperBus top with three clocking variants and restructures the controller into explicit frontend, midend, bridge, and backend stages. It also expands testing, hardens configuration updates, transaction segmentation, error handling, and atomic operation sequencing.

Clocking variants

  • Add hyperbus_asynchronous, which uses independent system and PHY clocks, explicit CDCs, and PHY-domain reset synchronization.
  • Add hyperbus_isochronous, which derives the PHY clock from the system clock using an integer divider and the 90-degree shift from the TX delay line.
  • Add hyperbus_synchronous, which uses one shared clock and a TX delay line to generate the required 90-degree phase shift.
  • Move the TX clock delay to the backend.

Architecture and interfaces

  • Replace the monolithic dataflow with an explicit AXI frontend -> midend -> bridge -> backend pipeline.
  • Introduce reusable command, TX, RX, and response structures for the interfaces between these stages.
  • Use clearable common_cells CDC primitives in the asynchronous bridge and lightweight isochronous crossings where the clock relationship is known.
  • Remove the obsolete phy_if layer and rename the remaining data conversion blocks to read and write adapters.
  • Move PHY-specific implementation modules into src/backend/.

Configuration and transaction control

  • Move configuration sequencing into the frontend.
  • Stop accepting new requests, drain outstanding operations, update the backend while it is idle, and resume traffic only after the update completes.
  • Add explicit flush/barrier behavior and reuse it to sequence configuration changes and atomic operations.
  • Extract atomic handling into a dedicated module.
  • Return invalid or unsupported accesses as protocol errors and record status information for diagnosis.
  • Split transactions at chip boundaries and before exceeding the HyperBus maximum CS-low duration.
  • Fix transfer control so long or slowly supplied transfers restart as additional HyperBus segments instead of stalling or violating the maximum transaction duration.

Verification

  • Exercise the asynchronous, isochronous, and synchronous tops through the common AXI testbench.
  • Cover single- and dual-PHY configurations.
  • Add directed tests for configuration barriers, decode errors, address boundaries, cross-chip bursts, and atomic operations.
  • Add maximum-size burst performance tests for read and write traffic.
  • Add deliberately slow frontend traffic that requires and directly observes HyperBus transfer segmentation.
  • Replace remaining hand-written RTL assertions with common_cells assertion macros.
  • Pass the complete Questa regression for all three tops, the synchronous single-PHY configuration, and the configuration register testbench.

@phsauter
phsauter requested a review from thommythomaso as a code owner July 21, 2026 09:33
@phsauter
phsauter marked this pull request as draft July 21, 2026 09:33
@phsauter
phsauter force-pushed the phsauter/top-split-peakrdl branch 2 times, most recently from 5b25d4e to 5be71ca Compare July 21, 2026 13:31
@phsauter
phsauter marked this pull request as ready for review July 21, 2026 14:24
@phsauter
phsauter force-pushed the phsauter/top-split-peakrdl branch 2 times, most recently from 3f6b94c to f5307bd Compare July 23, 2026 15:52
Introduce asynchronous, isochronous, and synchronous top levels around a shared backend architecture. Extend the regression wrapper so each clocking arrangement is exercised.
Separate protocol-facing configuration, midend request processing, clock-domain bridges, and backend control. Add explicit drain/apply sequencing and harden segmented transaction handling.
Use reusable host and HyperBus stream structures across the midend and bridges. Isolate atomic read-modify-write sequencing and replace the legacy PHY adapters with explicit read and write adapters.
Group PHY-specific RTL under the backend, place transmit delay generation beside the PHY, and use one configurable clock-generation path for all top-level variants. Convert parameter and protocol checks to common_cells assertion macros.
@phsauter
phsauter force-pushed the phsauter/top-split-peakrdl branch from f5307bd to 969ff9a Compare August 11, 2026 13:51
@phsauter
phsauter marked this pull request as draft August 11, 2026 21:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant