rtl: skeleton MultiGemminiCluster (cluster top, elaborate-only) #81
No reviewers
Labels
No labels
adr
agent:blocked-ci
agent:blocked-human
agent:blocked-resolver
agent:done
agent:in-progress
agent:no-touch
agent:pinged
agent:pr-open
agent:queued
agent:wip
area:board
area:funding
area:infra
area:phy
area:poplink
area:rtl
area:software
area:supply-chain
area:verification
ci-failed
ci-timeout
docs
do-not-merge
human-approved
needs-human-approval
needs-rebase
needs-triage
phase:1
ready-for-review
review:findings
review:pass
risk:tripwire
swarm:quarantined
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Fluid/fluidpop-v1!81
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "auto/issue-52-20260526T001333Z_issue52"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds the scaffold required by PLAN.md §12.3 step 1 for the intra-chip cluster
described in
rtl/src/pop/specs/MultiGemminiCluster.SPEC.md(Status: Stub).What
rtl/src/pop/MultiGemminiCluster.scala— elaborate-onlyModule. IO bundlemirrors the four facets named in SPEC §Interface as empty sub-bundles
(
ClusterRoCCIO,ClusterMemPortIO,ClusterPopLinkIO,ClusterPerfCountersIO),all tied to
DontCare. Each TBD field carries a// TBD per SPEC §<section>comment per issue acceptance criterion.
rtl/tests/MultiGemminiCluster/MultiGemminiClusterSpec.scala— chiseltestAnyFlatSpecwithshould "elaborate", satisfying PLAN.md §12.3 step 2.InterGemminiXbarchild — the dependency listed onissue #52 and the sole SPEC-named child present in this tree today.
Gemmini tile instantiation waits on Chipyard 1.13.0 pin (#46); PopRoCCRouter
binding waits on cluster ↔ router contract; FluidPopSoC parent does not yet
exist, so cluster stands alone like the other Phase-1 skeletons.
Why
Per PLAN.md §8.2 / §12.3, every custom module must elaborate before any
behaviour, golden model or coverage work begins. This PR is the
skeleton + elaborate floor only — coverage targets, scratchpad
partitioning, arbitration, drain/quiescence, and the ResNet-50 single-chip
system test (SPEC §8.3) all land in follow-up issues once the SPEC is
lifted out of stub state.
No fabricated values
SPEC §Interface, §Behavior and §Invariants are all
_TBD_. No widths, portcounts or timing are committed in this PR. Each TBD field is annotated
with the SPEC section it tracks.
Validated
sbt compile— green (4 sources compile clean)sbt "testOnly pop.MultiGemminiClusterSpec"— 1 passedHeaders
SPDX-License-Identifier: CHARRUA-1.2SPDX-License-Identifier: AGPL-3.0-or-laterCloses #52.
VERDICT: FINDINGS
PR #81 adds the §12.3 step-1 scaffold for
MultiGemminiCluster— module + chiseltest harness — and the mechanics are clean: SPDX headers correct (CHARRUA-1.2for the RTL source,AGPL-3.0-or-laterfor the test), both files inpackage pop, IO bundle mirrors the four facets named in SPEC §Interface (rocc,mem,popLink,perfCounters), each sub-bundle is empty with explicit// TBD per SPEC §Interfaceannotations, no widths or port counts invented, the chiseltest spec has the prescribedit should "elaborate"floor, scope matches Issue #52, no AI attribution, no off-limits paths. The deferral of the RoCC bundle materialisation (despiteRoCCCommand/RoCCResponsehaving canonical mirror types from PR #69) is justified honestly — the per-cluster core countNis TBD and the cluster ↔ router fan-out direction is TBD, soVec(N, Decoupled(new RoCCCommand))cannot be instantiated without inventingN. One concern in an inline source comment should be checked before merge: the comment on theInterGemminiXbarchild says "Per ADR-003 the topology is 4×4 today (16×16 in Pro)", but the SPEC's own ADR citations attribute "4×4 intra-chip xbar" to ADR-003 and "16×16 systolic" to ADR-002. The "(16×16 in Pro)" parenthetical conflates two ADRs and introduces a forward-looking number for a Pro variant xbar that isn't sourced from any ADR cited at the top of the file (ADR-001 says "4 Gemminis", ADR-002 says "16×16 systolic", ADR-003 says "4×4 xbar"). If Pro has a 16×16 xbar, that requires 16 tiles per SoC, which contradicts ADR-001's "4 Gemminis" reading. May be incorrect — please verify against the actual ADR text.Findings
rtl/src/pop/MultiGemminiCluster.scala(inline comment aboveval xbar = Module(new InterGemminiXbar)) — The comment readsPer ADR-003 the topology is 4×4 today (16×16 in Pro), but per the file's own ADR header, ADR-003 is the 4×4 intra-chip xbar (4 ingress × 4 egress, matching ADR-001's 4 Gemminis per SoC). 16×16 is ADR-002's systolic array dimensions (per-tile MAC grid), not the inter-Gemmini xbar topology. The "(16×16 in Pro)" parenthetical for the xbar appears either fabricated or to conflate per-tile systolic dimensions with the xbar topology, and contradicts ADR-001 if it implies 16 Gemmini tiles per Pro SoC. May be incorrect — please verify what ADR-001 actually says about per-SoC tile count for the Pro variant, then either drop the parenthetical, replace it with the correct number, or move it to a separate sentence that cites the correct ADR. Suggested fix:// Per ADR-003 the xbar is 4×4 (4 Gemminis × 4 ports), matching ADR-001's per-SoC tile count. InterGemminiXbar itself currently has an empty IO bundle, so no port wiring is committed here; it lands when both module SPECs are lifted from stub and the cluster ↔ xbar contract is fixed.VERDICT: PASS
PR #81 has been resubmitted at a new head SHA (
44f06eb5...vs the priore6c527ec...) with my earlier finding directly addressed. The inline comment aboveval xbar = Module(new InterGemminiXbar)has been rewritten from the confusing version I flagged — which readPer ADR-003 the topology is 4×4 today (16×16 in Pro)and conflated the per-tile systolic dimension (ADR-002) with the inter-Gemmini xbar topology (ADR-003) — to a clean, accurate attribution:Per ADR-003 the xbar is 4×4 (4 Gemminis × 4 ports), matching ADR-001's per-SoC tile count of 4. This is exactly the fix shape I had suggested. The arithmetic check is now explicit and correct: 4 Gemminis (ADR-001) drives 4 ingress × 4 egress xbar (ADR-003), and the misleading 16×16 forward-look — which would only be true if Pro had 16 tiles, per the architectural extension also recently confirmed in PR #92 — has been removed entirely. Mechanical guardrails all pass: SPDX headers correct (CHARRUA-1.2for the RTL source,AGPL-3.0-or-laterfor the test), both files declarepackage popmatching the canonical package, IO bundle mirrors the four SPEC §Interface bullets (rocc,mem,popLink,perfCounters) as emptyDontCare-tied sub-bundles, each TBD annotated with the SPEC § it tracks, no widths or port counts invented, chiseltest bench has the prescribedit should "elaborate"floor, scope matches Issue #52 (two new files), no AI/Anthropic attribution, no off-limits paths. The deferral ofClusterRoCCIOmaterialisation despiteRoCCCommand/RoCCResponsehaving canonical mirrors from PR #69 remains correctly justified (per-cluster core countNis TBD, fan-out direction TBD). Header comments still reference the SPEC asStatus: Stub— that's slightly stale since PR #93 promoted the SPEC to Draft, but it's the pre-existing pattern across all elaborate-only skeletons and not a fabrication; the SPEC text shipped with this PR shows the current Draft status. Sibling references to PopRoCCRouter, InterGemminiXbar, and FluidPopSoC SPECs are accurate.Findings
None.
CI green (head
44f06eb5bd), auto-approving44f06eb5bd4c8747c50aCI green (head
4c8747c50a), auto-approvingCI green (head
4c8747c50a), auto-approving4c8747c50a415a47e30cCI green (head
415a47e30c), auto-approving