Add multi-group support for CachePool - #27
Merged
Conversation
Move BootROM and the refill xbar to group level for future scaling, add multi-group support (cross-group interconnection WIP), add FlooNoC as a dependency, and default to an all-private cache config for early multi-group bring-up/CI.
Wire up the inter-group NoC configuration and connections, add the L2 ICache, plus assorted cleanups, renames, and cache init/flush fixes along the way.
Bump Spatz and Bender dependencies; update fence implementation and add DRAM allocation functions in the runtime; move DRAM type settings into config files with auto-calculated refill data width; config/CI cleanup in preparation for the L2 Refill NoC rework.
Switch to a TCDM-based mesh for the L2 refill path (major update, plus follow-up performance and functional fixes), add a 4x4 config for faster testing, remove the no-longer-working 2g configs, and assorted CI/DEBUG flag and loadstore-test fixes.
Add partial-barrier support to the cluster using the current direct-wire barrier implementation, adjust the RLC kernel to use it, and rename some configuration/hardware parameters for readability.
Add a NoC profiling/monitoring module and a Makefile target to generate the corresponding vis4mesh dataset for performance analysis.
Fix the gemv kernel's result store buffer issue, add hardware cuts for peripheral signals for physical design, and fix an L1 NoC bug that caused responses to always be sent on a single channel.
Replace the .gitlab-ci.yml PATH override and make quick-tool symlink with iis-env.sh, which exports INSTALL_DIR for the prebuilt toolchain and sets up a Python venv (with pip upgrade and numpy) for code-gen dependencies, matching the new clean-runner CI environment. [Util] Update vis4mesh data generation.
- Update insitu-cache dependency for a bug fix - Remove debugging scoreboard in interconnect (broke multi-tile config) - Fix Spatz store counter bug - Update run_all.sh to avoid log folder missing issue - Fix barrier bug caused by added cuts
DiyouS
force-pushed
the
dev/multi-group-rebase
branch
from
August 13, 2026 14:54
a56c7a4 to
3ec4e52
Compare
Aquaticfuller
approved these changes
Aug 14, 2026
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.
Summary
Extends CachePool from a single group of tiles to a configurable 2D mesh of groups, each connected via a FlooNoC-based inter-group
interconnect, plus a matching L2 refill mesh and a hardware partial-barrier mechanism scoped to individual tiles.
Multi-group cluster architecture
(num_groups_x/num_groups_y), each exposing per-tile NoC ports ("planes") that connect directly to the corresponding plane on
X/Y-neighboring groups.
be recovered directly from the upper bits of its ID.
response) per tile/plane, and a group-wide dispatch crossbar back into the tile's local remote ports.
different tile), or inter-group remote (different group) — selectable per-config via num_rg_ports_per_core; setting it to 0 disables all
multi-group RTL and falls back to single-group behavior.
L2 refill NoC
channel regardless of physical placement in the mesh.
wide AXI ports.
Partial barrier (tile-level, direct-wire)
a full-cluster-only barrier with one that supports excluding tiles via a runtime-configurable participation mask.
and exposed to the runtime via snrt_barrier APIs, so a kernel can synchronize a subset of tiles instead of the whole cluster.
NoC visualization / profiling
by util/scripts/noc_profiling_to_vis4mesh.py to render mesh traffic heatmaps (see README's "NoC Visualization" section).
New configs
TODOs