rtl: PCIeHostBridge v1 — TLP route decode + MSI-X doorbell + completion FIFO #128
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Fluid/fluidpop-v1#128
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Goal
Implement v1 behaviour of
PCIeHostBridgeper Draft SPEC atrtl/src/pop/specs/PCIeHostBridge.SPEC.md(#94). The skeleton (#65) lands four empty sub-bundles (pipe,hostTlp,fabric,msix); this issue lands the actual host-side TLP termination + MSI-X doorbell logic. Master-only per ADR-008.Scope — strictly what the Draft SPEC pins
class PCIeHostBridge(tlpHdrBits: Int = 96, dataBits: Int = 256, numMsiXVectors: Int = 32)— Gen4 x16 framing leaves the dataBits default at 256 (32 lanes × 8 bits per Gen4 PIPE), TLP header at 96 bits (3-DW format per PCIe 5.0 §2). All parameterised; the actual PHY-PCS framing decision lands when the vendor PHY ADR closes.hostTlp: ingressFlipped(Decoupled(TlpRequest))+ egressDecoupled(TlpCompletion)withheader = UInt(tlpHdrBits.W),data = UInt(dataBits.W),dataValid = Bool().fabric: mirror ofMultiGemminiCluster.io.mem(TBD width per §Interface). Use opaqueUInt(64.W)placeholder addr/data, annotate as Open.msix:numMsiXVectors-deep doorbell write port (Flipped(Decoupled(MsiXDoorbell))withvector = UInt(log2Ceil(numMsiXVectors).W)).pipe: empty (PHY attach not decided).request_typefrom header bits [31:24]. MemRd/MemWr forward tofabricegress. MSI-X doorbell write extracts vector and forwards tomsixegress.TlpCompletion, FIFO depthinflight = 16.hostTlp.ingress.readyfalls when completion queue orfabricegress is full.Open Questions — do NOT invent
pipestays empty).request_typebyte — Open. Don't invent the rest of the header; pass through opaque.Acceptance criteria
rtl/src/pop/PCIeHostBridge.scalabody materialises route decoder + completion queue + MSI-X dispatchrtl/tests/PCIeHostBridge/PCIeHostBridgeSpec.scalaextended with three scenarios:fabricand arrives back ashostTlp.egresscompletion withininflight + 2cyclesfabricwith no completion expectedmsixegresssbt -no-colors testgreenrequest_typebytePlan refs
PLAN.md §8.2; ADR-008 (designated master), ADR-009 (PopLink supersedes inter-chip PCIe).