Skip to content

Reinstate out-of-order multiplexer in streamer#56

Open
FrancescoConti wants to merge 2 commits intoab/xif-1.0from
fc/ooo-mux-rb
Open

Reinstate out-of-order multiplexer in streamer#56
FrancescoConti wants to merge 2 commits intoab/xif-1.0from
fc/ooo-mux-rb

Conversation

@FrancescoConti
Copy link
Member

This pull request makes several changes/fixes to the scheduler and streamer modules in the RTL codebase, with the main change being that redmule_mux (static) is replaced by hci_core_mux_ooo (dynamic). The static mux is "optimal" in a performance sense but not compliant: switching a static mux when requests or responses are pending can cause protocol violations in HCI (visible in MAGIA integration). The out-of-order mux does not have this issue. Moreover, hci_core_mux_ooo can be configured to the identical behavior of redmule_mux by appropriately wiring the priority inputs. However, in the current version of hci_core_mux_ooo this is also static and will still cause the same violations as redmule_mux: a future version of hci_core_mux_ooo may change this behavior, using the priority not statically but dynamically reordering the internal round-robin mechanism (which would be an hybrid of the static and current out-of-order mux behaviors).
As it is, the performance of RedMulE is very marginally lower with the "correct" mux (+5 cycles on a test of ~2000 cycles), but a more thorough performance comparison would require a testbench with configurable stalls.

Other changes include correcting signal names for FIFO flush signals, refactoring pop signal logic for better clarity, updating the instantiation and configuration of HCI interface modules, and adding a new filter module for ID handling.

Todo before merge:

  • platform level testing (done in MAGIA)
  • add parameter to choose between static and dynamic priority
  • (optional) hybrid priority mechanism in HCI core mux

FIFO Signal Corrections and Refactoring:

  • Changed all FIFO flush_i signals from clear (undefined) to clear_i in the redmule_scheduler module. [1] [2] [3]
  • Refactored the pop logic for y_config_fifo and y_config_fast_fifo by introducing intermediate logic signals (y_config_pop, y_config_fast_pop).

Streamer Module Updates:

  • Fixed the instantiation of the virt_tcdm array in redmule_streamer.sv to use the correct size (NumStreamSources instead of NumStreamSources+1).
  • Replaced the redmule_mux with hci_core_mux_ooo, updated the number of channels, and added new priority-related signals for more flexible muxing.

HCI Core Filter Enhancements:

  • Added a new hci_core_r_id_filter module to provide additional filtering on TCDM read IDs.

Switch back to OoO mux instead of static redmule_mux. This is compliant
to HCI specifications and should be a bit faster in real use-cases.
On an ideal test with no stall, an extremely small slowdown (<1%) is
possible; however, the rotating priority mechanism should handle
better the possible stalls encountered in practical situations.
@FrancescoConti FrancescoConti changed the title Fc/ooo mux rb Reinstate out-of-order multiplexer in streamer Mar 5, 2026
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