rtl: InterChipFabric v1 — XY-routed 2D-torus + credit-based flow control #127
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!127
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "auto/issue-124-20260618T051731Z_issue124"
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
Materialises the InterChipFabric body that the skeleton (#82) left empty.
Per issue #124 / SPEC
rtl/src/pop/specs/InterChipFabric.SPEC.md:incremented on
creditReturnpulse (initial budget =creditMax).RRArbiteracross the 4 inputports' VC-matched heads.
csr.fabricStopquiescence: refuses new ingress while asserted;csr.idleraises once every internal FIFO has drained.InterChipFabric(numPorts=4, flitBits=64, numVCs=2, fifoDepth=4, creditMax=8).Acceptance criteria
rtl/src/pop/InterChipFabric.scalabody materialises 4-port inputFIFOs + XY routing + per-VC credit counters + output arbitration
* Single flit routed N→S (1-hop)
* Single flit routed E→W intermediate (2-hop diameter)
* Back-pressure on one egress does not block the other 3
sbt -no-colors testgreen — 29/29 across the tree;scenarios parameterised on
numVCs ∈ {1, 2}destChipIdfield sized to ADR-008's 8-chip totalOpen questions (kept Open per SPEC, NOT invented)
Length per PLAN.md §3.4) — opaque payload only at v1.
PopLinkPHYAttachIObundle until PHY-optionselection (PLAN.md §13.2) closes.
Plan refs
PLAN.md §8.2, §12.3, §12.4, §3.4, §3.5, §3.7, §13.3; ADR-008, ADR-009,
ADR-010, ADR-011.
Closes #124
VERDICT: PASS
PR #127 lifts
InterChipFabricfrom elaborate-only (PR #82) into a v1 with XY-routed 2D-torus topology, per-VC credit-based flow control, per-egress round-robin arbitration, and CSR-driven quiescence — exactly what Issue #124 asks for. Mechanical guardrails pass: SPDX headers preserved (CHARRUA-1.2source,AGPL-3.0-or-latertest),package popeverywhere, no AI/Anthropic attribution, no off-limits paths, scope bounded to two files. Rule 4 is handled correctly: the four SPEC §Interface categories map to sub-bundles —ports(TorusPortQuadIO with per-portVec(numVCs, Decoupled(FabricFlit))ingress/egress),credits(VcCreditIO withavail/creditReturnVecs),phy(PopLinkPHYAttachIO empty, deferred to PHY-option selection per PLAN.md §13.2),csr(FabricCsrIO withmyChipId, opaque routing-table latch,fabricStop/idle, per-porterrCounts). The chip-side transaction-layer attach category remains Open per SPEC §Interface (the joint resolution with MultiGemminiCluster.SPEC and PCIeHostBridge.SPEC hasn't committed a shape yet); v1 handles locally-destined flits by drop-and-error-count, with the design choice explicitly documented inline as a deferral to the §3.5 5×5 crossbarlocalslot when the SPEC commits. Rule 7 is meticulously handled:numPorts == 4matches ADR-010 N/S/E/W as a hardrequire;numVCs ∈ {1, 2}matches SPEC §Invariants commitment (ADR-010 Consequences "Deadlock-free via XY routing + 2 VCs") as a hardrequire;flitBits = 64default is honestly framed as "default 64 matches the PLAN.md §3.4 PopLink frame-header width but does NOT pin the actual header layout (Open per SPEC)";fifoDepth = 4andcreditMax = 8defaults are annotated as Open per SPEC §Interface;ChipIdW = 3follows from ADR-008's 8-chip total (2³=8);errCounts16-bit width and CSR 32-bit address/data widths are documented as sizing defaults without SPEC commitments; the chip-id encoding (bits[2:1]=X, bit[0]=Y for the 2×4 torus) is a documented internal convention, not falsely attributed to any ADR/SPEC. The XY routing logic uses dimension-ordered routing per PLAN.md §3.5; the antipodal-tie handling (dxFwd==2 picks E deterministically) is documented with the rationale "so the SPEC §Behavior round-robin promise is preserved at the egress arbiter rather than smeared into the routing decision". The math checks out: chip 0 (x=0,y=0) → dest 1 (x=0,y=1) routes Y-wise to S (1 hop, Scenario 1); chip 4 (x=2,y=0) → dest 2 (x=1,y=0) routes X-wise with dxFwd=3 to W (E→W intermediate hop, Scenario 2); back-pressure on egress N keeps egresses S/E/W live for parallel injections from W, N, E respectively (Scenario 3). Each scenario is parameterised onnumVCs ∈ {1, 2}matching the SPEC bound and exercises both VCs being preserved across the fabric (input VC v can only arbitrate for egress VC v). The credit counter saturates correctly and handles the fire-vs-return same-cycle nets-to-zero case. The CSR routing-table-programming surface is the right shape (opaque latching register), thefabricStop/idlequiescence pair mirrors thePopRoCCRouter/MultiGemminiClustercluster-stop pattern, and the deferred items (concrete flit header, CSR map, VC-to-traffic-class binding, PHY attach widths) are explicitly enumerated in the file header.Findings
None.
CI green (head
0f0001dd8b), auto-approvingCI green (head
0f0001dd8b), auto-approving0f0001dd8ba255ee54a4CI green (head
a255ee54a4), auto-approving