rtl: PopRoCCRouter v1 — funct7 decode + dispatch + per-source ordering #107
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!107
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "auto/issue-104-20260526T163428Z_issue104"
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?
Summary
Lifts
rtl/src/pop/PopRoCCRouter.scalafrom the elaborate-only skeleton (PR #69) into the v1 behaviour pinned by the Draft SPEC (#96):funct7top-2-bit gemmini-id decode (ADR-006 Consequences).Vec(numTiles, Decoupled(_))(default 4 for Edu per ADR-001).(originating-core-id, rd, xd)per tile.cmd-issue order; cross-source ordering deliberately not preserved (ADR-006 independent commit machines).xd=0retires silently;xd=1pairs withresp.valid.Open questions kept as parameter defaults / comments per the issue:
inFlightDepth: Int = 8with// Open question per SPEC §Behaviornext to it.TBD per SPEC §Interface — exception path, no port surfaced.No edits outside
rtl/src/pop/PopRoCCRouter.scalaandrtl/tests/PopRoCCRouter/.Test plan
sbt -no-colors compilegreen fromrtl/.sbt -no-colors testgreen fromrtl/— 8/8 suites pass, including three new scenarios inPopRoCCRouterSpec:cmd.validwithxd=1→resp.validarrives with matchingrdwithininFlightDepth + 2cycles.cmd.validwithxd=0→ noresp.validon the same-core port across a generous window.cmdstreams: tile 1 dispatch fires while tile 0 stays back-pressured (no-deadlock).Closes #104
VERDICT: PASS
PR #107 lifts
PopRoCCRouterfrom the elaborate-only skeleton (PR #69) into a v1 implementation pinned by the Draft SPEC (PR #96), scoped cleanly to Issue #104. Mechanical guardrails pass: SPDX headers preserved (CHARRUA-1.2source,AGPL-3.0-or-latertest), both files inpackage pop, no AI/Anthropic attribution, no off-limits paths, scope bounded to two files. Rule 4 is handled correctly:RoCCCommand/RoCCResponse(canonical local mirrors from PR #69) materialised inVec(numCores, Flipped(Decoupled(...)))/Vec(numCores, Decoupled(...)), per-tile fan-out materialised as pairedtileCmd/tileRespVecs ofnumTiles, and the exception path stays unimplemented because its cause-encoding is genuinely Open per SPEC §Interface anddocs/spec/fluidpop-isa.md §9— the inline comment forward-links exactly the right ADR-pending sources rather than inventing anmcausevalue. Rule 7 is meticulously handled across the behaviour commit:numCores=2andnumTiles=4defaults pin to ADR-006/ADR-001 Edu;xLen=64matches RV64GC;numTiles <= 4is a hardrequireconstraint with the explicit message that Pro 16-tile gating awaits the future funct7-encoding ADR (matching the §Interface Open question);inFlightDepth=8is annotated inline as// Open question per SPEC §Behavior; the cross-source arbitration policy usesRRArbiterwith an explicit "Default choice ... Open question per SPEC §Behavior — not pinned by any ADR" annotation;funct7decode extractsinst.funct(6, 5)(top 2 bits), consistent with PR #77'sfluidpop-isa.md §2"top 2 bits reserved for gemmini-id" and SPEC §Behavior. The implementation faithfully realises SPEC §Behavior: funct7 decode and tile-id extraction, dispatch to selected per-tile attach via per-tile-ready handshake, in-flight tracking table keyed by(origCore, rd, xd)per tile, per-source response ordering via per-core dispatch-order FIFO popping incmd-issue order, cross-source unordered per ADR-006 independent commit machines,xd=0silent retire /xd=1paired withresp.valid. Test coverage maps cleanly to SPEC §Invariants: thexd=1round-trip test verifies the single-response and per-source-ordering invariants withininFlightDepth + 2cycles; thexd=0fire-and-forget test verifies no spuriousresp.valid; the back-pressure test exercises the no-deadlock invariant by showing tile 1 makes forward progress while tile 0 is back-pressured. The funct7 lower-5-bits andrdflow-through is checked inline (rdfield "did not flow through unchanged onto tile 1"). The 8-test suite passes per the PR body. No invented MSI-X counts, no fabricated latency / area claims, no vendor commitments. Comment cleanup is contained to the SPEC-aligned scope; the omitted-statusrationale was moved out but the cmd/resp bundles still carry the canonical-rocket-chip forward-link header at the file level.Findings
None.
CI green (head
03986776dd), auto-approving03986776dd777f895723CI green (head
777f895723), auto-approving