Skip to content

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

Open
phsauter wants to merge 11 commits into
mainfrom
phsauter/top-split-peakrdl
Open

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

Conversation

@phsauter

@phsauter phsauter commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

Requires #34

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 from a4a5789 to 3f6b94c Compare July 22, 2026 14:03
phsauter added 6 commits July 23, 2026 17:18
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.
Remove redundant host and isochronous buffering, adopt common_cells stream and address-decode primitives, and clarify request, atomic, configuration, and adapter control flow.
Add focused atomic-handler verification and exercise host buffering, sticky atomic errors, isochronous divider backpressure, transfer segmentation, topology variants, and maximum-burst throughput.
@phsauter
phsauter force-pushed the phsauter/top-split-peakrdl branch from 3f6b94c to f5307bd Compare July 23, 2026 15:52
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