rtl: PopLinkPHY_Behavioral skeleton + chiseltest elaborate #106
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!106
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "auto/issue-51-20260526T163356Z_issue51"
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?
Closes #51
Summary
Scaffold
PopLinkPHY_Behavioralperrtl/src/pop/specs/PopLinkPHY_Behavioral.SPEC.md(Status: Draft) so PLAN.md §13.4 deliverable #1 has a buildable Chisel module sitting behind the canonicalPopLinkPHYIObundle. Skeleton + elaborate only — behaviour, BER injection, training FSM, the// synthesis translate_offequivalent guard and Chisel construction parameters all stay as documented// TBD per SPEC §...blocks, per PLAN.md §12.3 step 1 (elaborate-before-behaviour) and the rule "no fabricated values for spec TBD items".Files
rtl/src/pop/PopLinkPHY_Behavioral.scala—Module+PopLinkPHYIObundle. Bundle is grouped into five sub-bundles matching thedocs/spec/poplink-phy-if.md §2signal-class enumeration that SPEC §Interface bullet 1 cross-references:tx,rx,status,resetTrain,cal. Only the four signals whose widthspoplink-phy-if §2pins concretely at 1 bit (phy_reset_req/phy_reset_ack,train_req/train_done) are materialised asBool(); every other signal class stays empty with a// TBD per SPEC §Interfacecomment that points at the relevant Open question (lane countN, per-lane data widths,err_flagsbit map,ber_countper-lane-vs-aggregated,cal_ctrl/cal_statuswidths). Output defaults (phyResetAck := false.B,trainDone := false.B) match POR / quiet state perpoplink-phy-if §5step 1 — no behaviour committed beyond the §12.3 elaboration contract.SPDX header:
CHARRUA-1.2.rtl/tests/PopLinkPHY_Behavioral/PopLinkPHY_BehavioralSpec.scala— chiseltestAnyFlatSpecwithbehavior of "PopLinkPHY_Behavioral"and the singleit should "elaborate"case, matching the established per-module bench skeleton (PopRoCCRouterSpec,InterGemminiXbarSpec,PCIeHostBridgeSpec,PopSoCConfigSpec,FluidPopSoCSpec).SPDX header:
AGPL-3.0-or-later.Acceptance criteria (#51)
rtl/src/pop/PopLinkPHY_Behavioral.scalaexists, compiles under Chipyard 1.13.0 withsbt compilegreen.PopLinkPHY_Behavioral.SPEC.md; TBD fields annotated with// TBD per SPEC §Interfacecomments and held back from invented widths.rtl/tests/PopLinkPHY_Behavioral/PopLinkPHY_BehavioralSpec.scalaexists with a chiseltestAnyFlatSpecskeleton + at least oneshould "elaborate"test.CHARRUA-1.2on the Scala source,AGPL-3.0-or-lateron the test.Validation (local, agent host)
sbt compile— green (6 Scala sources compiled).sbt test— green (6 specs, 6 passed, includingPopLinkPHY_BehavioralSpec).Versions are the pinned Chipyard 1.13.0 set (
rtl/build.sbt): Scala 2.13.12 / Chisel 6.5.0 / chiseltest 6.0.0. No Chipyard checkout required —rtl/resolves these from Maven Central.Out of scope (deferred to follow-up issues)
poplink-phy-if §5; optional drop / re-order knobs).// synthesis translate_offequivalent guard (SPEC §Invariants).PopLinkPHYIOwidths, lane countN, training FSM timing — that work belongs to the PHY interface skeleton track (Phase-1 PHY deliverable #2).Off-limits (ADR-017)
No ADR-017 off-limits paths touched. No pre-commit hook bypass.
VERDICT: PASS
PR #106 adds the §12.3 step-1 scaffold for
PopLinkPHY_Behavioral— Chisel module + chiseltest harness — and is exceptionally well-disciplined throughout. Mechanical guardrails all pass: SPDX headers correct (CHARRUA-1.2for the RTL source,AGPL-3.0-or-laterfor the test), both files inpackage popmatching the canonical package, chiseltest bench has the prescribedit should "elaborate"floor, scope matches Issue #51 (two new files), no AI/Anthropic attribution, no off-limits paths. The IO bundle structure mirrors the SPEC's reference todocs/spec/poplink-phy-if.md §2signal-class enumeration as five sub-bundles (tx,rx,status,resetTrain,cal) — exactly the right grouping. Rule 4 + rule 7 are handled with surgical precision: only the four control signals whose widthspoplink-phy-if §2pins concretely at 1 bit (phy_reset_req,phy_reset_ack,train_req,train_done) are materialised asBool()inPopLinkResetTrainIO; every other signal class (TX/RX data, lane_status, err_flags, ber_count, cal_ctrl, cal_status) stays as a// TBD per SPEC §Interfacecomment with an explicit forward-link to the Open question that tracks its width (PHY-option selection PLAN.md §13.2,poplink-phy-if §3/§6/§8 Open questions). No lane countN, no per-lane data widths, no err_flags bit-map, no ber_count counter width invented ahead of the PHY-option selection — exactly the discipline rule 7 requires. The output defaults (phyResetAck := false.B,trainDone := false.B) are well-justified as the POR/quiet state perpoplink-phy-if §5step 1 ("All TX/RX disabled. lane_status[i].link_up = 0 for all lanes"), which matches PR #75's training FSM sketch and ties the tie-offs to a documented spec source rather than arbitrary defaults. The bundle direction convention is documented explicitly: PHY-viewInput= MAC → PHY, PHY-viewOutput= PHY → MAC, with a clear note that MAC-side consumers instantiateFlipped(new PopLinkPHYIO)— this is the natural direction for the PHY module and the inversion frompoplink-phy-if §2's MAC-view column is documented inline. The deferred follow-up list (BER injection, training FSM,// synthesis translate_offguard, Chisel construction parameters) is comprehensive and matches the SPEC's §Behavior and §Invariants open work. The module is a leaf as the issue body required — noModule(new ...)children to wire up, no parent to wire into. The SPEC has been promoted to Draft per PR #95 and the Draft text is faithfully reflected in the PR's source comments.Findings
None.
CI green (head
b232b52787), auto-approvingb232b5278704d4eda65aCI green (head
04d4eda65a), auto-approving